Skip to content

docs-hygiene(rename-references): pattern library misses command-argument and document-title forms (6 stale refs survived 3 sweeps in #1276) #1283

Description

@kyle-sexton

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:

  1. STOP — do not silently mangle. Report the new form to user.
  2. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions