Summary
The /review-commits skill (in commit-tools plugin) does not enforce the beads-ID / internal-tracker prohibition that is already documented in its companion style files. As a result, agents authoring messages during the synthesis phase can — and do — leak internal tracker IDs into git history without anything in the skill flagging it.
Repro
Source files (relative to plugin root commit-tools/):
styles/classic.md:136-139 — explicitly forbids "Beads IDs (beads-xxx, claude-plugins-xxx, or any internal tracker prefix)"
styles/conventional.md:226-229 — same prohibition
commands/commit.md:544-547 — restates it (/commit enforces it)
skills/review-commits/SKILL.md — no mention of the prohibition
skills/review-commits/lib/synthesizer-prompt.md — no mention of the prohibition
skills/validate-commits/SKILL.md — no leak check for tracker IDs
In a session where the user worked off beads issues with a project-internal prefix (e.g. PROJ-), the agent ran /review-commits and produced commit messages like:
Promote exact remote URL above recursive path globs (PROJ-30b)
...
Closes PROJ-30b.
/review-commits accepted these as clean and proceeded to merge. /validate-commits also passed them — its five checks scan for Claude/Anthropic/GPT/OpenAI/Copilot co-author lines and conflict/squash markers, but not for internal tracker prefixes.
Why it matters
The style files are normative — /commit reads them at compose time and refuses to leak. /review-commits (which also rewrites messages, often in bulk via planner/synthesizer) bypasses that enforcement because its planning checklist never references the style's prohibition list. The downstream /validate-commits also has no leak scan for tracker IDs, so neither the authoring step nor the gate catches it.
Suggested fix
Two layers, both small:
-
Synthesizer rule — in skills/review-commits/lib/synthesizer-prompt.md add an explicit rule:
Authored messages MUST NOT contain internal tracker prefixes (beads-*, claude-plugins-*, or any project-local prefix configured in the active style file's "Avoid" list). Treat any leak as a drafting failure that requires re-authoring.
Cross-link to styles/<style>.md so future style changes propagate without editing the synthesizer.
-
Validator check — in skills/validate-commits/SKILL.md add a 6th check: scan @{u}..HEAD (or base..HEAD) commit messages against a configurable prefix list (defaulting to beads- and claude-plugins-, with users able to add project-local prefixes via their style file's "Avoid" list) and fail if any match, mirroring the existing co-author scan.
Either fix alone closes the gap; both together are belt-and-suspenders.
Environment
- Plugin:
jskswamy-plugins/commit-tools 1.0.0
- Plugin path:
~/.claude/plugins/cache/jskswamy-plugins/commit-tools/1.0.0/
Summary
The
/review-commitsskill (incommit-toolsplugin) does not enforce the beads-ID / internal-tracker prohibition that is already documented in its companion style files. As a result, agents authoring messages during the synthesis phase can — and do — leak internal tracker IDs into git history without anything in the skill flagging it.Repro
Source files (relative to plugin root
commit-tools/):styles/classic.md:136-139— explicitly forbids "Beads IDs (beads-xxx,claude-plugins-xxx, or any internal tracker prefix)"styles/conventional.md:226-229— same prohibitioncommands/commit.md:544-547— restates it (/commitenforces it)skills/review-commits/SKILL.md— no mention of the prohibitionskills/review-commits/lib/synthesizer-prompt.md— no mention of the prohibitionskills/validate-commits/SKILL.md— no leak check for tracker IDsIn a session where the user worked off beads issues with a project-internal prefix (e.g.
PROJ-), the agent ran/review-commitsand produced commit messages like:/review-commitsaccepted these as clean and proceeded to merge./validate-commitsalso passed them — its five checks scan forClaude/Anthropic/GPT/OpenAI/Copilotco-author lines and conflict/squash markers, but not for internal tracker prefixes.Why it matters
The style files are normative —
/commitreads them at compose time and refuses to leak./review-commits(which also rewrites messages, often in bulk via planner/synthesizer) bypasses that enforcement because its planning checklist never references the style's prohibition list. The downstream/validate-commitsalso has no leak scan for tracker IDs, so neither the authoring step nor the gate catches it.Suggested fix
Two layers, both small:
Synthesizer rule — in
skills/review-commits/lib/synthesizer-prompt.mdadd an explicit rule:Cross-link to
styles/<style>.mdso future style changes propagate without editing the synthesizer.Validator check — in
skills/validate-commits/SKILL.mdadd a 6th check: scan@{u}..HEAD(orbase..HEAD) commit messages against a configurable prefix list (defaulting tobeads-andclaude-plugins-, with users able to add project-local prefixes via their style file's "Avoid" list) and fail if any match, mirroring the existing co-author scan.Either fix alone closes the gap; both together are belt-and-suspenders.
Environment
jskswamy-plugins/commit-tools1.0.0~/.claude/plugins/cache/jskswamy-plugins/commit-tools/1.0.0/