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
{{ message }}
Repository navigation
Commit dfde33f
Browse filesBrowse the repository at this point in the historyBrowse 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.
Copy file name to clipboardExpand all lines: docs/work/mvp/2026-09-05-ruby-sdk-v1-roadmap-design.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2881,8 +2881,9 @@ object model, none removed — holds every reader of the five value types. One p
2881
2881
plan's fence: `Context.validate!` is the private `#validate_context!`, since the design gives `Context`
2882
2882
exactly one public method. Seventeen departures from the plan's text are itemised in the checklist, none
2883
2883
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
2886
2887
page, every fence run verbatim on 4.0.6 and 3.2.11 with identical output; `architecture.md`, the core
2887
2888
README, `README.md` and `docs/README.md` point at it. The design's ledger gains an "As built" addendum;
2888
2889
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
2894
2895
beside phase 0's `version.rb`; `phase4/phase4a/` now carries its checklist, the sixth written; the surface
2895
2896
manifest is 580 lines; the cop suite is 129 cases. `CLAUDE.md`'s built-phases paragraph, its gem and
2896
2897
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
2898
2899
they were for 3a and 3b: `docs/sdk-design-ruby/` is frozen, and `docs/deviations.md` is left as phase 2
Copy file name to clipboardExpand all lines: docs/work/mvp/phase4/phase4a/2026-09-08-phase4a-execution-context-design.md
+6-4Lines changed: 6 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1250,18 +1250,20 @@ the phase-4 segmentation design left the ledger empty.
1250
1250
1251
1251
### As built, 2026-09-16
1252
1252
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
1254
1254
ledger is shared across the three sub-phases and the next free number is read from the tree, not
1255
1255
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`.
1258
1260
Five rows above read slightly differently against the source; the difference is recorded here
1259
1261
rather than by rewriting the text it corrects. The checklist's "Deviations from the plan" is the
1260
1262
itemised list, and its "Guards run red" section holds the battery.
1261
1263
1262
1264
| # | Deviation | Requirement / document | Why |
1263
1265
|---|---|---|---|
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) |
1265
1267
1266
1268
-**P4-10, as built.**`Dexpace/NoWeakReferences` is the **eighth** custom cop, not the seventh:
1267
1269
seven exist on `main` — phase 0's five, `Dexpace/NoKeywordSplat` (phase 0, 2026-09-13) and
0 commit comments