What Argon's read of #540 left: the unpack cap's exact bound, the redirect row, and the Head tests run as a file
DO
7h ago+18+18+01234567890123456789-5-5-0123456789
Follow-on to #540, "The review reads the pull request's head, held to it by --restricted". Argon was out of quota when #540 merged. It read #540 at its merge commit, 9682602f, and found one major and three minors. This PR fixes three of them; the fourth was already held at the caller.
No protected file is touched and no record is added.
| Argon's finding | What this does |
|---|---|
| (major) The unpack cap's test checks no exact bound and no cumulative size | The cap is one check on the whole archive unpacked, so it is cumulative by construction. Its bound is now held: an archive of exactly UNPACKED bytes, two members of 2048 and 2049, is written, and with one byte fewer allowed it is refused. A new mutant, "an archive of exactly the cap is refused" (> to >=), is killed by that test |
(minor) adapters/AGENTS.md says an artifact's download "alone" follows its redirect, one row under the row that allows a tarball's too | The row now says the download follows its redirect to the storage alone, which is what it does |
(minor) Head stands after if __name__ == "__main__" in tests/test_harness.py, so running the file as a script skips it | The block is now at the end of the file |
(minor) Head never asserts that a refused archive leaves nothing written | Already held: unpack stops at the first check that fails and leaves what it wrote for its caller, and harness/read.py removes it, as tests/test_steps.py's head_unreadable cases assert. The docstring said "refused whole"; it now says this |
Not done: a row in adapters/AGENTS.md that names the tarball redirect's own tests. The Claude review and the security pass both asked for one; see the table.
Checks
make verifyon an export of the head: 1716 tests OK, at424af11.- The new mutant is killed. All mutant targets occur once in their files.
Reads
| Reviewer | Head | Unread parts | Blocking | Major | Minor | Info |
|---|---|---|---|---|---|---|
| agy | 424af11 | none | 0 | 0 | 0 | 0 |
| muse | 424af11 | none | 0 | 0 | 0 | 0 |
| claude-review | 424af11 | none | 0 | 0 | 1 | 1 |
| claude-security | 424af11 | none | 0 | 0 | 0 | 1 |
| Finding | Severity | Criterion | Where | What | Disposition |
|---|---|---|---|---|---|
| claude-review#1 | minor | PR-1 | adapters/AGENTS.md:12 | Only half of Argon's redirect-row finding is fixed: the row allowing a tarball's redirect still names no test that holds it | Left: adapters/AGENTS.md is at its 40-line limit and its rows near 260 characters, and a rule names a test, never a class, so no row can name the tarball's two tests without dropping another rule. The rule is held by those tests and their mutants; the contradiction Argon named is gone. |
| claude-review#2 | info | none | docs/decisions/0138-the-review-reads-the-pull-requests-head-with-the-read-tools-alone-held-to-it-by-restricted.md:41 | The Head docstring now denies 'refused whole', but record 0138's boundary row and the test's name still claim it | Left: record 0138 is replaced, and its row is never edited but to re-point; both callers remove what a refusal leaves, as tests/test_steps.py holds. |
| claude-security#1 | info | none | adapters/AGENTS.md:13 | The rewritten redirect row names the artifact download's destination limit but no row names the tarball redirect's limit to codeload | Left, as claude-review#1. |
🤖 Generated with Claude Code