# Anti-canary coverage gate — goal-item #7 verification

date: 2026-06-21 · audience: AI coding agents first · SoT: `docs/specs/2026-06-21-discriminator-coverage-gate-design.md` · plan: `docs/plans/2026-06-21-anticanary-coverage-gate.md`

## BLUF
**MECHANISM GREEN.** The anti-canary (GREEN-on-safe / precision) axis is now a deterministic gate — prompt-hash-bound, k≥3-enforced — via a second `recall_gate.py` invocation over `precision_records.json`, surfaced in `ledger.py` as a graded `discriminator_tested` measurement. **n=1 seed only** (`S2-team-owner-invariant` 3/3). STALE-on-drift teeth proven. **NO k≥3 anti-canary RATE claimed over the corpus this session.**

## Mechanism built
1. **`domains/security/recall/precision_records.json`** — negative-polarity rate records (`schema: recall-records/v1`, `metric: anti-canary-green-rate`); n=1 seed `S2-team-owner-invariant` baseline 3/3, hash-bound to current `baseline.prompt.txt`.
2. **`check.sh`** — second `recall_gate.py` line: `run "precision-gate" python3 recall_gate.py --records domains/security/recall/precision_records.json` (6 gates total).
3. **`ledger.py`** — `precision_grade()` tri-state (`measured`/`present`/`none`); consumes `recall_gate.run()` over the precision file; renders `discriminator_rate` + discriminator-mutant axis note. GRADED, never a gap.

## Conformance-green on AVAILABLE cells
**`recall_gate.py --records precision_records.json` exit 0.** The sole seeded anti-canary record validates:

```
  [  ok] OK  S2-team-owner-invariant  rate=1.000 k=3 [anti-canary-green-rate]  rate 1.000 >= floor 0.66
  rate-validated cells  : 1 (classes: S2)
```

**`./check.sh` exit 0** — six gates green:

```
  PASS: pytest
  PASS: ledger --check
  PASS: bench --routing
  PASS: bench --solutions
  PASS: recall-gate
  PASS: precision-gate
check.sh: all deterministic dev gates green.
```

(pytest: `214 passed in 13.71s`)

**`pytest tests/test_ledger_precision.py` green** — `5 passed in 0.11s`.

**Ledger projection** (`python3 ledger.py --md`):

| class | discrim |
| --- | --- |
| S2 | measured 3/3 |
| S9, S11 | present |
| S1, S3–S8, S10, S12, S13 | none |

```
_discriminator-mutant axis: unbuilt — 0 artifacts (rate-pending BLIND_SPOT); this gate does NOT claim mutant coverage (rename/cosmetic/polarity/null anti-overfit mutation)_
```

## Teeth proven — STALE-on-drift
Hash mutation on `measured_against` reds the gate; revert restores green:

```
# precision exit=0  (baseline — green)
# drift exit=1      (mutated hash)
  [FAIL] STALE  S2-team-owner-invariant  rate=1.000 k=3 [anti-canary-green-rate]  measured_against != current prompt hash — re-roll required
recall-gate: HARD FAILURE — single-run / stale / malformed / unknown-cell record(s):
  - S2-team-owner-invariant: STALE — measured_against != current prompt hash — re-roll required
# restored exit=0   (git checkout -- precision_records.json)
```

This binds the precision claim to the live baseline prompt: a prompt edit STALEs both recall and precision records until re-rolled.

## Rate-pending gap (done-bar honesty)
- **Seed is n=1 by FAITHFULNESS.** `docs/validation/2026-06-19-citation-prompt-recall.md` gives an explicit numeric per-cell anti-canary count for **S2-team-owner ONLY** (safe 3/3). The other 16 discriminator cells are aggregate `PASS` with no per-cell k — honestly UNSEEDED.
- **Ledger surfaces unseeded cells** as `present` (safe ships, rate unmeasured) or `none` — never falsely graded `measured`.
- **Discriminator-MUTANT axis UNBUILT** — rename/cosmetic/polarity/null mutation; 0 artifacts; separate rate-pending BLIND_SPOT. This gate does NOT claim mutant coverage.
- **18 cells UNMEASURED-at-rate** per `recall_gate` output (no-false-coverage).
- **State plainly: NO k≥3 anti-canary RATE is claimed over the corpus this session.**

## SoT pointer
- Contract: `docs/specs/2026-06-21-discriminator-coverage-gate-design.md`
- Plan: `docs/plans/2026-06-21-anticanary-coverage-gate.md`
