ADR 0004: Assertion kinds and origin on every finding, hypothesis and proposed step
- Status
- Accepted
- Date
- Deciders
- Founder, product team
Context
The brief requires that each proposed conclusion link back to its supporting evidence and clearly distinguish observed results from interpretations, assumptions and suggestions produced by the agents, and the brand voice guide says “Distinguish observed results from interpretations, assumptions, hypotheses, and proposed actions” and “Avoid styling an AI interpretation as a verified scientific finding”. The attribution word list (shared/attribution-words.json) rejects the label “AI” joined to “generated” in copy and publish scopes.
Decision
- Findings, hypotheses, gaps, protocol and report drafts, and review findings carry
assertion_kindinobservation | interpretation | assumption | suggestion(text + named CHECK) where the record is a statement, and every agent-capable record carriesorigininhuman | agent, a nullableagent_run_id, andillustrative(boolean). - Findings carry
source_ids[]; hypotheses carrysupporting_finding_ids[]andcontradicting_finding_ids[]; review findings carrysource_refandrequirement_code. A statement without a source is allowed only as anassumptionorsuggestion. - The UI renders an assertion chip that always prints the kind and the origin label (“Recorded by a person” or “Agent-generated, for review”); agent-origin records never use the success tone until a person accepts them.
- Copy says “agent-generated” or “proposed”, never the rejected label.
- Agent runs never change an approved record; they create new records in
proposed,draftoropenstates for a person to decide.
Consequences
- The API schemas, the web DTO mirror, the docs statuses page and the deck’s assertion-model diagram share the same four kinds and two origins.
- Seeded records are labelled illustrative everywhere they appear.
- Hypothesis decisions (
accepted | rejected) and review decisions (accepted | dismissed | resolved) are recorded with a rationale and an audit row.
Alternatives considered
- A free-text “confidence” field only: does not separate observation from interpretation; rejected.
- A boolean
is_agent: loses the four kinds; rejected.
Follow-ups
- none