Mit re.DOTALL matcht .* auch Newlines. Kombination mit (?:\s+.*)?$\n führte dazu, dass die erste Version-Zeile bis zum Dateiende gefressen wurde und Capture-Group leer blieb (0 Zeichen). Fix: .* durch [^\n]* ersetzen, damit erste Zeile genau auf eine Zeile begrenzt ist. Gilt für beide Changelog-Parser (Block-Extraktion und entry_pat in readme.txt-Generator).