Skip to content

fix(bridge): give plan.md a reader, and close six more one-instance-named gaps - #3

Merged
AdrianTheopold merged 1 commit into
mainfrom
fix/audit-sibling-gaps
Aug 4, 2026
Merged

fix(bridge): give plan.md a reader, and close six more one-instance-named gaps#3
AdrianTheopold merged 1 commit into
mainfrom
fix/audit-sibling-gaps

Conversation

@AdrianTheopold

Copy link
Copy Markdown
Owner

Follow-up audit of 1.2.0 for the defect shape that produced the plan.md
bug: an instruction naming ONE instance where it means a CLASS, so the
rule is honored for the thing it names and silently ignored for its
siblings. Seven findings, all verified on disk.

The 1.2.0 fix was itself incomplete, in exactly this shape — it amended
one of the two places the §7 rule lives:

  • templates/verify.md carried the same unqualified "blank = PASS"
    sentence that schema.yaml was corrected to qualify. The template is
    what the verifier writes into, so the schema's caveat was defeated by
    its own template. Now qualified in both.
  • 1.2.0 added prose, not a reader. Nothing mechanically detected an
    unmaintained plan.md, so the new caveat was unenforced: PRECHECK
    grepped tasks.md alone. A ledger nobody reads is a ledger nobody
    maintains — that is why plan.md rotted while tasks.md never did.
    PRECHECK gains command 3 over plan.md ([x] or [~], so an
    all-deferred plan still passes), and verify §2 now reports both files
    separately, because a ticked tasks.md beside an empty plan.md is the
    signature of a bookkeeping miss rather than unfinished work.

Retroactively tested: command 3 returns 20 on a maintained plan.md, and
0 on both known instances of the bug — the pristine template and the
2026-07-02 correctness-pass plan, whose 53 boxes were never ticked while
its work shipped.

Also fixed, same shape:

  • The front-door leak detector watched docs/superpowers/specs/ while
    the schema redirects docs/superpowers/plans/ too, and both READMEs
    and both adopter fragments list both paths as leaks. A plans/ leak was
    invisible; observed live in a real cycle, where §6 reported one of the
    two files present. Both paths now checked (schema + template + prose).
  • The <change-name> substitution note sat on the verify PRECHECK only,
    while the retrospective PRECHECK has identical literal placeholders —
    an agent runs test -f .../<change-name>/verify.md, fails, and STOPs a
    passing cycle. Note added there.
  • retrospective §4's skill table omitted openspec-verify-change, the
    one skill with a documented manual fallback, so the skipped-skill
    discipline could never fire for the skip most likely to happen. Added
    to the table, and to apply step 0 as a WARNING (not a STOP, since the
    fallback exists).
  • Both READMEs still quoted the pre-fix indent-blind
    grep -c '^- \[x\]', and now also carry the plan.md gate.
  • Both READMEs cited schema.yaml by line number (35-39 / 180-182; actual
    38-41 / 181-183). Replaced with named blocks — line numbers are the
    same rot in miniature.

VERSION 1.2.0 → 1.3.0 (new mechanical gate).
Validated: openspec schema validate superpowers-bridge passes.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

…amed gaps

Follow-up audit of 1.2.0 for the defect shape that produced the plan.md
bug: an instruction naming ONE instance where it means a CLASS, so the
rule is honored for the thing it names and silently ignored for its
siblings. Seven findings, all verified on disk.

The 1.2.0 fix was itself incomplete, in exactly this shape — it amended
one of the two places the §7 rule lives:

- templates/verify.md carried the same unqualified "blank = PASS"
  sentence that schema.yaml was corrected to qualify. The template is
  what the verifier writes into, so the schema's caveat was defeated by
  its own template. Now qualified in both.
- 1.2.0 added prose, not a reader. Nothing mechanically detected an
  unmaintained plan.md, so the new caveat was unenforced: PRECHECK
  grepped tasks.md alone. A ledger nobody reads is a ledger nobody
  maintains — that is why plan.md rotted while tasks.md never did.
  PRECHECK gains command 3 over plan.md (`[x]` or `[~]`, so an
  all-deferred plan still passes), and verify §2 now reports both files
  separately, because a ticked tasks.md beside an empty plan.md is the
  signature of a bookkeeping miss rather than unfinished work.

Retroactively tested: command 3 returns 20 on a maintained plan.md, and
0 on both known instances of the bug — the pristine template and the
2026-07-02 correctness-pass plan, whose 53 boxes were never ticked while
its work shipped.

Also fixed, same shape:

- The front-door leak detector watched `docs/superpowers/specs/` while
  the schema redirects `docs/superpowers/plans/` too, and both READMEs
  and both adopter fragments list both paths as leaks. A plans/ leak was
  invisible; observed live in a real cycle, where §6 reported one of the
  two files present. Both paths now checked (schema + template + prose).
- The `<change-name>` substitution note sat on the verify PRECHECK only,
  while the retrospective PRECHECK has identical literal placeholders —
  an agent runs `test -f .../<change-name>/verify.md`, fails, and STOPs a
  passing cycle. Note added there.
- retrospective §4's skill table omitted `openspec-verify-change`, the
  one skill with a documented manual fallback, so the skipped-skill
  discipline could never fire for the skip most likely to happen. Added
  to the table, and to apply step 0 as a WARNING (not a STOP, since the
  fallback exists).
- Both READMEs still quoted the pre-fix indent-blind
  `grep -c '^- \[x\]'`, and now also carry the plan.md gate.
- Both READMEs cited schema.yaml by line number (35-39 / 180-182; actual
  38-41 / 181-183). Replaced with named blocks — line numbers are the
  same rot in miniature.

VERSION 1.2.0 → 1.3.0 (new mechanical gate).
Validated: `openspec schema validate superpowers-bridge` passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@AdrianTheopold
AdrianTheopold merged commit 3d7f79f into main Aug 4, 2026
1 check passed
@AdrianTheopold
AdrianTheopold deleted the fix/audit-sibling-gaps branch August 4, 2026 06:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant