fix(bridge): require plan.md step ticking, closing the verify §7 blind spot - #2
Merged
Merged
Conversation
…d spot The apply-phase executor rule named tasks.md only, while plan.md ships `- [ ] **Step N**` boxes from its own template and no instruction ever asked for them to be maintained. Observed live: a full cycle ticked tasks.md conscientiously in the same message as every SDD ledger line and left all 20 plan.md step boxes empty — the rule was followed for the file it names and missed for the file it does not. The stale ledger is the lesser half. Verify §7 reads plan.md for `[~]` deferred rows to make "deferred-and-gapped" visible at archive, so an unmaintained plan.md silently disarms it: a manual or dogfood step that really was deferred never gets marked `[~]`, §7 then renders legitimately blank, and the cycle reports "no deferrals" when it had them. §7's blocking condition (empty §7 AND `[~]` rows present) cannot fire either, because the rows it looks for were never written. - apply step 2: the executor ticks BOTH committed ledgers in the same bookkeeping step as the SDD ledger line, and marks a deferred step `[~]` in plan.md at the moment it is deferred. Names the two distinct failure modes so neither reads as cosmetic. - verify §7: a blank §7 counts as "nothing deferred" only if plan.md was maintained; otherwise reconstruct from the ledger and commits, tick, and re-run. - README (en + zh-TW): correct the framing that assigned progress tracking to tasks.md alone — `tracks: tasks.md` names what OpenSpec parses, not the whole bookkeeping duty. - VERSION 1.1.0 → 1.2.0 (+ the release line in both READMEs), so `bridge check` sees the drift instead of reporting "up to date" against a changed bundle. Validated: `openspec schema validate superpowers-bridge` passes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The apply-phase executor rule named
tasks.mdonly, whileplan.mdships- [ ] **Step N**boxes from its own template (templates/plan.md) and no instruction ever asked for them to be maintained. The READMEs reinforced this in both languages, framing progress tracking astasks.md's job andplan.mdas micro-steps with no tracking role.Observed live: a full cycle ticked
tasks.mdconscientiously in the same message as every SDD ledger line and left all 20plan.mdstep boxes empty. The rule was followed for the file it names and missed for the file it does not.The stale ledger is the lesser half. Verify §7 reads
plan.mdfor[~]deferred rows, to make "deferred-and-gapped" visible at archive. An unmaintainedplan.mdsilently disarms it:[~];[~]rows present) cannot fire either, because the rows it looks for were never written.So this is a correctness hole, not bookkeeping tidiness. It went unnoticed because the cycle that exposed it happened to defer nothing.
Changes
[~]at the moment it defers it. Both failure modes are named, because neither reads as bookkeeping on its own. Also states the meta-reason: a rule written for one of two committed files gets followed for that one and missed for the other.plan.mdwas actually maintained; otherwise reconstruct the deferral state from the SDD ledger and the commits, tickplan.md, and re-run.tasks.mdalone.tracks: tasks.mdnames what OpenSpec parses, not the whole bookkeeping duty.The version bump is load-bearing for the install tooling, which compares version strings: a changed bundle left at 1.1.0 reports "up to date" while every consuming repo still resolves the old instructions — silent drift behind a green readout.
Verification
openspec schema validate superpowers-bridge→ validopenspec schemaslists the bundle and its artifact chain unchangedschema.yaml/templates, English conventional commit, both README locales synced, validated against a throwaway project perCLAUDE.md's documented flowContext
This is H1 of the fold-in list, reopened and widened — the v1.1.0 correctness pass (#1) fixed the
tasks.mdhalf; theplan.mdhalf was never in scope.