Skip to main content
Status: accepted · Version 0.1 · Filed 2026-04-21
Extends SPEC-025’s write-hook from CREATE-only to mutations. Every UPDATE, retirement, rename, and direct-SQL change flows through :SUPERSEDED_BY events on :EntityState chains so prism_state_as_of returns historically-correct state. Architecture: Postgres IS the queue. Five parts — (1) intent-queue write hook (UPDATE writes trigraph_write_intents row same txn, returns fast, ~1ms added latency); (2) background worker drains intents per-entity FIFO with backoff + dead-letter; (3) reconciler catches direct-SQL divergence with event_type=‘reconciled’; (4) event_types reference table for code+description+category (Postgres authoritative, 9 seed codes); (5) :UPDATE_ATTEMPTED self-loop edge for no-op PATCHes preserving transaction-time audit. Historical backfill explicitly OUT OF SCOPE — Postgres doesn’t store old column values, can’t reconstruct pre-SPEC-026 mutations faithfully. 5-PR arc: PR1 event_types seed; PR2 intents table + service hooks; PR3 worker; PR4 reconciler; PR5 no-op edge path. All additive migrations. See on-disk v0.1 draft at docs/specs/spec-026-v0-1-trigraph-update-propagation.mdx for full architecture, verification, acceptance, 6 open questions. Decisions settled via 2026-04-21 Frank/Donna exchange: async-via-Postgres-queue (not external MQ), :UPDATE_ATTEMPTED edges for no-ops, enum+reference-table for event_types, honest punt on historical backfill, reconciler catches direct-SQL drift. Status: draft
Last modified on April 22, 2026