RUNNER UNDER TEST · 24 CHECKS · 10 MUTANTS

The runner is the tested thing

A key that nothing can fail is not a test

The scorer's bytes, behavior and teeth are all pinned by a recorded answer key — anchored in Rekor, valid through 2027. Ten known-bad runners ship alongside it; every single one is caught.

24
BEHAVIOR CHECKS
10
MUTANTS
8
RUNNER MATRIX
2027
KEY VALID UNTIL
2
REKOR ANCHORS
0
FALSE PASSES
Run the suiteAnswer key← Suite root
node runner-tests/runner-tests.mjs·--record
uta / conformance runner-tests /
The runner is the tested thing

Three oracles, one suite

Until v1.3.2 the reference scorer was our code: a stranger could run it, but had to trust it — the same asymmetry this suite exists to kill. These tests turn the runner from a trusted component into a tested component.

OracleWhat it pinsWhere it lives
Bytessha256(score-runner.mjs) — the exact runner bytesanswer-key.json, anchored in Rekor (entries #2 and #3)
BehaviorThe 8-runner separation matrix + the reference-mode verdict, row by row, failure lists includedanswer-key.json — recorded 2026-09-09, valid through 2027-08-19
Teeth10 known-bad runner variants — each must DIVERGE from the keymutants.json — deterministic byte patches, digests pinned in the key

A key that nothing can fail is not a test. Every mutant here is caught — rebuild any of them and run the suite: it flags it.

v1.3.3 — what the second bug report forced

The two fixes, landed

  • premature-atc (vector #14): a properly-signed, anchored, active card whose only defect is a FUTURE issued_at (2030-01-01). The exact mirror of expired-atc; runners checking only the upper bound accept it.
  • Two-sided window: issued_at ≤ NOW < expires_at — enforced by generator and reference runner alike.
  • Derived ground truth: generated-card expectations derive from card bytes and pinned anchors, never from a sidecar default; a lying sidecar is a hard FATAL.
# from the conformance directory
node runner-tests/runner-tests.mjs

# regenerate the key from a runner's live behavior
node runner-tests/runner-tests.mjs --record