{"path":"research/truth-graph-evidence-system.md","content":"# Truth Graph, Evidence, and Short Authored Input\n\n**Date**: April 8, 2026\n**Status**: Design synthesis plus first implementation slices. Incorporates the Apr 5 Claude mobile thread, the remote `claude/truth-graph-evidence-system-akm9a` branch, screenshot/OCR recovery, and the Apr 8 short-input failure analysis.\n**Type**: Architecture + UX + ontology note\n\n> **Status update (Aug 13, 2026) — read this before the sequence below.** Much of what this doc calls \"suggested\" has **shipped**. `deliberus/truth_graph.py` is 1,044 lines in production behind `POST /query`: retrieval, subgraph expansion, QBAF badges, gap detection, contested-concept detection, bridging detection, LLM synthesis at three depths, `QuerySynthesis`, deliberation-draft promotion, and a deterministic fallback. Phases 2–5 of § Suggested Implementation Sequence are substantially done. **Open Question 3 is answered**: the UI labels graph-backed versus background knowledge via `graph_status` (`graph_backed` / `mixed` / `background_only`) plus a one-sentence `graph_note`.\n>\n> **The half this doc named first is now also built** (2026-08-13). § Truth Graph As Read Layer specifies an answer \"inspectably connected to supporting/challenging chains, bridging claims, gaps, contested concepts, and claim references,\" and sketches a `claim_refs` array. That array shipped as `cited_claim_ids` on `QuerySynthesis`, four months late, and the reason for the delay sat upstream of the schema the whole time: `format_context_for_synthesis` never passed `claim_id` to the model, so it could not cite claims it was never shown. Every claim line now carries its `(id: ...)`, and every reported id is validated against the shown set — an unvalidated citation field is worse than none, because it manufactures auditability the reader cannot check.\n>\n> **Two things this doc never designed for are also live**, and they are the part that makes flattening measurable rather than merely disclosed: claims truncated by the depth budget *before the model sees them*, and claims shown but unused. Both are reported by `deliberus/synthesis_ledger.py`, along with whether conflicts reached the answer with both sides intact. This doc searched for \"omit\" and \"left out\" returns nothing, which is the honest measure of how much of the honesty layer was designed here versus found later.\n>\n> Build record, including where the build corrected the plan: **`synthesis-build-plan.md`** § 7. Treat that as the live document for this thread; treat this one as the design record it draws on.\n\n---\n\n## Executive Summary\n\nShort authored inputs should not be treated as failed source extractions. When someone types a question, a topic, or a few sentences into the landing page, Deliberus should both:\n\n1. **Respond conversationally** from the current truth graph, matching the user's brevity, lingo, and apparent level of complexity.\n2. **Prepare graph structure** by deriving provisional claims, questions, contested terms, value premises, or evidence needs, then asking for lightweight confirmation before publishing durable graph nodes.\n\nThis is the analysis-attunement dialectic made concrete. Pure extraction over-analyzes: it demands a formal source-like object before meeting the person. Pure chat over-attunes: it helps in the moment but fails to deepen the graph. The Deliberus move is to answer like a thinking companion while turning the interaction into graph-deepening structure when the user confirms.\n\nThe working rule:\n\n> Short authored input should always produce a conversational response, may produce private draft structure immediately, and should only produce durable public graph structure after confirmation.\n\nThe branch `6dc27e8` started the lower-level truth-graph/evidence work: a `/query` endpoint, a `deliberus/truth_graph.py` read layer, quantitative claim metadata, and methodology-adjusted QEM priors. At merge time it did not yet implement the landing-page dual path, short-input classifier, or final LLM synthesis response; the Apr 8 continuation added the first read-only version of that authored-input loop.\n\n---\n\n## Source Material Recovered\n\nThe source set for this synthesis is:\n\n- the current `master` docs and production behavior\n- the remote branch `origin/claude/truth-graph-evidence-system-akm9a`\n- the screenshot archive at `/Volumes/FERMI/MacMini-archives additions/Screenshots/Deliberus QEM truth graph input lingo etc screenshots`\n- the Apr 8 retry of a user's short authored input, which completed successfully but produced zero claims\n- the follow-up design discussion about \"why not both?\"\n\nThe screenshot archive had 37 files and 20 unique image contents. OCR recovered the relevant thread well enough to establish the intended product direction:\n\n> When someone asks a question or just gives a topic in the landing page textbox, Deliberus should give its best assessment of that topic or answer to that question, roughly matching level of complexity and brevity, and always try to be pedagogical.\n\nThe same thread then pivoted into QEM, quantitative evidence, evidence-as-subgraph, methodology tiers, and a `/query` endpoint. That explains the branch: the product motivation was short conversational input, but the committed slice was mostly truth-graph/evidence substrate.\n\n---\n\n## What Went Wrong For Short Authored Input\n\nThe failure after the Temporal activity registration fix was not an infrastructure crash. The retry completed and returned zero claims because the current pipeline expects argument structures: a conclusion plus premises, evidence, or reasoning.\n\nA short authored question can be intellectually meaningful while failing that extraction contract.\n\nCurrent path:\n\n1. The landing route runs preflight.\n2. Preflight calls scout and builds seed claims only from detected argument structures.\n3. If scout finds no arguments, preflight returns `count: 0`.\n4. The frontend treats `count: 0` as \"nothing to clarify\" and launches full extraction.\n5. The Temporal workflow exits early when no claims are produced.\n6. The frontend shows a generic failure message.\n\nThe mismatch is conceptual: an authored prompt like \"how should capitalism be transformed to avoid inequality and perverse profit incentives?\" is not a source document. It is a question, goal, topic seed, and maybe an implicit normative premise. It should not be forced through the source-extraction path as if it were an essay.\n\n---\n\n## The Dual Path: Answer and Structure\n\nThe better path is not \"query instead of extraction.\" It is \"answer and structure.\"\n\n### Attunement Path\n\nThe system first asks: what is the user trying to do here?\n\n- If the input is a short question, answer it as a question.\n- If it is a broad topic, give a map of the live terrain.\n- If it is a half-formed value concern, reflect it back in better words.\n- If the graph has relevant content, synthesize from the graph.\n- If the graph is thin, say so honestly and optionally use general model knowledge with a clear caveat.\n\nExample:\n\n> Deliberus does not have much structured evidence on this exact question yet. From background knowledge, this looks like a question about incentive design: how to keep productive coordination while preventing profit from rewarding externalized harm. I can help turn that into a few claims and evidence needs if you want.\n\n### Analysis Path\n\nAt the same time, Deliberus derives provisional structure:\n\n- user question: \"How can capitalism be transformed so incentives reduce inequality rather than amplify it?\"\n- possible normative goal: \"Economic incentives should reduce inequality rather than amplify it.\"\n- possible contested terms: \"capitalism\", \"profit\", \"inequality\", \"incentive\"\n- possible evidence needs: empirical evidence about incentive designs, distributional effects, and governance models\n- possible next prompts: \"Do you mean redesign markets, restrict profit, change ownership, or change externality pricing?\"\n\nThis provisional structure can power the immediate answer and one Socratic follow-up, but it should not be written as durable public graph structure without confirmation.\n\n### The Product Rule\n\nCapture immediately, publish deliberately.\n\n1. **Raw input event**: preserve the exact user text as private/session provenance, at least temporarily.\n2. **Provisional interpretation**: derive possible question/claim/topic/goal structure and use it for the conversational turn.\n3. **Graph contribution**: publish confirmed claims, questions, clarifications, or evidence requests only after the user accepts or edits them.\n\nThis respects the user's intellect. The system does not silently impose ontology on a half-formed thought, but it also does not throw the thought away.\n\n---\n\n## One Evolving Graph, Not A Separate Draft World\n\nThe next refinement is important.\n\nThe right distinction is not:\n\n- extraction writes directly into the graph\n- conversational authored input waits outside the graph in a separate draft universe\n\nThe right distinction is:\n\n- what kind of object is being stored\n- how well grounded it is\n- what lifecycle state it is in\n- how strongly it should influence the shared graph by default\n\nThe main extraction pipeline already writes immediately into the graph and then continues to refine its output through decomposition, clarification, evidence, voting, and better linking. Short-authored-input work should be allowed to evolve the same way. The mistake would be to treat every stored thing as equally mature or equally ready for default retrieval.\n\n### The Better Model\n\nOne evolving graph, with staged maturity.\n\nThat means Deliberus should preserve three layers in one coherent system:\n\n1. **Raw deliberation trace**: the exact user wording, the assistant's first answer, and the later back-and-forth.\n2. **Draft structure**: candidate claims, contested terms, evidence needs, decompositions, and sharpened reformulations derived from the exchange.\n3. **Canonical/shared structure**: the parts that have become stable enough to count as durable public graph content.\n\nThis is not three separate products. It is one graph with clearer lifecycle semantics.\n\n### What Should Be Saved Immediately\n\nFor a broad authored question like:\n\n> how to transform capitalism to bridge inequalities and go beyond a profit-is-all paradigm\n\nDeliberus should be allowed to save immediately:\n\n- the raw question\n- the assistant's first substantive answer\n- candidate claims and terms extracted from that exchange\n- follow-up questions and later clarifications\n\nBut those saved objects should not all behave like equally strong public claims.\n\n### Lifecycle And Provenance\n\nThe missing piece is not \"storage or no storage.\" It is explicit lifecycle and provenance.\n\nThe useful direction is:\n\n- `origin`: source extraction, user-authored, assistant synthesis, CQ generation, human clarification, etc.\n- `lifecycle`: raw, draft, candidate, canonical, superseded\n- `scope`: private, shared-unreviewed, shared\n- `derived_from` / `clarifies` / `responds_to` / `decomposes_into` / `supersedes`: lineage between earlier and later structure\n\nThis keeps rough material preservable without pretending it is already canonical.\n\n### Retrieval Influence Should Track Maturity, Not Mere Recency\n\nBlocking recently entered claims just because they are recent would be a crude proxy.\n\nThe better rule is that default retrieval influence should evolve with epistemic status:\n\n- stronger claims, better-supported decompositions, and clarified terms should naturally matter more over time\n- raw or weakly grounded draft material should remain inspectable and reusable, but not dominate first-pass retrieval for other users\n- the graph should treat maturity as an evolving function of provenance, clarification, support, decomposition, and later QBAF/QEM/Bayesian evaluation, not as a fixed age gate\n\nThat is more aligned with the rest of Deliberus: one evolving structure whose better-grounded parts increasingly carry more of the shared reasoning load.\n\n### First Implementation Slice (Apr 8, 2026, later evening)\n\nThe first version of this policy is now in code.\n\n- Claim nodes can carry `maturity_stage` and `retrieval_weight`.\n- New stored claims now default to `candidate` maturity unless the writer sets something else explicitly.\n- Default public truth-query retrieval and public feed surfaces suppress `raw`, `draft`, and `superseded` material.\n- Those same surfaces also honor an explicit retrieval-weight threshold, so even a `candidate` claim can be held back until it earns enough default influence.\n\nThis is not the full promotion system yet. It is a guardrail.\n\nWhat it does well:\n\n- rough material can now be saved without automatically steering every newcomer-facing surface\n- the product no longer needs age-based hiding as a crude stand-in for maturity\n- the graph can remain one graph while still distinguishing what should lead first-pass public reasoning\n\nWhat it does not yet do:\n\n- persist the full multi-turn authored-input conversation as an evolving first-class object\n- promote claims automatically based on clarification, decomposition, evidence, votes, QBAF/QEM, or later Bayesian evaluation\n- expose lifecycle state clearly in the UI\n\nSo the implementation has crossed an important boundary: staged maturity is no longer only a design idea, but it is still only the first slice of the deeper lifecycle model.\n\n### Second Implementation Slice (Apr 8, 2026, late night)\n\nThe next slice is now live too.\n\n- `/query` can persist a `deliberation_drafts` record in Postgres.\n- That draft can store the raw user turn, the assistant's first answer, the current truth-graph/background context, the synthesized first-take object, and heuristic promotion metadata.\n- Draft persistence is best-effort rather than part of the critical response path: if saving fails, the user still gets the answer.\n- The first promotion metadata is intentionally weak and explicit: `current_stage` starts as `draft`, `next_stage` becomes `candidate` only when the exchange already has enough provisional structure to review, and the default retrieval weight remains low enough that this material does not crowd public first-pass retrieval.\n\nThis matters because the system no longer has to choose between \"save nothing\" and \"publish too much.\" The first conversational exchange can now survive as inspectable material without pretending it is already canonical.\n\nThe deeper gaps remain:\n\n- multi-turn continuation of the same deliberation draft\n- UI visibility of draft state and promotion readiness\n- promotion that preserves lineage into claims, clarifications, decompositions, and evidence links\n- better criteria than simple heuristic blockers/signals\n\n### Third Implementation Slice (Apr 8, 2026, very late)\n\nThe first real continuation loop now exists too.\n\n- `/query` can accept an existing `draft_id`.\n- If that draft belongs to the current user, Deliberus loads the recent turn trace and previous first answer before synthesizing the next turn.\n- The synthesis prompt now treats the new query as the next step in the same conversation rather than a fresh restart.\n- The same `deliberation_drafts` record keeps growing across turns instead of creating a new disconnected draft every time.\n- The landing-page authored-input path now preserves that `draft_id`, so \"keep going\" actually means \"continue this same thread.\"\n\nThis is still not the full deliberation lifecycle. It is the first continuity slice.\n\nWhat it solves:\n\n- the user can clarify a broad question across turns without losing the earlier answer\n- draft persistence is now useful for dialogue, not just for one-shot auditability\n- the system no longer has to choose between \"first take\" and \"ongoing thread\"\n\nWhat still remains:\n\n- visible session history for the user\n- richer follow-up prompts shaped by the previous turn, not just the latest query\n- lineage-preserving promotion from the continued draft into shared claims, definitions, decompositions, and evidence links\n- promotion rules that let stronger structure increasingly influence public retrieval without flattening away the path by which it matured\n\n### Mutable Surface, Revision-Preserving Core\n\nThe user experience can feel like editing one living structure in place.\n\nBut under the hood, meaning-bearing revisions should preserve lineage rather than silently overwrite history. A clearer version, decomposition, or clarification should usually point back to what it came from. Deliberus needs the polished claim and the path by which it became polished.\n\nThis is the same asymmetry already identified in soft canonical clustering:\n\n- roughness is acceptable if provenance is preserved\n- false flattening is worse than temporary messiness\n\nSo the deeper rule becomes:\n\n> Capture everything, structure early, and let canonical influence emerge from ongoing refinement rather than from a one-time publication event.\n\n---\n\n## Landing Page Mode Inference\n\nDo not expose a technical setting if the system can infer it. But also do not hide provenance when it affects the question being asked.\n\nThe landing page should infer the mode:\n\n| Input shape | Default mode | Button language | First system move |\n|---|---|---|---|\n| URL / obvious article / uploaded PDF | External source | Extract argument structure | \"Which reading best fits the source here?\" |\n| Short authored question/topic | Conversation + truth graph | Think with Deliberus | Answer, then offer a provisional graph interpretation |\n| Medium/long authored argument | Authored contribution | Clarify, then add | \"What do you mean here?\" plus structure confirmation |\n| Ambiguous pasted text | Infer best mode | Contextual | Ask provenance only if needed |\n\nThis is a provenance distinction, not a user-facing preference setting.\n\n- For external text, ask: \"Which reading best fits the source here?\"\n- For authored text, ask: \"What do you mean here?\"\n- For a user's own uploaded book or essay, allow correction with a contextual affordance like \"I wrote this\" or \"Treat as my own wording.\"\n\nThat handles the friend who uploads his own book without turning every upload into a settings panel.\n\n---\n\n## Truth Graph As Read Layer\n\nThe truth graph is not a separate graph. It is a query-time computation over the existing argument graph plus QBAF strengths.\n\nThe read layer should:\n\n1. retrieve relevant claims by embedding and text fallback\n2. expand through SUPPORTS, ATTACKS, QUALIFIES, REFRAMES, and DECOMPOSES_INTO edges\n3. compute QBAF badges\n4. surface gaps, unanswered CQs, and contested concepts\n5. detect bridging claims where disagreement is high but argument strength is also high\n6. format the context for an LLM to synthesize at the right cognitive resolution\n\nThe LLM acts as reader, not inventor. It translates the graph's current state into prose while making clear which parts are graph-backed and which are missing.\n\nDepth should match the prompt:\n\n- **Casual**: two or three sentences, one caveat, one invitation to go deeper\n- **Curious**: short structured paragraphs with support, challenge, gaps, and contested terms\n- **Expert**: QBAF strengths, methodology tiers, CQ status, sources, and the evidence subgraph\n\nThe useful response pattern from the recovered mobile thread:\n\n> Based on 3 meta-analyses and 7 studies in the graph, UBI appears to reduce poverty by 14-27% [well-evidenced, moderate confidence]. Key gap: limited evidence on national-scale implementation beyond pilot programs. One bridging argument: both proponents and skeptics rate the methodology of the Finnish KELA experiment as structurally sound.\n\nThat is honest, usable, pedagogically matched, and No-Copout-compatible because the gap is named and the deeper structure remains available.\n\nThe branch's original response sketch is still useful as an API shape, even though the implementation should now also include a conversational synthesis object and provisional authored-input structure:\n\n```json\n{\n  \"summary\": \"Based on 3 extracted meta-analyses and 7 studies...\",\n  \"confidence\": 0.72,\n  \"assessment\": {\n    \"supporting_chains\": [],\n    \"challenging_chains\": [],\n    \"bridging_claims\": [],\n    \"gaps\": [],\n    \"contested_concepts\": []\n  },\n  \"claim_refs\": [\"claim_abc123\", \"claim_def456\"],\n  \"depth\": \"casual\"\n}\n```\n\nThe important preserved detail is not the exact field names; it is that the answer should remain inspectably connected to supporting/challenging chains, bridging claims, gaps, contested concepts, and claim references.\n\n---\n\n## When The Graph Has Little Data\n\nIt is acceptable for Deliberus to use the general LLM's background knowledge when the graph is thin, but it should keep the epistemic layers distinct:\n\n- **Graph-backed**: derived from Deliberus claims, QBAF, evidence, votes, CQs, concepts, and sources.\n- **Background answer**: the model's general knowledge, useful but not yet represented in Deliberus.\n- **Invitation**: add a source, confirm a claim, clarify a term, or save the question as a graph seed.\n\nBad:\n\n> Here is the answer.\n\nBetter:\n\n> Deliberus does not have much graph-backed structure on this yet. My tentative background read is... If you want, I can turn your question into a claim/evidence map and you can confirm what belongs in the graph.\n\nThis preserves attunement without pretending the graph already knows what it does not know.\n\n---\n\n## Psychological UX Constraints For The First-Take Screen\n\nThe first live `Think with Deliberus` slice surfaced an important correction: even if the underlying architecture is right, the response page fails if it reads like internal system language instead of help for a newcomer.\n\nThe bad early signals were revealing:\n\n- \"graph-backed\" required the user to mentally translate an internal architectural term\n- \"draft-only\" and \"durable\" described storage semantics instead of user meaning\n- \"extract anyway\" forced the source-analysis ontology onto a short authored question\n- hiding the \"draft structure\" behind a foldout added friction even when it only repeated the user's own sentence\n- tangential semantic matches made Deliberus look more confident and relevant than it really was\n\nThe UX research and implementation refinement point to a stricter product contract.\n\n### The Contract\n\nThe first-take page should be understandable to a bright 12-year-old on first read.\n\nThat means:\n\n1. **Plain language first.** Use ordinary words like \"ideas,\" \"earlier sources,\" \"not enough yet,\" and \"make it clearer.\" Keep internal terms like graph, claim, subgraph, QBAF, extraction, and durable write off the default surface unless the user explicitly asks for internals.\n2. **One visible mental model.** The screen should answer four questions in order: what Deliberus thinks first, what earlier material it found, what is still unclear, and what the best next step is.\n3. **Do not hide non-depth.** Progressive disclosure should hide real extra structure, not the user's unchanged sentence. If the structured draft does not add information beyond the original prompt, do not show it as an accordion at all.\n4. **Buttons should describe the next move.** \"Get a first take,\" \"Make it clearer,\" and \"Analyze this as-is\" are better than labels that require the user to infer what Deliberus will do.\n5. **False relevance is worse than honest thinness.** Retrieval should be conservative. It is better to say \"Deliberus has not found much on this yet\" than to decorate the answer with semantically adjacent but weakly relevant claims.\n\n### Why This Matters\n\nThis is not cosmetic. It is the same adoption problem at micro scale.\n\nEvery predecessor failed partly because users were asked to internalize the system's ontology before receiving help. The first-take page is where Deliberus either honors \"structure is output, not input\" or quietly betrays it.\n\nThe relevant research lines up cleanly:\n\n- **Recognition rather than recall**: users should not have to remember what internal terms or hidden controls mean in order to proceed. The right options and the system's state should be legible from the screen itself. See [progressive-disclosure.md](progressive-disclosure.md) and [ux-principles.md](../ux-principles.md).\n- **Plain language**: short, familiar words and a clear next action reduce cognitive load and help users trust the interaction before they understand the architecture. See [ux-principles.md](../ux-principles.md) and [vision.md](../vision.md).\n- **Progressive disclosure**: depth remains available, but the first layer must be self-sufficient and calm. The inspectability premium comes from knowing the deeper structure exists, not from forcing it onto the initial view. See [progressive-disclosure.md](progressive-disclosure.md).\n\n### Current Product Shape\n\nThe current first-take screen now follows this structure:\n\n1. **A first take** - the plain-language answer\n2. **What Deliberus is already seeing** - a few related ideas or counterpoints from earlier sources\n3. **Still unclear** - one short statement of the main gap, ambiguity, or evidence weakness\n4. **Best next step** - one follow-up question that helps the user sharpen the prompt\n\nIf Deliberus has little relevant material, it should say so directly rather than pretending the graph is richer than it is.\n\nIf Deliberus does have material, it should present that material as \"earlier ideas\" or \"earlier sources,\" not as a lesson in Deliberus internals.\n\nThis is the answer-plus-structure loop made psychologically viable.\n\n---\n\n## Evidence And QEM Decisions From The Branch\n\nThe Apr 5 branch correctly identified that quantitative evidence needs more than a free-text source quote.\n\n### Evidence-as-subgraph\n\nThe self-similar decomposition principle says that a statistical mother claim should decompose into inspectable subclaims:\n\n```text\n\"Meta-analysis finds UBI reduces poverty by 14-27%\" (mother claim)\n  DECOMPOSES_INTO \"12 RCTs were included\"\n    CQ: sample representativeness?\n  DECOMPOSES_INTO \"Pooled effect size d=0.21\"\n    CQ: heterogeneity?\n    CQ: publication bias?\n  DECOMPOSES_INTO \"Studies used RCT methodology\"\n    CQ: methodology quality?\n  DECOMPOSES_INTO \"Poverty was measured by income thresholds\"\n    CQ: is that the right measure?\n```\n\nEach subclaim carries its own QBAF strength. The mother claim's strength should flow transitively from subclaim evidence.\n\n### Quantitative metadata\n\nStructured statistical fields should live as optional properties on claim nodes, not as separate node types:\n\n- `methodology_tier`\n- `effect_size`\n- `effect_size_type`\n- `confidence_interval_lower`\n- `confidence_interval_upper`\n- `sample_size`\n- `study_count`\n- `heterogeneity`\n\nThese are analytical achievements about the claim. They are part of the structured understanding, while the surrounding reasoning text remains open to further decomposition.\n\n### Methodology-adjusted priors\n\nThe branch added methodology-tier QEM base weights:\n\n| Tier | Base weight |\n|---|---:|\n| meta_analysis | 0.70 |\n| systematic_review | 0.68 |\n| rct | 0.65 |\n| quasi_experimental | 0.55 |\n| observational | 0.45 |\n| case_study | 0.38 |\n| anecdotal | 0.32 |\n| expert_opinion | 0.30 |\n| default | 0.50 |\n\nThis preserves QEM's gravity property: unanswered CQs return to the prior, and evidence shifts away from it. A meta-analysis starts with a stronger prior than an anecdote, but both can still be challenged or strengthened through the graph.\n\n### QBAF vs probability\n\nThe branch and follow-up reasoning separate two quantities:\n\n- QBAF says: how well-supported is this argument structure, given what is in the graph?\n- Probability says: how likely is this claim to be true in the world, given the graph plus priors, missing evidence, calibration, and background knowledge?\n\nThe pragmatic move is to build the evidence subgraph and QBAF read layer first. Explicit user probability estimates and calibration-weighted aggregation can come later. When a user disagrees with QBAF, that should be treated as a decomposition invitation: what prior, base rate, missing source, or interpretive frame explains the disagreement?\n\n### Evidence binding and agent-driven evidence\n\nThe branch's evidence-binding sketch should not be lost: when a newly extracted claim from a meta-analysis, RCT, or other source supports or attacks an existing graph claim, the relationship should eventually carry evidential metadata about what kind of support this is. Is it a direct replication, a pooled meta-analytic estimate, a methodological critique, or a weaker topical analogy? Some of that is already partly captured by scheme classification, but the strength of the evidential link should also be able to consume quantitative properties of the source.\n\nThe branch's concrete proposed auto-connect loop was:\n\n1. detect the methodology tier of the source extraction\n2. set the base weight of the new `SUPPORTS`/`ATTACKS` edge from that methodology tier\n3. propagate quantitative metadata such as effect size, sample size, and confidence interval\n4. let QBAF strength update transitively through the connected graph\n\nThe branch also named an agent-driven evidence loop that remains strategically valuable:\n\n1. find claims with sorry markers in a topic area\n2. search for relevant papers or sources\n3. extract them through the same pipeline\n4. let auto-connect discover how the new evidence relates to existing claims\n5. update QBAF strengths transitively\n\nThe UX constraint remains: agents scaffold, users verify. An agent may find and extract a meta-analysis, but the user should be prompted to engage with the resulting structure rather than rubber-stamping an automated graph expansion.\n\n---\n\n## Branch And Merge Implementation Status\n\nBranch: `origin/claude/truth-graph-evidence-system-akm9a`\n\nCommit: `6dc27e8 Truth graph evidence system: methodology-adjusted QEM, /query endpoint, quantitative claim metadata`\n\nImplemented in code:\n\n- `POST /query` endpoint taking `query` and `depth`\n- new `deliberus/truth_graph.py` read layer\n- quantitative metadata fields on `ClaimBase`\n- `METHODOLOGY_BASE_WEIGHT`\n- `methodology_base_weight()` helper\n- optional `methodology_tier` parameter to `compute_edge_strength()`\n- graph storage of quantitative claim metadata when present\n- formatting of graph context for LLM synthesis\n- tests for methodology tier weights and context formatting\n- `CLAUDE.md` frontier update on the branch\n\nAdded in the Apr 8 merge continuation:\n\n- authenticated, rate-limited `/query`\n- `QuerySynthesis` and `ProvisionalInterpretation` structured response models\n- short authored prompt detection in preflight\n- landing-page `Think with Deliberus` route for short authored questions/topics\n- fallback behavior that gives a background-only answer when graph retrieval or LLM synthesis fails\n- explicit `write_status: draft_only` response so the first slice cannot silently publish graph nodes\n- QBAF aggregate badge computation now forwards `methodology_tier`\n- branch-only quantitative metadata details for confidence intervals and heterogeneity are carried through the model/store/read layer\n- `deliberation_drafts` persistence for raw turn trace, first synthesis, context snapshot, and heuristic promotion metadata\n- best-effort `/query` behavior so draft persistence failure does not turn a first-take request into a 500\n\nNot yet implemented or incomplete:\n\n- no prompt changes that reliably populate the new quantitative fields during extraction\n- no user confirmation gate for turning short authored input into durable graph nodes\n- no full multi-turn continuation or lineage-preserving promotion from deliberation drafts into graph revisions\n- the branch discusses evidence binding on edges, but the code mainly stores methodology metadata on claims\n- `truth_graph.py` reads `r.methodology_tier` from edges, but the branch does not appear to write it onto relationship edges\n- `compute_claim_badge()` on the branch still appears to compute edge strength without forwarding `methodology_tier`, so methodology may not yet affect aggregate badges\n\n---\n\n## Suggested Implementation Sequence\n\n*(Written Apr 8 as a forward plan. Phases 2–5 substantially shipped — see the status banner at the top of this doc. Kept unedited as the design record.)*\n\n### Phase 1: Documentation and branch reconciliation\n\nPersist the decisions here before merging code. Treat the branch as a useful prototype, not an automatically correct final implementation.\n\n### Phase 2: Read-only `/query`\n\nBring in a hardened version of the truth-graph read layer:\n\n- no graph writes\n- depth parameter validated to `casual | curious | expert`\n- graph-backed vs background-knowledge sections kept distinct\n- tests for no-data behavior and query context formatting\n\n### Phase 3: Landing page mode inference\n\nChange the landing route from one extraction funnel to mode-aware routing:\n\n- source input -> extraction\n- short authored prompt -> truth graph response and provisional interpretation\n- medium/long authored argument -> clarify then add\n- ambiguous input -> infer, with contextual correction\n\n### Phase 4: Provisional authored-input structure\n\nAdd an intake classifier that returns:\n\n- input intent: question, topic, standalone claim, argument, evidence, fragment\n- likely provenance: authored or source\n- provisional claims/questions/topics\n- contested terms\n- one Socratic follow-up\n\nThis is now partially implemented for `/query`: the first answer, provisional interpretation, and promotion hints can be stored as a `deliberation_drafts` record. The next step is richer multi-turn continuation and clearer extraction of claim/question/topic intent from ongoing dialogue.\n\n### Phase 5: Confirmation into graph\n\nAdd a lightweight confirmation step:\n\n```text\nI can add this as:\n\"How can capitalism be transformed so incentives reduce inequality rather than amplify it?\"\n\n[Looks right] [Make it sharper] [Just answer for now]\n```\n\nOnly `Looks right` or an edited variant should create durable graph nodes and auto-connections. This still needs lineage-preserving promotion semantics so a draft trace can yield claims without flattening away the path by which they were sharpened.\n\n### Phase 6: Quantitative evidence extraction\n\nUpdate extraction prompts and storage to populate methodology and statistical fields from PDFs and papers.\n\n### Phase 7: Evidence binding\n\nDecide whether methodology belongs on:\n\n- the evidence claim\n- the relationship edge\n- both, with different meanings\n\nThen make QBAF computation consume the chosen field consistently.\n\n---\n\n## Open Questions\n\n1. How should non-public `deliberation_drafts` transition into shared-unreviewed or canonical graph structure without flattening away the conversational path?\n2. Should \"question\" become a general first-class node type, or should general user questions remain draft/session objects until they spawn Claim nodes?\n3. ~~When graph data is thin, how explicitly should the UI label background-model knowledge versus graph-backed knowledge?~~ **ANSWERED by what shipped**: `graph_status` (`graph_backed` / `mixed` / `background_only`) plus a one-sentence `graph_note`. Worth noting that this is the *provenance* half of honesty; the *omissions* half — what the answer left out — was never asked here and is the open work (`synthesis-build-plan.md`).\n4. Should methodology tier attach to evidence claims, edges, or both?\n5. How should the landing UI present a user-owned PDF versus an external source PDF without creating a settings panel?\n6. Should the first Socratic prompt ask for intent (\"are you asking, claiming, or exploring?\") or for substance (\"what kind of capitalism transformation do you mean?\")?\n7. How much of the raw query should be embedded for similarity before confirmation?\n\n---\n\n## Design Decisions from the Apr 5 Mobile Session (recovered Apr 17)\n\nThe following design insights were developed in the founding mobile-app conversation (Apr 5, 2026) but were not captured in the initial research doc or code. Persisted here from the session transcript to prevent re-derivation.\n\n### QBAF Strength Converges Toward Probability as the Graph Deepens\n\nQBAF measures `P(conclusion | evidence in the graph)` — how well the argumentative structure holds up given what's been extracted and scrutinized. A separate probability estimate would measure `P(conclusion | evidence + priors + awareness of what's missing)`. The gap between them is **not yet decomposed** evidence — base rates, domain experience, awareness of un-extracted studies — that COULD be in the graph but isn't yet.\n\nAs the graph deepens (sorry markers filled, CQs answered, bundled claims decomposed, methodology tiers propagated), QBAF strength incorporates more structured information. In the limit — all relevant evidence extracted, all CQs answered, all contested concepts disambiguated — the QBAF strength reflects \"the weight of the evidence, structured and scrutinized,\" which IS close to what a well-calibrated probability estimate would be. This convergence is an architectural property of the system, not a hand-wave: each step (evidence extraction, CQ answering, decomposition, methodology-tier calibration) moves QBAF closer to probability by incorporating more of what the probability estimate was tracking.\n\n**Practical implication**: build the evidence layer first. Probability estimates become a later correction for what QBAF misses, not a parallel system from the start. QBAF-first is the right architecture.\n\n### Probability Estimates as Decomposition Invitations (Not Parallel Scoring)\n\nUser probability estimates should NOT be averaged into QBAF scores. Instead, divergence between a user's estimate and QBAF strength should trigger a decomposition invitation: \"You estimate 30%. The graph's structured evidence suggests 70%. What do you know that the graph doesn't?\"\n\nThe user's answer becomes new claims, CQs, or evidence that flow back into the graph. Over time the gap shrinks — not because subjectivity was averaged in, but because the subjective was decomposed INTO structured evidence. The gap that remains after serious decomposition IS the frontier of genuine uncertainty — and identifying that frontier is itself one of the most valuable things the system can do.\n\nThis reframes probability estimates from \"fuzzy subjective input that might pollute the scores\" to \"decomposition compass that points to where the graph needs to grow.\" The sorry model applied at a higher level.\n\n### \"No Copout Axioms\" Is a Property of the Graph; Usability Is a Property of the Response\n\nThese aren't in conflict. The graph has no permanent bottom — every sorry marker invites deeper inspection, always. That's a structural commitment about the data model and it's non-negotiable. The truth-graph response DOES have a first sentence, and that sentence must summarize. Summarizing isn't the same as stopping — it's saying \"here's the current state at the level that matches your question, and here are the paths deeper.\"\n\n**The \"shallowest sorry markers first\" rule**: surface the sorry markers closest to the conclusion in the response. These have the most impact on the conclusion's reliability. A claim resting on a sorry-marked premise about national-scale generalization belongs in the casual response. A sorry marker three levels deep about randomization in study #7 belongs in the expert view. Progressive disclosure handles the rest.\n\n### GRADE Mapping to Deliberus\n\nThe GRADE framework (Grading of Recommendations, Assessment, Development and Evaluations) from clinical medicine faces the same problem: communicating evidence certainty without drowning readers in recursive uncertainty. The mapping to existing Deliberus infrastructure is remarkably clean:\n\n| GRADE factor | Deliberus equivalent |\n|---|---|\n| Study design | `methodology_tier` on ClaimBase |\n| Risk of bias | CQs about methodology quality |\n| Inconsistency | Heterogeneity (I²) metadata |\n| Indirectness | CQs about relevance/generalizability |\n| Imprecision | Confidence interval metadata |\n\nThe building blocks for GRADE-like certainty communication already exist. The truth-graph synthesis layer can compute a GRADE-like rating from these signals without requiring every user to inspect every sorry marker at every depth.\n\n### Philosophical Grounding: Rorty's Irony + Peirce's Convergence\n\nTwo complementary philosophical lenses emerged during the design conversation:\n\n**Peirce's pragmatism** provides the convergence thesis's philosophical backbone: truth as the limit of inquiry, where all inquirers converge given sufficient evidence and decomposition. When two people disagree on a probability, the disagreement is about something specific and decomposable — different evidence, different weighting, different priors, different frameworks. \"No Copout Axioms\" is Peirce applied to argument structure: that intuition driving your estimate is based on SOMETHING — dig.\n\n**Rorty's irony** provides the epistemic humility: the methodology tier weights (0.70 for meta-analyses, 0.32 for anecdotal) are vocabulary choices, not discoveries about the fabric of reality. The scheme taxonomy, the CQ templates, the four-type classification — all contingent. The recognition that these are contingent doesn't make them less powerful. It makes you honest about what you're doing: constructing a shared language for structured deliberation, not building a truth-mirror.\n\n**Where Rorty goes too far for Deliberus**: Rorty flattens the fact/value distinction entirely. But the four-type classification (empirical / normative / definitional / value_premise) preserves a distinction worth preserving — the types decompose differently, have different CQ structures, and offer different kinds of scrutiny. Collapsing them loses information.\n\n**The synthesis**: take Rorty's irony (know your framework is contingent, be honest about it) and Peirce's convergence (trust that decomposition reveals shared ground). The irony keeps you from dogmatism. The convergence keeps you building. The convergence thesis is Peircean, not Rortian — and the system is built so the thesis is testable, not presupposed.\n\n---\n\n## Cross-References\n\n- [analysis-and-attunement.md](../analysis-and-attunement.md) - the dialectic this input loop instantiates\n- [ux-principles.md](../ux-principles.md) - structure as output, voice/text as ground-level input, progressive disclosure\n- [disambiguation-ux-and-voice-first-contribution.md](disambiguation-ux-and-voice-first-contribution.md) - confirmation, sense selection, Socratic follow-up\n- [execution-plan-clarification-first-roadmap.md](execution-plan-clarification-first-roadmap.md) - phase ordering for clarification-first input\n- [mobile-argument-ux.md](mobile-argument-ux.md) - conversational UI and quick mobile contribution\n- [qbaf-gradual-semantics-research.md](qbaf-gradual-semantics-research.md) - QEM basis\n- [scheme-bounded-decomposition-and-evidence-as-subgraph.md](scheme-bounded-decomposition-and-evidence-as-subgraph.md) - evidence-as-subgraph\n- [self-similar-decomposition-and-claim-ontology.md](self-similar-decomposition-and-claim-ontology.md) - no permanent atom and mother-claim pattern\n- [inductive-reasoning-research.md](../inductive-reasoning-research.md) - probabilistic and Bayesian layer\n"}