Skip to content

Commit 488a0f4

Browse files
committed
handover: the polyglot-transpiler arc — verified state, honest [REPORTED] labels
OGAR V3 as polyglot transpiler (IN ruff harvest / IR CompiledClass / OUT emit_* + storage/view/nav skins); odoo-rs the Odoo lens, odoo read-only harvest+oracle, OGAR the engine. Records the operator-locked frame, the cross-repo state (VERIFIED from local clones vs REPORTED by a parallel track I could not reach), the two odoo-rs builds I verified green (--features cli and cli,ogar-emit / ruff-AST path), the rebase-before-PR lesson from the closed #156/#71, and the retargeted od-hydrate substrate-host deployment (real axum server, PG-vs-lance-graph storage). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D9qw3LYDprZi4uts2m57iq
1 parent 04ade87 commit 488a0f4

1 file changed

Lines changed: 120 additions & 0 deletions

File tree

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Handover — OGAR V3 as polyglot transpiler; the odoo-rs / OP / ruff convergence arc
2+
3+
> **Date:** 2026-07-09. **Scope:** the whole transpiler arc (ruff harvest →
4+
> OGAR IR → materializations), not one repo. **Author's honesty contract:**
5+
> this handover separates **[VERIFIED]** (I built/read it myself this session)
6+
> from **[REPORTED]** (a parallel session claimed it; I could not confirm —
7+
> odoo-rs was unreachable from my session: git 403 / pygithub 403 / MCP 404).
8+
> Do not promote a [REPORTED] line to fact without checking the cited PR.
9+
10+
---
11+
12+
## 0. The locked frame (operator, verbatim) — the spine everything hangs on
13+
14+
OGAR V3 is a **polyglot transpiler**; each consumer repo is a **lens**, not a
15+
"port". odoo-rs is the **Odoo lens**.
16+
17+
```
18+
IN (harvest, per-language frontends) IR (the substrate) OUT (materializations)
19+
──────────────────────────────────── ─────────────────────── ───────────────────────────────
20+
Python/Odoo ruff_python_spo CompiledClass emit_rust (Rust SDK)
21+
Ruby/Rails ruff_ruby_spo ──► { class: ogar_vocab::Class emit_python (Python SDK — the
22+
C# ruff_csharp_spo , facet: 16B classid+12 mirror-back container)
23+
C++ ruff_cpp_spo , actions: ActionDef+Kausal } emit_csharp (C# SDK)
24+
one per class, addressable ─ storage skins ─
25+
+ views (ERB/Jinja/Odoo-XML/askama by classid = domain:appid: PG facet table (p0..p11 = 3×SPOG ORM)
26+
→ one WideFieldMask brick) classview lance-graph V3 (same 16B, native)
27+
+ nav (navigates_to, 4 frontends ─ view/nav skins ─
28+
→ one connectivity brick) 4 renderers, 1 mask; 1 nav graph
29+
```
30+
31+
**Roles, locked:**
32+
- **odoo (Python upstream)** — read-only *harvest source* + *parity oracle*. Never a deploy target from this work.
33+
- **odoo-rs** — the *substrate lens*: compile-in, hydrate the storage matrix, serve the mirror-backs (`emit_python` SDK is the "Python container", **not** upstream Odoo).
34+
- **OGAR** — the *engine* (IR + vocab + emitters + adapters).
35+
36+
Every asset built this arc — kausal parity, field masks, Klickweg nav, the
37+
ndjson corpora — is **transpiler infrastructure**, not app code.
38+
39+
---
40+
41+
## 1. Cross-repo state
42+
43+
Local branch is `claude/odoo-rs-transcode-lf8ya5` in every repo.
44+
45+
| Repo | My local branch tip | Notes |
46+
|---|---|---|
47+
| OGAR | `9e49ba4` **[VERIFIED]** | rebased clean onto `origin/main` (76dcb27); PR diff now additive-only (see §3). |
48+
| ruff | `684ba99` **[VERIFIED]** | schema strata + lineage union; main at `72b7759` (#43 merged). |
49+
| openproject-nexgen-rs | `5092688` **[VERIFIED]** | §5 steps 1–5 done; rebased linear on main. |
50+
| lance-graph | `df36747` **[VERIFIED local]** | at my clone the contract nav API (`screens_reachable_from`/`nav_is_fully_connected`) was **not** found; parallel track reports it landed at `5284755`/#669 **[REPORTED]** — my clone is likely behind. Re-fetch before relying. |
51+
| odoo-rs | `d724313` **[VERIFIED local]** | **unreachable via GitHub this session.** Parallel track reports PRs #30/#31/#32 + handover `2e7c55c` + fix `96b9d79`**none present in my clone**, all **[REPORTED]**. |
52+
| odoo || Parallel track reports PRs #2/#3 (Railway parity-oracle container) merged into `19.0` **[REPORTED]**. Default branch is **`19.0`, not `main`** — a `fetch origin main` silently no-ops. |
53+
54+
---
55+
56+
## 2. What I verified myself this session **[VERIFIED]**
57+
58+
- **odoo-rs builds green both ways:**
59+
- `cargo build --release --features cli``od-codegen` compiles serde-only, offline, 41s; binary runs (`--help` ok). This is the ground truth for any **job-container `ENTRYPOINT`**.
60+
- `cargo build --release --features cli,ogar-emit`**EXIT 0**, 25s. Fetched + compiled OGAR (`7d0dca2`) and the **ruff AST frontend** (`ruff_python_spo` / `ruff_spo_triplet` / `ruff_python_parser` @ `4860e79`). The "use ruff for AST" convergence path is **complete and compiles** at the pinned revs.
61+
- **od-codegen is a batch CLI, not a server** — zero web-server deps; the "Railway `0.0.0.0:$PORT`" ask does **not** fit the repo *as-is* (nothing listens). The retarget below resolves this correctly.
62+
- **No runtime DB in odoo-rs today** — zero `DATABASE_URL`/`env::var` DB reads; `lance_graph` appears only as doc-comment provenance. Input = static committed ndjson (`data/*.spo.ndjson`); output = SurrealQL DDL text. The **PG-vs-lance-graph storage choice does not exist in this repo yet** — it is the deployment work below, not current behavior.
63+
64+
---
65+
66+
## 3. The messy part, recorded so it isn't repeated
67+
68+
Earlier today I opened **OGAR #156** and **OP #71 without rebasing first**. Both
69+
branches had forked before their mains advanced, so the PR diffs read as massive
70+
deletions (OP: **10,634** — the entire `vendor/AdaWorldAPI-ruff` tree; OGAR:
71+
main's OSM/render body shown as reverts). The operator closed both as
72+
unacceptable. **Fix applied:** both branches rebased so `origin/main` is a clean
73+
ancestor; PR diffs collapse to additive-only (OGAR: 6 files, +607/−46 — the −46
74+
are our own replaced lines; OP: the 10,634 are the intended un-vendor deletion,
75+
now clearly isolated). **Lesson, now doctrine:** *rebase before every PR; a diff
76+
that shows deletions of another track's work is a hard stop, never a footnote.*
77+
78+
Also standing: the operator **no-rev-pins ruling** — AdaWorldAPI-internal git
79+
deps float on the convergence branch; drift protection is the **fuse tests**, not
80+
pins (a floating dep that fails within a build is the fuse working). Flip to
81+
`branch = "main"` when the convergence branches merge.
82+
83+
---
84+
85+
## 4. The retargeted deployment ask — od-hydrate substrate host
86+
87+
The original "Railway `$PORT` Dockerfile for odoo-rs" was correctly rejected (no
88+
server). The **retarget** (operator-framed) is a genuine feature that *does*
89+
legitimately bind `$PORT`:
90+
91+
- **`od-hydrate` substrate host** — a real axum server (binds `0.0.0.0:$PORT`), so the Railway web pattern fits honestly.
92+
- **First-start hydration variable** — check-if-hydrated on the facet table; idempotent (probe before mint).
93+
- **Storage choice at onboarding****PG facet table** (`p0..p11` = 3×SPOG ORM shape) **vs lance-graph V3** (same 16B, native). This is the DB-hydration decision, living where it belongs (the runtime host), not in the transpiler.
94+
- **`/sdk/python` (+ /rust, /csharp)** — serve the `emit_*` mirror-back of whatever is hydrated.
95+
- **Surfaces already exist upstream**`emit_facet_table_ddl`, `emit_python` + prelude, `compile_source` in-process. It is **assembly, not invention**.
96+
97+
Ownership per operator ("take it"): **this handover is mine**; the container
98+
build is being carried by the track with odoo-rs access. If that inverts, the
99+
build needs: odoo-rs GitHub access unblocked for the session + the other track
100+
paused (do not two-write the same crate).
101+
102+
---
103+
104+
## 5. Open tail (non-blocking)
105+
106+
- **od-hydrate container** — the §4 substrate host (axum + tokio-postgres, Dockerfile + railway.toml, the variable contract).
107+
- **Q9** — the OGAR carrier asks (council tail).
108+
- **`odoo_actions` authority table** — deferred, gated on W2′ storage.
109+
- **lance-graph contract nav API** — confirm `5284755`/#669 landed the `screens_reachable_from`/`nav_is_fully_connected` brick before any consumer delegates to it (my clone couldn't see it).
110+
- **medcare lens** — ruff now has the MySQL-DDL stratum (`ruff_csharp_spo::schema`, `684ba99`); the medcare session lifts `Struktur.sql → ModelGraph → compile` through the same door, with corpus-specific acceptance tests kept private (no corpus names/stats in the public fork).
111+
112+
---
113+
114+
## 6. Provenance note
115+
116+
Written by the session that held the **handover**, not the code. Cross-repo PR
117+
claims (#30/#31/#32 odoo-rs, #2/#3 odoo, #669 lance-graph) are **[REPORTED]** by
118+
a parallel track and were **not** independently verifiable from here. Everything
119+
under **[VERIFIED]** was built or read first-hand. When in doubt, trust the cited
120+
commit/PR over this prose.

0 commit comments

Comments
 (0)