4fcd8512ae
@reviewer re-probed the argc path (18 hand-built frames, all rejection paths clean) and cleared it as deployable. Three non-blocking follow-ups, all closed here: #1 doc rot -- the comments ARE the spec on a hand-rolled wire, and three still described removed formats: readNetstringStream (claimed v1-only; it now serves both paths), parseV2Content doc (empty-netstring terminator), runV2 doc (the two-generations-old command/NUL/payload split), and the test frame() helper. All rewritten to netstring(argc) + argc argv netstrings + payload. #2 canonical argc -- strconv.Atoi accepted "+1" and "001" (one value, two encodings). Reject leading +/-, leading zeros, and empty before Atoi, mirroring readNetstringStream length-token validation. New regression TestV2NonCanonicalArgcRejected (01/+1/-1 etc. exit 1, no exec). #3 argc-low reclassification -- documented where payload is defined: a low argc turns the sender's own trailing netstrings into child stdin; only ever the sender frame, no trust boundary. By design, now stated. Also fixed TestV2FrameElementCapRejected, which under the argc wire was tripping on a bad argc token rather than the count cap it claims -- now sends argc=5000 to hit maxArgs honestly. Build/vet clean, full daemon + client suites green. Daemon is deploy-ready at this commit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>