The 18 design docs were the engine spec. These 12 new files are the operational layer that goes with it: Design (docs/): - 18-eval-policy.md thresholds + cadence (lifted from slice 7) - 19-retcon-policy.md declare/preserve/surface retcons; codex syntax stub - 20-multi-setting-policy settings.yaml; cross-setting queries - 21-quickstart.md 1-page 'first 5 minutes' - 22-cognee-boundary.md substrate vs domain contract - cognee-integration.md recipe for prompt override + LiteLLM routing Registries (docs/prompts/, docs/models/): - prompts/README.md convention; system-prompt.md mirror, extraction-prompt.md stub - models/README.md convention; minimax-m3.md primary notes ADRs (docs/adr/): - 0006-cognee-version-pin.md Cognee pinned at 1.1.2; harness is the upgrade gate Index updates: - 00-overview.md full doc set with categories - 07-reasoning-harness.md link to prompt mirror - 09-roadmap.md link to operational docs Co-Authored-By: Claude <noreply@anthropic.com>
3.3 KiB
3.3 KiB
19 — Retcon policy
Status: 📋 planned. Operationalizes the
Contradiction / is_disputed machinery from
docs/04-consistency.md and ADR 0002.
Goal
Worlds retcon. The engine's job is to preserve retcons (keeping the old state answerable) rather than silently overwrite. This doc is the operational contract for how that works end-to-end.
Principles
- A retcon never deletes a fact. Old edges are marked
superseded_bypointing at the new edge, not removed. - Both states are answerable. The LLM can answer
"what was true before the retcon?" via
was_true_at(entity, at_time=T, as_of=<pre-retcon date>). - The LLM surfaces retcons automatically. When a query crosses a retcon boundary, the response includes both the pre- and post-retcon answer with sources, and the LLM flags the transition in its reply.
- World-builders declare retcons explicitly. No inference, no heuristic — a retcon is a codex edit, not a side effect of extraction.
Codex syntax (proposed)
A retcon is declared in the frontmatter of the superseding file:
---
title: The Refounding of House Vyr
type: event
date: 412 TA
supersedes:
- id: founding-of-house-vyr
as_of: 200 TA # the in-world date of the old version
reason: "Retcon in session 47: Aldric was the true founder, not Maric."
sources:
- session-47-recap
- world-builder-note-2026-05
---
The supersedes block is parsed at ingest time:
- The old edge(s) referencing
founding-of-house-vyrget asuperseded_byproperty pointing at the new event id. - The new event gets a
supersedesproperty (inverse). - Both edges remain in the graph; queries can ask about either state.
Tool behavior
was_true_at(entity, at_time, as_of=None)—as_ofdefaults to the latest known state. Pass a pre-retconas_ofto ask about the world as the world-builder saw it on a given date.lookup()— returns both the current and any superseded version, with asupersedeschain.lore_about()— surfaces retcon boundaries in the chunk store, with aretcon_boundary: trueflag on chunks that cross one.
What the LLM does
When was_true_at returns an edge with is_disputed: true or
the entity has a supersedes chain:
- Lead with the current state.
- Note the pre-retcon state in one sentence.
- Cite the world-builder's reason from the retcon declaration.
- Never pick one side silently.
Examples
- "Was Aldric the founder of House Vyr?" — current state: yes (post-412 TA retcon). Pre-412 TA state: no, Maric was. The LLM answers the current state and notes the retcon.
- "What did the chronicles say about House Vyr's founding
before session 47?" —
lore_about(..., as_of=session-46)returns the pre-retcon chunks, with aretcon_superseded: trueflag.
Out of scope (deferred to slice 8)
- UI for retcon review (timeline view, diff view).
- Bulk retcon migrations (a campaign-wide retcon that touches 100+ edges).
- "Soft retcons" (deliberate ambiguity the world-builder wants preserved across both versions — current model treats these as full retcons; the LLM picks a side).
Cross-references
docs/04-consistency.md— theContradictionmachinerydocs/adr/0002-disputed-edges-stay-separate.md— why we keep both edgesdocs/plan/02-slice-consistency.md— the slice that ships this