Skip to content

Commit d4deefb

Browse files
authored
Merge pull request #612 from AdaWorldAPI/claude/v2-doc-classid-fix
docs(plan): correct §2.2 classid gen-marker to high-u16 (post-#611 follow-up)
2 parents 612f5c3 + 6f0cdf7 commit d4deefb

2 files changed

Lines changed: 28 additions & 22 deletions

File tree

.claude/board/INTEGRATION_PLANS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## 2026-06-25 — soa-value-tenant-migration v2 SEQUENCING (operator-locked; identity→V3, then V3-tenants)
22

3-
Plan: `.claude/plans/soa-value-tenant-migration-v2.md`. **Operator-locked ordering** for the migration the v1 BRIEF opened + the v1-HARVEST inventoried: **ONE migration, TWO ordered phases — Phase 1 identity→V3 (key-side), Phase 2 V3-shaped value tenants (value-side).** Identity-first is **forced, not chosen**: OGAR #128's envelope parser resolves `tail_variant` (key shape) UPSTREAM of `value_schema` (tenant shape), so the tenants cannot be shaped to a V3 geometry the key does not yet express (the key is the coordinate system; tenants are read *through* it; the Phase-2 `helix-place‖CAM-PQ` facet is a *reflection* of the V3 part_of/is_a key). **Phase 1** = OGAR-registry + envelope-parser wiring: `0x1007` leading-`1` prefix → V3 `tail_variant`, **coexist-by-classid** (legacy zero-prefix stays V2 via `new_v2`/`guid-v2-tail`; RESERVE-DON'T-RECLAIM ⇒ zero V2-corpus re-mint, layout-preserving), grade `[H]` gate **F-update**. **Phase 2** = the harvest (contained facet + 8 KEEP + 2 DEFER, F-1/F-code; the §5 body still gated on the two 5+3 panels). **Payoffs:** identity-first migrates the one shared `entity_type≡class_id` anchor to V3 *before* the A↔B reconciliation (Phase 2 reconciles in V3 coords, no redo), and dissolves the harvest's scope question (harvest = the Phase-2 input). **Watch:** Phase 1's substance IS the OGAR casing-miss gap (harvest §6.1) — the corrective `/home/user/{OGAR,MedCare-rs}` sweep gates Phase-1 start, not optional polish. Doc-only. On `claude/serene-mayer-1a09he` (rides with the harvest to main).
3+
Plan: `.claude/plans/soa-value-tenant-migration-v2.md`. **Operator-locked ordering** for the migration the v1 BRIEF opened + the v1-HARVEST inventoried: **ONE migration, TWO ordered phases — Phase 1 identity→V3 (key-side), Phase 2 V3-shaped value tenants (value-side).** Identity-first is **forced, not chosen**: OGAR #128's envelope parser resolves `tail_variant` (key shape) UPSTREAM of `value_schema` (tenant shape), so the tenants cannot be shaped to a V3 geometry the key does not yet express (the key is the coordinate system; tenants are read *through* it; the Phase-2 `helix-place‖CAM-PQ` facet is a *reflection* of the V3 part_of/is_a key). **Phase 1** = OGAR-registry + envelope-parser wiring: a leading-`1` generation marker in the HIGH (custom) u16 → V3 `tail_variant`, canon `0xDDCC` low-u16 preserved (OSINT `0x0000_0700 → 0x1000_0700`; the earlier `0x1007` low-half form is **rejected** — it corrupts the domain byte, Codex-P1), **coexist-by-classid** (legacy zero-prefix classids keep their current tail — **V1** default or **V2** `new_v2`/`guid-v2-tail`-minted; RESERVE-DON'T-RECLAIM ⇒ zero V1/V2-corpus re-mint, layout-preserving), grade `[H]` gate **F-update**. **Phase 2** = the harvest (contained facet + 8 KEEP + 2 DEFER, F-1/F-code; the §5 body still gated on the two 5+3 panels). **Payoffs:** identity-first migrates the one shared `entity_type≡class_id` anchor to V3 *before* the A↔B reconciliation (Phase 2 reconciles in V3 coords, no redo), and dissolves the harvest's scope question (harvest = the Phase-2 input). **Watch:** Phase 1's substance IS the OGAR casing-miss gap (harvest §6.1) — the corrective `/home/user/{OGAR,MedCare-rs}` sweep gates Phase-1 start, not optional polish. Doc-only. On `claude/serene-mayer-1a09he` (rides with the harvest to main).
44

55
## 2026-06-25 — soa-value-tenant-migration-v1 HARVEST (Phase-1 deliverable; supersedes the BRIEF's §5/§8.1 framing)
66

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

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ The harvest correctly **bracketed this key-side** ("a SEPARATE, zero-dep SoA …
4040
NOT wired into `NodeRow.value`", harvest §4) — so it is *not* covered by the
4141
value-tenant inventory; it is the prerequisite that inventory assumes.
4242

43-
- **New-gen classids carry the `0x1007` leading-`1` prefix** → route through the
44-
**V3 `tail_variant`** in the OGAR registry; the HHTL tiers read as the
45-
`(part_of:is_a)` 8:8 tile (`perturbation-sim/src/cascade_key.rs`
43+
- **New-gen classids carry a leading-`1` generation marker in the HIGH (custom)
44+
u16, preserving the canon low u16** (e.g. OSINT `0x0000_0700 → 0x1000_0700`; see
45+
§2.2) → route through the **V3 `tail_variant`** in the OGAR registry; the HHTL
46+
tiers read as the `(part_of:is_a)` 8:8 tile (`perturbation-sim/src/cascade_key.rs`
4647
`CascadeKeyV3`, already coded + tested: `v3_two_hierarchies_are_independent`).
4748
- **Coexist-by-classid, NOT rewrite.** Legacy zero-prefix classids keep their
4849
current `tail_variant`**V1** (the default `family·identity` tail) or **V2**
@@ -69,11 +70,14 @@ identical schema." `ReadMode` (:815) already carries the value reading; identity
6970
is a **third field on the same struct**, resolved by the same lookup — mirroring
7071
OGAR #128's `classid → {tail_variant, value_schema, edge_codec}`:
7172

73+
**Target struct** — the live `ReadMode` (`canonical_node.rs:815`) carries only
74+
`value_schema` + `edge_codec`; **P-A (PR #613) adds the `tail_variant` field**:
75+
7276
```rust
7377
pub struct ReadMode {
74-
pub tail_variant: TailVariant, // P-A adds — which KEY shape (resolved first, per #128's parse order)
75-
pub value_schema: ValueSchema, // Phase 2 — which tenants (already shipped)
76-
pub edge_codec: EdgeCodecFlavor, // edges (already shipped)
78+
pub tail_variant: TailVariant, // P-A (#613) ADDS — which KEY shape (resolved first, per #128's parse order)
79+
pub value_schema: ValueSchema, // existing — which tenants
80+
pub edge_codec: EdgeCodecFlavor, // existing — edges
7781
}
7882
```
7983

@@ -108,7 +112,7 @@ is the *layer-not-column* anti-pattern and will not serve Phase 2. Reject it.
108112
`ReadMode` + the `TailVariant` enum + the `mint_for` carrier + the
109113
`guid-v3-tail` gate are additive / default-V1 / feature-gated → they land
110114
**now**, non-breaking. Only the per-consumer `classid → tail_variant: V3`
111-
**entries** (the `0x1007` placement) need the P-C operator-lock.
115+
**entries** (the high-u16 gen-marker placement, §2.2) need the P-C operator-lock.
112116

113117
**Parity fuse — structural-against-canon, NOT runtime-vs-struct.** OGAR #128
114118
(`E-CLASSID-ENVELOPE-PARSER` / `D-ENVPARSE`, merged, **doc-only**) pins the target
@@ -125,21 +129,23 @@ registry's `tail_variant`.
125129

126130
### 2.2 P-C classid lock (operator-ratified 2026-06-25)
127131

128-
**Generation marker = flip the leading nibble `0 → 1`** on the *current* classid
129-
(#128's "exact u32 placement" pinned to the high nibble; versioning in the
130-
schema-pointer, never a GUID-tail nibble). OGAR's canonical `0xDDCC` domain map
131-
(`ogar-vocab/src/lib.rs:1062-1086`) is **kept as-is**. The three V3 consumers:
132+
The classid u32 is **`[ custom (hi u16) : canon (lo u16) ]`**`classid_concept_domain`
133+
routes on the **low** u16 (the OGAR `0xDDCC` codebook; `canonical_node.rs:43`,
134+
`ogar_codebook.rs:103`). So the **generation marker goes in the HIGH (custom) u16,
135+
leaving the canon low u16 untouched** — "replace the first `0` with `1`" on the
136+
*full* u32: `0x0000_0700 → 0x1000_0700`. (Codex-P1 correction: a low-half form like
137+
the earlier `0x1007` overwrites the domain byte — `0x1007 as u16 >> 8 = 0x10`
138+
Unassigned — so it is **rejected**.) The live `0xDDCC` consts are kept as-is.
132139

133-
| consumer | base classid | V3 (gen-marked) | OGAR domain | note |
140+
| consumer | live classid | V3 (hi-u16 marker) | domain route (`as u16`) | status |
134141
|---|---|---|---|---|
135-
| OSINT | `0x0007` | **`0x1007`** | `0x07` OSINT | canon ✓, kept as-is |
136-
| FMA | `0x0008` | **`0x1008`** | `0x08` OCR | **kept as-is** (jungle-avoidant). Canon home is `0x0A` Anatomy — firewall-split from `0x09` Health PHI (lib.rs:1078-1086) — so the realign to `0x100A` is **deferred domain-debt**; flip this one row if/when realigned. |
137-
| CPIC | `0x000C → 0x000D` | **`0x100D`** | `0x0D` Genetics (new) | the **one forced move**: `0x0C` is Automation (HIRO/MARS), so CPIC's current `0x0C` collides — Genetics mints into the next free slot, then gen-marks. |
142+
| OSINT | `0x0000_0700` | **`0x1000_0700`** | `0x0700` → Osint ✓ | **wired (#613)** — test asserts the route |
143+
| FMA | `0x0000_0A01` | **`0x1000_0A01`** | `0x0A01`Anatomy | deferred ("rest later") |
144+
| CPIC/Genetics | `0x000C_…` | **`0x1000_0?00`** | `0x0?00`Genetics | **domain TBD**`0x0D` is **HR** in the contract (`ogar_codebook.rs:97`); Genetics needs a free slot (`0x03–0x06` or `0x0E`). Deferred. |
138145

139-
`ReadMode::DEFAULT.tail_variant = V1` (L1) keeps every other classid legacy; these
140-
are the only `BUILTIN_READ_MODES` V3 entries, each `guid-v3-tail`-gated. The
141-
Genetics-domain mint (OGAR + contract) and CPIC's `0x0C → 0x0D` move ride with the
142-
P-A mechanism, not this doc.
146+
`ReadMode::DEFAULT.tail_variant = V1` (L1) keeps every other classid legacy; the V3
147+
entries are `guid-v3-tail`-gated. OSINT-V3 is wired in P-A (#613); FMA-V3 + the
148+
Genetics-domain mint + CPIC's move follow.
143149

144150
## 3. Phase 2 — V3-shaped value tenants (value-side; = the harvest)
145151

@@ -170,7 +176,7 @@ This is what `-v1-harvest.md` inventoried. With the address already V3:
170176
## 5. The watch — Phase 1's substance IS the OGAR gap
171177

172178
Phase 1 leans almost entirely on OGAR (the registry, the envelope parser, the
173-
`0x1007` mint path). The harvest's OGAR sweep was the **casing-miss gap**
179+
high-u16 `0x1000_xxxx` gen-marker mint path, §2.2). The harvest's OGAR sweep was the **casing-miss gap**
174180
(harvest §6.1 — the cross-repo agent searched `/home/user/ogar`; the clone is
175181
`/home/user/OGAR`, and `/home/user/MedCare-rs` likewise). So the corrective
176182
`/home/user/{OGAR,MedCare-rs}` sweep is **not optional polish deferred to
@@ -183,7 +189,7 @@ the V3 `tail_variant` without reading that producer side.
183189

184190
| Phase | Object | Side | Mechanism | Grade | Gate | Prereq |
185191
|---|---|---|---|---|---|---|
186-
| **1** | identity → V3 | key | OGAR registry + envelope parser; `0x1007` prefix → V3 `tail_variant`; coexist-by-classid | `[H]` | F-update | OGAR/MedCare-rs corrective sweep |
192+
| **1** | identity → V3 | key | OGAR registry + envelope parser; high-u16 `0x1000_xxxx` gen-marker → V3 `tail_variant`; coexist-by-classid | `[H]` | F-update | OGAR/MedCare-rs corrective sweep |
187193
| **2** | V3-shaped tenants | value | ClassView reading: contained facet + 8 KEEP + 2 DEFER | `[H]`/`[S]` | F-1 + F-code | Phase 1 **+** 5+3 panels |
188194

189195
## Cross-references

0 commit comments

Comments
 (0)