**A7 AMENDMENT 4 — 2026-09-12 ~06:10Z. Runner-idle evidence, and one procedure addition that closes the A6 hole by construction instead of repeating it. A7 is still NOT granted — this is the readiness report, not a launch.**

## A5.1 Both axes now read idle, and the second axis needed attribution before it could say so

**Axis 1 — jobs-level CI.** Run `34676423540` (`7cdcf5da`): `changes`, `traceability`, `lint`, `unit (Linux, kitsubito)`, `unit (Windows, hfenduleam)` — **all five SUCCESS**. No run on the repo is `in_progress` or `queued`.

**Axis 2 — local process census.** `Runner.Worker.exe` is **gone**; only `Runner.Listener.exe` (22712) remains, which is the idle waiting state. Two processes still matched my build-name filter and **neither is a build** — both are `rust-analyzer` rustup shims, parented to agent Claude sessions:
```
rustup.exe(39260) <- claude.exe(5988)  <- claude-spt.exe(38632) <- spt.exe(4732)
rustup.exe(43280) <- claude.exe(38220) <- claude-spt.exe(44512) <- spt.exe(4732)
```
A name-matching census would have reported "2 build processes" and blocked on nothing. **The parent chain is what distinguishes an LSP server from a compile.**

## A5.2 The CPU floor, attributed rather than asserted

"Box quiet" was a *claim* at A6, and doyle named the consequence: the 554 ms spread sits unattributed between noise and load to this day. So the floor here is measured and attributed per process, not asserted — a 3-second delta over every process on the box:

| pid | process | cpu-seconds / 3 s | % of one core |
|---|---|---|---|
| 38220 | claude | 0.91 | 30.2 |
| 5988 | claude | 0.61 | 20.3 |
| 52492 | bun | 0.59 | 19.8 |
| 4032 | claude | 0.50 | 16.7 |
| 4732 | spt | 0.48 | 16.1 |
| 3056 | claude | 0.47 | 15.6 |
| 25032 | Everything | 0.39 | 13.0 |
| 21584 | voicemeeterpro | 0.33 | 10.9 |
| 35556 | claude | 0.33 | 10.9 |
| 8060 | nvcontainer | 0.30 | 9.9 |

**Total 7.12 cpu-seconds over 3 s wall across 16 logical cores = 14.8% of capacity. Zero `cargo`, `rustc`, `cl`, `link` or `cargo-nextest` work in the list** — the two rust-analyzer shims did not even surface in the delta, so they are idle-resident rather than working.

The floor is **the agent fleet plus desktop software**. That is this box's **steady state while agents are live**, not a transient to wait out: there is no 0% condition available here, and waiting for one would postpone A7 indefinitely.

## A5.3 Procedure addition — a CPU bracket beside every census bracket

Because the floor is real, named and non-zero, **each arm records the attributed CPU floor at the moment it runs**, alongside its before/after rule census — the same 3-second per-process delta as A5.2, captured with `C(<tag>)`.

This is the cheap fix for the A6 hole. At A6 the spread across three runs of an identical script was 554 ms — 34% of the minimum — and it could not be apportioned between noise and load because no bracket existed. With a CPU bracket per wall, a spread in the A7 table is attributable at the time rather than argued about afterwards, and a wall taken while something unexpected woke up on the box is identifiable instead of silently averaged in.

**No threshold is attached to the floor**, and it is not a gate: it is a recorded condition. A wall is not discarded for a busy bracket, and a quiet bracket does not upgrade a wall. The discriminator remains `completed`-vs-`killed` per Amendment 3.

## A5.4 What is still owed before a wall exists

The prerequisite is **specified, not demonstrated** (Amendment 3 A4.3). S1–S5 must run and S5's provenance hash must match the staged set's `artifact_sha256` before any timed trial. S3 performs a release build of `spt` on this box, so the granted window must cover S1–S5 and both arms — and per doyle the runner/job census is **refreshed after that build and before ARM A**, since the runner can be re-occupied inside the minutes the build takes. The 30-second handover measured in comment 5644026871 is the reason that refresh is not a formality.
