Blocker vs warning
Which defects stop a merge, and which are just worth hearing about? Every finding carries one of exactly two severities, and that split carries the whole gating semantics: blockers gate and drive rewrites; warnings inform and do nothing else.
The standard
The definition lives in the audit's system prompt (src/checker.ts) and is
the contract every verdict is held to:
- A blocker is a concrete documentation defect caused or exposed by this change: a changed public command, API, configuration key, workflow, security boundary, operational requirement, compatibility promise, or product behavior that the current documentation omits or contradicts.
- A warning is useful but non-blocking.
- Internal refactors, formatting, implementation details, and unchanged public behavior do not require documentation updates — "never require churn merely because source changed".
What each severity does
| Blocker | Warning | |
|---|---|---|
flips passed |
yes — any blocker makes the verdict fail | never |
check exit code |
1 |
unaffected |
| sync escalation | becomes the rewrite brief | none — checked-current still advances |
| printed | - blocker: <message> |
- warning: <message> |
A passing verdict with a warning, captured — exit 0, the warning printed
and nothing gated:
$ kronika check --base HEAD~1
Kronika documentation check: PASSED
docs/usage.md already documents the changed greeting behavior; no public surface is missing.
- warning: The sample output in docs/usage.md predates the --shout flag; refreshing it would help, but no public behavior is misdocumented.
A blocked verdict, captured — exit 1:
$ kronika check --base HEAD~1
Kronika documentation check: BLOCKED
src/greet.js adds a --shout flag that docs/usage.md does not mention.
- blocker: The new --shout flag changes the public CLI surface and is absent from docs/usage.md.
What blockers become
In the sync loop, blockers — and only blockers — are compiled into the
rewrite instruction (rewriteInstruction, src/sync.ts); the brief's
exact line format is in finding.
Warnings are deliberately excluded: a rewrite corrects named defects, and
a warning names none.
Claimed by the model, enforced by Kronika
Severity arrives in the model's verdict, but Kronika validates rather than trusts it, with two mechanical rules:
- The value must be exactly
"blocker"or"warning"— anything else rejects the whole verdict:
console
kronika: Kronika finding 0 has invalid severity
passedmust equal "there are no blocker findings". A verdict that sayspassed: truewhile listing a blocker is refused, not reinterpreted:
console
kronika: Kronika documentation check contradicts its blocker findings
Both sentences were captured by scripting a stub verdict; both exit 1, so
a misclassifying model cannot sneak a defect past the gate — the gate
never fails open.
Not to be confused with
- A
failedsync outcome — an audit or rewrite that did not complete (state); severities exist only inside completed verdicts. - A skipped source — a source-collection exclusion with a reason, not a defect.
- The summary — the verdict's narrative line; only findings carry severity, and only blockers act.