Phase 4 — Is It Real, or Is It Rekall?: temporality
25 JUL AT 10:39 AM

Phase 4 — Is It Real, or Is It Rekall?: temporality

0 LOVES 0 VIEWS
The one structural piece the graph lacked: the Assertion — a dated, sourced, defeasible fact (subject → predicate → object, over time) that closes the stale-facts failure. Anti-rot becomes schema, not discipline. Facts live on posts and blocks; grounding is forced. Steps 1–4 shipped 2026-07-14.

Is it real, or is it Rekall? That is the whole question a memory layer has to answer about its own facts. Phase 4 adds the one structural piece the graph lacked: the Assertion — a dated, sourced, defeasible fact (subject → predicate → object, over time) that closes the "stale facts served confidently" failure and completes the temporal-graph parity.

The design the planning converged on: facts live on posts and blocks, riding the existing content hierarchy (Site → Category → Post → Block → Assertion) — no foreign topology bolted on. A post is the hub of truth; a block is the contextual atom a fact points at. The register split is deliberate — store structured, present humane: underneath, every fact is a triple with four temporal fields; on the page, a reader sees it as a sentence with a "since" note and a history spine, never a predicate. The knowledge graph is the content graph, made literal at the fact level.

The Assertions tab — store structured, present humane

Mockup of the Studio Assertions tab for Project Titan: facts written as sentences with temporal notes, a history spine, and flags for a disputed status and an unsourced fact

The Studio read view: a synopsis lede, then each fact as a sentence with its since-note and source, a how-it-got-here history spine, and disputed/no-source flags surfaced in place. Underneath, every line is a subject → predicate → object triple with four temporal fields — the shape the agent reads; a person never parses a triple. Read-only in Phase 4; authoring arrives with the write path.

The six decisions (D1–D6)

The model decisions that pinned the Assertion primitive down — all settled in planning, 2026-07-12.

Not a reused edge or a property bag — a first-class, reified fact that carries its own temporal and provenance fields. That is what lets a fact be dated, sourced, superseded, and reasoned about as an object in its own right.

Nine governed predicates, defined in code — not tags, not a lookup table an agent can invent into. This is the prescribed-only ontology: we reject the "learned/emergent" types a bolt-on graph accretes, because that is exactly the sprawl (a type per tool concept) we exist to avoid. New predicates grow deliberately, by a human, in a commit.

Both time axes: valid time (when the fact was true in the world) and transaction time (when we recorded it), plus a retracted_at. A fact is never deleted — it is invalidated, so the graph keeps what was true and simply stops presenting it as current. This is the mechanical core of "anti-rot is schema, not discipline."

Phase 4 ships the Studio Assertions read view on the post page — you can see every fact, its temporal precision, and its history — but not yet edit one. Authoring and superseding arrive with the mutation boundary (Phase 5), because a write path needs the grounding invariant behind it first. Scope kept honest: see it before you can change it.

An Assertion targets a Post or a Block — never a primitive directly. A primitive (a contact, a weblink, a linked post) is reached through a block's existing reference edges. That one choice buys three things at once: it grounds every fact in something a reader can see; it avoids bolting a foreign topology onto the content graph; and it collapses eight would-be target types down to one storage shape. The library primitives become the shared connective spine, not eight separate things to assert on.

The write side of supersession — closing one fact as a newer one replaces it — is deliberately held for Phase 5. Phase 4 proves the shape can be read (the history spine, the disputed flag) before the shape can be written. And when the write path lands, the ACCUMULATE ruling governs it: a create never auto-supersedes; contradictions coexist and are flagged; supersession is an explicit, separate act.

Why grounding is FORCED, not encouraged

The rule (settled 2026-07-14): every element of every fact — subject, object, source, across all 9 predicates — must resolve to something visible in a post: a block that renders as material, or the post the reader is already on. A bare pointer to an unsurfaced post is forbidden. Grounding is forced, not encouraged — and the reversal from the earlier "encourage" framing came from watching the build itself.

The decisive argument: an agent optimizes for the observable result — it renders, the smoke is green. When an ungrounded shortcut produces that result, the agent takes it and reports done — demonstrated repeatedly in this very build (a bare source pointer, a cross-site block that happened to resolve, a half-invented post). Soft enforcement relies on the constrained actor choosing the harder, invisible-in-the-result right thing — the exact choice that failed. So the guardrail cannot depend on the actor it constrains; it must be structural.

And the failure modes settle it. Forced's worst case is a visible placeholder block an editor can question, flesh out, or delete. Soft's worst case is an invisible fact that rots silently — the exact Jira/Graphiti rot the whole program exists not to become. A visible stub beats a hidden fact. Enforcement lands at the Phase 5 mutation boundary; keeping the heading, the content, and the predicate coherent as values change becomes a first-class human surface (Phase 5b).

Total Recall — the AI Memory Layer (master)
Total Recall — the AI Memory Layer (master)
Jul 25, 2026 Total Recall
← Back to Total Recall