{"record":{"id":"ec29e24d2be6e383","repo":"vectordotdev/vector","slug":"invalid-breaking-fragment-name-e","errorCode":null,"errorMessage":"invalid breaking fragment '{name}': {e}","messagePattern":"invalid breaking fragment '(.+?)': (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"vdev/src/commands/check/changelog_fragments.rs","lineNumber":129,"sourceCode":"        // `<name>.<type>.md` shape first so editor backups or disabled files such as\n        // `foo.breaking.md.bak` are skipped, matching release generation.\n        let parts: Vec<&str> = name.split('.').collect();\n        if parts.len() != 3 || parts[2] != \"md\" {\n            continue;\n        }\n        let fragment_type = parts[1];\n        let Some(entry) = FRAGMENT_TYPES.iter().find(|t| t.name == fragment_type) else {\n            continue;\n        };\n        if !entry.breaking {\n            continue;\n        }\n        let content = std::fs::read_to_string(&path)?;\n        let body_before_authors = content\n            .rsplit_once(\"\\nauthors: \")\n            .map_or(content.as_str(), |(before, _)| before);\n        let sections = parse_breaking_sections(body_before_authors)\n            .map_err(|e| anyhow::anyhow!(\"invalid breaking fragment '{name}': {e}\"))?;\n        let anchor = sections.anchor.unwrap_or_else(|| slugify(&sections.title));\n        if !is_valid_anchor(&anchor) {\n            bail!(\n                \"invalid breaking fragment '{name}': derived anchor '{anchor}' is not a valid kebab-case slug (add an explicit `{{#some-slug}}` after the title).\"\n            );\n        }\n        if let Some(other) = seen.insert(anchor.clone(), name.clone()) {\n            bail!(\n                \"duplicate upgrade-guide anchor '#{anchor}' shared by breaking fragments '{other}' and '{name}'. Override one with an explicit `{{#unique-slug}}`.\"\n            );\n        }\n    }\n    Ok(())\n}\n\n/// `git diff --name-only --diff-filter=<filter> --merge-base <merge_base> changelog.d`\n///\n/// `filter` is a `git diff` `--diff-filter` value: `A` for added-only, `M` for","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/vectordotdev/vector/blob/bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013/vdev/src/commands/check/changelog_fragments.rs#L111-L147","documentation":"Wrapper error from validate_breaking_anchor_set: while collecting anchor ids from all '*.breaking.md' fragments to detect duplicates/collisions, parsing one fragment's internal structure failed, and the underlying parse error {e} (from the section parser) is re-bailed prefixed with the fragment's name so the author knows which file is malformed.","triggerScenarios":"Thrown at vdev/src/commands/check/changelog_fragments.rs:129 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Read the trailing {e} detail to identify the structural problem in the named fragment","Fix the fragment to match the required H1/## Summary/## Migration layout","Re-run vdev check changelog-fragments to confirm the anchor set is consistent"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013","analyzedAt":"2026-09-16T02:53:35.741Z","contentChangedAt":"2026-09-16T02:53:35.741Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}