Skip to content

Commit 7047c40

Browse files
committed
docs(consolidation): master + PR-X11/X12/X13 design stack + settings wildcards
Master consolidation: ndarray::hpc::* becomes the universal CPU-shape-aware substrate. 10-submodule layout. Invariant 12 replaces jc's zero-dep rule ("certification = determinism + inspectability, not repo separation"). 8-week schedule across 6 sprints with concurrent execution where the dependency graph permits. PR-X11 — jc consolidation: 6 workers move ewa_sandwich (Pillar-6), ewa_sandwich_3d (Pillar-7), koestenberger, pflug (Pillar-10), + NEW Pillar-8 temporal_sandwich, Pillar-9 Cov<N> high-D, Pillar-11 signature transform into ndarray::hpc::pillar::*. Wasserstein/Sinkhorn- Knopp/Hungarian primitives go to linalg::wasserstein. jc deprecates to a thin probe-runner; 1-cycle #[deprecated] shim. PR-X12 — x265-style codec: 8 workers ship ndarray::hpc::codec::* with CTU/CU quad-tree, 4 modes (skip/merge/delta/escape), λ-RDO, rANS entropy coder (chosen over CABAC for cache-friendliness; 0.5% compression-ratio diff). PR-X9's lazy basin-codebook consumes this codec. Target: ~2.4 bytes/cell on coherent input, ≤ 4 bytes/cell worst-case (no regression). PR-X13 — OGIT bridge: 4 workers embed the OGIT Cognitive namespace TTL files (~150 KB) into ndarray via include_str! + ship a minimal Turtle parser (~250 LoC, no rdflib dep) + O(1) family bitmap lookup. Subsumes PR-Z1 (OGIT bootstrap) + PR-Z2 (lance-graph CognitiveBridge). 3-repo coordination collapses to 1 sprint. Bardioc REST client integration becomes optional follow-on, not blocker. Phase 1 (Protocol B: plan → savant review → correct) drafts complete: - pr-x3-cognitive-grid-design.md (shipped as PR #158) - pr-x4-design.md - pr-x9-design.md - pr-z1-ogit-cognitive-bootstrap.md (superseded by PR-X13) - pr-arithmetic-inventory.md - pr-x10-linalg-core-design.md - pr-master-consolidation.md - pr-x11-jc-consolidation-design.md - pr-x12-codec-x265-design.md - pr-x13-ogit-bridge-design.md Phase 2 (Protocol A: preflight Rust skeleton → parallel-savant fan-out → workers fill bodies) starts after joint plan-review savant verdict on all 10 docs. Per-sprint specialist savants: data-flow, layering, distance-typing, SAFETY-claim, naming-collision, test-coverage. SAFETY-claim savant exists specifically to catch the class of latent UB that PR-X3's GridBlockMut had (caught post-merge by codex; preflight catches it pre-implementation). Also adds settings.json wildcard permissions (Edit/Write/MultiEdit/ NotebookEdit + Bash touch/cat/tee/bash) per user authorization. Reduces popup friction for the upcoming 44-worker concurrent execution.
1 parent 3e7432c commit 7047c40

5 files changed

Lines changed: 994 additions & 1 deletion

File tree

Lines changed: 299 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,299 @@
1+
# Master Consolidation — ndarray as the universal CPU-shape-aware substrate
2+
3+
> READ BY: every agent in the AdaWorldAPI stack
4+
> (savant-architect, l3-strategist, cascade-architect, splat3d-architect,
5+
> cognitive-architect, jc-architect, codec-architect, ogit-architect,
6+
> training-architect, arm-neon-specialist, sentinel-qa, product-engineer,
7+
> truth-architect, vector-synthesis).
8+
>
9+
> Status: strategic v1 — drafted 2026-05-18.
10+
>
11+
> **This doc inverts the existing repo split.** Previously: ndarray was "CPU
12+
> primitives", lance-graph was "cognitive graph", jc was "self-certifying
13+
> math probes", lance-graph-ontology was "OGIT consumer". After this
14+
> consolidation: ndarray becomes the universal CPU-shape-aware substrate
15+
> for ALL math, ALL cascades, ALL codecs, ALL ontology hydration. The
16+
> other crates become thin domain orchestrators.
17+
18+
## Strategic frame
19+
20+
The architectural truth surfaced in this session:
21+
22+
**Spd3 is not generic — it's shaped for AVX-512.** 32-byte align fits one half-zmm. The 6 + 8 layout reads as one 256-bit FMA chain. `sandwich_x16` maps to 16 packed FMA pipelines = 256 mul-adds per cycle on Zen4/Sapphire Rapids.
23+
24+
**CascadeAddr is not generic — it's shaped for cache.** 4 bytes total, 16 addresses per cache line, parent/children extraction via single shift-mask.
25+
26+
**GaussianBatch is not generic — it's shaped for SoA SIMD.** Every field 64-byte aligned, padded to PREFERRED_F32_LANES so no scalar tails.
27+
28+
**These structs encode CPU throughput limits in their byte layouts.** The shape IS the CPU contract.
29+
30+
What IS agnostic isn't the data — it's the algorithms over the data:
31+
- `sandwich(M, N)` is agnostic; it just happens to run best on a CPU-shaped Spd3
32+
- Splat cascade is agnostic; it runs best on cache-shaped CascadeAddr
33+
- NARS revision is agnostic; runs best on f32 SoA cells
34+
- x265 RDO is agnostic; runs best on quad-tree CTU partition (which IS the same shape as splat cascade)
35+
36+
**The shape-aware substrate IS the CPU contract. The agnostic algorithm is the math contract. Both live in the same crate.** That crate is `ndarray::hpc::*`.
37+
38+
## The 10-submodule layout
39+
40+
```
41+
ndarray::hpc::
42+
├── simd/ ← SIMD polyfill (shipped) — F32x16 / U64x8 / NEON / AMX
43+
├── blas_level{1,2,3}/ ← BLAS (shipped)
44+
├── lapack/ ← LAPACK FFI (shipped)
45+
├── linalg/ ← PR-X10 — MatN / Quat / SVD / polar / mat_exp / Conv / Attention
46+
├── blocked_grid/ ← PR-X3 (shipped) — generic 2-D block-padded grid
47+
├── splat3d/ ← shipped — Spd3 + Gaussian + EWA + tile bin + raster
48+
├── splat4d/ ← PR-X4 — temporal sandwich + L1-L4 cascade
49+
├── cognitive/ ← PR-X9 — BasinCodebook + LazyBlockedGrid + NARS revise
50+
├── pillar/ ← PR-X11 — jc-style certification probes (Pillar-6..N)
51+
├── codec/ ← PR-X12 — x265-style CTU/CU + skip/merge/delta/escape + RDO + ANS
52+
└── ogit_bridge/ ← PR-X13 — embedded TTL → in-memory schema (replaces lance-graph-ontology hop)
53+
```
54+
55+
11 submodules, each feature-gated. Default build ships only `simd + blas + lapack + linalg`. Cognitive shader work opts in via `--features cognitive,codec,ogit_bridge,splat4d,pillar`.
56+
57+
## What moves where
58+
59+
| Previously | New home | Replaces / supersedes |
60+
|---|---|---|
61+
| `lance-graph/crates/jc/src/ewa_sandwich.rs` | `ndarray::hpc::pillar::ewa_sandwich_2d` | Pillar-6 — Spd2 |
62+
| `lance-graph/crates/jc/src/ewa_sandwich_3d.rs` | `ndarray::hpc::pillar::ewa_sandwich_3d` | Pillar-7 — Spd3 (was duplicated with splat3d) |
63+
| `lance-graph/crates/jc/src/koestenberger.rs` | `ndarray::hpc::pillar::koestenberger` | another Spd3 copy |
64+
| `lance-graph/crates/jc/src/pflug.rs` | `ndarray::hpc::pillar::pflug` + `ndarray::hpc::linalg::wasserstein` | Pillar-10 |
65+
| (proposed) Pillar-8 temporal_sandwich | `ndarray::hpc::pillar::temporal_sandwich` | drafted in splat4d cascade PR 1 |
66+
| (proposed) signature transform Pillar-11 | `ndarray::hpc::pillar::signature` | Hambly-Lyons |
67+
| (proposed) Pillar-9 Cov16384 | `ndarray::hpc::pillar::cov_high_d` | Düker-Zoubouloglou CLT |
68+
| `lance-graph-ontology` bridge pattern | `ndarray::hpc::ogit_bridge` with per-namespace bridges | dispenses with the hop |
69+
| (no source today) x265 RDO / CTU / CABAC | `ndarray::hpc::codec::{ctu,rdo,ans}` | new |
70+
| `splat3d::sh.rs` (deg-3 only) | `ndarray::hpc::linalg::sh` (deg 0..=7) | PR-X10 |
71+
| `splat3d::Spd3` | `ndarray::hpc::linalg::Spd3` (type alias preserves splat3d::Spd3) | PR-X10 |
72+
| `lance-graph::*` inline RMSNorm / SiLU / RoPE / attention | `ndarray::hpc::linalg::{norm,activations_ext,rope,attention}` | PR-X10 |
73+
74+
## The invariant that breaks (intentionally)
75+
76+
**Old invariant** (from splat3d sprint, doc reference: `splat3d_sprint_prompt.md:38`):
77+
> "10. **The cognitive `splat.rs` is sacred.** ... The graphics splat is a NEW module that happens to share *math* (EWA-sandwich, SPD push-forward) with the cognitive splat. They are siblings, not parent/child."
78+
79+
This invariant said: contract types stay contract types, math lives in two places (graphics + cognitive), no cross-coupling.
80+
81+
**Also breaks**: `jc`'s zero-dep on ndarray rule. Was sound when jc was 2 files; with 4-way Spd2/Spd3 duplication appearing, the cost of self-certification exceeds the benefit.
82+
83+
**Replacement invariant** (binding from PR-X10 onward):
84+
85+
> **12. Certification is about determinism and inspectability of the math, not about repo separation.** `ndarray::hpc::pillar::prove_pillar_7()` calls `ndarray::hpc::linalg::eig_sym_3()`. The certification holds because:
86+
> - the probe SEED is documented (`0x_EDA_5A_DC_5A_DD` style constants)
87+
> - the implementation is git-tracked and inspectable
88+
> - the bench output is committed to `RESULTS.md`
89+
> - the PASS gate (PSD rate ≥ 0.999, log-norm concentration) is verifiable from probe output alone
90+
>
91+
> The math contract is preserved by the probe's PASS gate, not by repo isolation.
92+
93+
**Old invariant** (from jc design):
94+
> "lance-graph-contract/src/splat.rs is sacred."
95+
96+
**Stays in force.** The cognitive contract type (q8-only, no floats) lives in `lance-graph-contract` and is never modified. `ndarray::hpc::cognitive::*` CONSUMES the contract types but does not modify them.
97+
98+
## Six-sprint plan with dependencies
99+
100+
```
101+
┌─────────────────────┐
102+
│ PR-X10 (linalg-core)│ ← foundation, max-fan-out 12 workers
103+
│ A1 MatN → A2-A12 ∥ │ ← 2 wks parallel
104+
└──────────┬──────────┘
105+
106+
┌────────────────┼────────────────┐
107+
│ │ │
108+
▼ ▼ ▼
109+
┌──────────┐ ┌──────────────┐ ┌──────────┐
110+
│ PR-X11 │ │ PR-X13 │ │ PR-X12 │
111+
│ jc → pi- │ │ ogit_bridge │ │ codec │
112+
│ llar/* │ │ (embedded TTL)│ │ (x265) │
113+
│ 6 workers│ │ 4 workers │ │ 8 workers│
114+
│ 1 wk │ │ 1 wk │ │ 2 wks │
115+
└─────┬────┘ └──────┬───────┘ └─────┬────┘
116+
│ │ │
117+
│ parallel │ parallel │
118+
│ (no overlap) │ │
119+
▼ ▼ ▼
120+
┌──────────┐
121+
│ PR-X4 │ ← splat cascade onto BlockedGrid
122+
│ 5 workers│ ← needs splat3d (shipped) + linalg
123+
│ 1 wk │
124+
└─────┬────┘
125+
126+
127+
┌──────────┐
128+
│ PR-X9 │ ← basin-codebook lazy storage
129+
│ 6 workers│ ← needs codec (PR-X12) + ogit_bridge (PR-X13)
130+
│ 1.5 wks │
131+
└─────┬────┘
132+
133+
134+
┌──────────┐
135+
│ Integ. │ ← e2e demo + bench + docs
136+
│ 3 workers│
137+
│ 1 wk │
138+
└──────────┘
139+
```
140+
141+
**Total: 8 weeks** if concurrent sprints honor their independence. **44 sprint workers** + 6 coordinators (one per sprint) + savants. The 12-agent cadence per sprint matches the user's preferred protocol.
142+
143+
### Concrete sprint schedule
144+
145+
| Weeks | Sprints running concurrently |
146+
|---|---|
147+
| W1-W2 | **PR-X10** (linalg-core foundation) |
148+
| W3 | **PR-X11** (jc consolidation) + **PR-X13** (OGIT bridge) in parallel |
149+
| W4-W5 | **PR-X12** (codec) + **PR-X4** (splat cascade) in parallel |
150+
| W6-W7 | **PR-X9** (basin-codebook) — needs PR-X12 + PR-X13 |
151+
| W8 | **Integration sprint** — e2e demo, docs, bench, recording |
152+
153+
## Phase 1 / Phase 2 protocol acknowledgment
154+
155+
User's confirmed cadence (from `12 agenten + 1 Koordinator` proposal):
156+
157+
**Phase 1 (DESIGN) — Protocol B:**
158+
```
159+
plan → savant review → correct → ...
160+
```
161+
**WE ARE HERE.** All 6 sprints have design docs drafted:
162+
- `pr-x3-cognitive-grid-design.md` (shipped as PR #158)
163+
- `pr-x4-design.md` (drafted on `claude/pr-x4-splat-cascade-design`)
164+
- `pr-x9-design.md` (drafted; OGIT correction applied)
165+
- `pr-z1-ogit-cognitive-bootstrap.md` (drafted; superseded by PR-X13 below)
166+
- `pr-arithmetic-inventory.md` (drafted)
167+
- `pr-x10-linalg-core-design.md` (drafted; max-fan-out 12 workers)
168+
- `pr-master-consolidation.md` — THIS DOC
169+
- `pr-x11-jc-consolidation-design.md` — drafted alongside
170+
- `pr-x12-codec-x265-design.md` — drafted alongside
171+
- `pr-x13-ogit-bridge-design.md` — drafted alongside (subsumes PR-Z1)
172+
173+
**Next step**: spawn the **joint plan-review savant** on ALL 10 docs at once. It rules on:
174+
- The OGIT integration path (PR-X13 embedded TTL bundle vs PR-Z1 + PR-Z2 inter-repo coordination)
175+
- The invariant inversion (does breaking jc's zero-dep rule survive scrutiny)
176+
- The codec choice (CABAC vs ANS in PR-X12)
177+
- The 7-question lists in each sprint doc
178+
- The cross-sprint ordering above (concurrent vs sequential where there's any ambiguity)
179+
180+
Output: a single verdict file ruling on the architectural surface.
181+
182+
**Phase 2 (IMPLEMENTATION) — Protocol A:**
183+
```
184+
preflight (commented-out Rust skeleton) →
185+
→ parallel-savant review fan-out (data-flow, layering, distance-typing,
186+
SAFETY-claim, naming-collision, test-coverage) →
187+
→ workers fill bodies →
188+
→ fix P0 → review → commit → repeat
189+
```
190+
191+
**Coming next, per sprint.** Each sprint kickoff:
192+
1. One agent writes preflight Rust skeleton for that sprint (all impl blocks `unimplemented!()`, all types stubbed)
193+
2. 6 parallel specialist savants review the skeleton (different concerns, same skeleton, no collision)
194+
3. Sprint workers fill bodies (file-scoped, parallel where dependency graph permits)
195+
4. Codex P0 audit on combined diff
196+
5. Coordinator fixes P0s
197+
6. P2 savant pre-merge review
198+
7. Merge, integration test, repeat for next sprint
199+
200+
Why Protocol A in Phase 2: the PR-X3 sprint's post-merge `GridBlockMut::data: &'a mut [T]` UB would have been caught at preflight by the SAFETY-claim savant. Protocol A catches latent UB earlier than codex audit at end-of-sprint.
201+
202+
## Deprecation timeline
203+
204+
| Sprint | Crate effects | Deprecation action |
205+
|---|---|---|
206+
| PR-X10 lands | `ndarray::hpc::linalg::*` becomes canonical | none yet (additive) |
207+
| PR-X11 lands | `lance-graph/crates/jc/src/{ewa_sandwich,ewa_sandwich_3d,koestenberger,pflug}.rs` deprecated | `#[deprecated(since="0.X", note="moved to ndarray::hpc::pillar")]` + 1-cycle transition |
208+
| jc consumers migrate | jc becomes a thin probe-runner that imports `ndarray::hpc::pillar::*` | follow-on PR after PR-X11 |
209+
| PR-X13 lands | `lance-graph/crates/lance-graph-ontology/` becomes thin Bardioc REST client | bridges move to `ndarray::hpc::ogit_bridge::*` |
210+
| PR-X12 lands | x265-style codec available crate-wide | no deprecations (new code only) |
211+
| PR-X4 lands | splat3d/tile.rs becomes a backward-compat shim for the new `ndarray::hpc::splat4d::cascade` | shim deprecated after splat3d::raster.rs migrates |
212+
| PR-X9 lands | lazy basin-codebook storage available | none (new code only) |
213+
214+
## Feature-flag matrix
215+
216+
```toml
217+
# Default minimal build
218+
default = ["std", "linalg"]
219+
220+
# Add submodules as needed
221+
splat3d = ["dep:..."] # shipped
222+
splat4d = ["splat3d", "linalg"]
223+
blocked_grid = ["std"]
224+
linalg = ["std"] # foundation
225+
pillar = ["linalg"] # jc consolidation
226+
codec = ["std", "blocked_grid"] # x265-style
227+
ogit_bridge = ["std"] # embedded TTL
228+
cognitive = ["blocked_grid", "linalg", "codec", "ogit_bridge"]
229+
230+
# Aggregates
231+
cognitive_full = ["cognitive", "splat4d", "pillar"] # the full cognitive shader stack
232+
medical = ["splat4d", "blocked_grid"] # the medical imaging atlas (skeleton-anchored)
233+
training = ["linalg", "splat3d"] # splat3d backward / training sprint
234+
```
235+
236+
Default builds stay small. Consumer crates pick the cocktail they need. No mandatory cognitive surface for splat3d consumers; no mandatory splat surface for jc consumers.
237+
238+
## What the joint plan-review savant rules on
239+
240+
| Decision | Options | Lean |
241+
|---|---|---|
242+
| OGIT integration path | (a) sequential OGIT/Cognitive bootstrap → lance-graph CognitiveBridge → PR-X9 / (b) parallel with stubs / (c) embedded TTL bundle in ndarray | **(c)** — subsumed by PR-X13 |
243+
| jc zero-dep invariant | keep / break | **break** — invariant 12 replaces it |
244+
| Codec entropy coder | CABAC (industry-standard, complex) / ANS (simpler, cache-friendlier) | **ANS** for v1, CABAC follow-on if compression ratio insufficient |
245+
| Cross-sprint ordering | strict sequential / aggressive concurrent | **concurrent** per dependency graph above |
246+
| Worker decomposition (per sprint) | 5-10 / 12 / more | **12 per sprint** (the "12 agenten" cadence) |
247+
| Phase 2 protocol | Protocol A preflight / Protocol B direct sprint | **Protocol A** for all implementation phases |
248+
| Backward compat for splat3d consumers | full / partial / break | **full** via type aliases in PR-X10 |
249+
| jc deprecation cycle | 0-cycle / 1-cycle / 2-cycle | **1-cycle** (one release of `#[deprecated]` before removal) |
250+
| Pillar count in PR-X11 | 4 (Pillar-6,7,10 + signature) / 5 (+ Pillar-8 temporal) / 6 (+ Pillar-9 high-D) | **6** — pre-stage Pillar-8 and Pillar-9 for the splat4d temporal sandwich |
251+
| codec mode count | 2 (skip/explicit) / 4 (skip/merge/delta/escape) / 6 (+ multi-merge variants) | **4** — matches x265 medium-preset complexity |
252+
253+
## Open questions (joint savant ruling)
254+
255+
1. **Does PR-X10's `Quat` belong in `linalg` or in a new `geom` submodule?** Lean: in `linalg`. Quaternions are linalg primitives (4-vec on the 3-sphere, multiplication is a Lie group op).
256+
257+
2. **Should `ndarray::hpc::pillar::*` re-export jc's old API verbatim for the deprecation cycle?** Lean: yes — `pub use crate::hpc::linalg::Spd3 as Spd3;` etc., so jc's existing consumers compile unchanged.
258+
259+
3. **Does `ndarray::hpc::codec::*` need a streaming API (frame-by-frame ingest) or only a batch API (whole-frame encode)?** Lean: both — batch for v1, streaming added in PR-X12.1.
260+
261+
4. **Does `ndarray::hpc::ogit_bridge::*` ship the OGIT TTL files as `include_bytes!` (compiled into the binary) or as build-time-cached files?** Lean: `include_bytes!` for v1 (zero-startup, ~50 KB compressed), build-time-cached as opt-in for larger ontologies.
262+
263+
5. **Phase 2 Protocol A — does each sprint share the SAME 6 specialist savants, or does each sprint get its own set?** Lean: same 6 (reduces savant context-switch overhead); the savants are stateless w.r.t. each sprint.
264+
265+
6. **Where does AriGraph / SPO-bundle / NARS-engine orchestration live AFTER this consolidation?** Lean: stays in `lance-graph/*` — those are domain orchestrators, not substrate math. `lance-graph::cognitive::*` consumes `ndarray::hpc::cognitive::*`.
266+
267+
7. **Does the master consolidation imply renaming `ndarray``ada-substrate` or similar?** Lean: NO — `ndarray` is established, downstream-stable, has CI history. The name's slightly misleading after this consolidation (it's no longer just N-dimensional arrays) but the rename cost exceeds the clarity benefit.
268+
269+
## Sprint-by-sprint headlines
270+
271+
(Full design docs adjacent on the branch.)
272+
273+
- **PR-X10** — 12-worker max-fan-out linalg foundation. A1 MatN → A2-A12 all parallel. The Spd3 closed-form fast path and Jacobi general-N coexist (invariant 12).
274+
- **PR-X11** — jc Spd2/Spd3/Wasserstein/signature/cov_high_d consolidation. 6 workers. jc becomes a probe-runner; math lives in `ndarray::hpc::pillar::*`.
275+
- **PR-X12** — x265-style codec for cognitive basin-codebook compression. CTU quad-tree (4 levels matching splat4d cascade), skip/merge/delta/escape modes, λ-RDO, ANS entropy coder. 8 workers.
276+
- **PR-X13** — OGIT embedded TTL bundle + Cognitive namespace bridge. 4 workers. Replaces the 3-repo coordination of PR-Z1 + PR-Z2 + PR-X9; one self-contained ndarray sprint.
277+
278+
## Done criteria (master consolidation)
279+
280+
Master consolidation is "done" when:
281+
- All 6 sprints land per the schedule above (~8 weeks)
282+
- `ndarray::hpc::*` 10-submodule layout is the canonical structure
283+
- jc deprecated 1 cycle and removed in cycle N+2
284+
- lance-graph-ontology becomes thin Bardioc REST client (or deprecated entirely if no live-schema use case)
285+
- `lance-graph` consumers migrate to `ndarray::hpc::cognitive::*` as the substrate
286+
- e2e demo on a Zen4/Sapphire Rapids 8-core: cognitive cascade ingesting at 30+ fps, splat atlas rendering at 50+ fps, all CPU
287+
- Codex P0 audits across all 6 sprints pass 0 P0s
288+
- P2 savant pre-merge reviews across all 6 sprints deliver SHIP verdicts
289+
- Final integration sprint produces 30-second screen recording: cognitive shader stack end-to-end on CPU, no GPU
290+
291+
## Token-reset safety notes
292+
293+
If you're picking up after a token reset:
294+
1. Read this doc first.
295+
2. Read the 9 sibling design docs on `claude/pr-x4-splat-cascade-design` branch.
296+
3. The conversation context: after PR #158 (PR-X3 BlockedGrid) merged on 2026-05-18, the user pushed for maximal consolidation — `ndarray::hpc::*` becomes the universal CPU-shape-aware substrate. Five additional sprints proposed: PR-X10 (linalg foundation), PR-X11 (jc consolidation), PR-X12 (x265 codec), PR-X13 (OGIT bridge), and the cognitive layer (PR-X4 + PR-X9 already drafted). Invariant 12 replaces the jc zero-dep rule.
297+
4. The Phase 1 / Phase 2 protocol is explicit: Phase 1 (Protocol B — plan → savant review → correct) is happening now; Phase 2 (Protocol A — preflight Rust skeleton → parallel-savant fan-out → workers fill bodies) starts after the joint savant verdict.
298+
5. The 12-worker max-fan-out shape (PR-X10's A1 MatN → A2-A12 parallel) is the gold-standard for sprint composition; subsequent sprints follow the same shape where the dependency graph permits.
299+
6. The deprecation timeline is staged: PR-X11 marks jc files `#[deprecated]` for 1 cycle; PR-X13 supersedes lance-graph-ontology bridge pattern; both fully removed in cycle N+2.

0 commit comments

Comments
 (0)