From 3cd5fc583187a2753445af42be4ba3c77cd10b85 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 24 Jun 2026 20:10:59 +0000 Subject: [PATCH 1/2] =?UTF-8?q?fix(contract+ogar+lock):=20mirror=20OGAR=20?= =?UTF-8?q?#127=20(HR=20domain=200x0DXX)=20=E2=80=94=20closes=2011-of-11?= =?UTF-8?q?=20cross-axis=20identity=20gap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit D4 — final mirror update for the cross-axis identity arc started by odoo-rs PR #14. Closes the last 4 of the 11-class gap (HR cluster) just minted in OGAR #127. Three coordinated fixes (same shape as D2 #597 and D3 #606): 1. lance-graph-contract: extend `ogar_codebook::CODEBOOK` with the 4 new HR entries (hr_employee 0x0D01, hr_department 0x0D02, hr_job 0x0D03, hr_employment_contract 0x0D04). Add `ConceptDomain::HR` variant. Add `0x0D → HR` arm to canonical_concept_domain. Update Unassigned doc from `0x0DXX+` to `0x0EXX+`. 2. lance-graph-ogar: parity::domains_agree adds the (O::HR, C::HR) arm. Same shape as the Anatomy + Automation arms I added in D3 #606. The E-OGAR-AUTH-MIRROR-DRIFT discipline holds: every new ConceptDomain variant on the OGAR side gets a matching arm in the same commit. 3. Workspace Cargo.lock + crates/lance-graph-ogar/Cargo.lock (gitignored, bumped locally): ogar-vocab pin 5089c1e8 → 597ecb12 (post-OGAR #127). 4 refs each. Same pull-bump pattern as q2 #42 / D2 #597 / D3 #606. After this PR: - 11-of-11 cross-axis identity gaps closed - parity::domains_agree covers all 10 mapped ConceptDomain variants (Reserved, ProjectMgmt, Commerce, Osint, Ocr, Health, Anatomy, Auth, Automation, HR) + Unassigned - odoo-rs alignment_pin can tighten from "commerce-arm only" hard pin to "all 15 seeded classes have an OGAR classid" EPIPHANIES.md updated per Mandatory Board-Hygiene Rule with the milestone finding E-OGAR-11-OF-11-CLOSURE — documents the arc (3 OGAR PRs + 3 lance-graph mirror PRs) and names the two discipline epiphanies that kept it from compounding drift: E-OGAR-AUTH-MIRROR-DRIFT and E-OGAR-API-EDIT-PULL-FIRST. Source-of-finding: - AdaWorldAPI/OGAR#127 (merged) — HR domain mint - AdaWorldAPI/odoo-rs#14 — the original 11-class gap (cross-axis check) - AdaWorldAPI/OGAR#110 — AuthStore precedent (0x0BXX) for new-domain mints Co-Authored-By: Claude Opus 4.8 --- .claude/board/EPIPHANIES.md | 32 +++++++++++++++++++ Cargo.lock | 8 ++--- .../lance-graph-contract/src/ogar_codebook.rs | 17 +++++++++- crates/lance-graph-ogar/src/lib.rs | 1 + 4 files changed, 53 insertions(+), 5 deletions(-) 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..c7db8091 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. ── 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) ) } From 971cf193b6dd511e5348110400c1b027453d07c2 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 24 Jun 2026 20:31:59 +0000 Subject: [PATCH 2/2] =?UTF-8?q?fix(test):=20update=20domain=5Froutes=5Fon?= =?UTF-8?q?=5Fhigh=5Fbyte=20to=20reflect=200x0DXX=E2=86=92HR=20(was=20Unas?= =?UTF-8?q?signed);=20add=200x0EXX=E2=86=92Unassigned=20guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/lance-graph-contract/src/ogar_codebook.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/lance-graph-contract/src/ogar_codebook.rs b/crates/lance-graph-contract/src/ogar_codebook.rs index c7db8091..279e3f6f 100644 --- a/crates/lance-graph-contract/src/ogar_codebook.rs +++ b/crates/lance-graph-contract/src/ogar_codebook.rs @@ -436,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]