{"path":"research/what-confirmed-means.md","content":"# What \"confirmed\" means\n\n**Date**: 2026-09-28 · **Type**: history of one field, measured on the live graph · **State**:\nRULED 2026-09-28 (ledger Q32; founder: *\"Yes.\"*), which settles Q29 and makes C8 moot; build in `TODO.md`\n\n**The question, verbatim** (founder): *\"What even is the purpose of the \"confirmed\" field/tag? What's\nthe significance, how has it been discussed throughout our history? Isn't it a bit fuzzy and therefore\nrisky, just like the whole thing with voting etc? Read up deeply and think deeply about this.\"*\n\n---\n\n## 0. The answer in five lines\n\n1. `confirmed` is a true/false field on every link. **No spec ever defined it.** It was born on\n   2026-03-30 as a side effect of the build that added provenance to links: extraction's links got\n   `true`, the automatic linker's got `false` \"for human review\".\n2. Since then **five readers have given it five meanings**, and in the live graph its value is **fully\n   determined by who wrote the link**, so it holds nothing the link's origin field does not, while code\n   treats it as a separate fact.\n3. It gates real behaviour: whether a link counts toward strength, whether housekeeping may retire it,\n   whether a part caps its whole. No page shows it to a reader.\n4. **The corpus already decided to dissolve it.** The end-state blessed on 2026-08-31 (no ratify act;\n   the graph holds contributions and telemetry) left nothing for it to mean, and the planned rename to\n   `ratified` was flagged for re-ruling. Nobody carried it out, and two new meanings were added after.\n5. **Yes, it is the voting problem in miniature**: a bare yes/no that code reads as a settled fact.\n   Proposal: retire the field and give each of its jobs a home that says what it is.\n\n## 1. How it was born\n\nCommit `ae8a2f7`, 2026-03-30, *\"Scheme-bounded decomposition: foundation + core\"*, added provenance,\na trust tier and `confirmed` to every link; extraction's writer defaults to trust `high`, `confirmed =\ntrue`. The same day `b56eac6` gave the automatic linker trust `medium`, `confirmed = false`, with the\ncomment *\"flagged for human review.\"* No spec or design doc mentions the field. The meaning implied\nby the pairing: **taken from the source's own argument** versus **a cross-source guess awaiting a\nlook**. Neither is \"a person checked this\".\n\n## 2. Five meanings, one bit\n\n| Since | Who reads or writes it | What `true` means there | What `false` means there |\n|---|---|---|---|\n| 2026-03-30 | extraction and the automatic linker | taken from the source's argument | a guess awaiting review |\n| 2026-03-30 | people's contributions (`create_relationship_edge`, term clarifications) | a person wrote it | (never written) |\n| 2026-08-27 | the badge (`REFUSED_EXCLUDED` in `badge_inputs.py`) | may count toward strength | excluded: *\"a person refused (or a machine proposal awaiting a person)\"* |\n| 2026-09-13 | housekeeping (`retire_edge`) | *\"a person wrote or confirmed\"* it, so it is immune | eligible for automatic retirement |\n| 2026-09-21 | the requirement cap and the split review (`presumed_requirement_weight`, the *drop* action) | a person kept it | *\"a person looked and refused\"* |\n\nA sixth state, unset, was chosen on 2026-09-21 for machine splits, so that a part the splitter wrote\n*\"must not borrow a refusal it never received\"* (`earning-the-right-to-write.md`). Even the *drop* action, the one place `false` means a person refused, already writes who did it, when,\nand the word `dropped` on the link (`human_action`, `human_action_by`, `human_action_at`), so there the\nflag repeats a record that exists. The unset state was the right\ncall, and it is also the symptom: the field could no longer be given a value without choosing which\nof its meanings to lie about.\n\n## 3. What the live graph holds (2026-09-28, 4,639 live argument links)\n\n| Who wrote the link | `confirmed` | Links |\n|---|---|---|\n| extraction (incl. 3,118 question placeholders) | true | 3,748 |\n| automatic linker | false | 709 |\n| a person | true | 94 |\n| cross-source premise proposals | false | 50 |\n| the splitter | unset | 37 |\n\nEvery writer maps to exactly one value. **No person has ever refused a link through the flag**: zero\n`false` values come from people. ⚠ That zero measures nothing: from 2026-09-21 to 2026-09-28 the claim page\ndiscarded every written split on load, so the panel holding the drop button never appeared (fixed 2026-09-28,\n`web/src/lib/split.ts`). The 174 links of the hand-made maps read `true`, as though checked.\nThe trust tier has the same shape (extraction and people `high`, the linker and the splitter\n`medium`), also fixed by the writer, and the API returns it without any reader using it.\n\n## 4. How it has been discussed\n\n- **2026-08-27**, residual-error taxonomy class 6: *\"there is no ratify action\"*; `confirmed = true`\n  means a human wrote a link, not that a human checked it. The rename to `ratified` was approved in\n  principle (ledger C8) and the badge filter added.\n- **2026-08-30/31**, `the-ratification-record-and-the-triage-feed.md` § 2: the failure *\"is that the\n  click was recorded as a check\"*, a provenance lie. The blessed end-state: no ratify act at all; the\n  graph holds contributions and telemetry; C8 flagged because *\"there is no 'ratified' state to rename\n  INTO — the field decomposes into … authorship provenance plus examination telemetry.\"*\n- **2026-09-13**, the housekeeping ruling was built on it anyway: `retire_edge` refuses a link whose\n  flag is true.\n- **2026-09-21**, the split design gave `false` the meaning *a person refused* and left splits unset.\n- **2026-09-27**, the parts census: 17 misfiled part links written by extraction stay filed only\n  because of the March default (ledger Q29).\n\n## 5. Why it is risky\n\n- **It is a stand-in for a check nobody made**, which the global rule added the same day forbids:\n  the value is set by the writer and read as if it recorded an examination.\n- **Every new reader re-reads it.** Code that means *a person wrote this* and code that means *a\n  person checked this* now read the same bit, and the next reader will add a sixth meaning.\n- **Concrete effects today.** Machine-written extraction links cannot be tidied (Q29). Hand-made maps\n  count as checked. The automatic linker's 709 links wait for a person in a design with no act that\n  could answer them, and are kept out of strength by two unrelated accidents (the flag, and carrying\n  no scheme).\n- **The parallel with voting.** A person's bare yes or no on a machine's link is the same kind of\n  thing as a vote: telemetry, not a settlement (*\"bare judgments are telemetry\"*, agreed 2026-08-31).\n  Stored as a gate, it becomes a verdict nobody reasoned.\n\n## 6. The proposal: retire the field\n\n| The job the flag does now | Its honest home |\n|---|---|\n| Who wrote the link | `provenance`, which exists |\n| Immunity from housekeeping | a person wrote it (`provenance = human`); every machine-written link, extraction's included, is eligible for confident housekeeping |\n| A person's refusal | a visible retirement with the reason (`retire_edge`, reversible), and the refusal kept as telemetry; the founder's own review stays authoritative while he is its only reviewer |\n| A machine proposal's standing | the trust ladder's state (proposing, writing-marked, trusted) in its own field |\n| Whether a link counts toward strength | not retired, and not in the proposing state |\n\nReaders switch one at a time, each filter tested by running it against an embedded graph, never by\nreading it (the 2026-09-26 gotcha); then the field is dropped. **Q29 dissolves** (extraction's links\nbecome machine-written links like any other), and **C8's rename becomes moot**. The trust tier\nfollows the same path, into the trust ladder's state or out.\n\n**Proposed 2026-10-06 (ledger Z7, unruled), for the fourth row.** *In its own field* is still a\nflag: every reader has to remember the filter. A proposal that must not count would get its own\nkind of link or its own table, so a query for the links that count cannot return it\n([what-a-record-linkage-project-teaches-deliberus.md](what-a-record-linkage-project-teaches-deliberus.md) § 5a).\n\n## Cross-references\n\n`deliberus/graph/badge_inputs.py` (`REFUSED_EXCLUDED`) · `deliberus/support_semantics.py`\n(`presumed_requirement_weight`) · `deliberus/graph/store.py` (`retire_edge`, `store_relationships`) ·\n`deliberus/proposed_split.py` · [the-ratification-record-and-the-triage-feed.md](the-ratification-record-and-the-triage-feed.md)\n· [earning-the-right-to-write.md](earning-the-right-to-write.md) ·\n[the-residual-error-taxonomy.md](the-residual-error-taxonomy.md) class 6 ·\n[what-a-link-strength-means.md](what-a-link-strength-means.md) (the same shape in a number) ·\n[session39-what-the-graph-stopped-claiming.md](session39-what-the-graph-stopped-claiming.md)\n"}