From 678f83428c28a9b2cab7a72f27dbefd05817266c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 8 Oct 2026 20:00:02 +0000 Subject: [PATCH 1/2] contract: Mail mirror row is email (OGIT ogit:Email) Follow-up to #1417: OGAR replaces the invented mailbox / mail_message with one concept, email (0x0501), read from OGIT ogit:Email. The mirror follows so MirrorDrift stays clean for a plug of 0x0501. lance-graph-ogar parity is green against the OGAR branch. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg --- crates/lance-graph-contract/src/ogar_codebook.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/lance-graph-contract/src/ogar_codebook.rs b/crates/lance-graph-contract/src/ogar_codebook.rs index 2094926f3..44cd29fec 100644 --- a/crates/lance-graph-contract/src/ogar_codebook.rs +++ b/crates/lance-graph-contract/src/ogar_codebook.rs @@ -54,7 +54,7 @@ pub enum ConceptDomain { Ontology, /// `0x04XX` — Weather / Atmosphere. Shared forecast and atmospheric cells. Weather, - /// `0x05XX` — Mail (mailbox + message). Mirrors + /// `0x05XX` — Mail (OGIT `ogit:Email`). Mirrors /// `ogar_vocab::ConceptDomain::Mail`. Mail, /// `0x07XX` — OSINT (open-source intelligence / Palantir-Gotham). @@ -635,9 +635,8 @@ pub const CODEBOOK: &[(&str, u16)] = &[ // remain ClassView-owned payload structure, not promoted concept rows. ("weather_cell", 0x0401), ("weather_static_cell", 0x0402), - // ── 0x05XX — Mail domain (mailbox + message; spear / stalwart) ── - ("mailbox", 0x0501), - ("mail_message", 0x0502), + // ── 0x05XX — Mail domain (OGIT `ogit:Email`; spear) ── + ("email", 0x0501), // ── 0x08XX — OCR domain (document extraction; the Tesseract-rs arc) ── // Class-level container KINDS only (the 5+3-hardened mint discipline): // the concept slots name the container types the OGAR Core resolves — @@ -960,8 +959,7 @@ mod tests { assert_eq!(canonical_concept_id("currency_policy"), Some(0x0206)); assert_eq!(canonical_concept_id("weather_cell"), Some(0x0401)); assert_eq!(canonical_concept_id("weather_static_cell"), Some(0x0402)); - assert_eq!(canonical_concept_id("mailbox"), Some(0x0501)); - assert_eq!(canonical_concept_id("mail_message"), Some(0x0502)); + assert_eq!(canonical_concept_id("email"), Some(0x0501)); assert_eq!(canonical_concept_id("unicharset"), Some(0x0801)); assert_eq!(canonical_concept_id("charset"), Some(0x0803)); assert_eq!(canonical_concept_id("patient"), Some(0x0901)); From c7588ec3a07e4dffeb10330162a56c99d0647f5c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 8 Oct 2026 20:05:14 +0000 Subject: [PATCH 2/2] contract: email lives in the IAM domain (0x0B05); no Mail domain OGAR puts email (OGIT ogit:Email) in 0x0BXX above the AuthStore profiles. The mirror follows: ConceptDomain::Mail and its 0x05 route are removed (added in #1417, consumed by nothing), and the row is email = 0x0B05. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg --- crates/lance-graph-contract/src/ogar_codebook.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/crates/lance-graph-contract/src/ogar_codebook.rs b/crates/lance-graph-contract/src/ogar_codebook.rs index 44cd29fec..cd15f062d 100644 --- a/crates/lance-graph-contract/src/ogar_codebook.rs +++ b/crates/lance-graph-contract/src/ogar_codebook.rs @@ -54,9 +54,6 @@ pub enum ConceptDomain { Ontology, /// `0x04XX` — Weather / Atmosphere. Shared forecast and atmospheric cells. Weather, - /// `0x05XX` — Mail (OGIT `ogit:Email`). Mirrors - /// `ogar_vocab::ConceptDomain::Mail`. - Mail, /// `0x07XX` — OSINT (open-source intelligence / Palantir-Gotham). Osint, /// `0x08XX` — OCR (optical character recognition / document extraction). @@ -126,7 +123,7 @@ pub enum ConceptDomain { /// lifted program references. Mirrors `ogar_vocab::ConceptDomain::Mmio` /// (OGAR PR #284, 2026-08-25). Mmio, - /// Any high-byte slot not yet assigned a domain (`0x06XX`, + /// Any high-byte slot not yet assigned a domain (`0x05XX`–`0x06XX`, /// `0x10XX`–`0x16XX`, `0x18XX`–`0xBFXX`, `0xC2XX`–`0xC3XX` — a /// DELIBERATE gap, pinned like OGAR's own `0x10`–`0x16` — and /// `0x90XX` — reference (domain reference tree). HIGH byte = compartment, LOW @@ -190,7 +187,6 @@ pub fn canonical_concept_domain(id: u16) -> ConceptDomain { 0x98 => ConceptDomain::Procedure, 0x9A => ConceptDomain::Form, 0x04 => ConceptDomain::Weather, - 0x05 => ConceptDomain::Mail, 0x07 => ConceptDomain::Osint, 0x08 => ConceptDomain::Ocr, 0x09 => ConceptDomain::Health, @@ -635,8 +631,6 @@ pub const CODEBOOK: &[(&str, u16)] = &[ // remain ClassView-owned payload structure, not promoted concept rows. ("weather_cell", 0x0401), ("weather_static_cell", 0x0402), - // ── 0x05XX — Mail domain (OGIT `ogit:Email`; spear) ── - ("email", 0x0501), // ── 0x08XX — OCR domain (document extraction; the Tesseract-rs arc) ── // Class-level container KINDS only (the 5+3-hardened mint discipline): // the concept slots name the container types the OGAR Core resolves — @@ -702,6 +696,9 @@ pub const CODEBOOK: &[(&str, u16)] = &[ ("auth_zitadel", 0x0B02), ("auth_zanzibar", 0x0B03), ("auth_ory_keto", 0x0B04), + // `email` (OGIT `ogit:Email`) in the IAM domain above the AuthStore + // profiles; spear plugs it. + ("email", 0x0B05), // ── 0x0DXX — HR domain (employment / org / contracts; OGAR PR #127) ── // Closes the final 4-of-11 cross-axis identity gap surfaced by odoo-rs // PR #14: hr.employee / hr.department / hr.job / hr.contract. @@ -876,8 +873,7 @@ mod tests { assert_eq!(canonical_concept_domain(0x0C09), ConceptDomain::Automation); assert_eq!(canonical_concept_domain(0x0D01), ConceptDomain::HR); assert_eq!(canonical_concept_domain(0x0D04), ConceptDomain::HR); - assert_eq!(canonical_concept_domain(0x0500), ConceptDomain::Mail); - assert_eq!(canonical_concept_domain(0x0600), ConceptDomain::Unassigned); + assert_eq!(canonical_concept_domain(0x0500), ConceptDomain::Unassigned); assert_eq!(canonical_concept_domain(0x0E00), ConceptDomain::Genetics); assert_eq!(canonical_concept_domain(0x0F00), ConceptDomain::Geo); assert_eq!(canonical_concept_domain(0x0300), ConceptDomain::Ontology); @@ -959,7 +955,7 @@ mod tests { assert_eq!(canonical_concept_id("currency_policy"), Some(0x0206)); assert_eq!(canonical_concept_id("weather_cell"), Some(0x0401)); assert_eq!(canonical_concept_id("weather_static_cell"), Some(0x0402)); - assert_eq!(canonical_concept_id("email"), Some(0x0501)); + assert_eq!(canonical_concept_id("email"), Some(0x0B05)); assert_eq!(canonical_concept_id("unicharset"), Some(0x0801)); assert_eq!(canonical_concept_id("charset"), Some(0x0803)); assert_eq!(canonical_concept_id("patient"), Some(0x0901));