Documentation

Perdura — Design Document

Tagline: The mind that outlives its models. Name: From perdurantism — the philosophy that a thing persists as a series of temporal parts rather than one enduring object. Also literally "it endures" (Spanish/Italian/Portuguese). Namespace verified clean on PyPI, npm, and GitHub as of 2026-06-09. Author: Bennett · Date: 2026-06-09 · Status: Draft v0.1


1. Thesis

A persistent knowledge graph that outlives every model that works it, building an attributed, per-model track record of which LLMs to trust — in which domains — as it goes.

Conventional multi-agent systems treat agents as persistent and memory as incidental. Perdura inverts this: memory is the persistent entity; LLMs are ephemeral workers that board, contribute graph deltas, and disembark. The "mind" survives every model that ever powered it.

2. Novel claims

These are the three claims this project exists to prove. Each layer requires the one before it.

  1. Inverted persistence. The knowledge graph is the system of record. Models are interchangeable, stateless labor. A model can be swapped mid-task with zero loss of working state because no working state lives in the model.
  2. Per-model epistemic track records. Every node and edge is attributed to the model that produced it, with a confidence score. Over time the graph accumulates evidence about which models are reliable in which domains — the memory evaluates its workers.
  3. Contention-driven economics. Routing decisions are made on epistemic state, not just cost. Cheap/local models are the default labor force; expensive frontier models are summoned only when contradiction-edge density rises in a subgraph or a high-stakes node is contested. Spend money where the graph disagrees with itself.

Status note (2026-06-25): claim 3's escalation trigger has been revised by data, not reversed. The real 6-run A/B (docs/phase3-ab-results.md) found contention-triggered escalation never beats periodic escalation on outcome flips at equal cost (5 losses, 1 tie). Cheap-by-default and frontier-summoned-to-bound-spend both still stand; what changed is which signal decides when to summon — the shipped router's recommended default is now a periodic cadence (perdura_router.py), with contention-triggered escalation kept as a fully supported research arm (its targeting precision — finding the hottest live disagreement — is confirmed; its economic payoff is not). See CLAUDE.md's claim 3 and docs/phase3-ab-results.md for the full record.

3. Prior art positioning (what this is not)

Survey updated 2026-06-10 — closest new neighbors since the draft:

Borrowed infrastructure is a feature, not a compromise: graph storage, embeddings, and hybrid retrieval are solved problems (ChromaDB, BM25+dense — same stack as forge-rag).

4. Architecture

┌─────────────────────────────────────────────────────┐
│                    THE TRAIN (persistent)            │
│                                                      │
│   Knowledge Graph ──── Retrieval Index (Phase 1.5)   │
│        │                                             │
│   Conductor (deterministic code + thin LLM step)     │
│        │                                             │
│   Router / Registry (Phase 3)                        │
└────────┬────────────────┬────────────────┬──────────┘
         │ board          │ board          │ board
     ┌───┴───┐        ┌───┴────┐       ┌───┴───┐
     │ Qwen  │        │ Claude │       │Gemini │   ← STATIONS (ephemeral)
     └───────┘        └────────┘       └───────┘

5. Graph schema

Node types

Type Meaning
question An open question driving work. Has status: open/resolved
claim A position/assertion. Has confidence: 0–1
evidence Supporting material, source-attributed
decision A resolved choice, links to the claims that won
rejected A path abandoned, with the reason (prevents re-litigating)

Common node metadata

id, type, text, domain_tags[], created_by (model id), confidence, created_at, superseded_by (nullable)

Edge types

Type Meaning
supports claim/evidence → claim
contradicts claim ↔ claim (drives contention metrics)
refines claim → claim (sharper version)
answers claim → question
depends_on claim/decision → claim/decision

Contention metric (the routing signal)

For any subgraph S:

edge_signal(S) = contradicts_edges(S) / claim_nodes(S), confidence-weighted
contention(S)  = (1 - w) * edge_signal(S) + w * embedding_scatter(S)

where embedding_scatter is the mean pairwise epistemic distance of S's claims in memoric binary (docs/memoric-binary.md §4.3). The default w tracks Phase 0 status: w = 0 (edge-only) until experiments 1 and 3 pass (docs/phase0-validation.md), then 0.5. Opt in early with --memoric-weight 0.5. Rising contention → escalate to a stronger or domain-specialist model.

6. Worker lifecycle ("stations")

  1. Board — conductor selects open questions (Phase 1: round-robin; Phase 3: routed) and assembles a briefing: the open question(s) plus the 1–2 hop neighborhood of relevant nodes, capped at a token budget.
  2. Contribute — worker returns a strict-JSON delta: new nodes, new edges, confidence updates, and optionally supersedes references. No prose.
  3. Validate & merge — conductor schema-checks the delta, assigns IDs, stamps attribution, merges, recomputes contention.
  4. Disembark — worker is released. Nothing it "knew" is lost because it never knew anything the graph didn't.

Swap triggers (Phase 3): cost/usage budgets, domain-tag match to a specialist model, stagnation (no new edges for k turns), or contention escalation.

7. Phase plan

8. Open research questions

  1. Does briefing-only context (no transcript) degrade contribution quality vs. full-history debate, and at what graph size does it win?
  2. What contention threshold actually predicts "a frontier model will change the outcome here"? (Measure: how often escalation flips a consensus.)
  3. Do small local models contribute net-positive deltas or mostly noise the conductor must filter? (Per-model precision of merged-and-surviving nodes.)
  4. Who compacts best — should superseding/merging of stale claims be deterministic, done by the departing worker, or by a dedicated model?

9. Risks