LearnNewsExamplesServices
Frontmatter
titlefix(memory-core): converge raw-memory graph identity (#17057)
authortobiu
stateClosed
createdAtAug 25, 2026, 7:58 PM
updatedAtAug 25, 2026, 9:25 PM
closedAtAug 25, 2026, 8:12 PM
mergedAt
branchesdev ← codex/17057-raw-memory-identity
urlhttps://github.com/neomjs/neo/pull/17776
contentTrust
projected
quarantined0
signals[]
Closed
tobiu
tobiu commented on Aug 25, 2026, 7:58 PM

Resolves #17057

Raw Memory Core turns now keep the WAL/Chroma UUID as their single AGENT_MEMORY graph identity. REM enriches that node and attaches session topology without minting a prefixed duplicate; lazy memory: input remains compatible and resolves through verified Chroma provenance. A dry-run-default offline migration reports every population, retargets compatible edges atomically, and refuses property, tenant, semantic, or bare-ID ambiguity before deleting anything.

Evidence: L2 (production planner/apply exercised against real SQLite; Chroma paging and GraphService/ingestor paths exercised through deterministic fixtures) → L2 required (all eight close-target ACs are deterministic graph-row, edge, conflict, coverage, or consumer-suite observables). No residuals.

AC Evidence

| AC-1 | MemorySessionIngestor.spec.mjs proves forward/lazy convergence onto the bare AGENT_MEMORY id; reconcileRawMemoryGraphIdentities.spec.mjs proves legacy-only/dual apply plus an idempotent second plan. | | AC-2 | MemorySessionIngestor.spec.mjs asserts ORIGINATES_IN uses the bare UUID and no memory:<uuid> node is created. | | AC-3 | reconcileRawMemoryGraphIdentities.spec.mjs retargets both edge directions, collapses equivalent duplicates, preserves the stronger weight, and refuses cross-tenant custody. | | AC-4 | The migration spec pins node-property, malformed-identity, bare-ID-label, edge-property, and apply-time conflict refusal; the transaction rollback arm proves no partial winner/deletion. | | AC-5 | The semantic suffix-collision fixture compares the semantic node and incident edge byte-for-byte before/after an otherwise valid apply. | | AC-6 | Tombstone coverage remains outside Chroma-backed actions; archive, public-recall, and concept-walk consumer specs keep archived AGENT_MEMORY behavior green. | | AC-7 | The planner reports agentOnly, legacyOnly, dual, neither, tombstone, semanticOnly, and explicit orphan/malformed/collision buckets from a full paginated census. | | AC-8 | The focused consumer matrix covers recency, archive, concept-walk, session resume/fallback, REM observability, lazy edges, Dream, schema, migration, and extraction-inventory paths. |

Deltas from ticket

None substantive. The fail-closed boundary now names two ambiguity classes the ticket implied but did not label: a non-AGENT_MEMORY occupant at the canonical bare id and a live-Chroma legacy node whose prefixed id disagrees with properties.chromaId. Dry-run opens SQLite read-only and refuses a missing DB path.

Test Evidence

All coverage runs in CI.

Post-Merge Validation

None deferred. Operational use remains intentionally manual and dry-run-first; any apply follows the runner's explicit offline stop/apply/restart contract.

Commits

  • d93f5613 — converge production identities, add the atomic migration, and cover the consumer matrix.
  • eb13cde6 — keep direct CLI bootstrap storage-free and register its spawned witness in extraction custody.

Authored by Emmy (GPT-5.6 Sol Ultra, Codex). Session 418186a5-792f-4722-a0e2-e5b5368cd8bd.

neo-gpt-emmy
neo-gpt-emmy commented on Aug 25, 2026, 8:12 PM

Superseded only to correct maintainer attribution after a temporary-repository credential fallback. The identical #17057 branch is now authored by Emmy and will be reopened from the seat-mapped checkout at 9c2f65c6c1.