Assertion kinds
Every statement a person or an agent records is classified. assertion_kind says what kind of claim it is;
origin says who made it. Both are text columns with named CHECK constraints (ASSERTION_KINDS in
api/app/db/models/_agentic.py), and both are printed by the assertion chip of the web app, so a reader
never mistakes an agent’s interpretation for an observed result.
The four kinds
| Kind | Meaning | Source requirement |
|---|---|---|
observation | A result that was observed and can be traced to a source | cite a source (source_ids[]) |
interpretation | A reading of one or more observations | cite a source |
assumption | Something taken as given for now | may stand without a source |
suggestion | A proposed next step or line of inquiry | may stand without a source |
ADR 0004 records the rule that a statement without a source is allowed only as an assumption or a
suggestion; the API stores source_ids[] on every finding and the web form asks for the kind explicitly.
The hypothesis form defaults to interpretation (“Interpretation (default)” in the picker) so an author has
to choose observation deliberately.
The two origins
| Origin | Chip label | Set by |
|---|---|---|
human | Recorded by a person | every record a person creates |
agent | Agent-generated, for review | every record an agent run writes; agent_run_id points at the run |
Agent-origin records never use the success tone until a person accepts them. Copy says “agent-generated” or “proposed”; the label “AI” joined to “generated” is rejected by the attribution word list and is not used anywhere.
Where they appear
| Record | assertion_kind | origin | Decision by a person |
|---|---|---|---|
Finding (FindingOut) | yes | yes | edited with evidence.findings.manage |
Hypothesis (HypothesisOut) | yes | yes | accepted or rejected with evidence.hypotheses.approve |
Gap (GapOut) | no | yes | addressed or dismissed with evidence.gaps.manage |
Protocol draft (ProtocolOut) | no | yes | transition and /approve with plans.protocols.* |
Report draft (ReportOut) | no | yes | transition and /approve with plans.reports.* |
Review finding (ReviewFindingOut) | no | yes | accepted, dismissed or resolved with review.findings.approve |
Findings carry source_ids[] and a confidence_note; hypotheses carry supporting_finding_ids[] and
contradicting_finding_ids[]; review findings carry source_ref and requirement_code. Every one of
these records also carries illustrative; seeded records set it and show the label “Illustrative”.
Source: api/app/db/models/_agentic.py, api/app/db/models/evidence.py, api/app/db/models/plans.py, api/app/db/models/review.py, web/lib/content.ts, web/components/evidence/hypotheses.tsx, decisions/0004-assertion-model.md