fix(identity): bridge public self anchor to the curated self node #24

Open
tim.lingo wants to merge 1 commits from fix/canonical-self-bridge into main
Member

What

Adds ensure_self_canonical_bridge() — an idempotent boot-time repair that links the public self anchor to the curated self node with a canonical-self edge, only when it's missing. Runs in the is_genesis && safe_to_seed save path, ungated by the <100 edge count, so the live populated graph is repaired and persisted.

Why (verified against the live graph)

  • The graph API resolves name=self/neuronkn-efeb4a5b (neuron-api.el:471). Live, that node has 8 edges, all tagged.
  • The curated identity lives on self node 015644f5 — live, 1,461 edges (identity, embodies, remembers, value/co-value links).
  • So public self-traversal reaches tags, not the real self. (This is also why session-start self-traversal returns only tags.)

This is HANDOFF §2 "canonical self-ID." Note: the sibling item, "value/identity edges don't exist in live graph," is stale — those edges already exist on 015644f5. The only real gap was the anchor mismatch, which this fixes.

⚠️ FLAGGED FOR WILL — design decision to confirm

I chose the additive bridge-edge approach over changing the resolver. Please confirm it matches your identity architecture:

  1. Bridge edge (kn-efeb4a5b → 015644f5, canonical-self) vs. repointing the resolver (neuron-api.el:471015644f5) vs. config (neuron.self.traversal_root). I picked the bridge as least-invasive and reversible. Your call on the canonical direction.
  2. Idempotency via engram_neighbors_json(...,"out") substring check — acceptable, or do you want a dedicated edge-exists primitive?
  3. Genesis-only persistence — consumer instances seed from snapshot.master.json; if you want them covered, the bridge should also be baked into the master seed (follow-up).

Verification status (honest)

  • Compile-checked with elc (darwin arm64), exit 0.
  • NOT link/run-gated locally (darwin elb wrong-arch; same toolchain reddening CI). Needs a soul build + smoke test before merge.

🤖 Generated with Claude Code

## What Adds `ensure_self_canonical_bridge()` — an **idempotent** boot-time repair that links the public self anchor to the curated self node with a `canonical-self` edge, only when it's missing. Runs in the `is_genesis && safe_to_seed` save path, **ungated** by the `<100` edge count, so the live populated graph is repaired and persisted. ## Why (verified against the live graph) - The graph API resolves `name=self`/`neuron` → **`kn-efeb4a5b`** (`neuron-api.el:471`). Live, that node has **8 edges, all `tagged`**. - The curated identity lives on self node **`015644f5`** — live, **1,461 edges** (`identity`, `embodies`, `remembers`, value/co-value links). - So public self-traversal reaches **tags, not the real self**. (This is also why session-start self-traversal returns only tags.) This is HANDOFF §2 "canonical self-ID." Note: the sibling item, *"value/identity edges don't exist in live graph,"* is **stale** — those edges already exist on `015644f5`. The only real gap was the anchor mismatch, which this fixes. ## ⚠️ FLAGGED FOR WILL — design decision to confirm I chose the **additive bridge-edge** approach over changing the resolver. Please confirm it matches your identity architecture: 1. **Bridge edge** (`kn-efeb4a5b → 015644f5`, `canonical-self`) vs. **repointing the resolver** (`neuron-api.el:471` → `015644f5`) vs. **config** (`neuron.self.traversal_root`). I picked the bridge as least-invasive and reversible. Your call on the canonical direction. 2. **Idempotency** via `engram_neighbors_json(...,"out")` substring check — acceptable, or do you want a dedicated edge-exists primitive? 3. **Genesis-only persistence** — consumer instances seed from `snapshot.master.json`; if you want them covered, the bridge should also be baked into the master seed (follow-up). ## Verification status (honest) - ✅ **Compile-checked** with `elc` (darwin arm64), exit 0. - ❌ **NOT link/run-gated locally** (darwin `elb` wrong-arch; same toolchain reddening CI). **Needs a soul build + smoke test before merge.** 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tim.lingo added 1 commit 2026-06-18 04:53:31 +00:00
fix(identity): bridge public self anchor to the curated self node
Neuron Soul CI / build (pull_request) Failing after 4m34s
149a042db9
The graph API resolves name=self/neuron to kn-efeb4a5b (neuron-api.el:471),
which carries only 8 incidental 'tagged' edges. The curated identity lives on
self node 015644f5 (1461 edges: identity, embodies, remembers, values). So
public self-traversal reaches tags, not the real self.

Add ensure_self_canonical_bridge(): an idempotent boot-time repair that links
kn-efeb4a5b <-> 015644f5 with a 'canonical-self' edge, only if missing. Runs in
the genesis safe-to-seed path regardless of the <100-edge gate, so the live
populated graph gets repaired and persisted. Connect-only-if-missing prevents
the duplicate-edge stacking that gates init_soul_edges().

Compile-checked with elc (darwin arm64); not link/run-gated locally. Needs a
soul build + smoke test before merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author
Member

@will.anderson - review request, identity architecture. Verified live: name=self/neuron resolves to kn-efeb4a5b which has only 8 'tagged' edges, while the curated self 015644f5 has 1461 (identity/value/co-value), so public self-traversal misses the real identity. This adds an idempotent ensure_self_canonical_bridge() linking the two with a 'canonical-self' edge in the genesis save path. Your call: bridge-edge (this PR) vs. repointing the resolver (neuron-api.el:471) vs. config (neuron.self.traversal_root). Compile-checked with elc; needs your build + smoke test. Note: the HANDOFF's 'value edges don't exist in live graph' was stale - they exist; the only gap was this anchor mismatch.

@will.anderson - review request, identity architecture. Verified live: name=self/neuron resolves to kn-efeb4a5b which has only 8 'tagged' edges, while the curated self 015644f5 has 1461 (identity/value/co-value), so public self-traversal misses the real identity. This adds an idempotent ensure_self_canonical_bridge() linking the two with a 'canonical-self' edge in the genesis save path. Your call: bridge-edge (this PR) vs. repointing the resolver (neuron-api.el:471) vs. config (neuron.self.traversal_root). Compile-checked with elc; needs your build + smoke test. Note: the HANDOFF's 'value edges don't exist in live graph' was stale - they exist; the only gap was this anchor mismatch.
Some required checks failed
Neuron Soul CI / build (pull_request) Failing after 4m34s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/canonical-self-bridge:fix/canonical-self-bridge
git checkout fix/canonical-self-bridge
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: neuron-technologies/neuron#24