{"path":"research/session39-what-the-graph-stopped-claiming.md","content":"# Session 39: what the graph stopped claiming\n\n**Date**: 2026-09-27 · **Type**: verification, repair and deploy; a census label read by hand; the\nfounder's questions answered; the third listening walkthrough; the Codex interlude reconstructed\nfrom screenshots.\n\nThe same conversation ran from the keeper work of 2026-09-22 (session 36) to here, with several days\nin between when the founder worked in Codex with GPT-6 \"Astra\". This document covers the day he came\nback. Its through-line is the walkthrough's closing sentence: *the graph stopped claiming things\nnobody checked, in its labels, its dates and its false part links.*\n\n---\n\n## 1. Two merges, and a transcript that could not be read\n\nThe founder asked, verbatim: *\"pull from git, lots has been merged in from an older cloud Claude Code\nsession... there are some fixes left to merge that are only available on the remote branch because\nthey were made after the PR merged for that branch. Make sure those fixes/changes aren't lost.\"* The\ncloud session's post-merge evidence-layer fixes were merged (`e7bd422`). The branch\n`claude/jev-application-opportunities-v5u2fy` (one research doc, `jev-and-the-judgement-layer.md` §\n5) was checked for private or strategy material, found clean, and merged (`be7c6fe`).\n\nHe also asked for Astra's Codex transcript to be distilled. **Every attempt to read it was stopped by\nthe safety filter**, and the founder supplied screenshots instead; what they show is § 6. Nothing\nfrom the transcript itself is in the repository.\n\n## 2. The repairs: verified before running, then run\n\n- **The eleven-second test delay** (`e34afe8`): the embedded FalkorDB test server (`falkordblite`,\n  dev-only) is daemonized rather than a child process, so it outlived its fixture; teardown now stops\n  it by process id. The full suite runs in about seven seconds.\n- **Three defects found by dry-running the repairs against the live graph first** (read-only, through\n  `ReadOnlyGraph`), each fixed and tested before anything was written (`54ac643`): the edge-scheme\n  retry swept two edges that are scheme-less by design, so it now selects only claims the\n  contribution endpoints write (`CONTRIBUTION_LABELS`); a staleness verdict could argue in the badge,\n  so validity verdicts are excluded there by name; and the date backfill would have dated reported\n  content from its source's extraction, months before the graph learned it, so it now refuses that.\n  After the fixes, the edge-scheme retry and the date backfill had nothing to do on the live graph.\n- **The deploy.** Founder, verbatim: *\"I trust your judgment on immediate fixes including correcting\n  evidence support links and relabeling claims.\"* The auto-mode classifier refused the first\n  production deploy; on *\"You can deploy\"* it ran. Production moved from `e244a3c` to `fd8cff0`.\n- **Pinned library versions, decided without asking and flagged**: `uv.lock` had been gitignored\n  since the first commit with no recorded reason, so every build resolved the newest release of every\n  library and production ran versions no test had seen. The image now installs from the tracked lock\n  (87 packages; FastAPI 0.135.2, the tested version), and `tests/test_lockfile.py` fails offline when\n  `pyproject.toml` and the lock disagree (positive control run).\n- **The label repair: 1,739 claims.** Found by the cloud session's code map of how evidence gets its\n  labels (`what-counts-as-evidence/corpus-map-code.md`): code defaults nobody chose. 1,680\n  critical-question poles labelled `observed`; 53 minted reports labelled `observed`; 5 contributions\n  labelled `observed`/`anecdotal` by the endpoint whatever the person wrote (four cite studies); 1\n  meta-analysis written as an evidence type. All now `unstated`, and the meta-analysis moved to its\n  methodology field. Re-run after the deploy: zero left. No badge reads these labels, so no score\n  moved; they are what readers and agents are told.\n- **One impossible date** cleared: reported content `claim_39b9954a5270` was dated 2026-03-31, though\n  always-mint shipped 2026-08-15. No reported content is now dated before that.\n\n## 3. The census label, read by hand\n\n**This is the finding worth carrying.** The 2026-09-22 census labelled 70 decomposition edges\n`miscast_as_evidence`. The plan, Claude's, written into the census documents and repeated to the\nfounder that afternoon, was to re-file them as support links from child to parent. Before writing,\nevery edge the housekeeping ruling lets a machine touch was read: 31 of them (written by\n`auto_connect` or `split`, unconfirmed, confidently judged, not disputed by the second reader, no\nperson's claim, no fixture).\n\n| What the 31 pairs actually are | Count |\n|---|---|\n| support running child to parent, often weak | about 13 |\n| support running the other way (the parent is the evidence) | 3 |\n| reported speech (*\"proponents commonly argue that execution deters\"*) | 2 |\n| the assisted-dying referent mismatch retired on 2026-09-13 | 5 |\n| not support at all | 8 |\n\n**⚠ Corrected 2026-10-07: the first two rows name the direction by role, and the stored direction was\nthe other way.** *Child* and *parent* above mean the premise and the conclusion. As stored, the\npremise sat in the parent's place: the automatic linker wrote every such link from the premise to\nthe conclusion, the reverse of a part-of link, and had since April. Nobody noticed that day,\nincluding the hand reading this table records. Read again on 2026-10-07 the 29 pairs gave the same\ncounts, and the other 231 links of the kind were retired and re-read (`auto-connect-upgrade.md` § 2c).\n\nRe-filed as support, **about 18 of 31 new links would have been false**, including the referent\nmismatch the founder had retired two weeks earlier, and a record that someone argues X turned into\nevidence that X. **The census reliably detects *not a part*; it says little about *what instead*.**\nIts label is a negative dressed as a positive, and acting on it mechanically would have converted\none error class into another.\n\nWhat was done instead: the 29 `auto_connect` part links were **retired** (`retire_edge`, reason kept,\nreversible with `scripts/retire_miscast_parts.py --restore`; module `deliberus/miscast_parts.py`,\ntests `tests/test_miscast_parts.py`). No support links were written. Badges: 14 claims moved to NO\nDATA and 1 from UNSETTLED to UNEXAMINED, 10 unchanged; no strength that had meant anything moved.\nWhich relation each pair holds is the keeper's question, followed by the relationship classifier\n(proposed next machine step, in `TODO.md`).\n\nThe 41 left filed as parts: 17 from extraction, held only by `confirmed = true`, which\n`store_relationships` writes by default (ledger **Q29**: does that count as confirmation?); 16 a\nperson wrote; 7 from the splitter, two of which may be genuine presupposition parts; 1 from\n`auto_connect` that the second reader disputes.\n\nA companion change: `run_correction_pipeline_detailed(..., mint_questions=False)` classifies a link's\nscheme and stops, leaving its critical questions latent, so bulk machine passes do not mint\nscaffolding (latent-scaffolding design, 2026-09-21).\n\n**The generalisation**: a machine verdict that something is *not X* licenses retiring the X, not\nwriting a Y. Sibling of the keeper's lesson that *a verdict can be right and still be lost*: here a\nverdict was right and the plan built on it assumed more than it said. **One level up** (proposed 2026-09-28 at the founder's request, ledger Q30; ruled the same day, *\"Great, add it globally.\"*, and added to the global instructions): when nothing has checked a recorded fact, store the blank that says so, never a plausible stand-in; the day's labels, date and part links are three instances of that one rule. Corrected on every surface\nthat repeated *\"should have been support links\"* or *\"a third are evidential relations filed as\nparts\"* (CLAUDE.md twice, the frontier, `what-counts-as-evidence.md` three times, `the-parts-review.md`,\nthe ledger's Q7, two dossier strands, and the census script's own message).\n\n## 4. The founder's words, and what each one changed\n\n- *\"I trust your judgment on immediate fixes including correcting evidence support links and\n  relabeling claims (although remind me how you found the last thing about the claim labels and\n  what/why they were labeled weirdly?)\"* → the deploy, the label repair, the retirement of § 3, and\n  the label story in the walkthrough.\n- *\"Read log should only be visible to me\"* → **ruled**; it was built that way (CLAUDE.md topic\n  index, blobs entry).\n- *\"My self-description is nothing I'm anxious about, fine to leave as it is wherever\"* → **ruled**\n  (`TODO.md`); `docs/listening/` publicity and David's first name stay open.\n- *\"What would the open-question status be? Hmmm. Questions are a first hand entity in the ontology\n  of Deliberus, no? And an open question is simply a question that hasn't been overwhelmingly settled\n  by the evidence, or rather by the structured intersubjective scrutiny that is Deliberus, right?\"* →\n  ledger **Q18** reshaped: withdraw the status; free-standing questions (today `Question` nodes exist\n  only as critical questions hanging off a link) plus a computed *open* reading relative to the\n  asker's stated standard.\n- *\"couldn't there be some pragmatic value in having the methodology ladder around, even while being\n  able to argue \"beyond\" it, deeper than it?\"* → ledger **Q8** note: yes, GRADE's own shape, a\n  labelled and attackable starting point. Measured the same day: the ladder has never moved a score,\n  and 15 claims carry a rung.\n- *\"having a principled way to discuss the calibration and development and evolution of Deliberus\n  through linking features to claims about those features ... any actual edits or calibrations ...\n  would need to be greenlit by me (or a hypothetical coder/admin friend/collaborator that I entrust)\n  and couldn't take place automagically\"* → new ledger row **Q28**: a register of settings, claims\n  about them, and a human gate with proposed ping lines; layer two sits behind the 2026-08-30 hold.\n- *\"I feel confused especially about the practical meanings/definitions of \"encounter\" and \"weighed\n  by their own standing\" and \"certainty\" (what would it be based on exactly, again? where do we \"get\n  our confidence\"?)\"* → the walkthrough, parts three to five.\n- A ruling on how community material may be handled while this is exploration → **ruled**, recorded in\n  the community compartment's private rules together with Claude's one flagged call. Answering his\n  question, those compartment rules were Claude's drafts of 2026-09-19/20, never ruled.\n\n## 5. The walkthrough\n\nKept in the private notes (`.private/listening/2026-09-27-the-decisions-waiting-and-three-words.md`),\nabout 5,400 words, since one part describes a community's members-only threads. Its method gained one rule: **copy the delivered text out of the session record,\nnever retype it** — the first copy, written from the drafting pass, differed from the delivered\nreply in dozens of sentences (`how-to-write-for-listening.md`).\n\n## 6. The Codex interlude, from the founder's screenshots\n\nAstra's words are quoted as Astra's; none of this was read from its transcript.\n\n**Friday 2026-09-25, deployed through `e244a3c`**: community compartments got homes of their own\n(introduction, input box, scoped map; global examples, convictions and extractions excluded); an\nadmin overview graph per scope; a fix so scoped graphs read source records from the community's own\ndatabase; Google login redirecting correctly; the existing pause on new analyses for non-owners shown\nin the compartment input. Its own verification: 1,813 backend and 42 frontend tests, and live checks\nthat unauthorized community reads return 404. Its zoom-out named three distinctions worth keeping:\n*\"A graph is not yet understanding\"* (the test is whether someone recognizes their community's\nconcerns, discovers a connection, and can follow or correct it), *\"Shared components are only part of\nDRY\"* (the consequential duplication is separate definitions of scope, authorization, extraction and\ncurrent reasoning), and *\"Isolation is not yet durable execution\"* (a community submission needs its\npage kept open). Its proposed next step: a complete, real community journey.\n\n**Saturday–Sunday 2026-09-26/27, a community harvest.** At the founder's request Astra harvested two\nadvice-process threads from the Borderland community's forum into a git-ignored private folder. The\nlesson that transfers: the forum's own Markdown export silently drops paragraphs, so every entry was\nchecked against the page — *\"a large export can look complete while silently losing content.\"* What\nwas harvested, how completely, and the one explicit refusal of AI processing are recorded in the\ncompartment's private rules, not here.\n\n**Division of labour, agreed**: Astra finishes the remaining checks on one thread, which need its\nlogged-in forum session, and writes a handoff; Claude builds the draft maps from the saved files.\n\n## 7. Considered and rejected\n\n- **Re-filing the census's edges as support links** — rejected on the hand reading of § 3.\n- **Deploying without pinning versions** — rejected: the build would have shipped untested library\n  versions; the lock costs nothing at runtime.\n- **Asking each commenter before mapping** — the draft compartment rule; the founder set it aside for\n  the exploratory phase.\n- **Letting Astra build the maps** — rejected for speed: its usage limit interrupts it repeatedly and\n  its context was four-fifths full; it keeps the one step only it can do.\n\n## 8. Open loops, each with its home\n\n- Ledger rows **Q2, Q3, Q6, Q8, Q18, Q28, Q29** (`session26-open-rulings.md`), explained in the\n  walkthrough.\n- `docs/listening/` publicity and David's first name (`TODO.md`, top).\n- The community's draft maps: the complete thread first, the other after Astra's handoff (`TODO.md`).\n- The keeper and classifier over the 29 retired pairs, and the 41 still filed as parts (`TODO.md`,\n  the census item; `the-parts-review.md`).\n\n## Cross-references\n\n`what-counts-as-evidence.md` (the research) · `session26-open-rulings.md` Arc Q (the rows) ·\n`the-parts-review.md` (what happened to the 70) · `session36-the-keeper-and-the-order-of-asking.md`\n(the keeper this arc hands the retired pairs to) · `docs/listening/how-to-write-for-listening.md` ·\n`deliberus/miscast_parts.py` · `deliberus/label_repair.py` · `tests/test_lockfile.py`.\n"}