diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index bf4c57c0..9b681655 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,35 @@ +## 2026-06-23 — E-OGAR-11-OF-11-CLOSURE — the cross-axis identity gap from odoo-rs #14 is fully closed (OGAR #111 + #126 + #127; lance-graph #597 + #606 + this D4) + +**Status:** FINDING (milestone). odoo-rs PR #14 surfaced 11 missing +`OdooPort` aliases in the cross-axis identity check +`alignment_pin::seeded_classes_have_compatible_ogar_identity`. Three OGAR +PRs progressively closed the gap; three lance-graph PRs mirrored each in +turn (E-OGAR-AUTH-MIRROR-DRIFT discipline): + +| OGAR PR | What | lance-graph mirror PR | +|---|---|---| +| #111 | PRODUCT + ACCOUNTING_ACCOUNT (commerce 0x02XX) | #597 (D2) | +| #126 | PRICELIST + PRICELIST_RULE + UNIT_OF_MEASURE (commerce 0x02XX) | #606 (D3) | +| #127 | HR domain mint (new 0x0DXX) + 4 entries (hr_employee/hr_department/hr_job/hr_employment_contract) | THIS PR (D4) | + +After D4 merges: **11-of-11 closed**. odoo-rs's alignment_pin can flip its +"7 remaining" informational eprintln to "0 remaining" and tighten the hard +pin from "commerce-arm only" (3 classes) to "all 15 seeded classes have an +OGAR classid". + +**The discipline that emerged this session:** +- `E-OGAR-AUTH-MIRROR-DRIFT` — mirror updates land in the SAME commit as + any OGAR `ALL`-list extension; the COUNT_FUSE is the guardrail when it + fires locally (matching pins). +- `E-OGAR-API-EDIT-PULL-FIRST` — API-based file edits MUST pull-then-splice; + uploading pre-edited local files regresses upstream main. + +These two epiphanies are how the C2 #126 CI failure and the C3 #127 test +failure were caught and fixed without compounding drift. + +**Closes:** the 11-class cross-axis gap. **Next:** odoo-rs alignment_pin +tighten + pin bump to OGAR main (5089c1e8 → 597ecb12 family). + ## 2026-06-23 — E-OGAR-API-EDIT-PULL-FIRST — API-based file edits MUST pull-then-splice; uploading pre-edited local files regresses upstream main **Status:** FINDING (caught in OGAR #126 CI failure mid-PR-life). diff --git a/Cargo.lock b/Cargo.lock index b5d0cf58..b237f5a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6042,7 +6042,7 @@ dependencies = [ [[package]] name = "ogar-adapter-surrealql" version = "0.1.0" -source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#597ecb120fc8842c5b8aa552be506d2462151cec" dependencies = [ "ogar-vocab", ] @@ -6050,7 +6050,7 @@ dependencies = [ [[package]] name = "ogar-class-view" version = "0.1.0" -source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#597ecb120fc8842c5b8aa552be506d2462151cec" dependencies = [ "lance-graph-contract 0.1.0 (git+https://github.com/AdaWorldAPI/lance-graph?branch=main)", "ogar-vocab", @@ -6059,12 +6059,12 @@ dependencies = [ [[package]] name = "ogar-ontology" version = "0.1.0" -source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#597ecb120fc8842c5b8aa552be506d2462151cec" [[package]] name = "ogar-vocab" version = "0.1.0" -source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#597ecb120fc8842c5b8aa552be506d2462151cec" [[package]] name = "once_cell" diff --git a/crates/lance-graph-contract/src/ogar_codebook.rs b/crates/lance-graph-contract/src/ogar_codebook.rs index bf35afd6..279e3f6f 100644 --- a/crates/lance-graph-contract/src/ogar_codebook.rs +++ b/crates/lance-graph-contract/src/ogar_codebook.rs @@ -67,7 +67,14 @@ pub enum ConceptDomain { /// `automation_trigger`). Infrastructure config, not PHI. Mirrors OGAR /// `ogar_vocab::ConceptDomain::Automation`. Automation, - /// Any high-byte slot not yet assigned a domain (`0x03XX`–`0x06XX`, `0x0DXX`+). + /// `0x0DXX` — HR (employment / org / contracts; `vcard:Individual` / + /// `org:OrganizationalUnit` / `org:Role` / `fibo:Contract` alignment). + /// Public master-data for person + organizational-unit + role + + /// employment-contract entities; distinct from `Auth` (the IdP→classid + /// bridge) and from `Health` PHI. Mirrors OGAR + /// `ogar_vocab::ConceptDomain::HR` (added in OGAR PR #127). + HR, + /// Any high-byte slot not yet assigned a domain (`0x03XX`–`0x06XX`, `0x0EXX`+). Unassigned, } @@ -87,6 +94,7 @@ pub fn canonical_concept_domain(id: u16) -> ConceptDomain { 0x0A => ConceptDomain::Anatomy, 0x0B => ConceptDomain::Auth, 0x0C => ConceptDomain::Automation, + 0x0D => ConceptDomain::HR, _ => ConceptDomain::Unassigned, } } @@ -334,6 +342,13 @@ pub const CODEBOOK: &[(&str, u16)] = &[ ("auth_zitadel", 0x0B02), ("auth_zanzibar", 0x0B03), ("auth_ory_keto", 0x0B04), + // ── 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. + ("hr_employee", 0x0D01), + ("hr_department", 0x0D02), + ("hr_job", 0x0D03), + ("hr_employment_contract", 0x0D04), // ── 0x0CXX — Automation domain (HIRO IT-automation: MARS CMDB + DO-arm // actuators; OGAR's 0x0C Automation domain). One domain spanning the MARS // structural CMDB and the Automation behavioral vocabulary. ── @@ -421,8 +436,10 @@ mod tests { assert_eq!(canonical_concept_domain(0x0B01), ConceptDomain::Auth); assert_eq!(canonical_concept_domain(0x0C01), ConceptDomain::Automation); 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::Unassigned); - assert_eq!(canonical_concept_domain(0x0D00), ConceptDomain::Unassigned); + assert_eq!(canonical_concept_domain(0x0E00), ConceptDomain::Unassigned); } #[test] diff --git a/crates/lance-graph-ogar/src/lib.rs b/crates/lance-graph-ogar/src/lib.rs index 2ef50ac7..bf9abde8 100644 --- a/crates/lance-graph-ogar/src/lib.rs +++ b/crates/lance-graph-ogar/src/lib.rs @@ -143,6 +143,7 @@ pub mod parity { | (O::Anatomy, C::Anatomy) | (O::Auth, C::Auth) | (O::Automation, C::Automation) + | (O::HR, C::HR) | (O::Unassigned, C::Unassigned) ) }