Skip to content

Commit ed06ff4

Browse files
committed
plan(v3-migration): §2.3 — defer the Canon:Custom flip (operator)
Operator decision (2026-06-26): the classid half-order flip [custom(hi):canon(lo)] -> [canon(hi):custom(lo)] is deferred. It happens only after (1) Phase 1 is complete AND (2) OSINT + FMA + CPIC are all re-encoded to V3 shape (current custom:canon convention + high-u16 0x1000_xxxx gen marker; OSINT done #613, FMA-V3 + CPIC-V3/Genetics-slot still to mint), then flipped once, atomically, across the whole V3 set. Forcing reason recorded in new §2.3: the flip reinterprets routing on every classid (post-flip classid_concept_domain reads the HIGH u16), so a half-flipped corpus mis-routes by construction — the I-LEGACY-API-FEATURE-GATED failure mode (one accessor, two silent semantics by state). So the flip must be a single coordinated reorder over a known-complete V3 set, never trickled in per consumer. facet_mint's facet_classid stays a parameter (bakes in no half-order), so brick 2 is unaffected by the deferral. §7 Canon:Custom paragraph + brick-1 row updated to "DEFERRED (§2.3)"; no shipped classid touched. Board: LATEST_STATE operator- decision note prepended. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TANd15SECEb1Gm4cpaRVD9
1 parent d898372 commit ed06ff4

2 files changed

Lines changed: 47 additions & 8 deletions

File tree

.claude/board/LATEST_STATE.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
1111
---
1212

13+
## 2026-06-26 — OPERATOR DECISION — Canon:Custom flip DEFERRED (V3 plan §2.3)
14+
15+
The classid half-order flip `[custom(hi):canon(lo)] → [canon(hi):custom(lo)]` is **deferred — not done now.** Operator (2026-06-26): the flip happens **only after** (1) Phase 1 is complete AND (2) **OSINT + FMA + CPIC are all re-encoded to V3 shape** (current `custom:canon` convention + high-u16 `0x1000_xxxx` gen marker — OSINT done #613; FMA-V3 + CPIC-V3/Genetics-slot still to mint), then **flipped once, atomically, over the whole V3 set.** Forcing reason (recorded `soa-value-tenant-migration-v2.md` §2.3): the flip reinterprets *routing* on every classid (post-flip `classid_concept_domain` reads the HIGH u16), so a half-flipped corpus mis-routes — the `I-LEGACY-API-FEATURE-GATED` failure mode — and must be a single coordinated reorder over a known-complete set. `facet_mint`'s `facet_classid` stays a parameter (bakes in no half-order), so brick 2 is unaffected by the deferral. Recorded in plan §2.3 (new) + §7 + brick-1 row; no shipped classid touched.
16+
1317
## 2026-06-26 — IN PR (`claude/serene-mayer-1a09he`) — V3 migration plan absorbs the AST-as-address arc (§7 — the self-programming payoff)
1418

1519
`soa-value-tenant-migration-v2.md` gains **§7** — the *application* the two-phase V3 sequencing exists to serve, folding the now-merged #616 ("what" + V3 alignment) / #617 ("why") arc into the plan as first-class roadmap. **§0–§6 stay operator-locked and untouched.** §7 records: (1) the one-line why — once identity is V3 (Phase 1) + tenants are the V3-shaped contained facet (Phase 2), a transcode source's structural AST **IS its address**, so minting an ERP collapses to *importing* OGIT class primitives + wiring classaction pointers (the low-code platform **self-programs** at assembler cost, vs re-transcoding ~500K LOC/consumer); (2) the arc IS this plan's `(part_of:is_a)` structure axis made literal — the shipped `FacetCascade` read as `hi_chain`=part_of/`lo_chain`=is_a is the "shadow the V3 key casts" §1 already names, downstream of BOTH phases; (3) the brick chain mapped onto the phases — **brick 1** (slot alloc) LOCKED by shipped `FacetCascade`, **brick 2** (`facet_mint` rank-minter) BUILT (`360fc720`), **brick 3** (MedCare `ruff_csharp_spo`→mint→SoA→`typeHierarchy` probe, MedCareV2 oracle) PENDING = the single CONJECTURE→FINDING gate; (4) **Canon:Custom is ONE lock shared with §2.2** — the minter's `facet_classid` is a parameter, so resolving canon(hi):custom(lo) settles both the Phase-1 classid entries and the minter's row-0 ordering in one decision. Arc stays `[S]`→`[H]` CONJECTURE; gate F-code via brick 3. Header pointer added; cross-refs extended (ast doc, `facet_mint`, ruff #29).

.claude/plans/soa-value-tenant-migration-v2.md

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,37 @@ Unassigned — so it is **rejected**.) The live `0xDDCC` consts are kept as-is.
152152
entries are `guid-v3-tail`-gated. OSINT-V3 is wired in P-A (#613); FMA-V3 + the
153153
Genetics-domain mint + CPIC's move follow.
154154

155+
### 2.3 Canon:Custom flip — DEFERRED (operator, 2026-06-26)
156+
157+
The half-order flip `[ custom (hi) : canon (lo) ] → [ canon (hi) : custom (lo) ]`
158+
(so the prefix sorts by **shared concept**, not render skin) is **deferred — do not
159+
flip now.** It happens **only after** BOTH:
160+
161+
1. **Phase 1 is complete**, AND
162+
2. **OSINT + FMA + CPIC are all re-encoded to V3 shape** (under the *current*
163+
`custom:canon` convention + the high-u16 `0x1000_xxxx` gen marker — OSINT done
164+
#613; FMA-V3 + CPIC-V3 still to mint, incl. CPIC's Genetics-domain slot).
165+
166+
When that set is complete, **flip once, atomically, across the whole V3 set.**
167+
168+
**Why deferred, not done piecemeal (the forcing reason).** The flip is a *routing*
169+
reinterpretation of **every** classid: post-flip, `classid_concept_domain` reads
170+
the **HIGH** u16 instead of the low. So a half-flipped corpus — some entries
171+
`custom:canon`, some `canon:custom` — mis-routes by construction: the *same*
172+
`as u16 >> 8` read yields a different domain depending on which convention an
173+
entry was minted under. That is precisely the `I-LEGACY-API-FEATURE-GATED` failure
174+
mode (one accessor, two silent semantics by state), so the flip MUST be a single
175+
coordinated reorder over a **known-complete** V3 set — never trickled in per
176+
consumer. Mint all of OSINT/FMA/CPIC in the *current* convention first; flip them
177+
together last.
178+
179+
**Until the flip:** the shipped `0x1000_0700`-shaped (`custom:canon`) entries
180+
stand; `facet_mint`'s `facet_classid` (row 0) stays a **parameter** that bakes in
181+
no half-order, so brick 2 is unaffected by the deferral (it never commits to a
182+
convention). When the flip lands it is a layout reinterpretation → it carries the
183+
same version-gate + field-isolation discipline (`I-LEGACY-API-FEATURE-GATED`) that
184+
gates every reclaim in this plan.
185+
155186
## 3. Phase 2 — V3-shaped value tenants (value-side; = the harvest)
156187

157188
This is what `-v1-harvest.md` inventoried. With the address already V3:
@@ -248,17 +279,21 @@ treatment in the knowledge doc):
248279

249280
| brick | what | phase tie | status |
250281
|---|---|---|---|
251-
| **1 — slot allocation** | the 6-pair / 12-slot layout | = Phase-2's contained facet (`FacetCascade`) | **LOCKED (shipped #613/#614)**only the classid half-order (Canon:Custom, below + §2.2) stays open, orthogonal to per-tier packing |
282+
| **1 — slot allocation** | the 6-pair / 12-slot layout | = Phase-2's contained facet (`FacetCascade`) | **LOCKED (shipped #613/#614)** — the classid half-order (Canon:Custom) is **DEFERRED** (§2.3 — flipped after Phase-1 + OSINT/FMA/CPIC are all V3), orthogonal to per-tier packing |
252283
| **2 — rank-minter** | SPO graph → `(po_rank, ia_rank)` per tier → `FacetCascade` | the **producer** of Phase-2 facets | **BUILT 2026-06-26**`contract::facet_mint` (commit `360fc720`); `mint_facets(&[NodeDecl], facet_classid)`; exact + roundtrip-lossless; producer-agnostic `NodeDecl` (ruff C++ + Roslyn C# `ruff_csharp_spo`, ruff #29); 8 tests green |
253284
| **3 — MedCare probe** | `ruff_csharp_spo` harvest → mint → SoA → `typeHierarchy`/`definition`, MedCareV2 oracle | the F-gate over both phases on a real corpus | **PENDING** — the single step that promotes the arc + the 2 MB/10× headline CONJECTURE → FINDING |
254285

255-
**Canon:Custom is ONE lock shared with §2.2, not two.** The minter's `facet_classid`
256-
(row 0) is a *parameter* — it bakes in no half-order — so brick 2 is unblocked. But
257-
the classid `(part_of:is_a)` ordering is the SAME open decision §2.2 carries on the
258-
V3 classid entries: the shipped `0x1000_0700` is custom(hi):canon(lo); the
259-
operator's Canon:Custom correction flips it to canon(hi):custom(lo) so the prefix
260-
sorts by shared concept, not render skin. Resolving Canon:Custom settles BOTH the
261-
Phase-1 classid entries (§2.2) AND the minter's row-0 ordering in one decision.
286+
**Canon:Custom is ONE lock shared with §2.2/§2.3 — and it is now DEFERRED.** The
287+
minter's `facet_classid` (row 0) is a *parameter* — it bakes in no half-order — so
288+
brick 2 is unblocked regardless. The classid `(part_of:is_a)` ordering is the SAME
289+
decision §2.2 carries on the V3 classid entries: the shipped `0x1000_0700` is
290+
custom(hi):canon(lo); the operator's Canon:Custom correction flips it to
291+
canon(hi):custom(lo) so the prefix sorts by shared concept, not render skin. **Per
292+
§2.3 (operator, 2026-06-26) the flip is deferred** until Phase 1 is complete AND
293+
OSINT + FMA + CPIC are all re-encoded to V3, then done **atomically** across the
294+
whole set (a piecemeal flip mis-routes — `I-LEGACY-API-FEATURE-GATED`). Resolving it
295+
then settles BOTH the Phase-1 classid entries (§2.2) AND the minter's row-0 ordering
296+
in one move.
262297

263298
**Grade / gate.** The arc is **`[S]``[H]`** (CONJECTURE; the carrier + mechanism
264299
are shipped, the economic claim is unmeasured); gate **F-code** via the brick-3

0 commit comments

Comments
 (0)