{"record":{"id":"8b773825b7651344","repo":"ElectronNET/Electron.NET","slug":"unknown-release-notes-format","errorCode":null,"errorMessage":"Unknown release notes format.","messagePattern":"Unknown release notes format\\.","errorType":"exception","errorClass":"BuildAbortedException","httpStatus":null,"severity":"error","filePath":"nuke/ReleaseNotesParser.cs","lineNumber":58,"sourceCode":"        }\n\n        var lines = content.SplitLines();\n        if (lines.Length > 0)\n        {\n            var line = lines[0].Trim();\n\n            if (line.StartsWith(\"#\", StringComparison.OrdinalIgnoreCase))\n            {\n                return ParseComplexFormat(lines);\n            }\n\n            if (line.StartsWith(\"*\", StringComparison.OrdinalIgnoreCase))\n            {\n                return ParseSimpleFormat(lines);\n            }\n        }\n\n        throw new BuildAbortedException(\"Unknown release notes format.\");\n    }\n\n    private IReadOnlyList<ReleaseNotes> ParseComplexFormat(string[] lines)\n    {\n        var lineIndex = 0;\n        var result = new List<ReleaseNotes>();\n\n        while (true)\n        {\n            if (lineIndex >= lines.Length)\n            {\n                break;\n            }\n\n            // Create release notes.\n            var semVer = SemVersion.Zero;\n            var version = SemVersion.TryParse(lines[lineIndex], out semVer);\n            if (!version)","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/ElectronNET/Electron.NET/blob/87cc6f98b6a9c5968d7846c0e775ea713bd0d7b2/nuke/ReleaseNotesParser.cs#L40-L76","documentation":"The ReleaseNotesParser.Parse method tries to detect the release notes format: if it finds no line it recognizes (neither the complex section-marker format nor a '*' bullet line starting the simple format), it cannot determine how to interpret the file and throws BuildAbortedException(\"Unknown release notes format.\"). Called from OnBuildInitialized when the build loads CHANGELOG/release notes.","triggerScenarios":"Calling Parse (directly or via OnBuildInitialized) on a release notes file whose first meaningful line is neither a complex-format header (e.g. a version section marker) nor a line beginning with '*' — the format-detection loop falls through to the throw.","commonSituations":"CHANGELOG.md reformatted with '-' or numbered bullets instead of '*'; file starts with a project title or HTML comment before any version entry; empty or whitespace-only release notes file; migration from another changelog tool with a different heading style.","solutions":["Reformat the release notes so entries use the simple format: lines starting with '*'.","Alternatively use the complex format with recognized section/version headers.","Check the top of the release notes file for stray preamble lines (titles, badges, comments) and remove or reformat them.","Restore the original CHANGELOG format if it was recently converted by another tool."],"exampleFix":"// before (CHANGELOG.md)\n# Changelog\n- 1.2.0: Added feature\n// after\n# Changelog\n* 1.2.0 - Added feature","handlingStrategy":"validation","validationCode":"var firstLine = File.ReadLines(notesPath).FirstOrDefault(l => !string.IsNullOrWhiteSpace(l));\nif (firstLine is null || !(firstLine.StartsWith(\"*\") /* or complex-format marker */))\n    throw new InvalidOperationException($\"{notesPath} does not match a supported release notes format.\");","typeGuard":null,"tryCatchPattern":"try\n{\n    var notes = parser.Parse(File.ReadAllLines(notesPath));\n}\ncatch (BuildAbortedException ex) when (ex.Message == \"Unknown release notes format.\")\n{\n    Logger.Error($\"Unrecognized format in {notesPath}; expected '* version' bullets or sectioned format.\");\n}","preventionTips":["Standardize CHANGELOG.md on the parser's simple '*' bullet format and enforce with a lint/CI check.","Avoid reformatting tools that rewrite bullets as '-' or numbered lists.","Keep the version header on the first non-empty line.","Add a unit test that parses the checked-in release notes on every build."],"tags":["release-notes","parsing","format","build"],"backgroundTag":"invalid-config-value","analyzedSha":"87cc6f98b6a9c5968d7846c0e775ea713bd0d7b2","analyzedAt":"2026-09-14T03:09:47.608Z","contentChangedAt":"2026-09-14T03:09:47.608Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}