Skip to content

Classid canon:custom flip TRIGGERED — migration plan v1, operator ruling recorded, q2 gate waived, osint issues resolved#627

Merged
AdaWorldAPI merged 3 commits into
mainfrom
claude/v3-substrate-migration-review-o0yoxv
Jul 2, 2026
Merged

Classid canon:custom flip TRIGGERED — migration plan v1, operator ruling recorded, q2 gate waived, osint issues resolved#627
AdaWorldAPI merged 3 commits into
mainfrom
claude/v3-substrate-migration-review-o0yoxv

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

The operator ruling (2026-07-02) — documented per instruction

"0x0701_1000 — or for mentally understanding, the domain appid; and 1000 was just a temporary V3 substrate marker as a hard reminder for V3 substrate migration — 0x07:01::1000. So yes, now is the right time for the migration. Document it accordingly using .claude/board and /plans."

Doc-only PR (plan + board; the implementation lands in follow-up PRs per the plan's phases).

What it records

  1. The flip is TRIGGERED — the 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 temporary 0x1000 marker, later the 64k dynamic-classview/render space) to the low. Stored 0x0701_1000, human-readable 0x07:01::1000. Mechanism: ONE flippable compose_classid/split_classid/CLASSID_CANON_HIGH (per E-CLASSID-SPLIT-ORDER-IS-A-FLIP), flip(flip(x)) == x probed, 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 → P4 0x1000 retirement (operator checkpoint).
  2. OSINT semantics — low byte = APPID space applied domain-wise (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 — the COUNT_FUSE balances with zero mirror changes). ISS-OSINT-SYSTEM-ROOT-SLOT-VIOLATION + ISS-OGAR-OSINT-MIRROR-PENDINGRESOLVED (statuses flipped, option history preserved per the append-only ledger).
  3. CPIC resolution ruledISS-Q2-CPIC-MIRROR-DIVERGES settles as contract-pull re-mint into Genetics:q2 (0x0E01_1000 post-flip), queued as flip P3.
  4. q2 push gate WAIVED ("temporary precaution … you can unarm that") — D-VCW-3 (P7 render probe) + D-VCW-5 (cascade3 nibble falsifier) unblocked.

Board hygiene (same commit)

EPIPHANIES E-CLASSID-CANON-HIGH-TRIGGERED; INTEGRATION_PLANS prepend; STATUS_BOARD D-CCF-0..4 rows + 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

claude added 2 commits July 2, 2026 04:26
PR #626 merged 2026-07-02 (merge 5aaee33). PR_ARC_INVENTORY prepend with
Added/Locked/Deferred/Docs/Confidence; LATEST_STATE Recently-Shipped row.
Branch restarted from origin/main per the merged-PR rule.

Co-Authored-By: Claude <noreply@anthropic.com>
…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>
@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@AdaWorldAPI, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 12 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 27b10e20-3c08-474e-a370-cb113ce0c2f9

📥 Commits

Reviewing files that changed from the base of the PR and between 5aaee33 and 7a796d5.

📒 Files selected for processing (7)
  • .claude/board/EPIPHANIES.md
  • .claude/board/INTEGRATION_PLANS.md
  • .claude/board/ISSUES.md
  • .claude/board/LATEST_STATE.md
  • .claude/board/PR_ARC_INVENTORY.md
  • .claude/board/STATUS_BOARD.md
  • .claude/plans/classid-canon-custom-flip-v1.md

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +74 to +76
| `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") |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
@AdaWorldAPI AdaWorldAPI merged commit c8e1ec4 into main Jul 2, 2026
1 check passed
AdaWorldAPI pushed a commit that referenced this pull request Jul 2, 2026
Co-Authored-By: Claude <noreply@anthropic.com>
AdaWorldAPI pushed a commit that referenced this pull request Jul 2, 2026
… 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).
AdaWorldAPI pushed a commit that referenced this pull request Jul 2, 2026
Co-Authored-By: Claude <noreply@anthropic.com>
AdaWorldAPI pushed a commit that referenced this pull request Jul 2, 2026
…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>
AdaWorldAPI pushed a commit that referenced this pull request Jul 2, 2026
#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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants