Skip to content

Commit 2c804d3

Browse files
committed
fix(vocab): correct the "latent re-vendor bug" false premise; exports/ is a staging tier
Verifying the queued "migrate 11 Accounting files" task caught that its founding premise was factually wrong. The PR #107 claim: 11 OGAR-produced TTLs in vocab/imports/ogit/NTO/Accounting/ are "at re-vendor-overwrite risk" and should migrate to exports/. What verification found: those 11 files are COMMITTED TO THE AdaWorldAPI/OGIT FORK — commit c5dc1b8 "shrink 3-hop Odoo lookups — promoted attrs + shortcut verbs + FiscalJurisdiction codebook", on the fork's master, pushed. imports/ faithfully mirrors the fork; the re-vendor recipe copies FROM the fork, so it PRESERVES them. There was never a data-loss risk. No migration. Operator resolved the genuine question (what is exports/ FOR) to the STAGING-TIER model: producer → exports/ (review, CI) → promote to OGIT fork → re-vendor → imports/ → consumers read imports/ - exports/ = produced-but-not-yet-promoted; transient workbench. - AdaWorldAPI/OGIT fork = enriched canonical store (upstream + promoted). - imports/ = faithful mirror of the enriched fork. - consumers read ONLY imports/. The 11 Accounting files are a COMPLETED promotion (the worked example of the model run to its end), correctly mirrored — not stranded. Changes: * vocab/exports/PROVENANCE.md — rewritten STAGING TIER v1: the model diagram, why-stage-not-commit-direct, and a correction block replacing the false "migration note". * vocab/exports/ogit/README.md — staging-tier framing. * docs/ODOO-DIGEST-TO-OGIT.md — pipeline diagram shows exports → promote → imports; §2 rewritten to the staging-tier model with the c5dc1b8 correction; the two stale correction-note + blocker rows fixed. * docs/OGIT-DOMAIN-LIFT-CATALOGUE.md — Accounting row notes the 11 are promoted-to-fork (completed), not stranded; upstream author count corrected to 25 (Viktor Voss / Gibson Xavier / Moritz Vannahme). * .claude/board/EPIPHANIES.md — new FINDING (the false premise + the staging-tier resolution + two lessons: verify-the-target-before- claiming-a-bug, and a-correction-can-itself-need-correcting); prior "Three corrections" entry regraded PARTIALLY SUPERSEDED (corrections 1 & 2 stand; correction 3's bug-claim superseded). No code changes; tests still 16/16 default, 20/20 with --features xsd.
1 parent 1192a7e commit 2c804d3

5 files changed

Lines changed: 212 additions & 115 deletions

File tree

.claude/board/EPIPHANIES.md

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,66 @@
1515
1616
## Entries (newest first)
1717

