{"path":"graph-properties.md","content":"# What every stored property means\n\nEvery property the code writes on a link or a claim, what it holds, and which function writes it.\nGuard four of the five ruled on 20 October 2026 (his words: *\"All blessed.\"*;\n[the-kind-of-mistake-we-make.md](research/the-kind-of-mistake-we-make.md) § 9c): **a property is\ndefined where it is written, before its first reader.** The `confirmed` field was read for five\nmonths as *a person checked this link* while its value was a writer's default; nothing said what it\nmeant, so each reader supplied a meaning from its name.\n\nHow the table is kept honest:\n\n- `tests/test_graph_properties_defined.py` fails when the code writes a property this table lacks,\n  and when the table keeps a property nothing writes any more.\n- The list comes from `deliberus/graph/property_writes.py`, which reads the Cypher in the source:\n  `SET` assignments, the maps in `CREATE` and `MERGE` patterns, assignments collected in a list of\n  `SET` fragments, and names held in module constants. Six writers build a name at run time, which a\n  reading cannot see; they are listed with their names in `deliberus/graph/property_rules.py`\n  (`DYNAMIC`), and a new one fails the test until it is listed.\n- A reader that relies on a property quotes its line here. A meaning that changes changes here first.\n\n**On** says what the property sits on: a link (a relationship between two claims, of any type), a\nclaim, or both. \"Run-time\" in *Written by* marks a writer from the `DYNAMIC` list. Scripts that only\nseed test graphs (`seed_*`) are named where they are the only writer.\n\nTwo properties held nothing of their own on the live graph (`scripts/property_census.py`, guard two,\nread 20 October): `trust_tier` and `auto_linked`. `trust_tier` was retired the same day (ledger AQ2,\nhis \"Retire trust_tier, sure\"): it repeated what `provenance` says, and nothing that decides read it.\n`auto_linked` is marked below.\n\n| Property | On | What it holds | Written by |\n|---|---|---|---|\n| `argument_label` | claim | The short label of the argument the claim was extracted as part of (extraction's `label`). | `store.create_claim_node`, `store.store_claims` |\n| `attributed_to` | claim | Who asserts the claim, as a reader sees it: a named person or group, the author, or a contributor's display name. | `store`, `reported_speech`, `contributor.rewrite_stored` (run-time) |\n| `attributed_to_before_recheck` | claim | The attribution a minted reported claim had before the reported-speech pass read its report again. | `reported_speech.recheck_minted_attribution` |\n| `attribution_rechecked_at` | claim | When that re-reading changed the attribution. | `reported_speech.recheck_minted_attribution` |\n| `author_wording` | claim | The author's own words for the claim, kept beside the rewritten text (extraction's pass 2a). | `store.store_claims` |\n| `auto_linked` | link | `true` on a resemblance link the embedding linker wrote. Holds nothing `provenance` does not: it is `true` on every link that has it. | `linker.auto_link_new_claims` |\n| `check_model` | link | The model that ran the coverage check on a part a split wrote. | `proposed_split` (`_write_parts`, `_mint_reworded_part`, `_label_links` run-time) |\n| `claim_id` | claim | The claim's identifier. | `store`, `cross_source_premises`, `reported_speech` |\n| `claim_kind` | claim | What made the claim: `extracted`, `implicit` (nobody said it out loud), `human`, the two poles of a critical question (`cq_positive`, `cq_negative`), `machine_step` (a sentence a machine wrote under a link, asserted by nobody), or the reported-speech kind. | `store`, `cross_source_premises`, `reported_speech` |\n| `clarified_by` | link | On a claim's link to a contested concept: the definitional claim that fixes which sense the claim uses. | `api.clarify_claim_concept`, `store.apply_preflight_clarifications` |\n| `confidence` | claim | A number computed from `epistemic_status` and `evidence_type` when the claim is stored; no model writes it. | `store.create_claim_node`, `store.store_claims` |\n| `confidence_interval_lower`, `confidence_interval_upper` | claim | A study's reported confidence interval, when the claim carries one. | `store.store_claims` (run-time) |\n| `contributor_id` | claim | The users-table id of the person who contributed the claim. | `store.create_claim_node`, `contributor.rewrite_stored` (run-time) |\n| `coverage` | link | On a part a split wrote: whether the claim asserts the part. `clean`, `dropped`, `invented`, or `unasserted` (the claim denies, only grants or only supposes it). | `proposed_split`, `reasons_off.mint` |\n| `cq_params` | link | The slot values a latent critical question on the link renders from, as JSON. | `correction_pipeline._mark_edge` (run-time) |\n| `cq_template_id` | claim | On a critical question's pole: the template it was made from. | `store.store_claims`, `store.store_questions_and_cqs` |\n| `cut_from` | claim | On a part the reasons-off pass cut: the claim it was cut from. | `reasons_off.mint` |\n| `cut_model` | link | The model that cut a claim into the part this link leads to. | `proposed_split`, `reasons_off.mint` |\n| `decided_by` | link | On a resemblance mark: which reading made it, and for marks before 20 October 2026, its confidence too. | `auto_connect.apply_result` |\n| `deterministic_kind_signal` | link | On a part-of link: the kind of combination a rule (not a model) read from the wording, beside the model's proposal. | `decomposition_judgement.write_proposal` |\n| `earlier_readings` | link | On a part a re-cut kept: the readings that wrote it before, after the latest took their place. | `proposed_split.recut`, `proposed_split.undo_recut` |\n| `effect_size`, `effect_size_type` | claim | A study's reported effect size and its kind, when the claim carries one. | `store.store_claims` (run-time) |\n| `embedding` | claim | The claim text's embedding vector. | `linker.store_claim_embedding` |\n| `epistemic_status` | claim | What kind of assertion the claim is: `observed`, `causal_hypothesis`, `prediction`, `counterfactual`, `feasibility`, `normative_assertion`; `unstated` where nothing said. | `store`, `cross_source_premises`, `reported_speech`, `label_repair` |\n| `evidence_type` | claim | What the claim rests on: `citation`, `quantitative`, `anecdotal`, `none`; `unstated` where nothing said. | `store`, `reported_speech`, `label_repair` |\n| `explanation` | link | One sentence on how the two claims connect, from whoever wrote the link. | `store`, `auto_connect`, `backwards_parts`, `cross_source_premises`, `reasons_off` |\n| `generator` | link | Which route proposed the pair a linker read (for example `concept_route`), or `reread_of_backwards_part_of`. | `auto_connect.apply_result`, `backwards_parts.relink` |\n| `group_id` | both | The graph a node or link belongs to (`deliberus_extraction`). | many |\n| `hedge` | both | The hedging words the author used (*may*, *probably*), taken out of the wording and kept. On a conditional's support link: the hedge the consequent carried. | `store.store_claims`, `reasons_off._commit_conditional` |\n| `hedge_reading` | both | Whether that hedge was about the author's stance, the content, or is ambiguous (`stance`, `content`, `ambiguous`). | `store.store_claims`, `reasons_off._commit_conditional` |\n| `heterogeneity` | claim | A meta-analysis's reported heterogeneity. | `store.store_claims` (run-time), `seed_synthetic_stress_suite` |\n| `human_action` | link | What a person did with a machine-written link: `kept`, `reworded`, `dropped` on a part; `split` on a resemblance mark. Absent means nobody acted. | `proposed_split.record_action` (run-time), `proposed_split._mint_reworded_part`, `same_groups.split` |\n| `human_action_at`, `human_action_by`, `human_action_note` | link | When, who, and the person's reason in their own words (an empty text when none). | as `human_action`; `contributor.rewrite_stored` rewrites `_by` |\n| `invalid_at`, `invalid_reason` | claim | A ratified lapse of the claim's validity, and why. Only this reaches strength; the staleness daemon's flags never do. | `store.set_validity_with_ground`, `store.restore_validity` |\n| `later_reading`, `later_said` | link | On a link the linker wrote earlier: the newer reading that did not write it again, and what that reading said. | `auto_connect.note_reread`, `auto_connect.apply_result` |\n| `made_at` | link | When a split or reasons-off pass wrote the link. | `proposed_split`, `reasons_off` |\n| `match` | link | On a part a re-cut kept: how a fresh part matched it. `same words`, or `same` when a model read the two as the same part, confidently. | `proposed_split.recut`, `proposed_split.undo_recut` |\n| `matched_at`, `matched_version` | link | When, and by which version of the split pass, a re-cut said the part again. | `proposed_split.recut`, `proposed_split.undo_recut` |\n| `maturity_stage` | claim | Where the claim stands for public retrieval: `raw`, `draft`, `candidate`, `canonical`, `superseded` (the first two and the last are held back). | `store`, `proposed_split`, `machine_sentences.hand_over_relevance` |\n| `maturity_stage_before` | claim | The stage a replaced part had, so undoing the replacement can restore it. | `proposed_split.supersede_earlier_parts`, `proposed_split.undo_recut` |\n| `merge_candidate` | link | On a resemblance link: a reading marked the two claims as the same claim. | `auto_connect`, `retire_false_merge_marks` |\n| `merge_confident`, `merge_reasoning` | link | Whether that reading was confident, and its reason. | `auto_connect.apply_result` |\n| `merge_mark_retired_at`, `merge_mark_retired_reason` | link | When and why a false merge mark was taken down (cleared again on restore). | `retire_false_merge_marks` |\n| `merge_withdrawn_by` | link | The readings that did not make a merge mark again, when it was withdrawn. | `auto_connect._withdraw_marks` |\n| `methodology_tier` | claim | The study design behind the claim: `meta_analysis`, `systematic_review`, `rct`, `quasi_experimental`, `observational`, `case_study`, `anecdotal`, `expert_opinion`. | `store.store_claims` (run-time), `label_repair` |\n| `minted_by_source`, `minted_from` | claim | On content minted out of reported speech: the source, and the report claim it came from. | `reported_speech.mint_reported_content` |\n| `not_held_by` | claim | On minted reported content: the party the report says does not hold it. | `reported_speech` |\n| `parent_id` | link | On a person's argument that a claim requires one of its parts: the claim. | `api.argue_part_requirement` |\n| `pass`, `pass_version` | link | The pass that wrote the link and its version. | `proposed_split`, `reasons_off` |\n| `piece` | both | On a reasons-off cut: which piece of the sentence (its label) the part is. | `reasons_off.mint` |\n| `premise_needed_by`, `premise_source_pair` | claim | On a premise proposed across two sources: the claim that needs it, and the pair of sources it bridges. | `cross_source_premises.store_premise_proposals` |\n| `proposal_agreement`, `proposal_confident`, `proposal_reason` | link | On a part-of link: whether the model's proposal agrees with the rule's signal, whether it was confident, and its reasons. | `decomposition_judgement.write_proposal` |\n| `provenance` | both | Who or what wrote it: `extraction`, `human`, `auto_connect`, `split`, `cross_source_premise`, `machine_step`, and the other passes' names. | most writers |\n| `read_by` | link | The model that read a re-read link. | `backwards_parts.relink` |\n| `readings` | both | The rows of the record of machine judgments that wrote it. | many |\n| `readings_before_match` | link | The readings a part held before a re-cut matched it, for undoing. | `proposed_split.recut`, `proposed_split.undo_recut` |\n| `reasoning` | both | The writer's reason for a link or a claim, in its words. | many |\n| `reasons_off_proposal` | claim | The reasons-off pass's stored proposal for the sentence. | `reasons_off.write` |\n| `recorded_at` | claim | When the claim was first stored. | `store`, `cross_source_premises`, `reported_speech`, `backfill_recorded_at` |\n| `relevance_at`, `relevance_model`, `relevance_reason` | link | When the relevance judge read the link, with which model, and why. | `relevance_judge.write_reading` |\n| `relevance_claim`, `relevance_claim_at` | link | The claim that argues how much this link bears (a person's, or a machine's when none has), and when it was attached. | `api.argue_link_relevance`, `machine_sentences`, `reasons_off._commit_conditional` |\n| `relevance_confident` | link | Whether the relevance judge was confident; only a confident reading becomes the link's relevance. | `relevance_judge.write_reading` |\n| `relevance_direction`, `relevance_direction_conflict` | link | Which way the judge read the first claim moving the second (`raises`, `lowers`), and whether that disagrees with how the link is filed. A disputed filing is ignored by strength. | `relevance_judge.write_reading` |\n| `relevance_gate` | link | Whether the judge found the first claim bears on the second at all. | `relevance_judge.write_reading` |\n| `relevance_proposal` | link | A machine's proposed relevance, 0 to 1: the relevance judge's on a support or attack, the decomposition judge's on a part-of link. A proposal, read as relevance only by the rules that say so. | `relevance_judge.write_reading`, `decomposition_judgement.write_proposal` |\n| `replaced_at`, `replaced_reason` | claim | When and why a machine-cut part was replaced by a fresh cut. | `proposed_split.supersede_earlier_parts`, `proposed_split.undo_recut` |\n| `reported_speech_checked` | claim | The reported-speech pass read the claim and refused to mint: the verdict, its reason and the text it was reached against, as JSON. | `backfill_reported_speech._record_refusal` |\n| `requirement_claim`, `requirement_claim_at` | link | On a part-of link: a person's claim that the whole requires this part, and when. | `api.argue_part_requirement` |\n| `reread_at`, `reread_by`, `reread_note`, `reread_outcome`, `reread_result` | link | On a retired backwards part link: when it was read again, by which model, what the reading said, its outcome (`unrelated`, `same`, `weak`, `off_menu`, `failed`, or the relation it found), and what it wrote. | `backwards_parts.relink` |\n| `restored_at`, `restored_from`, `restored_readings`, `restored_reason` | link | When a superseded link was put back, and the supersession it carried until then. | `store.restore_edge` |\n| `retrieval_weight` | claim | An explicit weight for public retrieval that overrides the one its stage gives. | `store` |\n| `reworded_from` | link | On a part a person reworded: the part it replaces. | `proposed_split._mint_reworded_part` |\n| `same_fact_opposite_use` | link | `true` when two claims assert essentially the same proposition but likely serve opposite roles in their sources. | `auto_connect.apply_result` |\n| `sample_size`, `study_count` | claim | A study's reported sample size, and a meta-analysis's number of studies. | `store.store_claims` (run-time), `seed_synthetic_stress_suite` |\n| `scheme`, `schemes`, `scheme_confidence`, `scheme_cluster`, `scheme_note` | link | The argumentation scheme the link was read as, the candidates and their confidences (JSON), its family, and why no scheme fit when none did. | `store`, `reasons_off`, `correction_pipeline._mark_edge` (run-time) |\n| `scheme_status` | link | What the scheme reading came to: `classified`, `no_scheme_fits`, `classification_failed`, `structural`, `claims_missing`, `pipeline_error`. | `correction_pipeline._mark_edge` (run-time) |\n| `selected_sense`, `sense` | link | On a claim's link to a contested concept: the sense of the term the claim uses. `selected_sense` is set when a definition fixes it. | `api.clarify_claim_concept`, `store`, `concept_backfill.write_tags` |\n| `separability_proposal`, `separability_confident`, `separability_reasoning` | link | On a resemblance link: a reading's proposal that the pair are separable parts, whether it was confident, and its reason. | `auto_connect.apply_result` |\n| `separability_withdrawn`, `separability_withdrawn_by` | link | The proposal as it stood when withdrawn, and the readings that did not make it again. | `auto_connect._withdraw_marks` |\n| `short_title` | claim | The claim's headline for cards and lists. | `store`, `api.generate_short_titles`, `apply_titles`, and others |\n| `similarity` | link | The cosine similarity of the two claims' embeddings when a linker read the pair. | `linker`, `auto_connect` |\n| `source_id` | link | On a person's or a machine's argument about a link's relevance: the claim at the link's start. | `api.argue_link_relevance`, `machine_sentences`, `reasons_off` |\n| `source_span` | claim | The exact quote from the source the claim was extracted from. | `store` |\n| `split_proposal`, `split_proposal_before` | claim | A machine-proposed split of the claim (one property, not graph content until kept), and the one a fresh cut replaced. | `proposed_split`, `store_hand_extraction.restore_splits` |\n| `split_recut_at` | claim | When the claim was last cut again, so undoing finds what that cut did. | `proposed_split.recut`, `proposed_split.undo_recut` |\n| `split_recut_held`, `split_recut_held_resolved` | claim | A fresh cut held for a person because something hangs on a part it would drop, and what became of it. | `proposed_split` |\n| `staleness_flagged`, `staleness_flagged_at`, `staleness_reason` | claim | The staleness daemon's flag: a proposal that the claim may have lapsed, which moves nothing. | `staleness.run_sweep` |\n| `stance_caution` | link | A caution attached when a link may flatten an author's stance (`extraction/stance_guard.py`). | `auto_connect`, `backwards_parts` |\n| `step_form`, `step_order`, `step_role` | both | On a sentence a machine wrote under a link: the shape it gave the step, the sentence's place in it, and its role (`rule`, `fact`, `names`, `wider`, `tie`, `stage`, `relevance`, `other`). | `machine_sentences`, `reasons_off.commit` |\n| `step_note` | claim | Why a machine sentence filed as `other` fits no role. | `machine_sentences.mint_sentence` |\n| `strength` | link | The writer's rating of the link, 0 to 1. Distinct from the computed strength, which is not stored. | most link writers |\n| `superseded_at`, `superseded_by`, `superseded_reason`, `superseded_readings` | both | When, by what (a successor, a marker, or a person's rewording), why, and by which readings a link or claim was taken out of every reading of the graph. | `store`, `auto_connect`, `proposed_split`, `machine_sentences` |\n| `support_interpretation` | link | Set only by the stress-suite seed scripts, on test graphs. | `seed_stress_suite_wave2`, `seed_synthetic_stress_suite` |\n| `support_semantics_proposal` | link | On a part-of link: the decomposition judge's proposed kind of combination. Deliberately not `support_semantics`, which strength reads, so a proposal cannot move a badge. | `decomposition_judgement.write_proposal` |\n| `terminus_llm_type`, `terminus_llm_reasoning`, `terminus_llm_confidence` | claim | A model's proposal of where the claim's reasons end, stored as a proposal, never as the terminus itself. | `terminus_llm.store_proposal` |\n| `text` | claim | The claim's text, written once. | `store`, `cross_source_premises`, `reported_speech` |\n| `title_model` | claim | The model that wrote `short_title`. | `api.generate_short_titles`, `apply_titles` |\n| `trust_state` | link | `proposing`: a machine's proposal no person has acted on, which strength does not count. Named for the waiting, not for an outcome. | `store`, `auto_connect`, `backwards_parts`, `cross_source_premises` |\n| `type` | claim | `empirical`, `normative`, `definitional`, `value_premise`. | `store`, `cross_source_premises`, `reported_speech` |\n| `valid_at`, `valid_at_provenance` | claim | When the claim holds from, and where that date came from (`inherited_source_published` when taken from the source's date). | `temporal_extraction.apply_source_date` |\n| `validity_verdict_claim` | claim | The claim that grounds a ratified lapse (`invalid_at`). | `store.set_validity_with_ground` |\n| `via_concept` | link | The concept that brought a pair to the linker, on the concept route. | `auto_connect.apply_result` |\n| `weighing_state` | claim | `invited`, `invited_sacred`, or `opened`: where a weighing of the claim stands. | `weighing` |\n| `wording_key` | claim | A machine sentence's wording folded to its letters and digits, so one wording is found again. | `machine_sentences.mint_sentence` |\n| `words_from_passage`, `words_from_source`, `words_added`, `words_added_in_brackets` | claim | How many of the rewritten claim's words come from its passage and from elsewhere in the source, and the words found in neither (those in square brackets are declared). | `store.store_claims` (run-time) |\n| `written_at`, `written_by`, `written_version` | both | When, by which pass, and at which version a machine wrote the claim or link. | `proposed_split`, `reasons_off`, `machine_sentences` |\n| `written_kept_in`, `written_model`, `written_pass`, `written_pass_version` | both | Where a machine sentence's answer is recorded (a row of the record or a trial file, never a path on a machine), the model, the pass and its version. | `machine_sentences` |\n| `written_under`, `written_under_form`, `written_under_order` | claim | The machine sentence another machine sentence was written under, the form, and its place. | `machine_sentences.write_under_sentence` |\n"}