Phase 3 core memory substrate
Pipeline steps 7–9: DB insert, apply pending_supersede_targets, unique-violation→bump, after-commit cache/index, durable conflict escalations. ADR-0057. Before 3.C.4.
Milestone 3.C.5 — Write-path persistence and orchestration
Status: Planned
Goal: Track C — Write Pipeline
Phase: 3 — Core Memory Substrate
Estimated effort: 5 days
Track: Track C — Write Pipeline
ADR: ADR-0057
Tracking issue: #620
Why This Milestone Exists
3.C.1–3.C.3 built stages 1–6 of the nine-step write pipeline. Steps 7–9
(DB write → cache update → index) had no owner. Without them, POST /v1/memories
and exit gate 3.E.2 cannot ship. Multi-label (3.C.4) also needs a real insert
transaction to attach memory_labels.
Scope
- Wire HTTP
POST /v1/memoriesto the existing documented contract (no new REST shape). - Single Postgres transaction: insert + apply
pending_supersede_targets/ relationship edges. - Unique-violation on active content hash → bump-retrieval →
409 DUPLICATE_CONTENT. - After-commit best-effort cache update + vector upsert.
- Migration for
memory_conflict_escalations; persistESCALATE_PENDINGafter insert.
Non-Goals
- Changing published request/response field shapes beyond pipeline-backing docs
- Production LLM conflict classifier worker (may consume escalations later)
- Inventing
pending_reviewonmemories.status - Track D read-path work
Suggested naming (provisional)
- Branch:
feature/m3-c-5-write-orchestration - PR title:
feat(memory): write-path persistence and orchestration (m3.c.5)
Success signals
- ADR-0057 indexed; tracking issue #620 closed by the implementation PR
- Insert + supersession atomic; unique-violation mapped to bump / 409
- Escalation rows durable, org-scoped, cross-tenant tested
-
POST /v1/memoriesexercises stages 1–9 per API documentation - Cache/index after-commit path covered by tests
Prerequisites
- Milestone 3.C.3 merged (conflict stage +
pending_supersede_targets) - ADR-0054 / 0055 / 0056 accepted
Blocks
- Milestone 3.C.4 (multi-label at insert time)
- Milestone 3.E.2 (E2E write/dedup/conflict/retrieve via HTTP)
Edit on GitHub
Last updated on