Negative knowledge
Most of what daimon remembers is positive: this is true, this happened, this is still open. A refutation is the opposite kind of fact. It records that an approach was tried and rejected, that a claim turned out false, or that a path should not be taken again, and it names the evidence that settled the question.
daimon refute add --subject "original #502 receipt design" \
--scope "carried-item receipt tiers" --anchor issue:502 \
--evidence "measurement:566/623 origin misses" --ratify
(the flag that carries the rejected claim's own text sits between --subject
and --scope; see the CLI reference for the exact
syntax.)
Refutations live on the same ledger as standing rulings: one append-only stream, one id space, one deletion path. A ruling is a positive constraint a human put in force. A refutation is a negative one: what no longer holds, and why.
Evidence is cited, not verified
Every --evidence source has to be a typed reference: message:<id>,
transcript:<session>, artifact:<path>, issue:<number>,
measurement:<receipt>, receipt:<id>, or url:<source>. daimon checks the
shape of that reference and nothing else. It never resolves the issue,
never re-runs the measurement, never confirms the artifact still exists at
that path. The citation is recorded exactly as given, permanently, so anyone
reading the refutation later knows precisely what was checked when the
question was settled, and can go check it themselves.
That is also why an agent's own assertion never activates anything by itself. Citing evidence is not the same claim as this evidence actually supports the conclusion, and daimon does not decide that second question for you.
Candidate, then active
daimon refute add --subject "…" --scope "…" \
--evidence issue:502 --by agent
daimon refute ratify r-1a2b3c4d5e6f
daimon refute revise r-1a2b3c4d5e6f --evidence issue:530
daimon refute overturn r-1a2b3c4d5e6f --evidence "measurement:new-result"
An agent's add records a candidate: written, searchable, but not yet
in force, and never rendered as an active guard until a human ratifies it.
The human path is ratify from an interactive terminal; there is no way for
an agent to self-promote a candidate. revise appends a new,
evidence-cited version, which itself needs ratifying before it takes over.
overturn cites evidence against an active refutation: an agent's overturn
is recorded as a proposal and the guard stays in force; a human's overturn
deactivates it immediately.
Reading the ledger
daimon refute list
daimon refute show r-1a2b3c4d5e6f
daimon refute search receipt verification
daimon refute guard "should we revisit #502?"
list and show read this project's own refutations. show on one record
gives its full evidence citations, its scope and anchors, and who wrote and
who activated it, in one place, since nothing on this ledger decays or gets
re-extracted: the record you read is the whole history that matters. search
is the topic-addressable pull, and it deliberately returns both polarities
labelled, refutations and rulings together, since mid-session, after a
briefing has scrolled past, either kind of record might be the one worth
surfacing. guard checks a proposed action's anchors or subject phrase
against active refutations by exact match only, advisory and never blocking
a command on its own; it exists for an agent to check its own next move
before taking it.
The daimon why, daimon diff, and daimon blame commands (see the
item lifecycle and the CLI reference)
answer a different question: they inspect checkpoint items across the
generations daimon retains. A refutation is not a checkpoint item and does
not roll off into an older generation, so there is nothing for those three
to diff or blame here. refute show already is the equivalent: the
complete, un-decayed record for one id.
The boundary with .scars/
A repository can also carry its own negative knowledge, in a .scars/
directory checked into the repo itself: a dead end tried and abandoned, a
piece of code that looks wrong on purpose, a landmine that breaks something
non-obvious. Scars ship with the code they protect. They travel with the
repository, are visible to anyone who clones it, and answer "what happened
here, in this file, that the next contributor needs to know before they
touch it."
daimon's refutation ledger answers a different question, at a different layer. It is per-project memory that lives outside the repository entirely, scoped to whatever a person or agent working in that project has actually tried and rejected, and it exists whether or not the project keeps scars at all. The two are complementary, not competing: a scar documents a trap in the code; a refutation documents a conclusion someone reached while working on it.
Anchoring a scar to the code it protects, holding candidates, and promoting one to active status is its own tool's job: Scar is where that review and promotion tooling lives, not daimon.
daimon ships one bridge between the two layers. With DAIMON_SCAR_HARVEST=1,
it drafts negative-knowledge candidates from each session into
.scars/candidates/ for human review: zero-LLM, path-anchored, and active
only in repos that already have a .scars/ directory. It writes candidates
for a person to review with Scar; it never promotes one itself.