diff --git a/.claude/board/EPIPHANIES.md b/.claude/board/EPIPHANIES.md index bd73ad2d..d34714f1 100644 --- a/.claude/board/EPIPHANIES.md +++ b/.claude/board/EPIPHANIES.md @@ -1,3 +1,34 @@ +## 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). + +When network 403s block direct git push to OGAR, the fallback is PyGithub's +`update_file()` API. The trap: if the locally-edited file was based on a +*stale* checkout of OGAR main (e.g. `/tmp/ogar-work` at `ac4b4162` while +remote main is at `a3574bdf`), then the API upload *overwrites* the upstream +changes between the two commits — silently regressing entries that landed +between them. + +In OGAR #126, my initial uploads were against `/tmp/ogar-work@ac4b4162` (pre- +Anatomy + pre-Automation). The OGAR main had landed PRs #112-#125 in between, +adding the Anatomy domain (`anatomical_structure`/`skeleton`/`bone`/`joint`) +and the Automation domain. My uploads regressed those entries. CI fired on +`ogar-fma-skeleton` referencing `ogar_vocab::class_ids::BONE` which was +present on main but absent from my upload. + +**Fix:** for every API-based file edit, **pull `main`'s current content FIRST** +(via `r.get_contents(path, ref="main")`), apply only the targeted deltas via +string-anchor splicing, and upload the result. Never upload a locally-prepared +file when the working tree might be stale. + +**Cross-ref:** sibling pattern to `E-OGAR-AUTH-MIRROR-DRIFT` (lance-graph +#595 / #596 / #597) — both are about cross-repo edit-time drift. That one +was "mirror lags ALL"; this one is "API-edit lags upstream main." The +discipline is the same: pull-first, edit-narrow, push-thin. + +**Source-of-finding:** OGAR #126 CI failure 2026-06-23 (`ogar-fma-skeleton` +referencing `class_ids::BONE`). + ## 2026-06-24 — E-CLASSID-FMA-PATIENT-COLLISION — `CLASSID_FMA = 0x0901` aliased OGAR `patient`; retargeted to the Anatomy domain `0x0A01` **Status:** FINDING + FIX (2026-06-24). Surfaced by OGAR's NodeGuid canon audit diff --git a/Cargo.lock b/Cargo.lock index 3ff37b00..b5d0cf58 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#ac4b4162bb6ba8d590be3b2b37a07a44f7135d6c" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" 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#ac4b4162bb6ba8d590be3b2b37a07a44f7135d6c" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" 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#ac4b4162bb6ba8d590be3b2b37a07a44f7135d6c" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" [[package]] name = "ogar-vocab" version = "0.1.0" -source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#ac4b4162bb6ba8d590be3b2b37a07a44f7135d6c" +source = "git+https://github.com/AdaWorldAPI/OGAR?branch=main#5089c1e8042664e98b832bbfd31334a1df79eb81" [[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 45cd1326..bf35afd6 100644 --- a/crates/lance-graph-contract/src/ogar_codebook.rs +++ b/crates/lance-graph-contract/src/ogar_codebook.rs @@ -307,6 +307,11 @@ pub const CODEBOOK: &[(&str, u16)] = &[ // odoo-rs PR #14. ("product", 0x0207), ("accounting_account", 0x0208), + // ProductCatalog cluster (OGAR #126): closes 3 more of the 11 cross-axis + // gaps surfaced by odoo-rs PR #14. All stay in 0x02XX commerce arm. + ("pricelist", 0x0209), + ("pricelist_rule", 0x020A), + ("unit_of_measure", 0x020B), // ── 0x09XX — Health domain (MedCare; OGIT NTO/Healthcare promotion) ── ("patient", 0x0901), ("diagnosis", 0x0902), diff --git a/crates/lance-graph-ogar/src/lib.rs b/crates/lance-graph-ogar/src/lib.rs index c7cf3b44..2ef50ac7 100644 --- a/crates/lance-graph-ogar/src/lib.rs +++ b/crates/lance-graph-ogar/src/lib.rs @@ -140,7 +140,9 @@ pub mod parity { | (O::Osint, C::Osint) | (O::Ocr, C::Ocr) | (O::Health, C::Health) + | (O::Anatomy, C::Anatomy) | (O::Auth, C::Auth) + | (O::Automation, C::Automation) | (O::Unassigned, C::Unassigned) ) }