feat(od-ontology): pull alignment symbol-table from lance-graph-callcenter#14
Merged
Merged
Conversation
…enter Phase-2 repatriation per REPATRIATION-FRAME.md: pulled the OWL pivot alignment from `lance_graph_callcenter::odoo_alignment` (~700 LOC of which ~350 was the data + classifier + lookup; the runtime-hydration types stay in lance-graph as generic infrastructure). Under the compiler-AST frame (PR #13): this module IS the **symbol table / type-resolver** for the Odoo language frontend — Odoo class name → OGAR (family, slot) identity + owl:equivalentClass pivot URI + DOLCE marker. What lands: - `OwlPivot` struct (empowerment shape — universal across source languages) - `dolce_odoo` suffix classifier (empowerment mechanism + Odoo muscle memory) - `ODOO_SEED` static table (15 muscle-memory rows: res.partner → fibo:LegalEntity, account.move → fibo:Transaction, …) - 6 family-byte constants (BillingCore 0x61 / SMBAccounting 0x62 / ProductCatalog 0x64 / SmbFoundryCustomer 0x80 / SmbFoundryInvoice 0x81 / HRFoundation 0x90) - `resolve_odoo` (symbol-table lookup with `product.*` prefix fallback) What stays in lance-graph (explicitly NOT pulled): - `OgitFamilyTable` runtime hydration (generic graph spine infrastructure) - `FamilyEntry` / `OwlCharacteristics` / `SchemaKind` (lance-graph's table types) - `family_default_style` returning `StyleCluster` (Phase 3 — push to OGAR as a Class capability) 14 invariant pins in `tests/alignment_pin.rs`, all green. Surfaced TWO real findings while writing the cross-validation: 1. The lance-graph `dolce_odoo` classifier was **incomplete**: it swept `product.pricelist` into Endurant (via `product.*` → Endurant) but the seed row declares Abstract (a pricelist IS a pricing rule, not a persistent product). Added the `pricelist` exception; the classifier now agrees with the seed. lance-graph's own tests didn't catch this because they don't run cross-validation. 2. OGAR's `OdooPort` covers the **commerce arm** only (7 aliases: account.move / sale.order / account.move.line / sale.order.line / account.tax / res.partner / account.payment / res.currency / account.analytic.line) — `account.account`, `product.template`, `product.product`, `uom.uom`, the 4 hr.* classes have alignment rows but no OGAR classid yet. Surfaced as informational `eprintln` (= candidate list for the next OdooPort PR); the hard pin asserts only the commerce-arm intersection. The cross-axis identity check (`seeded_classes_have_compatible_ogar_identity`) proves the per-app alignment table (this crate = "which FIBO pivot") and OGAR's identity codebook (OdooPort = "which classid") agree about which Odoo classes are first-class citizens — the two are complementary axes of the same identity. 130+ test results across the suite pass: 39 lib + 14 alignment-pin + 10 corpus-pin + 13 typed-lift + 10 ogar-parallel + 7 ogar-convergence + 7 bin + others. clippy on my code clean. lib.rs / alignment.rs / alignment_pin.rs fmt-clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This was referenced Jun 22, 2026
AdaWorldAPI
pushed a commit
that referenced
this pull request
Jul 7, 2026
…2 to the recipe OGAR (#174/#175/#176) + lance-graph (#658) migrated to generic plug-and-play capability handling, retiring the COUNT_FUSE dual-store. Checked odoo-rs against the migrated mains: - Restarted branch from merged main (PR #24 = 0bd6809); floated deps to OGAR dee1fc5 (hot-plug) + ruff 55bbf60 (which now INCLUDES the merged DTO arm, ruff #51). cargo test -p od-ontology --features cli,fieldmask = 17/17 green. ZERO breakage: COUNT_FUSE was internal to the OGAR<->lance-graph bridge; the additive capability_registry/ocr_actions surfaces don't touch the Class/ActionDef/compile_graph_python surface odoo-rs consumes. - Handover §2b documents the socket/authority/bridge/consumer model + sibling-path-dep NO-PIN rule + the 5 drift arms. - W2 revised: the lance-graph V3 sink is no longer 'invent a sink' — it is the hotplug-consumer-migration recipe (declare odoo_actions authority table + HOT_PLUG const + activation test + executor), mirroring the tesseract-rs #13/#14 template. odoo-rs needs no HOT_PLUG until W2. Ref: E-HOTPLUG-GENERIC-1, E-HOTPLUG-MIGRATION-1, OGAR .claude/knowledge/hotplug-consumer-migration.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Phase-2 of the repatriation (per
REPATRIATION-FRAME.mdshipped in #12,following the schema pull in #13). Pulled the OWL pivot alignment from
lance_graph_callcenter::odoo_alignment— ~350 LOC of muscle memory + classifierOgitFamilyTable,FamilyEntry)in lance-graph as generic infrastructure.
Under the compiler-AST frame (#13): this module IS the symbol table /
type-resolver for the Odoo language frontend — Odoo class name → OGAR
(family, slot)identity +owl:equivalentClasspivot URI + DOLCE marker.What lands
OwlPivotstruct(pivot_uri, family, slot, dolce)dolce_odooODOO_SEEDres.partner → fibo:LegalEntity,account.move → fibo:Transaction, …0x61BillingCore,0x62SMBAccounting,0x64ProductCatalog,0x80SmbFoundryCustomer,0x81SmbFoundryInvoice,0x90HRFoundationresolve_odooproduct.*prefix fallbackWhat stays in lance-graph (explicitly NOT pulled)
OgitFamilyTableruntime hydration — generic graph spine infrastructureFamilyEntry/OwlCharacteristics/SchemaKind— lance-graph's table typesfamily_default_stylereturningStyleCluster— Phase 3 push to OGAR as aClasscapabilityWhat the invariant pins surfaced (real findings)
14 invariant pins in
tests/alignment_pin.rs, all green — and writing thecross-validation surfaced two real findings the lance-graph original didn't
have tests to catch:
Finding 1 — the lance-graph
dolce_odooclassifier was incompleteThe seed row declares
product.pricelistisAbstract(a pricelist IS apricing rule, not a persistent product). The lance-graph classifier swept it
into
Endurantbecause itsproduct.*rule matched first. Added thepricelistexception; the classifier now agrees with the seed. lance-graph'sown tests didn't catch this because they only spot-tested
product.templatenot
product.pricelist.Finding 2 — OGAR's
OdooPortcovers the commerce arm onlyThe cross-axis identity check (
seeded_classes_have_compatible_ogar_identity)proves the alignment table and OGAR's identity codebook agree about which Odoo
classes are first-class citizens. But
OdooPorthas 9 aliases (thecommerce arm:
account.move,sale.order,account.move.line,sale.order.line,account.tax,res.partner,account.payment,res.currency,account.analytic.line) — the seed table has 15 rowscovering product + accounting + HR basins too.
Surfaced as informational
eprintln(= candidate list for the next OdooPortPR); the hard pin asserts only the commerce-arm intersection. The "gap" IS
the surface for a future PR, not an error today.
Tests
130+ test results green across the suite: 39 lib + 14 alignment-pin + 10
corpus-pin + 13 typed-lift + 10 ogar-parallel + 7 ogar-convergence + 7 bin +
others. clippy on my new code clean (pre-existing
doc_markdownwarnings onolder files untouched).
lib.rs/alignment.rs/alignment_pin.rsfmt-clean.Builds on:
Next phases per the frame:
odoo_blueprint/{l1..l15}.rs(14K LOC) when readyOwlPivot, suffix-classifier pattern,family_default_style → StyleClusterinheritance) to OGAR as universalClasscapabilities so other source languages reuse them