Plugin: source-control · Categories: hardcoded opinion (1), missing externalization (2)
Source: work-readiness sweep (read-only audit vs docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md)
Findings
plugins/source-control/skills/pull-request/reference/create.md:174 (template at :167-176) — 🤖 Generated with [Claude Code](https://claude.com/claude-code) hardcoded into the PR-body heredoc appended to every skill-created PR. Grep-confirmed sole occurrence; no config key gates it.
Why it breaks agnosticism
Asymmetric with the commit trailer, which IS externalized (commit/SKILL.md:58,106 honors .claude/source-control.md trailer_policy including none; setup SKILL.md:143-145). The PR-body attribution has no such seam — a consumer wanting no Claude attribution in PR bodies (or a different one) must fork/hand-edit the plugin, violating "Configurable without editing the plugin" and the trailer-precedence rule (repo convention wins). A baked outward-artifact opinion written into every PR.
Fix direction
Gate the attribution line behind the same .claude/source-control.md seam (trailer_policy or a sibling pr_body_attribution key / userConfig), defaulting to current behavior; read the project's PR-body convention first.
Plugin:
source-control· Categories: hardcoded opinion (1), missing externalization (2)Source: work-readiness sweep (read-only audit vs docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md)
Findings
plugins/source-control/skills/pull-request/reference/create.md:174(template at :167-176) —🤖 Generated with [Claude Code](https://claude.com/claude-code)hardcoded into the PR-body heredoc appended to every skill-created PR. Grep-confirmed sole occurrence; no config key gates it.Why it breaks agnosticism
Asymmetric with the commit trailer, which IS externalized (
commit/SKILL.md:58,106honors.claude/source-control.mdtrailer_policyincludingnone; setup SKILL.md:143-145). The PR-body attribution has no such seam — a consumer wanting no Claude attribution in PR bodies (or a different one) must fork/hand-edit the plugin, violating "Configurable without editing the plugin" and the trailer-precedence rule (repo convention wins). A baked outward-artifact opinion written into every PR.Fix direction
Gate the attribution line behind the same
.claude/source-control.mdseam (trailer_policy or a siblingpr_body_attributionkey / userConfig), defaulting to current behavior; read the project's PR-body convention first.