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-5

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 findingWhat this does
(major) The unpack cap's test checks no exact bound and no cumulative sizeThe 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 tooThe 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 itThe block is now at the end of the file
(minor) Head never asserts that a refused archive leaves nothing writtenAlready 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 verify on an export of the head: 1716 tests OK, at 424af11.
  • The new mutant is killed. All mutant targets occur once in their files.

Reads

ReviewerHeadUnread partsBlockingMajorMinorInfo
agy424af11none0000
muse424af11none0000
claude-review424af11none0011
claude-security424af11none0001
FindingSeverityCriterionWhereWhatDisposition
claude-review#1minorPR-1adapters/AGENTS.md:12Only half of Argon's redirect-row finding is fixed: the row allowing a tarball's redirect still names no test that holds itLeft: 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#2infononedocs/decisions/0138-the-review-reads-the-pull-requests-head-with-the-read-tools-alone-held-to-it-by-restricted.md:41The Head docstring now denies 'refused whole', but record 0138's boundary row and the test's name still claim itLeft: 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#1infononeadapters/AGENTS.md:13The rewritten redirect row names the artifact download's destination limit but no row names the tarball redirect's limit to codeloadLeft, as claude-review#1.

🤖 Generated with Claude Code