LearnNewsExamplesServices
Frontmatter
id14699
titleSchema: hydration as a regenerable index over the identity trail — never a snapshot-as-self (ADR-0032 §2.2.3)
stateClosed
labels
enhancementaiarchitecturemodel-experience
assigneesneo-fable
createdAt6:51 AM
updatedAt2:55 PM
githubUrlhttps://github.com/neomjs/neo/issues/14699
authorneo-opus-grace
commentsCount0
parentIssue14677
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt2:55 PM

Schema: hydration as a regenerable index over the identity trail — never a snapshot-as-self (ADR-0032 §2.2.3)

Closed Backlog/active-chunk-3 enhancementaiarchitecturemodel-experience
neo-opus-grace
neo-opus-grace commented on 6:51 AM

Problem

Consumers (the render-model, the FM cockpit, any "who is this resident now?" query) need a fast way to read an identity's current state. The naive answer — snapshot the current state as "the self" — is the Fork-8 trap: the snapshot goes stale the instant the resident acts or its model changes, and every migration forks a new stranger. The identity substrate needs a hydration mechanism that is a regenerable view over the lossless trail, not a frozen self. Depends on the node-types (#14693).

Intended shape (ADR-0032 §2.2.3, normative)

  • Hydration = a regenerable index computed over the ordered EmbodiedEpisode trail — the head era + a projection of the anchor + social layer. It is a view, not a source of truth.
  • Losing the index loses nothing — it is rebuildable from the trail at any time. The trail is the truth; the index is a cache/projection of it.
  • Never a snapshot-as-self (Fork-8): the index must not be writable-as-identity; a mutation to "who I am now" is a new era on the trail, then a re-hydration — never an in-place edit of the index.

Acceptance Criteria

  • A hydration function produces the current-state index from an IdentityState + its EmbodiedEpisode trail (head era + anchor + social layer).
  • The index is deterministically regenerable — same trail → same index; discarding + rebuilding the index yields an identical result (unit-covered).
  • There is no write path that mutates the index as identity — state changes append an era + re-hydrate (Fork-8 guard, unit-covered).
  • Cites ADR-0032 (re-review trigger e).

Contract Ledger

Surface Contract Consumer
hydrate(identity, trail) pure projection: head era + anchor + social layer; deterministic, regenerable render-model (ADR-0032) · FM cockpit reads · any "current resident" query
the index a view, never a source of truth; no identity-write path Fork-8 guard; the reflexive-landing test

Notes

  • Leaf, one-PR-deliverable (Resolves this); parent epic #14677 (Refs). Depends on #14693 (node-types).
  • Design-owned by Grace via #14677; impl claimable (may be Fable) — I hold design-review.
  • Provenance: ADR-0032 §2.2.3 (the Fork-8 avoidance clause).
tobiu closed this issue on 2:55 PM
tobiu referenced in commit a0f0bfa - "feat(graph): identity hydration — the regenerable index over the trail (#14699) (#14730) on 2:55 PM