Skip to content

Commit f947669

Browse files
committed
docs(identity): DECISION-3 global entity_type + mint-trace correction
Decision-gate ratified: entity_type is GLOBAL (the shared north-star template id), not namespace-local. The pre-change trace then overturned two beliefs: - namespace.rs:12 'dense within the namespace' is a STALE doc comment -- the live mint (registry.rs:476, entity_type_id = rows.len()+1) is already global append-order across all namespaces. The ratified semantics are the live behavior; only the prose and the dedup are missing. - The registry is NOT template-deduped (corrects this session's own 'already leans frugal' claim): every append mints fresh. Dedup + the entity_type<->NiblePath pairing are net-new. Blast radius traced benign: ~16 entity_type_id() readers store or compare; none dense-index by entity_type. Synthesis recorded: the bijection IS the dedup -- one NiblePath<->entity_type pair table is the template registry, the dedup index, and the bijection witness at once (Phase B moves 1+2 = one mechanism). Plan: DECISION-3 + CORRECTION block + refinement. Board: E-MINT-TRACE-1, E-OGAR-NORTHSTAR-1 Status line, AGENT_LOG. https://claude.ai/code/session_014A4JuRCqKP2yNENrQ9Ha7H
1 parent 12c5ea3 commit f947669

3 files changed

Lines changed: 50 additions & 5 deletions

File tree

.claude/board/AGENT_LOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2026-06-09 — D-IDENTITY Phase B: global entity_type ratified + mint trace correction
2+
3+
**Main thread (Opus→Fable mid-session).** Decision-gate ratified `entity_type` = GLOBAL shared template id (DECISION-3). Pre-change trace overturned two beliefs: (a) `namespace.rs:12` "dense within the namespace" is STALE — live mint `registry.rs:476` is already global append-order; (b) registry is NOT template-deduped (own claim, corrected in-place in the plan). Blast radius of global/sparse ids traced benign (~16 readers, none dense-index). Synthesis: bijection IS the dedup — one `NiblePath ↔ entity_type` pair table = template registry + dedup index + bijection witness. Plan: DECISION-3 + CORRECTION + refinement. Epiphany: E-MINT-TRACE-1; E-OGAR-NORTHSTAR-1 Status updated. Rides in #481. Next: implement first brick (pair-table mint + round-trip test) in lance-graph-ontology.
4+
15
## 2026-06-09 — D-IDENTITY decisions: OGAR mirror (ratified) + north-star template model
26

37
**Main thread (Opus).** Recorded two architecture decisions for the identity arc (no code; plan + epiphany): (1) ontology cache = OGAR one-way OGIT mirror, append-only immutable ClassIds (ratified via decision-gate) — ownership, not drift-prevention; (2) ClassId space organized as a shared north-star template spine (`entity_type`/`NiblePath` = DOLCE-rooted shape reused across domains; `namespace` = domain), realized by the existing octet split + FieldMask inherit/delta + NiblePath ancestry. Plan: identity-architecture DECISION-2 + north-star guard + Phase B refinement. Epiphany: E-OGAR-NORTHSTAR-1. Rides in PR #481.

.claude/board/EPIPHANIES.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
## 2026-06-09 — E-MINT-TRACE-1 — the live mint is already global (registry.rs:476); the "namespace-local" doc is stale; dedup is net-new; the bijection IS the dedup
2+
3+
**Status:** FINDING (traced, ratified: `entity_type` = global shared template id)
4+
**Confidence:** High (read the mint, not the doc comment)
5+
6+
**Trace before change paid twice.** (1) `namespace.rs:12` documents `entity_type_id` as "dense **within the namespace**" — but the actual mint is `registry.rs:476 entity_type_id = (rows.len()+1)`: **global append-order across all namespaces**. The doc comment is stale; the GLOBAL semantics DECISION-2/3 want are already the live behavior. (2) It corrected this session's own claim, minutes old: the registry is **not** template-deduped — every append mints a fresh id (`enumerate_first_with_entity_type_id` is defensive, not reuse evidence). Frugal dedup + the `entity_type↔NiblePath` pairing are net-new.
7+
8+
**Blast radius traced benign:** ~16 `entity_type_id()` readers store-as-column-value or compare; none dense-index an array BY entity_type. Global/sparse ids break nothing. Dedup consequence: per-id row lookup becomes namespace-ambiguous ⇒ resolve by `(namespace, entity_type)`.
9+
10+
**The synthesis that shrinks Phase B:** the bijection IS the dedup. One pair table `NiblePath ↔ entity_type` in the registry: path present ⇒ reuse the template id (new row, new namespace); absent ⇒ mint fresh (monotone, never reused) + record the pair. The pair table is simultaneously the template registry, the dedup index, and the bijection witness the round-trip test proves. Moves 1+2 of the Phase B seam are one mechanism.
11+
12+
**Process lesson (generalizes):** doc comments describe intent at write-time; the mint line is the contract. For any "is this id local or global / dense or sparse" question, read the assignment site and grep for dense-indexing consumers before believing prose.
13+
14+
**Cross-ref:** identity-architecture plan DECISION-3 + Phase B grounded seam (CORRECTION block); E-OGAR-NORTHSTAR-1 (Status updated); I-LEGACY-API-FEATURE-GATED (the positional `contract/ontology.rs:85` helper is the v1 path to gate).
15+
116
## 2026-06-09 — E-ANCESTRY-TRINITY-1 — NiblePath::is_ancestor_of is ONE bit-shift read three ways: subClassOf = supervision-edge = north-star template specialization
217

318
**Status:** FINDING (cross-session convergence — OGAR/SurrealDB session + identity-contract session, independently)
@@ -18,8 +33,8 @@ They are the SAME relation: the north-star template hierarchy IS the routing/sup
1833

1934
## 2026-06-09 — E-OGAR-NORTHSTAR-1 — ontology cache = OGAR mirror with a reusable north-star template spine (namespace specializes, entity_type is shared)
2035

21-
**Status:** DECISION (OGAR mirror RATIFIED via decision-gate; north-star template model = recommended organizing principle, realized by existing substrate)
22-
**Confidence:** High (OGAR mirror) / Medium-High (north-star model — strongly aligned, pending first OGAR build)
36+
**Status:** DECISION (OGAR mirror RATIFIED via decision-gate; north-star template model RATIFIED 2026-06-09 "frugal it is"; `entity_type` = GLOBAL shared template id RATIFIED via decision-gate — see E-MINT-TRACE-1)
37+
**Confidence:** High (both halves ratified; mint trace confirms global append-order is already the live mint)
2338

2439
**Two decisions, one architecture.**
2540

.claude/plans/identity-architecture-exists-vs-needs-v1.md

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,35 @@ Reading the live surfaces confirmed the frugal model *finishes what's there*, no
196196
id renumbers. The legacy anti-pattern, in our own code. The **`OntologyRegistry`**
197197
(`lance-graph-ontology/registry.rs`) is **append-only** (`RegistryState::append`,
198198
"no rebuild per append") — the correct immutable home and the OGAR-mirror foundation.
199-
- **The registry already leans frugal.** `enumerate_first_with_entity_type_id(u16)` returns
200-
the *first* row with that id ⇒ **N `MappingRow`s → 1 `entity_type`** is already legal:
201-
one template, reused across namespaces/URIs. North-star is half-built.
199+
- **CORRECTION (traced 2026-06-09 — doc comments are not the mint).** The live mint is
200+
`registry.rs:476 entity_type_id = (self.rows.len()+1)`**global append-order,
201+
append-only-immutable** (good: the *global* axis DECISION-2 + the bijection want is
202+
ALREADY the mint reality; `namespace.rs:12` "dense within the namespace" is **stale**).
203+
BUT it is **unique per row, NOT template-deduped** — every append gets a fresh id, so
204+
"N rows → 1 entity_type" is *not* today's behavior (`enumerate_first_*` is defensive, not
205+
reuse). ⇒ frugal dedup + the `entity_type↔NiblePath` pairing are **net-new**, not
206+
half-built. Two mints also disagree: `registry.rs:476` (global append) vs
207+
`contract/ontology.rs:85` (per-Ontology positional) — canonicalize on the registry,
208+
gate the helper.
209+
- **Blast radius is benign for the global switch.** The ~16 `entity_type_id()` readers
210+
*store* it as a column value (`bindspace.entity_type[row]`) or *compare* it; **none**
211+
dense-index an array BY `entity_type`. Global/sparse ids break nothing. The one dedup
212+
consequence: `enumerate_first_with_entity_type_id` becomes namespace-ambiguous (multiple
213+
rows per id) ⇒ the resolver wants `(namespace, entity_type) → row`.
214+
215+
**[DECISION-3] RATIFIED (2026-06-09, decision-gate):** `entity_type` is **GLOBAL**
216+
(the shared north-star template id), NOT namespace-local. The stale
217+
`namespace.rs:12` "dense within the namespace" comment is superseded — and the
218+
traced mint (`registry.rs:476`, global append-order) already agrees. `namespace`
219+
is the domain axis; alignment across domains is a u16 compare.
220+
221+
**Refinement — the bijection IS the dedup (moves 1+2 are one mechanism):** the
222+
registry keeps a pair table `NiblePath ↔ entity_type`. On append: proposal's
223+
path already in the table ⇒ **reuse** that `entity_type` (new row, new
224+
`namespace`, same template id); path absent ⇒ mint fresh (monotone, never
225+
reused; gaps fine) + record the pair. The pair table is simultaneously the
226+
template registry, the dedup index, and the bijection witness the round-trip
227+
test proves.
202228

203229
**Four frugal moves (each a landable brick):**
204230
1. **Mint in the append-only registry, deduped by template.** `entity_type` is assigned by

0 commit comments

Comments
 (0)