design(core): no provider-file audit path — "is my CLAUDE.md OK?" reaches a write-only skill #128
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found during the #99 ADR-0020 retrofit and the follow-up audit pass on
refactor/adr0020-skill-retrofit. The routing was made honest there; the gap itself is a build decision and was deliberately left open.The gap
corehas three skills. Two of them read, one of them writes:allowed-toolsagentsmd-auditBash Readagentsmd-authorBash Read Write Editprovider-adapter-authorBash Read Edit Writeagentsmd-auditandagentsmd-authorboth route every provider-file concern toprovider-adapter-author.agentsmd-authordoes it emphatically — its Gotchas say:But
provider-adapter-authoris write-only in behaviour, not just in tools: its whole procedure is detect → rewrite down to a thin adapter → self-validate. There is no read-only path through it. So a user asking "is my CLAUDE.md OK?" was routed to something whose only behaviour is to rewrite it.What was changed on the branch, and what was not
The two boundary clauses were reworded to name the operation rather than the domain:
agentsmd-audit:Not converting a provider file -> provider-adapter-author.agentsmd-author:Not converting CLAUDE.md -> provider-adapter-author.The route is now honest — it promises conversion, which is what the target does — and the gap is visible rather than silently mis-served. Nothing now claims provider-file auditing is covered. Nothing covers it either.
The likely answer
plugins/core/.apm/skills/provider-adapter-author/scripts/validate-adapter.shalready is the deterministic provider-file audit. Its own header calls it a "Self-check gate": given an adapter file and anAGENTS.md, it checks the file is non-empty, actually referencesAGENTS.md(as a native@importline, or as a plain-text pointer under--no-import-syntaxfor providers with no import mechanism), does not duplicateAGENTS.md's content, and stays under a line budget. Exit 0 or 1. That is a complete read-only verdict on a provider file, sitting inside a writer as a post-write assertion.Promoting it into its own read-only skill is the honest long-term shape: a
Bash Readskill that runs the script and reports, withagentsmd-audit's andagentsmd-author's provider-file clauses repointed at it, andprovider-adapter-authorkeeping the script as its self-check.Explicitly not the answer: a read-only mode flag on
provider-adapter-author. A skill whoseallowed-toolsincludeWriteandEditcannot make a read-only promise the harness enforces — the same class of unenforceable prose guarantee tracked separately for the plugin agents. A mode flag also puts the two behaviours behind one description, which is precisely what ADR-0020's boundary-clause contract exists to prevent.Open question before building
ADR-0020's "Merging siblings" criteria cut the other way and should be applied deliberately, not skipped.
corewould go from three skills to four, two of which (agentsmd-audit, the new provider auditor) are both read-only audits with adjacent descriptions in a small plugin — exactly the near-miss sibling density the boundary contract has to work hardest against. The alternative is folding provider-file auditing intoagentsmd-auditand widening its scope, which costs a skill but buys one description instead of two competing ones. Decide that before writing anything.Files
plugins/core/.apm/skills/provider-adapter-author/scripts/validate-adapter.sh— the existing deterministic checkplugins/core/.apm/skills/agentsmd-audit/SKILL.md— description boundary clauseplugins/core/.apm/skills/agentsmd-author/SKILL.md— description boundary clause, and the Gotchas hand-off ruledocs/adr/0020-skill-description-and-body-context-contract.md— "Merging siblings"Related
validate-adapter.sh's--no-import-syntaxno-op, fixed on this branch; the same scriptskill-audit+agent-audit)Wont fix, Not a significant enough gap