The R19 evidence rule (evidence-terminal) applies to the CHAT part, moved out of
llmwiki/CLAUDE.md/llmwiki/AGENT.md (previously auto-injected into every session — token-heavy because it
forced more citations/file opens per answer). The machine validator (evidence_terminal.py)
on documents with an ```evidence-chain block DOES NOT depend on this skill — it always runs through
harness/policy.yaml regardless of whether graph-mode is on or off. This skill only turns the
CHAT discipline on/off (no validator can reach it); it is the part that cannot self-gate, so weigh the cost
before enabling it.
WHAT
Purpose and context
- Purpose: turns on (and keeps on until turned off) the CHAT discipline: every reasoning chain in a reply must terminate at one of the six types of viewable evidence.
- Trigger (when to use):
- User says "graph-mode", "bật graph mode", "evidence mode", "chế độ chứng cứ", or types
/graph-mode. - Work that needs high confidence in conclusions to be used to DECIDE (audit, acceptance, writing ADR/PLAN, diagnosing a bug that spreads across many files) — where one wrong conclusion costs more than a few extra tool calls.
- User says "graph-mode", "bật graph mode", "evidence mode", "chế độ chứng cứ", or types
- Non-goals: do NOT use for everyday work (editing 1 file, answering a simple question, reversible work) — enabling it indiscriminately makes every reply longer and more costly than necessary. It does not replace/override the R19 machine validator (
evidence_terminal.py) for documents; it is not a general reasoning discipline (that isfable5).
Mental model
kết luận A → vì B → … → điểm cuối ∈ {observed, tool-record, graph-edge, web, parametric, absence}. State: tắt (mặc định) → bật khi gọi → giữ mọi lượt → tắt khi user nói.
Input and output contract
| Field | Required? | Meaning | |
|---|---|---|---|
| In | enable command | yes | "graph-mode" / /graph-mode / "evidence mode"… |
| In | disable command | no | "tắt graph mode" / "graph-mode off" / "normal mode" |
| Out | every CHAT reply when enabled | yes | every reasoning chain has an endpoint of one of the 6 types, declaring all attributes of that type |
Rules and capabilities
- RULE-01 (MUST): This is a CHAT discipline that no validator can catch — if turned off, nobody blocks it; if turned on, you must strictly comply yourself because no gate will save you.
- RULE-02 (MUST): Do not override the R19 machine-gate rule for documents
evidence-chain(applies_to: [write]inharness/policy.yaml) — that rule is independent and always runs regardless of this skill. - RULE-03 (MUST): Touch only what the task requires — no opportunistic changes.
- RULE-04 (MUST):
parametricmust NOT be the only endpoint of a conclusion used to decide. - RULE-05 (MUST): Do not conclude with "it is obvious", "everyone knows", or by pointing back to another argument item within the same answer.
- Capabilities: read files / run commands / look up log-ledger / look up wiki graph / search the web to get evidence; write nothing done by the skill itself.
Failure boundaries
- Cannot find evidence for a link → state clearly with
absence(command that was run + empty output) or downgrade the conclusion to unproven, do not fill in with argument. - There is only
parametricfor a conclusion used to decide → partial: state clearly it has not been verified, propose upgrading toweb/observed. - Everyday tasks that the user still has enabled → still comply (user decides), may mention token cost once.
HOW
Main workflow
| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | deterministic | enable command | Enable the mode, ACTIVE all answers | state = enabled | — |
| W02 | judgment | each question | Build a chain of reasoning, eventually reaching a bottom of evidence belonging to the 6 types | answer has an endpoint | a link is only inference → next time |
| W03 | deterministic | disable command | Disable, return to normal answering | state = disabled | no disable command yet → repeat W02 |
Details of each step (source of truth for W01–W03):
Enable (persistence)
ACTIVE ALL answers from the moment it is called until it is disabled. Do not automatically drift back to empty-type answers after many turns. Disable with: "tắt graph mode" / "graph-mode off" / "normal mode". Default: off (do not automatically enable at session start).
When enabled, every chain of reasoning in CHAT must end at evidence that can be opened and viewed, not at yet another argument. Chain A vì B vì chứng cứ C is done; chain A vì B vì C where C is again inference is NOT done — must continue to state what C is based on, until it reaches the bottom.
Six types are counted as endpoints:
observed— pathfile:linecan be opened, or the command can be rerun with output.tool-record— id of an item in provenance-log / events.jsonl / ledger.graph-edge— eid of an edge in the wiki graph.web— data found on the web: must include link to the EXACT PLACE it was found (not the homepage), access date, and verbatim quote of the passage relied on.parametric— knowledge from training of the model: must self-declare correctly as this type, specify where it comes from (standard name, documentation, author), and state clearly that it has not been verified. It MUST NOT be the sole terminal point of a conclusion used to decide — it must be elevated toweb/observedor accompanied by another type.absence— the exact command/query that was run to search, along with its empty output.
Do not conclude with "obviously", "everyone knows", or by pointing back to another argument item in the same answer. Mechanism details: [[evidence-terminal-chain]].
Branches
There are no sub-branches in this version.
Validation and stopping
No machine validator checks the CHAT part (RULE-01) — compliance is self-checked: before sending, review each conclusion to ensure it has a terminal point belonging to the 6 types. The mode only stops when the user says the stop command.
Examples
- Positive: enable graph-mode, ask "does the hook stop block commits missing Origin?" → answer with
observedllmwiki/.claude/hooks/stop.py:<line>or the re-run command + output, not stopping at "probably yes". - Boundary/failure: a decision conclusion based only on "according to the OWASP spec (parametric)" → not enough; must declare
parametric+ source, state it has not been verified and elevate it toweb(correct section link + access date + verbatim quote) before using it to decide.