every QICR verdict is a deterministic, non-model reward signal
QICR / Verifiable rewards
QICR Verifiable Rewards
QICR audits each reward slice instead of claiming the model learned the right thing. Operators see coverage, sparsity, Goodhart pressure, and the verifier stamp attached to the sealed corpus.
the JSONL row carries intentId, candidateId, horizon, routeId, expectedEffect, decision, basis, manifestHash, policyVersion, worldHash, sealedAt, recordHash
decision distribution, Goodhart pressure, coverage by effect class, sparsity
each cycle is stamped with Goodhart pressure, effect-class coverage, sparsity, and modelfile regression status
Verifier stamp
Audit failed at 2026-06-21T23:27:02Z
The latest QICR verifier audit line is the public pointer for this page. It checks Goodhart pressure, effect-class coverage, sparsity target band, and the Q modelfile regression without claiming proof of learning.
- Status: FAILED
- Audit hash: ec05c38c039fa8a7
- Canonical record: apps/harness/.runtime-logs/qicr-verifier-audit.jsonl
Route governed
How the verifier proves it
The verifier does not prove that Q learned the right thing. It proves that this reward slice was checked against four replayable conditions before it was surfaced: Goodhart pressure, coverage by effect class, sparsity target band, and the Q modelfile regression that keeps the bias slot visible while Plane 1 owns the verdict.
- Goodhart pressure: every high-activation manifest is compared against the corpus median denial rate so a popular adapter cannot quietly drift into gate-gaming behavior.
- Coverage by effect class: every required effect class must appear in the corpus, and unmodeled latent-effect strings stay visible as audit failures instead of being hidden in marketing copy.
- Sparsity target band: DENY+ESCALATE+HALT must stay in the configured band; too few disconfirming rows under-fit the model, and too many mean the gate is doing too much work.
- Modelfile regression: the verifier checks that Q still exposes post.riskScore, manifestHash, and the sentence that Plane 1 owns the verdict. The bias narrows proposals; it does not authorize actions.
Route governed
What the rewards are
QICR seals four record types into one chain: CANDIDATE_ACTION (what Q proposed), ADAPTER_SELECTION (which Plane 2 manifest conditioned the proposal), IMMACULATE_DECISION (the verdict from evaluateQicrCandidate), and BIAS_APPLICATION (a Phase 2 wrapper that pre-evaluates risk/ood flags). The reward is the IMMACULATE_DECISION, not a learned score: it is deterministic, it is not produced by a model, and it is sealed against the chain so a verifier can audit which adapter and which world produced it. Because the chain seals before any later record can edit it, tampering localizes at the altered row, not the whole history.
- How the chain seals: every IMMACULATE_DECISION is hashed with its preceding ADAPTER_SELECTION and CANDIDATE_ACTION inside the same cycle, so the decision can be replayed bit-for-bit.
- How the corpus joins IMMACULATE_DECISION with the preceding ADAPTER_SELECTION: the builder walks the events array in order and carries the latest manifestHash forward until a new adapter selection overwrites it, so a single JSONL row points at the conditioning that produced its decision.
- The manifestHash carry-forward: a cycle with one ADAPTER_SELECTION and many IMMACULATE_DECISION events still attributes every row to the same manifest; a second ADAPTER_SELECTION flips the carry-forward for the rows that follow it.
Route governed
How to use it
The operator workflow is a build-then-query loop. The build step walks a directory of QicrCycleResult fixtures and emits one JSONL row per IMMACULATE_DECISION. The query step reads that JSONL and prints the four statistics reports in human or --json form. Both are read-only against the source fixtures and never mutate the corpus. The full flag set is in the operator doc referenced at the bottom of this page; the short list is below.
- npm run q:icr:rewards:build — walk an input dir of cycle-result JSON, emit the JSONL corpus, print the by-decision count summary.
- npm run q:icr:rewards:stats — decision distribution, Goodhart pressure, coverage by effect class, sparsity summary (human or --json).
- npm run q:icr:rewards:top-basis — most-frequent basis strings from the corpus (configurable --top, default 10).
- npm run q:icr:rewards:coverage — per-effect-class activation count and registered status, so missing classes are visible.
- npm run q:icr:rewards:sparsity — disconfirming rate (DENY+ESCALATE+HALT over total), the one number to watch for under-fit vs unstable model regimes.
Route governed
Reading the report
Each report below is what an operator should treat as the durable surface for a QICR reward slice. Together they make up the four-statistics report the CLI emits under the stats subcommand, and the public badge points at the latest verifier line so the timestamp and status are visible before anyone reads the details.
- Decision distribution: ALLOW dominates the row count by design — the policy gate's job is to keep most work inside the route. DENY+ESCALATE+HALT are the informative signal, and the report prints them as a separate count so the operator can see the disconfirming share at a glance.
- Goodhart pressure: per-manifestHash activation count versus deny rate, top 5 by share. A rising activation count for a single manifest is normal; a rising activation count combined with a rising deny rate is the adapter gaming the gate, and the report surfaces both numbers side by side so the trend is visible.
- Coverage by effect class: per-effect-class activation count with a registered flag. Missing classes are blind spots: a class the runtime has never observed cannot be labeled, so the model cannot learn to act on it. The report lists every class the corpus has touched and the count per class.
- Sparsity: disconfirming rate (DENY+ESCALATE+HALT over total). Below the target sparsity band the model is under-fit and the rewards are uniform; above the band the model is unstable and the gate is doing too much work. The number is the single line the operator should track across builds.
Route governed
Honest limits
The QICR design thesis §10 names three risks for the rewards lane. They are restated here without softening, and they bound every public claim on this page. The rewards are a sealed trace of the policy gate; they are not a guarantee that the model learned the right thing. Restricted and private secure-lane work is out of scope for this public page.
- Goodhart: gate verdicts are a proxy, not the property the gate was meant to enforce. Optimizing against the verdicts without an outer objective is unsafe — the rewards are necessary evidence, not a sufficient objective.
- Coverage: effect classes the runtime has not observed cannot be labeled, so the rewards cannot teach the model about them. Coverage is a precondition, not an output.
- Sparsity: DENY/ESCALATE/HALT are concentrated in the corpus, so the disconfirming signal is naturally thin. Uniform rewards (almost all ALLOW) under-fit the model; rewards with too many disconfirming verdicts mean the gate is doing work the model should be doing. Both regimes are tracked by the sparsity report.
Route governed
Related
The QICR runtime has three public surfaces. The other two are:
- QICR overview (/qicr): the two-plane separation, the sealed chain, and the public commitment.
- QICR Plane 2 (/qicr/plane-2): the soft-field adapter registry and sealed ADAPTER_SELECTION records that the rewards corpus joins against.