# v1.11.0 — The Numbers Audit (RELEASE_PROTOCOL §4.8)

Six questions, in writing, for every number this release adds or changes. The engine computes
**no new number in v1.11.0** — `scripts/engram.py` is untouched except `ENGRAM_VERSION` — so
every figure under audit is a **documentation claim**, and the failure mode §4.8 exists for
shifts accordingly: not a wrong denominator inside the engine, but a *verification claim a
reader trusts that the evidence does not carry*. That is still bug class #1 — a number wrong in
the flattering direction — wearing its docs disguise.

| new figure | where | what it is |
|---|---|---|
| `19/19` | INSTALL-PI.md, CHANGELOG, experiments/pi-harness/README.md | count of harness checks passed, per pi version |
| `0.83.0 & 0.74.2` | README Pi row, INSTALL-PI.md, CHANGELOG | the two pi versions the harness passed on |
| `Node ≥ 22.19` / `legacy-node20 → 0.74.2` | INSTALL-PI.md, CHANGELOG | pi's own engine floor; the dist-tag npm serves on Node 20 |
| `seven agentic platforms` | README intro | platform count after adding Pi |
| `1.11.0` | five version locations + badge | the release version |
| `302/302 unchanged` | CHANGELOG, INSTALL-PI.md | selftest count, asserted NOT to have moved |

## Q1 · Cross-consistent with every other number?

Checked side by side rather than reasoned about: the harness prints `== 19/19 checks passed ==`
and its `check()` calls enumerate to 19 (1 install + 8 S1 + 3 S3 + 1 S4 + 2 S2 + 4 S5);
INSTALL-PI.md and CHANGELOG both say 19/19 against the same two pi versions;
`pi --version` printed `0.74.2` (Node 20 PATH) and `0.83.0` (Node 22 PATH) in the same session
the harness ran; `npm view @earendil-works/pi-coding-agent engines` returned `>=22.19.0` and
`dist-tags` returned `legacy-node20: 0.74.2` — the two claims are quotes, not memory. The
platform tables in README and INSTALL-PI.md both enumerate the same seven. Selftest was re-run
on the release branch after the last content edit: `302/302`, equal to the badge, which did not
change.

## Q2 · Which direction does each fail in?

`19/19` fails flattering (claims verification that didn't happen). Mitigation is structural:
the instrument itself ships at `experiments/pi-harness/` and exits non-zero below 19, so the
claim is re-runnable by any reader with a pi binary — it is not a number that has to be
believed. The version pair and Node floors fail *inconvenient* (a user on a version we didn't
name), not flattering. `seven` fails embarrassing-but-visible (the table beneath it lists the
platforms; a miscount is self-evident). `302/302` is pinned by a selftest check that compares
plugin.json to `ENGRAM_VERSION` and by the badge equality rule.

## Q3 · Denominator, and does it say so?

`19/19`: denominator = the 19 checks the harness defines, and the harness README enumerates
them by scenario so a reader can see what is and is not in the denominator — most importantly
the "Not verified" paragraph in INSTALL-PI.md states what the 19 checks do NOT cover (live
tutoring, real-model assessor round-trip). The number's label everywhere is "harness checks",
never "everything works". `302/302`: denominator is the selftest's own check count, printed by
the run.

## Q4 · Does anything read it — and every surface?

These are reader-facing doc numbers; the surfaces are README (row + sub-note), INSTALL-PI.md,
CHANGELOG, and the harness README. All four were grepped for the figures and agree. No engine
surface, JSON field, or dashboard carries any of them, so the v0.7 "caveat lost on one surface"
class has one surface pair to check: INSTALL-PI.md's "Not verified" caveat also appears in the
CHANGELOG's "gates that did not run" section. It does.

## Q5 · Reachable from the CLI in a way the skills never take?

Not applicable — no engine number. The only executable behind a figure is
`node experiments/pi-harness/harness.cjs`, which is not on any skill path and mutates nothing
outside `$TMPDIR` plus a backed-up-and-restored `~/.pi/agent/models.json`.

### Q5.5 · If the number is an instrument, test the instrument

`19/19` **is** an instrument reading, so the instrument was pointed at a known-broken subject
during development, unintentionally and usefully: with the original unquoted YAML frontmatter,
the harness (then 14, then 16 checks) reported **13/14 and then 15/16 — the template checks
failed on both pi versions** until the frontmatter was fixed. The instrument has therefore
demonstrated it can say "no": its checks are not satisfied by a broken port. The 16 → 19 growth
is itself a §4.8 story: the pre-release review found the canary and notify observations were
`console.log`ged, not `check()`ed, while two documents said "asserted" — so the observations
were promoted to checks (canary-present, notify-emitted, plus the Agent Skills XML form and the
nudge's user-role conversion folded into strengthened assertions) rather than the documents
softened. The S1 canary check is what makes S5's canary-absent check evidence instead of luck.

## Q6 · Does the LABEL survive contact with a reader?

The riskiest label was `verified on 0.83.0 & 0.74.2` in the README row — a reader could take
"verified" as "a human learned something on pi". INSTALL-PI.md, which the row links, opens its
honest-status section by defining the method (mock provider, payload capture) and closes by
naming what was not run; the CHANGELOG repeats it. "Verified" is therefore always one link away
from its definition. The `legacy-node20` label is npm's own dist-tag name, quoted verbatim so a
reader can `npm view` it.

---

## v1.11.1 postscript — what §7.5 did to these numbers

The post-release reviewer falsified two audit-adjacent claims and this file records both, per
the protocol's rule that an audit document can lie exactly like a payload:

- **`19/19` became `20/20`, and the correction is a confession:** the empty-store "no nudge"
  member of the old denominator ran in print mode, where the extension is inert regardless of
  the store — a check that could not fail for the reason the docs implied it couldn't. The
  store-driven silence is now asserted over RPC with the UI live (S2b). Q5.5's "the instrument
  can say no" claim survives, but this file's Q3 answer ("the denominator says what it is") had
  a member that didn't say what it was.
- **`Node ≥ 20.6` gets its evidence trail** (it was the one figure in five documents with
  none): pi 0.74.2's own `engines` field reads `{"node": ">=20.6.0"}`, from the installed
  package's package.json.
- The `## 1.10.1` heading swallowed by v1.11.0's CHANGELOG edit republished 1.10.1's gate
  claims — including "§4.8: nothing to audit" — under the header of a release with six audited
  figures. Restored in v1.11.1; the GitHub release notes were edited to match.
