Skip to content

Commit dfde33f

Browse files
docs: renumber 4a's as-built ledger row P4-40 to P4-60
Phase 4a and 4b ran as parallel stacks off main, and both numbered their first as-built ledger row P4-40 -- 4a's one row (_ContextHost) and 4b's ten (P4-40-P4-49). 4b merged first (#53-#55), so its numbers stand on main; 4a's row moves to P4-60, with P4-50-P4-59 reserved for phase 4c, which builds on 4b's tip. The design addendum, the checklist and the roadmap's status note say what the row was called while the lanes overlapped and why it moved, so the history stays readable.
1 parent 90199be commit dfde33f

3 files changed

Lines changed: 14 additions & 9 deletions

File tree

‎docs/work/mvp/2026-09-05-ruby-sdk-v1-roadmap-design.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2881,8 +2881,9 @@ object model, none removed — holds every reader of the five value types. One p
28812881
plan's fence: `Context.validate!` is the private `#validate_context!`, since the design gives `Context`
28822882
exactly one public method. Seventeen departures from the plan's text are itemised in the checklist, none
28832883
lowering a gate. `_ContextHost`, the self-type interface strict Steep needs for `Context#close`, is the one
2884-
new ledger row, **P4-40** — numbered from the tree, because 4b's design filed P4-12–P4-25 and 4c's
2885-
P4-26–P4-39 before this phase executed. `docs/sdk-documentation/execution-context.md` is the as-built
2884+
new ledger row, **P4-60** — numbered from the tree, because 4b's design filed P4-12–P4-25 and 4c's
2885+
P4-26–P4-39 before this phase executed, 4b's as-built addendum took P4-40–P4-49 and P4-50–P4-59 are
2886+
4c's; it was P4-40 while the two lanes ran in parallel and was renumbered before the push. `docs/sdk-documentation/execution-context.md` is the as-built
28862887
page, every fence run verbatim on 4.0.6 and 3.2.11 with identical output; `architecture.md`, the core
28872888
README, `README.md` and `docs/README.md` point at it. The design's ledger gains an "As built" addendum;
28882889
the two postponed items keep their owners (the cap's configuration source, phase 5a Task 13; the no-op
@@ -2894,6 +2895,6 @@ returns as its own code → tests → docs stack. The counts that changed: `gems
28942895
beside phase 0's `version.rb`; `phase4/phase4a/` now carries its checklist, the sixth written; the surface
28952896
manifest is 580 lines; the cop suite is 129 cases. `CLAUDE.md`'s built-phases paragraph, its gem and
28962897
phase-directory sentences and the constraints-that-bite list are rewritten from what was built. The
2897-
consolidation of P4-1–P4-11 and P4-40 into design §10, and §5.4's and §8.1's addenda, are a human's, as
2898+
consolidation of P4-1–P4-11 and P4-60 into design §10, and §5.4's and §8.1's addenda, are a human's, as
28982899
they were for 3a and 3b: `docs/sdk-design-ruby/` is frozen, and `docs/deviations.md` is left as phase 2
28992900
left it for phase 10 to flip.

‎docs/work/mvp/phase4/phase4a/2026-09-08-phase4a-execution-context-checklist.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,11 @@ this build's.
329329
names as the owner of the two-factories distinction, is where the wording is next touched.
330330
- **The design's ledger** gains an "As built" addendum (in the design) for the eighth-cop numbering
331331
(P4-10), the two `sig/` mirrors (P4-3), `_ContextHost` (P4-2), the private validation (P4-11) and
332-
the confirmed `#tracer` arity (P4-8), with the one new row numbered **P4-40**, the next free
332+
the confirmed `#tracer` arity (P4-8), with the one new row numbered **P4-60**, the next free
333333
number in the phase-4 ledger the three sub-phases share (4b's design filed P4-12–P4-25 and 4c's
334-
P4-26–P4-39 before this phase executed). The consolidation into design §10 and the §5.4 and
334+
P4-26–P4-39 before this phase executed; 4b's as-built addendum took P4-40–P4-49 and 4c's is
335+
reserved P4-50–P4-59 — the row was numbered P4-40 while the lanes ran in parallel and renumbered
336+
before the push). The consolidation into design §10 and the §5.4 and
335337
§8.1 addenda are a human's, as they were for 3a and 3b, because `docs/sdk-design-ruby/` is
336338
frozen; `docs/deviations.md` is left as phase 2 left it for phase 10 to flip.
337339

‎docs/work/mvp/phase4/phase4a/2026-09-08-phase4a-execution-context-design.md‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,18 +1250,20 @@ the phase-4 segmentation design left the ledger empty.
12501250

12511251
### As built, 2026-09-16
12521252

1253-
The plan added no numbered row; execution adds **one**, numbered **P4-40** because the phase-4
1253+
The plan added no numbered row; execution adds **one**, numbered **P4-60** because the phase-4
12541254
ledger is shared across the three sub-phases and the next free number is read from the tree, not
12551255
assumed: phase 4b's design filed P4-12–P4-25 and phase 4c's P4-26–P4-39, both before this phase
1256-
executed, and 4b is running as a parallel stack whose additions, if any, take the numbers after
1257-
this one.
1256+
executed; 4b, built as a parallel stack and merged to `main` the same day (#53–#55), took
1257+
P4-40–P4-49 for its own as-built rows, and P4-50–P4-59 are reserved for 4c's, which builds on
1258+
4b's tip. This row was first numbered P4-40 while the two lanes ran side by side and was renumbered
1259+
before the stack was pushed, so no two rows share a number on `main`.
12581260
Five rows above read slightly differently against the source; the difference is recorded here
12591261
rather than by rewriting the text it corrects. The checklist's "Deviations from the plan" is the
12601262
itemised list, and its "Guards run red" section holds the battery.
12611263

12621264
| # | Deviation | Requirement / document | Why |
12631265
|---|---|---|---|
1264-
| P4-40 | A fourth RBS interface, `Dexpace::_ContextHost`, the self-type constraint of `module Context` | `NFR-4`; `NFR-3`'s strict `core` target; P4-2's list | `Context#close` calls `store` and `call_key`, which the module does not define and every includer does. The strict target types a module's `self` by its self-type constraint — the shape phase 1 gave `Model : _ModelInstance` — so `_ContextHost` includes `_ModelInstance` and adds the two readers, and `#close` types without an `untyped` receiver. It is a public name in `sig/`, locked with `_Span`, `_Tracer` and `_TracerFactory`; `store` stays `untyped` inside it, as on every flavour, because the runtime check is `respond_to?` and strict Steep refuses that on an interface type (3a) |
1266+
| P4-60 | A fourth RBS interface, `Dexpace::_ContextHost`, the self-type constraint of `module Context` | `NFR-4`; `NFR-3`'s strict `core` target; P4-2's list | `Context#close` calls `store` and `call_key`, which the module does not define and every includer does. The strict target types a module's `self` by its self-type constraint — the shape phase 1 gave `Model : _ModelInstance` — so `_ContextHost` includes `_ModelInstance` and adds the two readers, and `#close` types without an `untyped` receiver. It is a public name in `sig/`, locked with `_Span`, `_Tracer` and `_TracerFactory`; `store` stays `untyped` inside it, as on every flavour, because the runtime check is `respond_to?` and strict Steep refuses that on an interface type (3a) |
12651267

12661268
- **P4-10, as built.** `Dexpace/NoWeakReferences` is the **eighth** custom cop, not the seventh:
12671269
seven exist on `main` — phase 0's five, `Dexpace/NoKeywordSplat` (phase 0, 2026-09-13) and

0 commit comments

Comments
 (0)