Nothing reaches the agent until it passes every check.
One shared service, called by all three tiers, so verification stays auditable in one place. Failing a single check refuses the conclusion rather than downgrading it.
One shared service, called by every tier.
The first failure ends the call. Nothing downstream runs, and the label is not quietly downgraded.
Conclusion refused
The first failure ends the call. Nothing downstream runs, and the label is not quietly downgraded.
- Action held
- Falsification test returned
- Written to the log
Five checks in sequence, called by every tier, so there is one place to audit what verification did.
Five checks. What each one asserts, and what happens on failure.
Temporal ordering
The stated cause's timestamp precedes the stated effect's. Causes cannot postdate effects.
Refuse to render. Surface both timestamps.
Magnitude consistency
The claimed attribution, applied to the real baseline, produces an effect size within tolerance of the observed anomaly.
Refuse to render. Surface the mismatch.
Gate validity
The conclusion isn't sitting downstream of an active data-integrity fault on the same entity.
Suppress. Surface the upstream fault instead.
Sample-size floor
Every metric cited in the conclusion clears the minimum viable threshold for its decision type.
Refuse to render. Name the thin metric.
Label match
The rendered language matches the computed confidence label exactly.
Block at narration. Regenerate with correct framing.
Confounder detection is not a guard check — it runs inside Tier 2, before attribution, so a declared policy change or macro event suppresses the attribution rather than reaching the guard at all.
A refusal is a record, not a gap.
Every refusal is written with the check that failed, the values that failed it, the tier that produced the candidate conclusion, and the falsification test that would settle the question. Refusals are queryable and countable per decision type.
That count is the most useful diagnostic in the system. A decision type refusing 40% of the time is telling you exactly where the graph is underspecified, and it is telling you before an agent acts on the gap rather than after.
Then decide what the agent is allowed to do unsupervised.
A verified conclusion and an authorised action are two different questions.