how a statement earns the right to be published
15 rules. 16 planted records. 0 taken on faith.
dogwatch verify runs on every committed record on every push. A violation that merely warns fails the build. Each rule below has a deliberately-broken record behind it — open one and press Verify to watch the checker catch it in your own browser.
The honesty rubric
schema generated from the same Zod source the runner uses
checks[] is empty, or a check is stuck at a non-terminal verdict
a finding pointing at a check that isn't a finding, or a finding-verdict check with no finding for it
a finding without a real source: an absolute https URL, a retrieval timestamp inside the run window, and an evidence path that resolves inside the same record
an empty-findings run whose absence-of-evidence section doesn't match the actual pass count
a skipped or errored check with no machine-readable reason, or missing from notChecked
an action or gate not backed by a real, matching audit event
a cost that doesn't sum to its own breakdown, or LLM usage claimed with no provider-reported tokens behind it
an advisory note published with no model call behind it, or citing a finding id or URL that isn't in this record's own evidence
a broken or unverified audit hash chain, or a discontinuity from the previous run with no gap record explaining it
a record whose content no longer matches the hash committed alongside it — the tamper-evidence check
a finding statement that wasn't re-derived byte-for-byte from stored evidence by the rule that owns it
a metric wearing a severity, or sharing an id with a check or finding
a secret-shaped string, or a header outside the published allowlist, anywhere in a record
Those 16 records are committed under fixtures/violations/ and asserted against their exact error codes by the eval suite. They are planted failures, not published runs, and are marked noindex accordingly.
What the rules are protecting
R13: a finding is never written, only derived
Finding.The advisory model, and why its opinion cannot change anything
agreesWithRule: false, so the disagreement rate is an artifact rather than a reassurance. A quiet night makes no call at all.The autonomy ladder, and the one thing deliberately left ungated
What this is not
- An installable product. Nothing here is published to npm; forking it and pointing it at your own surfaces is unsupported.
- A claim about anyone else's software. dogwatch watches six surfaces James operates, and refuses to probe the rest.
- An uptime monitor. One request, one runner, one region, once a night — no SLA, no paging, no synthetic score.
- A performance judgement. Timings and download counts are recorded and rendered, never judged, never a finding.