Skip to content

Commit d2ed093

Browse files
committed
fix: lance-graph-ogar OGAR deps switch path -> git (medcare-rs #565 Railway fix)
medcare-analytics depends on lance-graph-ogar via a git dependency on lance-graph, which fails to resolve OGAR's crates: lance-graph-ogar's path deps escape lance-graph's own repo (../../../OGAR/crates/...), and Cargo's git checkout cache has no OGAR sibling at that relative location regardless of what exists on GitHub or on the builder's disk. This is a hard Cargo constraint on git-sourced crates with escaping path deps, not a missing sibling-checkout step, and it made the crate unconsumable by any external repo. Switches ogar-vocab, ogar-class-view, ogar-ontology, ogar-loco, and ogar-adapter-surrealql from path to git deps pinned at AdaWorldAPI/OGAR#main. Verified: cargo check/test green standalone (72+ lib tests incl. the codebook COUNT_FUSE), both this crate's OGAR deps and the existing [patch] section resolve to the identical rev. Accepts the tradeoff the 2026-07-07 "no pins" policy explicitly avoided (a Cargo.lock rev pin) since the alternative is total external unconsumability. symbiont and cognitive-stack carry the same escaping-path shape and are left unfixed here, recorded so it isn't assumed covered.
1 parent 3d113c2 commit d2ed093

2 files changed

Lines changed: 98 additions & 16 deletions

File tree

‎.claude/board/EPIPHANIES.md‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,60 @@
1+
## 2026-08-24 — E-GIT-SOURCED-CRATE-CANNOT-PATH-DEP-OUTSIDE-ITS-REPO-1 — `lance-graph-ogar`'s OGAR path deps broke medcare-rs's Railway build; the "sibling-checkout" mental model does not survive a `git` dependency
2+
3+
**Status:** FIX — [MEASURED] (verified: `cargo check` + `cargo test`
4+
green, 72+ lib tests including the codebook COUNT_FUSE, all under the new
5+
`git` deps). Trigger: MedCare-rs PR #565 Railway build failed —
6+
`error: no matching package named 'ogar-loco' found, location searched:
7+
Git repository https://github.com/AdaWorldAPI/lance-graph?branch=main`.
8+
9+
**Root cause, generalized beyond this one crate:** `crates/lance-graph-ogar/
10+
Cargo.toml` depended on five OGAR crates via `path = "../../../OGAR/
11+
crates/..."` — an escaping relative path, justified by a documented
12+
"operator policy (2026-07-07): NO PINS" note for this sandbox's local
13+
multi-repo layout. That policy is correct for a LOCAL build (this session,
14+
tesseract-rs CI's sibling-checkout precedent) but cannot survive
15+
`lance-graph-ogar` being pulled as a `git` dependency by an EXTERNAL repo
16+
(`medcare-analytics -> lance-graph-ogar` via
17+
`git = "https://github.com/AdaWorldAPI/lance-graph", branch = "main"`).
18+
Cargo clones a git-sourced crate into its own opaque checkout cache
19+
(`~/.cargo/git/checkouts/lance-graph-<hash>/<rev>/`); a `path =
20+
"../../../OGAR/..."` inside it resolves relative to THAT cache directory,
21+
which has no OGAR sibling — nothing ever puts one there, regardless of
22+
how fresh either repo is on GitHub or on the builder's disk. **A crate
23+
with an escaping path dependency cannot be consumed via `git` by any
24+
external repo, ever — this is a hard Cargo constraint, not a missing
25+
setup step.** First checked "is OGAR stale?" (operator's own hypothesis)
26+
and ruled it out: local `/home/user/OGAR` matched `origin/main` exactly,
27+
`ogar-loco` has been on `origin/main` since 2026-08-05 (`89d0d3a9`).
28+
29+
**Fix:** switched all five OGAR deps (`ogar-vocab`, `ogar-class-view`,
30+
`ogar-ontology`, `ogar-loco`, `ogar-adapter-surrealql`) from `path` to
31+
`git = "https://github.com/AdaWorldAPI/OGAR", branch = "main"`.
32+
Verified `cargo check`/`cargo test` green standalone (this crate owns its
33+
own `[workspace]` root); both git deps resolved to the identical rev
34+
(`#719471db`) already referenced by the existing `[patch]` section, so no
35+
new contract-source divergence was introduced. Tradeoff accepted
36+
explicitly: the 2026-07-07 policy's "always current sibling, no
37+
Cargo.lock pin" property is gone for this crate — a pin is now unavoidable
38+
for external consumability. Local/in-sandbox dev is unaffected (same
39+
public repo, still fetched/cached).
40+
41+
**Known residue, NOT fixed here:** `symbiont` and `cognitive-stack`
42+
(named in the same superseded comment as sharing this pattern) carry the
43+
identical escaping-path shape and were left untouched — `symbiont` is
44+
separately marked deprecated/operator no-go; `cognitive-stack` is
45+
unaudited for external git-consumers. Tracked here so a future session
46+
does not assume this fix covers them.
47+
48+
**Fences:** no behavior change to OGAR's contract surface, only the
49+
dependency SOURCE type; the `[patch]` section (already redirecting
50+
`ogar-class-view`'s transitive `lance-graph-contract` onto the path copy)
51+
is untouched and still correct, since patches redirect FROM a git source
52+
TO a path source — the broken direction was the reverse (a path
53+
dependency escaping a git-sourced crate), which `[patch]` cannot fix at
54+
all (path dependencies are not patchable).
55+
56+
**Files:** `crates/lance-graph-ogar/Cargo.toml`.
57+
158
## 2026-08-23 — E-ONE-RECEIPT-MANY-BORROWED-CONSUMERS-1 — the integration half of #1012: one versioned tokenization drives Tantivy, DeepNSM-v2 and a forward surface with zero re-tokenization, and the four gaps that stand between that and a carrier
259

360
**Status:** FINDING — [MEASURED] (`PROBE-TOKEN-SEAM-1`, 37 gates, **13

‎crates/lance-graph-ogar/Cargo.toml‎

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,30 +91,55 @@ lance-graph-contract = { path = "../lance-graph-contract" }
9191
# against live in lance-graph-ontology (OGIT). OGIT does NOT depend on OGAR.
9292
lance-graph-ontology = { path = "../lance-graph-ontology" }
9393

94-
# ── OGAR Active-Record forks: git deps @ main (the canonical superset; matches
95-
# symbiont's + cognitive-stack's pins so ALL golden-image roots resolve to
96-
# ONE OGAR source) ──
94+
# ── OGAR Active-Record forks: git deps @ main ──
9795
#
98-
# NO PINS — operator policy (2026-07-07): OGAR resolves as a PATH dep to the
99-
# local sibling checkout /home/user/OGAR (clone of AdaWorldAPI/OGAR main), the
100-
# same pattern as the ndarray path dep. A git dep always writes a rev pin into
101-
# Cargo.lock; a path dep never does — the fuse (COUNT_FUSE) then always checks
102-
# against the sibling's CURRENT state. symbiont / cognitive-stack use the same
103-
# sibling paths, so all three resolve ONE OGAR copy (codex P2 on #648 intent
104-
# preserved). CI that builds these excluded crates must sibling-check-out OGAR
105-
# (tesseract-rs CI precedent for lance-graph/ndarray).
106-
ogar-vocab = { path = "../../../OGAR/crates/ogar-vocab" }
107-
ogar-class-view = { path = "../../../OGAR/crates/ogar-class-view" }
108-
ogar-ontology = { path = "../../../OGAR/crates/ogar-ontology" }
96+
# ⊘ SUPERSEDED (2026-08-24, `medcare-rs` PR #565 Railway build failure —
97+
# `error: no matching package named 'ogar-loco' found, location searched:
98+
# Git repository https://github.com/AdaWorldAPI/lance-graph?branch=main`).
99+
# The prior "NO PINS — operator policy (2026-07-07)" note below is a REAL
100+
# policy this repo's own local/CI builds relied on, but it does not survive
101+
# `lance-graph-ogar` being consumed as a `git` dependency by an EXTERNAL
102+
# repo (medcare-analytics -> lance-graph-ogar via
103+
# `git = "https://github.com/AdaWorldAPI/lance-graph", branch = "main"`).
104+
# Cargo clones a git-sourced crate into its own opaque checkout cache
105+
# (`~/.cargo/git/checkouts/lance-graph-<hash>/<rev>/`); a `path =
106+
# "../../../OGAR/..."` dependency inside it resolves relative to THAT
107+
# cache directory, which has no OGAR sibling — nothing ever puts one
108+
# there, regardless of how fresh either repo is on GitHub or on the
109+
# builder's disk. This is a hard Cargo constraint (git sources cannot
110+
# contain path dependencies that escape the fetched repository), not a
111+
# missing sibling-checkout step. Fixed by switching to `git` deps here —
112+
# the tradeoff the 2026-07-07 policy explicitly declined (a Cargo.lock rev
113+
# pin, so the local "always current sibling" property is gone for THIS
114+
# crate) is accepted because the alternative is "unconsumable by any
115+
# external repo, ever." Local/in-sandbox development still resolves fine
116+
# (Cargo fetches/caches the same public GitHub repo); what is lost is only
117+
# the zero-lag reflection of uncommitted local OGAR edits.
118+
#
119+
# Prior text, retained for the historical record (regraded, not deleted):
120+
# "matches symbiont's + cognitive-stack's pins so ALL golden-image roots
121+
# resolve to ONE OGAR source. NO PINS — operator policy (2026-07-07): OGAR
122+
# resolves as a PATH dep to the local sibling checkout /home/user/OGAR...
123+
# A git dep always writes a rev pin into Cargo.lock; a path dep never
124+
# does — the fuse (COUNT_FUSE) then always checks against the sibling's
125+
# CURRENT state. symbiont / cognitive-stack use the same sibling paths, so
126+
# all three resolve ONE OGAR copy (codex P2 on #648 intent preserved)."
127+
# `symbiont` and `cognitive-stack` carry the SAME escaping-path shape and
128+
# are NOT fixed by this commit (symbiont is separately marked deprecated /
129+
# operator no-go; cognitive-stack is unaudited for external git-consumers)
130+
# — tracked as a follow-up, not silently assumed fixed.
131+
ogar-vocab = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main" }
132+
ogar-class-view = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main" }
133+
ogar-ontology = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main" }
109134
# The call ABI the 34 NARS recipes lower onto (`recipe_vocab`, D-ACR-9).
110135
# ogar-loco is zero-dep and lance-graph-contract is zero-dep; neither may
111136
# import the other, so the vocabulary that needs both lives HERE.
112-
ogar-loco = { path = "../../../OGAR/crates/ogar-loco" }
137+
ogar-loco = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main" }
113138
# ⊘ DEPRECATED IR-Arm (Operator, 2026-08-22): "SurrealQL wird gar nicht
114139
# verwendet, auch nicht ogar-*surreal*". OPTIONAL und aus dem unbedingten
115140
# Dependency-Satz heraus — ein Build, der das Feature nicht nennt, zieht die
116141
# Crate nicht mehr, und der Re-Export existiert dann nicht.
117-
ogar-adapter-surrealql = { path = "../../../OGAR/crates/ogar-adapter-surrealql", optional = true }
142+
ogar-adapter-surrealql = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main", optional = true }
118143

119144
# Fold ogar-class-view's transitive `lance-graph-contract` (git
120145
# AdaWorldAPI/lance-graph#main) onto the SAME path copy this crate uses, so there

0 commit comments

Comments
 (0)