fix(openspec): stop two MODIFIED blocks from dropping shipped scenarios #80
No reviewers
Labels
No labels
dependencies
major
security-pin
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
trails-cool/trails!80
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/openspec-modified-blocks-drop-scenarios"
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?
pnpm openspec validate --all --strictfails onchange/route-featuresandchange/wahoo-production-cutoveras soon as@fission-ai/openspecreaches 1.9.0. That currently blocks #38, but the bump is incidental: 1.9.0 added a check 1.6.0 lacked, and these two documents have been wrong since they were written. Verified the asymmetry directly — 1.6.0 passes both, 1.9.0 fails both.What the new check catches
A
MODIFIEDrequirement replaces the whole block, so a MODIFIED block that omits scenarios the current spec still has would silently delete them on archive. 1.9.0 refuses that — so it caught a real latent data-loss path rather than being newly fussy:route-featureswahoo-production-cutoverFive scenarios across two changes, both of which are un-archived and would have taken effect eventually.
The wahoo change needed more than the validator asked for
Copying the three scenarios in would have satisfied the check while still regressing the requirement text. The delta describes a POST-only pipeline; the shipped spec has POST → PUT idempotency with a 404 fallback and
last_pushed_version.So the shipped text is now the base, with the delta's genuinely new normative content appended as a second paragraph:
route[file]data URI (Wahoo silently discards plain base64)capabilitiesbitmask —valid | distance | position(0x1A), not time-only (0x04)total_elapsed_time/total_timer_timeI checked that none of those three appear anywhere in
openspec/specs/wahoo-route-push/spec.md, so they are real additions, not duplication. Its near-duplicate "Successful push" scenario is folded into "First push of a route" as two extraANDlines, where those assertions belong in the flow.Judgement calls worth reviewing
I read the POST-only wording as staleness, not intent. The change has 0 of 18 tasks done and predates the PUT work. If it genuinely means to revert to POST-only, this merge is wrong and the change wants rewriting instead — that is the one thing here a reviewer should actually decide.
The capabilities and LAP requirements arguably belong in the separate "GPX to FIT Course conversion" requirement, since they describe the encoder rather than the push pipeline. Left where the change author put them to keep this a validation fix.
Testing
81 passed, 0 failedunder both 1.6.0 (what main has today) and 1.9.0 (what #38 brings), so this is safe now and unblocks the bump later.openspec/specs' —dropped=nonefor both.Docs only; no code paths touched. After this lands, #38 should go green on a rebase without changing its dependency content.