From 2e89c2e6fbefcabce13a6ac56a07a9fc7fd6bec7 Mon Sep 17 00:00:00 2001 From: AdaWorldAPI Date: Wed, 24 Jun 2026 22:12:03 +0200 Subject: [PATCH 1/4] =?UTF-8?q?deps(od-ontology):=20bump=20ogar-vocab=20pi?= =?UTF-8?q?n=20ac4b416=20=E2=86=92=20597ecb1=20(post-OGAR=20#127=20HR=20do?= =?UTF-8?q?main=20mint)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/od-ontology/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/od-ontology/Cargo.toml b/crates/od-ontology/Cargo.toml index 07ac865..52f6e45 100644 --- a/crates/od-ontology/Cargo.toml +++ b/crates/od-ontology/Cargo.toml @@ -34,8 +34,8 @@ serde_json = "1" # COMMENT. The bump crosses #95 (medcare, additive) + #96 (convergence-pin # test) + #97 + #98 (reverse map); OdooPort + the 9 ODOO_ALIASES are # byte-identical across the whole range (re-verified). -ogar-vocab = { git = "https://github.com/AdaWorldAPI/OGAR", rev = "ac4b4162bb6ba8d590be3b2b37a07a44f7135d6c", optional = true } -ogar-adapter-surrealql = { git = "https://github.com/AdaWorldAPI/OGAR", rev = "ac4b4162bb6ba8d590be3b2b37a07a44f7135d6c", optional = true } +ogar-vocab = { git = "https://github.com/AdaWorldAPI/OGAR", rev = "597ecb120fc8842c5b8aa552be506d2462151cec", optional = true } +ogar-adapter-surrealql = { git = "https://github.com/AdaWorldAPI/OGAR", rev = "597ecb120fc8842c5b8aa552be506d2462151cec", optional = true } [features] # Opt-in CLI (mirrors openproject-nexgen-rs#31's `--features cli` discipline). From 4834333f4c8e5c50b67084cee4c08f846d449d52 Mon Sep 17 00:00:00 2001 From: AdaWorldAPI Date: Wed, 24 Jun 2026 22:12:35 +0200 Subject: [PATCH 2/4] =?UTF-8?q?test(alignment=5Fpin):=20tighten=20cross-ax?= =?UTF-8?q?is=20hard=20pin=20from=20commerce-arm-3=20to=20all-15-classes?= =?UTF-8?q?=20=E2=80=94=20celebrates=2011-of-11=20closure=20(OGAR=20#111+#?= =?UTF-8?q?126+#127)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/od-ontology/tests/alignment_pin.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crates/od-ontology/tests/alignment_pin.rs b/crates/od-ontology/tests/alignment_pin.rs index 647cdb0..f342772 100644 --- a/crates/od-ontology/tests/alignment_pin.rs +++ b/crates/od-ontology/tests/alignment_pin.rs @@ -451,6 +451,12 @@ fn seeded_classes_have_compatible_ogar_identity() { // classid); the difference (product / accounting / HR seed rows without an // OdooPort alias) IS the surface for a future OdooPort PR and is reported // as informational rather than asserted. + // After OGAR #111 + #126 + #127 (lance-graph #597 + #606 + #608), the + // cross-axis identity gap surfaced by this crate's PR #14 is fully + // closed: every seeded class has a canonical OGAR classid. The hard + // assertion now covers ALL 15 seeded classes (was commerce-arm 3 only + // pre-#111). Re-introducing a un-mapped class fires this test + // immediately. let mut without_classid: Vec<&str> = Vec::new(); for row in ODOO_SEED { if OdooPort::class_id(row.odoo_class).is_none() { @@ -458,6 +464,14 @@ fn seeded_classes_have_compatible_ogar_identity() { } } without_classid.sort_unstable(); + assert!( + without_classid.is_empty(), + "the cross-axis identity gap was closed by OGAR #111 + #126 + #127 — \ + re-introducing un-mapped seeded class(es) regresses the closure: {:?}", + without_classid + ); + } + without_classid.sort_unstable(); eprintln!( "informational: {} of {} seeded classes have no canonical OGAR \ classid yet (= candidates for the next OdooPort PR — product / \ From 470b9a970ea3db81998cfab54401b4f08d043284 Mon Sep 17 00:00:00 2001 From: AdaWorldAPI Date: Wed, 24 Jun 2026 22:13:28 +0200 Subject: [PATCH 3/4] fix(alignment_pin): remove leftover old eprintln + commerce_arm block after tightening --- crates/od-ontology/tests/alignment_pin.rs | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/crates/od-ontology/tests/alignment_pin.rs b/crates/od-ontology/tests/alignment_pin.rs index f342772..a814264 100644 --- a/crates/od-ontology/tests/alignment_pin.rs +++ b/crates/od-ontology/tests/alignment_pin.rs @@ -470,26 +470,5 @@ fn seeded_classes_have_compatible_ogar_identity() { re-introducing un-mapped seeded class(es) regresses the closure: {:?}", without_classid ); - } - without_classid.sort_unstable(); - eprintln!( - "informational: {} of {} seeded classes have no canonical OGAR \ - classid yet (= candidates for the next OdooPort PR — product / \ - accounting / HR basins): {:?}", - without_classid.len(), - ODOO_SEED.len(), - without_classid - ); - // HARD assertion: the commerce-arm intersection. These three are in BOTH - // surfaces today; dropping any of them from `OdooPort::aliases()` would - // break the cross-axis identity. - let commerce_arm: &[&str] = &["res.partner", "account.move", "account.move.line"]; - for cls in commerce_arm { - assert!( - OdooPort::class_id(cls).is_some(), - "commerce-arm seeded class `{cls}` has no canonical OGAR classid; \ - OdooPort and the alignment table have drifted apart" - ); - } } From a817c9f64518f58d4c5ea1e862743db255f86977 Mon Sep 17 00:00:00 2001 From: AdaWorldAPI Date: Wed, 24 Jun 2026 22:14:36 +0200 Subject: [PATCH 4/4] docs(alignment_pin): refresh test comment block to reflect 11-of-11 cross-axis closure --- crates/od-ontology/tests/alignment_pin.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/crates/od-ontology/tests/alignment_pin.rs b/crates/od-ontology/tests/alignment_pin.rs index a814264..88cddd9 100644 --- a/crates/od-ontology/tests/alignment_pin.rs +++ b/crates/od-ontology/tests/alignment_pin.rs @@ -442,15 +442,12 @@ fn seeded_classes_have_compatible_ogar_identity() { // (covers six basins: BillingCore + SMBAccounting + ProductCatalog + // SmbFoundryCustomer + SmbFoundryInvoice + HRFoundation). // - OGAR's `OdooPort` aliases = "which canonical OGAR class_id" - // (currently covers the **commerce arm** only — `0x02XX` ids: - // COMMERCIAL_DOCUMENT, COMMERCIAL_LINE_ITEM, TAX_POLICY, - // BILLING_PARTY, PAYMENT_RECORD, CURRENCY_POLICY, plus the - // cross-arm BILLABLE_WORK_ENTRY). + // (covers all six basins as of OGAR #127: commerce 0x02XX + + // HR 0x0DXX + the cross-arm BILLABLE_WORK_ENTRY bridge). // - // The intersection MUST agree (every commerce-arm seed row has an OdooPort - // classid); the difference (product / accounting / HR seed rows without an - // OdooPort alias) IS the surface for a future OdooPort PR and is reported - // as informational rather than asserted. + // After OGAR #111 + #126 + #127 the two axes are in full agreement: every + // seeded class has a canonical OGAR classid, and the hard assertion below + // checks that strictly. // After OGAR #111 + #126 + #127 (lance-graph #597 + #606 + #608), the // cross-axis identity gap surfaced by this crate's PR #14 is fully // closed: every seeded class has a canonical OGAR classid. The hard