Classid canon:custom flip TRIGGERED — migration plan v1, operator ruling recorded, q2 gate waived, osint issues resolved#627
Conversation
…an v1 + ruling recorded; q2 gate waived; osint issues RESOLVED Operator ruling 2026-07-02, four parts, all recorded: 1. OSINT low byte = APPID space domain-wise (00 = domain, 01 = q2 the consumer); zero vocabulary rows — executed OGAR PR #146 (67 -> 65, COUNT_FUSE balances with zero mirror changes). ISSUES ISS-OSINT-SYSTEM-ROOT-SLOT-VIOLATION + ISS-OGAR-OSINT-MIRROR-PENDING -> RESOLVED (statuses flipped, history preserved). 2. 0x1000 was a temporary V3 marker ('hard reminder'), not a format bit. 3. THE FLIP IS TRIGGERED: canon (domain:appid) -> HIGH u16, custom -> LOW; stored 0x0701_1000, human-readable 0x07:01::1000. New plan .claude/plans/classid-canon-custom-flip-v1.md: one flippable compose/split definition (E-CLASSID-SPLIT-ORDER-IS-A-FLIP), flip(flip(x))==x probed, mint-forward with an I-LEGACY version boundary (legacy classids never blanket-reinterpreted), phases P0 route-through -> P1 flip+coexist -> P2 OGAR#95 app-prefix reconciliation (operator checkpoint) -> P3 q2 re-mints (dissolves ISS-Q2-CPIC-MIRROR, resolution RULED as contract-pull) -> P4 marker retirement (operator checkpoint). Executes soa-value-tenant-migration-v2 §2.3; supersedes-by-trigger E-CLASSID-HUMANREADABLE-REORDER-DEFERRED. 4. q2 push gate WAIVED — D-VCW-3/D-VCW-5 unblocked (STATUS_BOARD). Board (same commit): EPIPHANIES E-CLASSID-CANON-HIGH-TRIGGERED, INTEGRATION_PLANS prepend, STATUS_BOARD D-CCF rows + D-VCW updates, ISSUES status flips. Co-Authored-By: Claude <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 12 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (7)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1230fd8302
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| | `contract::canonical_node` `CLASSID_OSINT_V3` | `0x1000_0700` | **`0x0701_1000`** (OSINT:q2 — note the appid normalization: the q2 class is `:01`, not the domain root) | | ||
| | `CLASSID_FMA_V3` | `0x1000_0A01` | `0x0A01_1000` (Anatomy:q2 — already `:01`, confirmed by the ruling) | | ||
| | `CLASSID_CPIC_V3` | `0x1000_0E00` | `0x0E01_1000` (Genetics:q2 — normalized `:00`→`:01` per "same for cpic also under q2") | |
There was a problem hiding this comment.
Add a class_id migration before flipping the low half
When P1 mints these post-flip IDs, the low 16 bits of all three classes become 0x1000. Existing class selection still uses a u16 discriminator (crates/lance-graph-contract/src/class_view.rs:47-53, MailboxSoaView::class_id) and the current V3 probes stamp (NodeGuid::CLASSID_*_V3 as u16) into ValueTenant::EntityType (canonical_node.rs:2371-2497); if the plan is implemented without migrating that slot to the canonical half via split_classid or otherwise widening/versioning it, OSINT/FMA/CPIC rows will all expose the same class_id and class-based scans/rendering cannot distinguish them.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Load-bearing catch — amended in 7a796d5. The §2 site inventory now carries the EntityType/class_id discriminator row explicitly: post-flip it MUST route through split_classid(id).canon (a naive as u16 yields the custom half 0x1000 for all classes — total class collapse). §3 gains the no-class-collapse probe (three post-flip classids ⇒ three distinct canon discriminators) plus a P0 grep gate making as u16 on a classid a forbidden pattern.
Generated by Claude Code
| | **P0** | Land `compose/split/CLASSID_CANON_HIGH=false` + route every §2 lance-graph site through it. ZERO behavior change (probed: all 763+ tests identical). | contract suite green, probes green | | ||
| | **P1** | Flip `CLASSID_CANON_HIGH=true` + mint the three new-form classids (`0x0701_1000`/`0x0A01_1000`/`0x0E01_1000`) into the registry ALONGSIDE the old forms (coexistence). | round-trip + boundary matrix + `flip(flip)` green | | ||
| | **P2** | Reconcile the OGAR#95 hi-u16 app-prefix mirror with the new order (operator checkpoint — see §2 row); OGAR emits new-form vocab. | operator nod on the #95 reconciliation | | ||
| | **P3** | q2 re-mints (osint-bake → `0x0701_1000`; cpic → `0x0E01_1000` via contract pull, dissolving `ISS-Q2-CPIC-MIRROR…`); old-form registry keys retire. | q2 bakes green; fuse green | |
There was a problem hiding this comment.
Keep legacy read-mode aliases until all data is migrated
This phase retires old-form registry keys immediately after q2 re-mints, but any persisted pre-flip V3 rows such as 0x1000_0700 still resolve through the concrete BUILTIN_READ_MODES map; once that alias is removed, classid_read_mode falls through to ReadMode::DEFAULT (canonical_node.rs:1176-1185) and reads the row as the wrong tail/schema. Since the plan also says the migration is mint-forward with no blanket reinterpretation, the old aliases need to remain as read-only legacy entries until there is proof that no stored old-form rows remain.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Also correct — amended in 7a796d5. P3 no longer retires old-form registry keys: under mint-forward semantics, persisted pre-flip rows (0x1000_0700 etc.) resolve through the concrete BUILTIN_READ_MODES map forever until re-baked, so removal would drop them to ReadMode::DEFAULT (wrong tail/schema). Old keys now DEMOTE to documented read-only legacy aliases; retirement becomes a separate later step gated on a corpus proof that zero stored old-form rows remain — RESERVE-DON'T-RECLAIM applied to registry keys.
Generated by Claude Code
… split_classid; legacy registry aliases demote, never retire blind Both #627 codex findings are load-bearing plan corrections: 1. Class-collapse guard (line-76 finding): post-flip, 'classid as u16' yields the CUSTOM half (0x1000) for ALL classes — the SoA class_id / EntityType discriminator would collapse to one value. The stamp MUST route through split_classid(id).canon; 'as u16' on a classid becomes a forbidden pattern with a P0 grep gate + a no-class-collapse probe (three post-flip classids => three distinct canon discriminators). 2. Legacy-alias demotion (line-110 finding): P3 no longer retires old-form registry keys — mint-forward means persisted pre-flip rows (0x1000_0700 etc.) resolve through the concrete registry forever until re-baked; removing the alias would drop them to ReadMode::DEFAULT (wrong tail/schema). Old keys DEMOTE to documented read-only legacy aliases; retirement is a separate step gated on a corpus proof of zero stored old-form rows (RESERVE-DON'T-RECLAIM applied to registry keys). Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
… vocabulary rows) OGAR #146 executed the operator ruling: both #145 OSINT mints removed (low byte is APPID space domain-wise), ALL back to 65 == the mirror's 65 — the COUNT_FUSE balances with zero mirror-side changes. This branch's earlier +2-rows + zero-slot carve-out commits were dropped during the rebase onto main (#626/#627) as superseded by that ruling. Verified: contract ogar_codebook 8/8 + lance-graph-ogar standalone green against a0c7936 (compile-time COUNT_FUSE holds).
Co-Authored-By: Claude <noreply@anthropic.com>
…om LOW) The P1 flip of classid-canon-custom-flip-v1 (operator trigger 2026-07-02): - CLASSID_ORDER = CanonHigh; stored classids now carry canon (domain:appid) in the HIGH u16, custom (marker/render prefix) in the LOW u16. - New mint surface: CLASSID_OSINT 0x0700_0000, CLASSID_FMA 0x0A01_0000, CLASSID_PROJECT 0x0100_0000, CLASSID_ERP 0x0200_0000; V3 classes 0x0701_1000 / 0x0A01_1000 / 0x0E01_1000 (OSINT + CPIC appid normalized to :01 = q2 per the ruling). - Mint-forward boundary: every pre-flip stored form registered as a CLASSID_*_LEGACY read-only alias in BUILTIN_READ_MODES — persisted rows resolve until re-baked; retirement gated on corpus proof (codex P2 #627). - hhtl::from_guid_prefix (v1 fold) accepts pure-canon classids in BOTH stored forms and folds them to the identical path; marked classids (both halves nonzero) still refuse. - OGAR#95 reconciliation (plan P2): the app prefix IS the custom half — render_classid composes concept HIGH / prefix LOW (patient@Healthcare = 0x0901_0005); the #95 table becomes the custom-half render catalogue. - Board: EPIPHANIES E-CLASSID-FLIP-P1-LANDED, STATUS_BOARD D-CCF rows, AGENT_LOG fleet-inventory entry (same commit per board-hygiene rule). Gates: contract 773 (guid-v3-tail) / 759 (default) + doctests; clippy -D warnings; dependents green (callcenter, cognitive-shader-driver, planner). Co-Authored-By: Claude <noreply@anthropic.com>
#628) LATEST_STATE guard line now cites classid_canon(id) (split_classid returns a tuple; .canon is not a field). PR_ARC #627 entry gets an appended dated correction line naming ClassidOrder::CanonHigh + classid_canon(id) (append-only honored — original lines untouched). Co-Authored-By: Claude <noreply@anthropic.com>
The operator ruling (2026-07-02) — documented per instruction
Doc-only PR (plan + board; the implementation lands in follow-up PRs per the plan's phases).
What it records
soa-value-tenant-migration-v2§2.3 "atomic Canon:Custom half-order flip" is now ACTIVE as.claude/plans/classid-canon-custom-flip-v1.md: canon (domain:appid) moves to the classid's high u16, custom (the temporary0x1000marker, later the 64k dynamic-classview/render space) to the low. Stored0x0701_1000, human-readable0x07:01::1000. Mechanism: ONE flippablecompose_classid/split_classid/CLASSID_CANON_HIGH(perE-CLASSID-SPLIT-ORDER-IS-A-FLIP),flip(flip(x)) == xprobed, mint-forward with an I-LEGACY version boundary — legacy classids are never blanket-reinterpreted. Phases: P0 route-through (zero behavior) → P1 flip+coexist → P2 OGAR#95 hi-u16 app-prefix reconciliation (operator checkpoint) → P3 q2 re-mints → P40x1000retirement (operator checkpoint).00= the domain itself,01= q2 the consumer); zero vocabulary rows. Executed in OGAR PR OSINT pipeline: spider → ReaderLM-v2 → think → learn (WIP) #146 (codebook 67 → 65 — theCOUNT_FUSEbalances with zero mirror changes).ISS-OSINT-SYSTEM-ROOT-SLOT-VIOLATION+ISS-OGAR-OSINT-MIRROR-PENDING→ RESOLVED (statuses flipped, option history preserved per the append-only ledger).ISS-Q2-CPIC-MIRROR-DIVERGESsettles as contract-pull re-mint into Genetics:q2 (0x0E01_1000post-flip), queued as flip P3.Board hygiene (same commit)
EPIPHANIES
E-CLASSID-CANON-HIGH-TRIGGERED; INTEGRATION_PLANS prepend; STATUS_BOARDD-CCF-0..4rows + D-VCW gate updates; ISSUES status flips ×4. Also carries the PR #626 post-merge hygiene commit (LATEST_STATE row + PR_ARC entry).🤖 Generated with Claude Code
https://claude.ai/code/session_01MLBnPuScZy6w9di2QEjsXM
Generated by Claude Code