Status: accepted · ADR-23 · Filed 2026-04-20
Decision
Prism’s knowledge representation migrates from a single-layer Concept/Memory/MENTIONS co-occurrence graph to a three-layer architecture: Canonical (type ontology + entity identity), Semantic (aliases + typed references), Temporal (state versions + supersession events). Full contract in SPEC-020 (memory deltas 56e279ac + 4c910dd8 + 0ddd894b). Promotes the original acceptance memory (delta 966082d0, initially labeled ‘ADR-22’ via the ADR-field-collapse workaround) to the formal ADR table. Formally ADR-23 because ADR-22 was taken by the CORSMiddleware decision filed earlier same day.
Rationale
The 2026-04-19 session surfaced a structural retrieval defect: stale facts (‘PrismGR’, legacy Windows paths) ranked equally with current-state facts because the retrieval layer had no temporal model. First instinct (recency decay on RRF fusion) was rejected — theater on short-horizon projects. Second instinct (Postgres facts table with valid_from/valid_until) was rejected as SQL-shaped thinking for a graph-shaped problem. The correct architecture is three distinct graphs for three distinct reasoning modes, drawn from Frank’s prior SDO (Self-Discovering Ontology) work. Separation rule: canonical identity never carries mutable props; mutable state lives on temporal version nodes; the pointer from canonical to ‘current state’ is computed by traversal, never stored. The architecture delivers: entity identity survives rename, aliases resolve at retrieval time, point-in-time queries are first-class, causality is queryable, and the graph leg of hybrid RAG finally earns its keep. Shipped 2026-04-19/20 across Waves A-F — 199 entities + 46 references on PID-PGR01 server1, 25/25 smoke tests green, zero aggregate perf regression.
Alternatives Considered
(a) Recency decay on RRF fusion: theater on short-horizon projects, discriminates nothing when all facts are within one week. Rejected (TODO #77 kept open as considered-alternative). (b) Postgres facts table (bitemporal rows): works but confines event causality to joins, loses graph-native traversal. SQL-shaped solution to graph-shaped problem. Rejected (TODO #79 kept open). (c) Ad-hoc SUPERSEDES edges on existing Concept graph: treats symptom (renames) not disease (no temporal model). Subset of tri-graph, not replacement. Rejected (TODO #78 kept open; subsumed by tri-graph). (d) Per-ptype hardcoded ontologies: would work for application ptype but fail for research/travel. Tri-graph’s ptype-declarative Canonical mechanism generalizes. (e) Keep current graph + smarter ingestion heuristics: does not address identity stability across renames, no point-in-time queries, no alias/reference separation.