You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(roadmap): conform the Release cells, and rule out the 1.0-cut slot explicitly
Three corrections from the challenge's differential, which caught things both arms missed.
The Release column is a MILESTONE bucket, not a version: FR-031/032/035/036 all read "1.0"
and all shipped in 0.x. "pre-1.0 MINOR" was a mechanism token in a milestone column, so the
cells now read "1.0 · 1.1" — the same compound form FR-024 already uses, and accurate,
since the 1.0 line IS where a pre-1.0 breaking MINOR lands.
Rules out the option both challenge arms treated as non-existent — and it is the one a
reader will reach for first, because it looks free. 1.0.0 is a MAJOR under semver, so a
break landing IN the renumbering is neither a pre-1.0 MINOR nor a 2.0 event. It is still
wrong: §G3 wants "at least one coordinated release … with no metamodel-breaking changes, to
prove the rate has actually dropped". A 1.0 that carries a break has had no quiet period, so
it freezes the vocabulary on a stability claim nothing tested. The gate is about evidence,
not arithmetic — worth writing down, because the arithmetic reading is the tempting one.
Names the tension instead of implying it is closed. CLAUDE.md and the "Before 1.0" section
say GA is next and nothing blocks it; this section says a breaking MINOR comes first. Both
challenge arms leaned on roadmap:139 to conclude a further MINOR is available and neither
engaged the contrary evidence — so the section now states the choice and points at #210's
reversal trigger as the mechanism for making it. The one thing that stays unavailable either
way is targeting the breaking half at 1.1.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhpswkF1NvwxhFWMmdAT15
| FR-037 | Projection expressiveness (`origin.rank`) + field write-access modes (`@mutability`) | ⚪ requirements (pre-design), decisions resolved. **R1/R2 retire registered vocabulary (`@readOnly`), so the breaking half must ride a coordinated pre-1.0 breaking MINOR** — post-1.0 a metamodel-vocabulary break is a 2.0 event (ADR-0035 §1), not a 1.1 minor. `origin.rank` + the rest are additive → 1.1. Design: `docs/superpowers/specs/2026-08-10-fr-037-projection-expressiveness-and-write-once-design.md`|pre-1.0 MINOR · 1.1 | — |
52
-
| FR-038 | Requirement-derived test stubs (inverts `@verifiedBy`) | ⚪ proposed. Generate the test from the requirement so the link is structural, not a name the author picks — an audit of one 19-name ledger found 4 names that did not verify their claim. **The `@verifiedBy` retirement is breaking and rides the SAME pre-1.0 MINOR as FR-037's R1/R2, not a second one**; the stub generator is additive → 1.1. Design: `docs/superpowers/specs/2026-08-15-fr-038-requirement-derived-test-stubs-design.md`|pre-1.0 MINOR · 1.1 | — |
51
+
| FR-037 | Projection expressiveness (`origin.rank`) + field write-access modes (`@mutability`) | ⚪ requirements (pre-design), decisions resolved. **R1/R2 retire registered vocabulary (`@readOnly`), so the breaking half must ride a coordinated pre-1.0 breaking MINOR** — post-1.0 a metamodel-vocabulary break is a 2.0 event (ADR-0035 §1), not a 1.1 minor. `origin.rank` + the rest are additive → 1.1. Design: `docs/superpowers/specs/2026-08-10-fr-037-projection-expressiveness-and-write-once-design.md`| 1.0 · 1.1 | — |
52
+
| FR-038 | Requirement-derived test stubs (inverts `@verifiedBy`) | ⚪ proposed. Generate the test from the requirement so the link is structural, not a name the author picks — an audit of one 19-name ledger found 4 names that did not verify their claim. **The `@verifiedBy` retirement is breaking and rides the SAME pre-1.0 MINOR as FR-037's R1/R2, not a second one**; the stub generator is additive → 1.1. Design: `docs/superpowers/specs/2026-08-15-fr-038-requirement-derived-test-stubs-design.md`| 1.0 · 1.1 | — |
53
53
54
54
_(FR-001 was the original metamodel foundation — pre-dates the FR-numbered tracking.)_
55
55
_(FR-032 was developed under the working number "FR-026" — see commit history; renumbered to avoid the FR-026=Forms collision. Design: `docs/superpowers/specs/2026-06-13-fr-032-canonical-fqn-refs-design.md`, ADR-0032.)_
@@ -252,6 +252,13 @@ that retires registered vocabulary. Chartered to ride the next such MINOR:
252
252
-**FR-038** — the `@verifiedBy` retirement, explicitly "the same coordinated pre-1.0 breaking
253
253
slot as FR-037's `@mutability`, not a second one".
254
254
255
+
**Why not carry the break in the `1.0` cut itself?**`1.0.0` is a MAJOR under semver, so a
256
+
break landing *in* the renumbering is neither a pre-1.0 MINOR nor a 2.0 event — it looks like a
257
+
free slot. It is not: §G3 requires "at least one coordinated release after the last breaking
258
+
move … with **no** metamodel-breaking changes, **to prove the rate has actually dropped**". A
259
+
1.0 that carries a break has had no quiet period at all, so it freezes the vocabulary on the
260
+
strength of a stability claim nothing tested. The gate is about evidence, not arithmetic.
261
+
255
262
**Cost, stated plainly:** landing any of these resets the §G3 quiet-period clock in
256
263
`docs/1.0-readiness.md` — "at least one coordinated release after the last breaking move with no
257
264
metamodel-breaking changes". So this MINOR pushes the 1.0 renumbering out by at least one
@@ -260,6 +267,13 @@ Group-B entry above: it rides the breaking batch "while 1.0 stays unscheduled",
260
267
scheduled imminently" listed as the reversal trigger). Note that ADR-0035's own §C3 text still
261
268
names `0.15.1` as the last breaking move — stale; `0.21.0` superseded it.
262
269
270
+
**The open tension, named:**`CLAUDE.md` and the "Before 1.0" section above both say GA is the
271
+
next release move and that nothing outstanding blocks the promotion. This section says a
272
+
breaking MINOR comes first. Those are reconcilable only by deciding which goes first — and
273
+
#210's reversal trigger is the mechanism for deciding it: if 1.0 is scheduled imminently, ship
274
+
the break as documentation-and-rule-of-thumb instead and let the vocabulary changes become 2.0
275
+
work. What is NOT available is targeting the breaking half at `1.1`.
276
+
263
277
### 1.1 — Serialization foundation + connected-systems tier
264
278
265
279
-**FR-024 declared-API surface** — the deferred half of FR-024: `api.base`/`api.operational`,
0 commit comments