18-
## 2026-06-22 — Three corrections to the Odoo digest framing: producer name, storage location, latent re-vendor bug
18+
## 2026-06-22 — The "latent re-vendor bug" was a false premise; exports/ is a STAGING tier, not a permanent home (operator-decided)
1919
**Status:** FINDING
20+
**Scope:** vocab/ tree model × verify-before-acting × correcting a prior session's claim
21+
22+
Investigating the "migrate the 11 stranded Accounting files" task
23+
(queued by the prior PR #107 entry below) caught that its founding
24+
premise was **factually wrong** — a clean case of the
25+
verify-before-destructive-action discipline paying off.
26+
27+
The claim (PR #107, exports/PROVENANCE.md, the entry below): "11
28+
OGAR-produced TTLs sit in `vocab/imports/ogit/NTO/Accounting/` at
29+
re-vendor-overwrite risk; they should migrate to `exports/`."
30+
31+
What verification found: those 11 files are **committed to the
32+
AdaWorldAPI/OGIT fork** — commit `c5dc1b8` "shrink 3-hop Odoo lookups
33+
— promoted attrs + shortcut verbs + FiscalJurisdiction codebook", on
34+
the fork's `master`, pushed. They were not added directly to OGAR's
35+
`imports/`; they were promoted to the fork by a prior session, and
36+
`imports/` faithfully mirrors the fork. The re-vendor recipe copies
37+
*from* the fork (`cp -r /OGIT/NTO/. vocab/imports/ogit/NTO/`), so it
38+
**preserves** them. There was never a data-loss risk. NO migration.
39+
40+
The operator resolved the resulting genuine question — what is
41+
`exports/` actually FOR — to the **staging-tier model**:
42+
43+
```
44+
producer ──► exports/ (review, CI) ──promote──► OGIT fork ──re-vendor──► imports/ ──► consumers
45+
```
46+
47+
- `exports/` = produced-but-not-yet-promoted content; transient;
48+
the pre-promotion workbench. CI (round-trip + bijection + drift)
49+
runs here before anything touches the shared fork.
50+
- The AdaWorldAPI/OGIT fork = the enriched canonical store (upstream
51+
arago/almato + OGAR-promoted additions like `c5dc1b8`).
52+
- `imports/` = faithful SHA-pinned mirror of the enriched fork.
53+
- Consumers read ONLY `imports/`. Never `exports/`.
54+
55+
Under this model the 11 Accounting files are a *completed* promotion,
56+
correctly mirrored in `imports/` — the worked example of the pipeline
57+
run to its end, not stranded content. `exports/` stays empty until a
58+
producer stages something that hasn't been promoted yet.
59+
60+
Two lessons:
61+
1. **Verify the target before claiming a bug about it.** "These files
62+
are at risk" is a claim about the fork's state; one `git log` on the
63+
OGIT clone falsified it. The CLAUDE.md discipline ("look at the
64+
target; if what you find contradicts how it was described, surface
65+
that instead of proceeding") caught a migration that would have
66+
broken the imports↔fork bijection AND duplicated the 11 files.
67+
2. **A correction can itself need correcting.** The entry below
68+
("Three corrections…") fixed two real things (producer name,
69+
arm-crate role) and introduced one wrong thing (the re-vendor-bug
70+
claim). Corrections 1 & 2 stand; correction 3 is superseded here.
71+
72+
Evidence: OGIT fork commit `c5dc1b8` (11 files, `master`, pushed);
73+
`vocab/exports/PROVENANCE.md` (rewritten to STAGING TIER v1);
74+
`docs/ODOO-DIGEST-TO-OGIT.md §2` (staging-tier model + the correction).
75+
76+
## 2026-06-22 — Three corrections to the Odoo digest framing: producer name, storage location, latent re-vendor bug
77+
**Status:** PARTIALLY SUPERSEDED — corrections 1 & 2 stand; correction 3's "latent re-vendor bug" claim was itself wrong, see the 2026-06-22 staging-tier entry above (the 11 Accounting files are committed to the OGIT fork, NOT at risk).
2078
**Scope:** producer architecture × vocab/ tree layout × re-vendor safety × digest-to-OGIT
2179

2280
Three corrections to the framing in `docs/ODOO-DIGEST-TO-OGIT.md`

docs/ODOO-DIGEST-TO-OGIT.md

Lines changed: 55 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,14 @@ or workflow action by rendering against the TTL via
3030
> projection that's already shipping.
3131
>
3232
> **Storage location correction (2026-06-22):** earlier drafts said
33-
> digests land in `vocab/imports/ogit/NTO/<Domain>/`. That was wrong
34-
> — it would put OGAR-produced content at re-vendor risk (the
35-
> `imports/` re-vendor recipe is a destructive `cp -r`). Correct
36-
> location: **`vocab/exports/ogit/NTO/<Domain>/`** — see
37-
> `vocab/exports/PROVENANCE.md` for the split rationale.
33+
> digests land in `vocab/imports/ogit/NTO/<Domain>/`. They actually
34+
> STAGE in **`vocab/exports/ogit/NTO/<Domain>/`** — produced-but-not-
35+
> yet-promoted content — and only land in `imports/` after being
36+
> promoted to the AdaWorldAPI/OGIT fork and re-vendored. See §2 for the
37+
> staging-tier model and `vocab/exports/PROVENANCE.md` for the full
38+
> rationale. (The same draft also wrongly claimed 11 existing
39+
> Accounting files were "at re-vendor risk"; they are committed to the
40+
> OGIT fork and correctly mirrored — see §2.)
3841
3942
---
4043

@@ -60,10 +63,15 @@ or workflow action by rendering against the TTL via
6063
│ — entity-as-class for models
6164
│ — verb-as-class for workflow action signatures
6265
63-
OGIT-shaped TTL templates
64-
(vocab/EXPORTS/ogit/NTO/<Domain>/<DigestedClass>.ttl)
66+
OGIT-shaped TTL templates (STAGED — not yet promoted)
67+
(vocab/exports/ogit/NTO/<Domain>/<DigestedClass>.ttl)
6568
— dcterms:creator = bus-compiler (digester provenance)
66-
— distinct tree from imports/ ogit/ (re-vendor safety)
69+
— review here (round-trip + bijection tests, drift check)
70+
71+
│ PROMOTE: commit to the AdaWorldAPI/OGIT fork, then
72+
│ re-vendor (cp -r /OGIT/NTO/. vocab/imports/ogit/NTO/)
73+
74+
vocab/imports/ogit/NTO/<Domain>/ (faithful mirror of the enriched fork)
6775
6876
│ ogar-render-askama (entity render → views; verb render → actions)
6977
@@ -76,37 +84,44 @@ or workflow action by rendering against the TTL via
7684

7785
The Python runtime is **only** touched at digest time. Consumers
7886
(`woa-rs`, `smb-office-rs`, `medcare-rs`, `q2`, any future renderer)
79-
never depend on Odoo Python, only on TTL + the askama renderer.
80-
81-
## §2. Why digests live in `vocab/exports/ogit/`, not `vocab/imports/ogit/`
82-
83-
`imports/` is a READ-ONLY mirror of upstream OGIT (the re-vendor
84-
recipe is a destructive `cp -r /upstream/. vocab/imports/ogit/`).
85-
Putting OGAR-produced content in `imports/` would silently nuke
86-
those files on the next re-vendor. **The split exists for re-vendor
87-
safety, license/governance, and upstream-contribution path** — see
88-
`vocab/exports/PROVENANCE.md` for the full rationale.
89-
90-
The digest **mirrors the upstream layout** so consumers see one shape:
91-
92-
| Concept | Upstream OGIT path (READ-only mirror) | Digest target (OGAR-produced) |
93-
|---|---|---|
94-
| `Accounting` | `vocab/imports/ogit/NTO/Accounting/` (23 files, Viktor Voss) | `vocab/exports/ogit/NTO/Accounting/` (Odoo-digested) |
95-
| `SalesDistribution` | `vocab/imports/ogit/NTO/SalesDistribution/` (23 files, Marek Meyer) | `vocab/exports/ogit/NTO/SalesDistribution/` (Odoo sale.* digest) |
96-
| `Transport` | `vocab/imports/ogit/NTO/Transport/` (27 files, chris.boos@almato.com) | `vocab/exports/ogit/NTO/Transport/` (Odoo stock.* digest) |
97-
|| upstream-mirrored | OGAR-produced, OGIT-shape-compatible |
98-
99-
`dcterms:creator` provenance is now a SECONDARY check (the directory
100-
split is the primary). The `OGIT-DOMAIN-LIFT-CATALOGUE.md §
101-
Verifying domain authorship` scan still runs and still discriminates
102-
authors, but the destructive-overwrite risk is structurally gone.
103-
104-
**Migration note for the existing 11 stranded files.** A prior
105-
session's `Claude (AdaWorldAPI/lance-graph 3-hop optim)` digest left
106-
11 OGAR-produced files in `vocab/imports/ogit/NTO/Accounting/`
107-
alongside Viktor Voss's 23 originals. Those 11 belong in
108-
`vocab/exports/ogit/NTO/Accounting/`. The migration is a separate
109-
PR; `vocab/exports/PROVENANCE.md § Migration note` carries the
87+
never depend on Odoo Python, only on TTL + the askama renderer — and
88+
they read `imports/`, never the `exports/` staging tier.
89+
90+
## §2. The staging-tier model — `exports/` → OGIT fork → `imports/`
91+
92+
(Operator-decided 2026-06-22.) `exports/` is a **staging area** for
93+
produced-but-not-yet-promoted content; the AdaWorldAPI/OGIT fork is
94+
the **enriched canonical store**; `imports/` faithfully mirrors the
95+
fork; consumers read only `imports/`. See `vocab/exports/PROVENANCE.md`
96+
for the full model.
97+
98+
```
99+
producer ──► vocab/exports/ogit/NTO/<Domain>/ (review/iterate, CI runs here)
100+
│ promote (commit to OGIT fork on a branch, PR there)
101+
102+
AdaWorldAPI/OGIT fork (enriched: upstream + OGAR-promoted)
103+
│ re-vendor
104+
105+
vocab/imports/ogit/ (SHA-pinned mirror — consumers read this)
106+
```
107+
108+
Why a staging tier and not "commit straight to the fork": a digest run
109+
produces N TTLs at once; staging lets the round-trip + bijection tests
110+
run, the drift-vs-prior-digest diff fire, and a human review the lift —
111+
all inside OGAR + CI — **before** anything touches the shared fork. The
112+
promote step is the single auditable gate between OGAR-produced and
113+
OGIT-canonical.
114+
115+
**The 11 Accounting files are NOT a migration target.** An earlier
116+
draft (commit `7d68042`) claimed 11 OGAR-produced TTLs in
117+
`vocab/imports/ogit/NTO/Accounting/` were "at re-vendor risk" and
118+
"belong in `exports/`." **That was wrong.** Those files are committed
119+
to the **AdaWorldAPI/OGIT fork** (commit `c5dc1b8` "shrink 3-hop Odoo
120+
lookups…", on `master`, pushed) — i.e. they are a *completed*
121+
promotion. `imports/` correctly mirrors them; re-vendor preserves
122+
them. They are the worked example of the staging-tier model run to
123+
completion, not stranded content. `exports/` is for content that has
124+
**not yet** made that trip.
110125
list.
111126

112127
## §3. The four shapes the digester produces
@@ -194,7 +209,7 @@ license fee.
194209
| `ruff_rust_spo` (Rust AST frontend, for digesting medcare-rs / woa-rs / etc.) | **does not exist** — needs `syn` walker; symmetric with the other ruff frontends |
195210
| `ogar-render-askama::actions` (verb-as-class render path) | **does not exist**~200 LOC mirroring the existing `views/` path |
196211
| Concept mints for non-Accounting Odoo models | needs the 5+3 codebook pass per `APP-CLASS-CODEBOOK-LAYOUT.md` |
197-
| Migration of the 11 stranded Accounting files (`imports/` `exports/`) | **queued**separate PR (see `vocab/exports/PROVENANCE.md § Migration note`) |
212+
| The 11 Accounting files in `imports/` | **not a migration target**already promoted to the OGIT fork (`c5dc1b8`); correctly mirrored. See §2. |
198213

199214
`ruff_python_spo` and `ogar-render-askama::actions` are independent
200215
and can ship in parallel PRs. Concept mints are the slow path

docs/OGIT-DOMAIN-LIFT-CATALOGUE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ arago/almato coordination."
7878

7979
| Domain | Entities | Attributes | Verbs | Status | Notes |
8080
|---|--:|--:|--:|---|---|
81-
| `Accounting` | 9 | 20 | 7 | Lift-tested | Mixed-authorship: `Viktor Voss` (23 files, original arago/almato) + a prior session's extension (`Claude (AdaWorldAPI/lance-graph 3-hop optim)`, 11 files). Covered conceptually via `0x02XX` commerce/ERP via Odoo lift. Structural changes to the original 23 need upstream coordination; the 11 extensions are ours. |
81+
| `Accounting` | 9 | 20 | 7 | Lift-tested | Mixed-authorship: `Viktor Voss` / `Gibson Xavier` / `Moritz Vannahme` (25 files, original arago/almato) + a prior session's extension (`Claude (AdaWorldAPI/lance-graph 3-hop optim)`, 11 files **promoted to the OGIT fork** via commit `c5dc1b8`). The 11 are a completed promotion (fork → mirrored here), the worked example of the staging-tier model (`vocab/exports/PROVENANCE.md`), NOT stranded content. Covered conceptually via `0x02XX` commerce/ERP via Odoo lift. Structural changes to the upstream files need arago coordination; the 11 OGAR-promoted ones are ours. |
8282
| `Advertising` | 16 | 0 | 0 | Imported | |
8383
| `Audit` | 3 | 0 | 0 | Lift-tested | `Marek Meyer` (sole author) — pure upstream. Audit-as-Lance-version (ADR-013) covers the semantics. |
8484
| `Auth` | 13 | 24 | 6 | Imported | Cross-walk to `0x0BXX` auth domain (Zitadel/Zanzibar) queued |

0 commit comments

Comments
 (0)