Observation
Renaming the re-anchor plugin to discipline (#1276) left six stale references that three sweep passes missed. All six are the same two syntactic shapes, and context/patterns.md's twelve forms cover neither:
| File |
Line |
Shape |
plugins/discipline/README.md |
1 |
# re-anchor — document title |
plugins/discipline/README.md |
340 |
/plugin install re-anchor@melodic-software — command argument |
plugins/discipline/README.md |
363 |
/plugin configure re-anchor — command argument |
plugins/discipline/skills/setup/SKILL.md |
73 |
/plugin configure re-anchor — command argument |
plugins/discipline/skills/setup/SKILL.md |
81 |
/plugin configure re-anchor — command argument |
plugins/discipline/skills/setup/evals/evals.json |
8, 12 |
/plugin configure re-anchor inside expected_output / expectations |
Four are functional: a consumer following the README's own install block, or the setup skill's own reconfiguration step, hits plugin-not-found. The eval pair is worse than cosmetic — expected_output asserted the assistant routes to the stale command, so a correctly-behaving assistant would have failed the eval.
patterns.md is explicit that this is the moment to act:
Phase 6 — pattern library evolution
When the skill's re-sweep finds a NEW syntactic form not covered above:
- STOP — do not silently mangle. Report the new form to user.
- Document the pattern in this file with all 5 fields …
Why the existing twelve forms miss both
Form 1 (slash-prefixed token, \B/<old>\b) does not fire on /plugin configure re-anchor. The slash anchors plugin, not <old> — the renamed token sits in argument position, several words downstream of the only slash on the line. Form 1 is built for /<old> as a skill invocation; the plugin name as an argument to a different command is a distinct position.
Form 3 (path references) does not fire — nothing here is a path.
Form 2 (bare token, \b<old>\b) does fire, and this is where the failure is instructive rather than merely a coverage hole. re-anchor is used as an English verb 210 times in that plugin ("each skill re-anchors ONE discipline"). Form 2 hits all 210 plus the 6 real defects with no way to tell them apart:
re-anchor is not in triage.md's English-verb blocklist (confirm, test, review, fix, clean, …), so triage rates every one of those 210 matches Certain.
- If it were added to the blocklist, all 216 land in the ambiguous bucket, and
triage.md mandates per-match AskUserQuestion confirmation — 216 prompts to find 6 defects.
Neither branch is usable. The static blocklist cannot fix this, because the token's part of speech is a property of the consuming codebase, not of the token.
Direction
Add high-precision position-anchored forms, so the container-sense uses are isolated on syntax rather than sorted out of verb-sense noise by a human:
- Command-argument form —
<old> as a bare argument to a tool or CLI verb, not as the slash-command itself: /plugin (install|configure|enable|disable|uninstall) <old>, <old>@<marketplace>, and the same token appearing as a key or value in an enabledPlugins / pluginConfigs style config example. Triage default Certain: the enclosing command word supplies the disambiguation that bare-token position lacks.
- Document-title form —
^#{1,2}\s+<old>\s*$, plus frontmatter name: / title:. Triage default Certain: a heading whose entire content is the renamed token names the thing, never uses it as a verb.
Both are container-position patterns. Worth checking during authoring whether a single generalization — "positions where <old> can only be a proper name" — subsumes them and anything else in that family, rather than accreting two more numbered forms.
Also note in triage.md that a token which is an English verb in the consuming codebase but absent from the static blocklist is the case the blocklist cannot serve, and that position-anchored forms are the answer rather than blocklist extension.
Acceptance
context/patterns.md carries the new form(s) with all five documented fields (form name, regex, triage default, example match, known false-positives), consistent with Forms 1–12.
- Each new regex is validated against the real six references above — the commit that fixed them is
930c97a4, so git show 930c97a4 is the fixture.
- Each new regex is validated for precision against the same tree: it must NOT match the verb uses in
plugins/discipline/README.md or context/re-anchor-audit-correct.md.
triage.md records the blocklist limitation.
/skill-quality:check docs-hygiene:rename-references passes.
Collision risk
Searched all issue states for rename-references, and open issues for patterns, form, sweep, rename. No existing issue covers the pattern library. #253 (docs-hygiene proactive repo-scan) is a different skill and a different detection target; #280 (shadowed-skill-renames contract) is closed and concerned naming grammar, not sweep coverage.
Observation
Renaming the
re-anchorplugin todiscipline(#1276) left six stale references that three sweep passes missed. All six are the same two syntactic shapes, andcontext/patterns.md's twelve forms cover neither:plugins/discipline/README.md# re-anchor— document titleplugins/discipline/README.md/plugin install re-anchor@melodic-software— command argumentplugins/discipline/README.md/plugin configure re-anchor— command argumentplugins/discipline/skills/setup/SKILL.md/plugin configure re-anchor— command argumentplugins/discipline/skills/setup/SKILL.md/plugin configure re-anchor— command argumentplugins/discipline/skills/setup/evals/evals.json/plugin configure re-anchorinsideexpected_output/expectationsFour are functional: a consumer following the README's own install block, or the setup skill's own reconfiguration step, hits
plugin-not-found. The eval pair is worse than cosmetic —expected_outputasserted the assistant routes to the stale command, so a correctly-behaving assistant would have failed the eval.patterns.mdis explicit that this is the moment to act:Why the existing twelve forms miss both
Form 1 (slash-prefixed token,
\B/<old>\b) does not fire on/plugin configure re-anchor. The slash anchorsplugin, not<old>— the renamed token sits in argument position, several words downstream of the only slash on the line. Form 1 is built for/<old>as a skill invocation; the plugin name as an argument to a different command is a distinct position.Form 3 (path references) does not fire — nothing here is a path.
Form 2 (bare token,
\b<old>\b) does fire, and this is where the failure is instructive rather than merely a coverage hole.re-anchoris used as an English verb 210 times in that plugin ("each skill re-anchors ONE discipline"). Form 2 hits all 210 plus the 6 real defects with no way to tell them apart:re-anchoris not intriage.md's English-verb blocklist (confirm, test, review, fix, clean, …), so triage rates every one of those 210 matches Certain.triage.mdmandates per-matchAskUserQuestionconfirmation — 216 prompts to find 6 defects.Neither branch is usable. The static blocklist cannot fix this, because the token's part of speech is a property of the consuming codebase, not of the token.
Direction
Add high-precision position-anchored forms, so the container-sense uses are isolated on syntax rather than sorted out of verb-sense noise by a human:
<old>as a bare argument to a tool or CLI verb, not as the slash-command itself:/plugin (install|configure|enable|disable|uninstall) <old>,<old>@<marketplace>, and the same token appearing as a key or value in anenabledPlugins/pluginConfigsstyle config example. Triage default Certain: the enclosing command word supplies the disambiguation that bare-token position lacks.^#{1,2}\s+<old>\s*$, plus frontmattername:/title:. Triage default Certain: a heading whose entire content is the renamed token names the thing, never uses it as a verb.Both are container-position patterns. Worth checking during authoring whether a single generalization — "positions where
<old>can only be a proper name" — subsumes them and anything else in that family, rather than accreting two more numbered forms.Also note in
triage.mdthat a token which is an English verb in the consuming codebase but absent from the static blocklist is the case the blocklist cannot serve, and that position-anchored forms are the answer rather than blocklist extension.Acceptance
context/patterns.mdcarries the new form(s) with all five documented fields (form name, regex, triage default, example match, known false-positives), consistent with Forms 1–12.930c97a4, sogit show 930c97a4is the fixture.plugins/discipline/README.mdorcontext/re-anchor-audit-correct.md.triage.mdrecords the blocklist limitation./skill-quality:check docs-hygiene:rename-referencespasses.Collision risk
Searched all issue states for
rename-references, and open issues forpatterns,form,sweep,rename. No existing issue covers the pattern library. #253 (docs-hygiene proactive repo-scan) is a different skill and a different detection target; #280 (shadowed-skill-renames contract) is closed and concerned naming grammar, not sweep coverage.