vectordotdev/vector · error
invalid fragment contents for
Error message
invalid fragment contents for '{filename}': the scaffolder placeholder '{TODO_HANDLE}' must be replaced with a real GitHub handle. What it means
A space-delimited token on the authors line still equals TODO_HANDLE — the placeholder the fragment scaffolder inserts. Real release attribution requires a genuine GitHub handle, so the check refuses unmodified scaffolds.
Solutions
- Replace the placeholder token with your real GitHub handle on the authors line.
- Grep your fragment for the placeholder string before committing.
- Re-run `vdev check changelog-fragments` to confirm.
Example fix
// before authors: your-github-handle // after authors: jdoe
Defensive patterns
Strategy: validation
Validate before calling
const TODO_HANDLE: &str = "your-github-handle";
let names = last.strip_prefix("authors: ").unwrap_or("").trim();
assert!(!names.split_whitespace().any(|n| n == TODO_HANDLE), "replace placeholder handle"); Prevention
- Fill in the authors line immediately when scaffolding a fragment.
- Never commit a scaffolded fragment unchanged.
- Add a pre-commit grep for the placeholder handle in changelog.d/.
When it happens
Trigger: Running `vdev check changelog-fragments` on a scaffolded fragment whose authors line still contains the scaffolder placeholder token (e.g. `authors: your-github-handle`).
Common situations: Committing a freshly scaffolded fragment without editing the authors line; forgetting the authors line while filling in the body.
Related errors
- invalid breaking fragment
- invalid fragment contents for
- invalid fragment contents for
- invalid fragment contents for
- invalid fragment contents for
AI-assisted analysis of vectordotdev/vector@bdb87aeaa4 (2026-09-16).
Data as JSON: /api/errors/82ccb10b2cbed3cd.
Report an issue: GitHub.
Appendix: source
Thrown at vdev/src/commands/check/changelog_fragments.rs:220
"invalid fragment contents for '{filename}': last line must be 'authors: <name> [<name> ...]' (no trailing blank lines)."
);
};
let names = names.trim();
if names.is_empty() {
bail!("invalid fragment contents for '{filename}': authors line has no names.");
}
if names.contains('@') {
bail!(
"invalid fragment contents for '{filename}': author names should not be prefixed with '@'."
);
}
if names.contains(',') {
bail!(
"invalid fragment contents for '{filename}': authors should be space delimited, not comma delimited."
);
}
if names.split_whitespace().any(|n| n == TODO_HANDLE) {
bail!(
"invalid fragment contents for '{filename}': the scaffolder placeholder '{TODO_HANDLE}' must be replaced with a real GitHub handle."
);
}
// Reject any scaffolded body placeholder that the author forgot to fill in.
// All templates start their placeholder lines with a literal `TODO ` at column 0,
// which is rare in real fragment text.
if let Some(bad) = content.lines().find(|l| l.starts_with("TODO ")) {
bail!(
"invalid fragment contents for '{filename}': scaffolder placeholder line still present ({bad:?}). Replace it with real content."
);
}
if fragment_type.breaking {
validate_breaking_fragment(&content, filename)?;
}
Ok(())View on GitHub (pinned to bdb87aeaa4)