curlRun call loses its first flag — io.spawn consumes argv[0], so curl never sees -sSf (no --fail, no silence)io.spawn(bin, argv) takes argv WITH argv[0]: io.spawn("/bin/echo", ["AAA","BBB"]) runs echo with argv0 AAA and prints BBB. Every other spawn site obeys that — classify() builds argv: [keeperBin, verb, sp] and [sshBin, dest, cmd], bin repeated. curlRun does not: be/shared/wire.js:252 calls io.spawn(CURL_BIN, argv) where all four callers pass ["-sSf", "-A", "git/2.0", …]. So -sSf becomes argv0 and is DROPPED. curl therefore runs without -f: an HTTP 404/500 is written to stdout as a body and returned as success, and without -sS its progress meter goes to stderr on every fetch. Visible in any http clone. Found by the TEST-004 treadmill; method Issues.
be/shared/wire.js:252 io.spawn(CURL_BIN, argv) — the only spawn site in be/ whose argv omits the binary.curlPost (:287), fetchHttp (:349), pushHttp (:638), advertRefs (:681) — each ["-sSf", "-A", "git/2.0", …].22bec7d6: io.spawn("/bin/echo", ["AAA","BBB"]) → busybox reports AAA: applet not found; ["echo","CCC"] → prints CCC.% Total % Received … progress meter on every http clone — exactly what -sS exists to suppress.-f: curlRun only throws on a non-zero curl EXIT. An HTTP error page returns exit 0, so the error body is handed to the pkt-line parser and fails later as a malformed advertisement instead of "the server said 404".-A git/2.0 and everything after it DO reach curl — only the first element is eaten, so the bug is silent rather than fatal.curl receives every flag its caller passed, and an HTTP error surfaces as an HTTP error.
curlRun spawns with argv[0] present: io.spawn(CURL_BIN, [CURL_BIN].concat(argv)), matching classify()'s shape.-f actually applies, so a 4xx/5xx becomes a plain-words failure naming the URL and the status, not a parse error three layers down.jab get http://… fail with a transport error, not a pkt-line complaint.be/ for the same slip — io.spawnFds sites (verbs/vim/vim.js:55) already pass the name, but confirm.be/ JS only — io.spawn's convention is correct and jab/ is not in scope.io.spawn(CURL_BIN, [CURL_BIN].concat(argv)) in curlRun.-f produces reads in plain words with the URL and status.be/ for any other io.spawn/io.spawnFds whose argv omits argv[0].Not started — filed 2026-07-27 from a TEST-004 treadmill finding.