A macOS shard stops producing output and the job ends non-zero with no failing test. The hang samples name what is actually running, and it is not what the log's last line suggests.
From the samples on macos-latest-4 (45 taken), the processes alive at the end:
bats (shard launch) -> bats-exec-suite -> bats-exec-file 20 tests/test_remote_setup_doc.bats
bats-exec-test test_remote_setup_doc
No node, no sleep, no sqlite3 — only bats itself and tests/test_remote_setup_doc.bats. The shared pipes are held by that bash group and nothing else.
Correction to the original description
This issue was first filed saying the shard stops "after the same test", naming Stage-1 sync engine protocol and security boundaries, because that was the last line in the log. That reading was wrong and so was the title.
bats --print-output-on-failure buffers a file's output until the file finishes. The last line printed therefore names the last completed file, not the one being executed. Execution was twenty files in; the log was showing something from earlier. Two people read that line as a position, and it is not one.
The pipe theory that followed from it is also refuted, by measurement: bats tests/test_remote_sync_engine.bats alone finishes green in 57 seconds under load 403, and running it together with test_codex_monitor.bats finishes green in 45 seconds with no leaked node process. Whatever this is, it is not that file and not a leaked child holding a pipe.
What the change on the branch actually does
tests/test_remote_setup_doc.bats is untouched by the branch this appeared on — the diff is empty for it. What changed is where it runs:
|
shard |
| base |
2 of 4 |
| the branch |
4 of 4 |
shard-tests.sh recomputes the partition from the tree on every run, so adding three .bats files repartitions everything. That also explains why the hung shard number moved between heads — 2/4, then 3/4, then 4/4. The shard number was never the variable; it was a consequence of repartitioning.
So the branch exposes this rather than causing it. Whether it is latent in the file itself or an interaction with whatever now sits beside it is the open question, and a standalone run of that file is being measured now.
Acceptance
- The hang is reproduced with a named cause: either the file hangs on its own, or a specific co-resident makes it hang.
- Whatever holds it is identified. Only bats processes were alive, so this is not a leaked child — something inside the test is blocked.
- A hung shard says so in its own output. Reconstructing "where it actually was" from a downloaded artifact, against a log line that names somewhere else, is how this issue was filed wrong the first time.
A macOS shard stops producing output and the job ends non-zero with no failing test. The hang samples name what is actually running, and it is not what the log's last line suggests.
From the samples on
macos-latest-4(45 taken), the processes alive at the end:No
node, nosleep, nosqlite3— only bats itself andtests/test_remote_setup_doc.bats. The shared pipes are held by that bash group and nothing else.Correction to the original description
This issue was first filed saying the shard stops "after the same test", naming
Stage-1 sync engine protocol and security boundaries, because that was the last line in the log. That reading was wrong and so was the title.bats --print-output-on-failurebuffers a file's output until the file finishes. The last line printed therefore names the last completed file, not the one being executed. Execution was twenty files in; the log was showing something from earlier. Two people read that line as a position, and it is not one.The pipe theory that followed from it is also refuted, by measurement:
bats tests/test_remote_sync_engine.batsalone finishes green in 57 seconds under load 403, and running it together withtest_codex_monitor.batsfinishes green in 45 seconds with no leaked node process. Whatever this is, it is not that file and not a leaked child holding a pipe.What the change on the branch actually does
tests/test_remote_setup_doc.batsis untouched by the branch this appeared on — the diff is empty for it. What changed is where it runs:shard-tests.shrecomputes the partition from the tree on every run, so adding three.batsfiles repartitions everything. That also explains why the hung shard number moved between heads — 2/4, then 3/4, then 4/4. The shard number was never the variable; it was a consequence of repartitioning.So the branch exposes this rather than causing it. Whether it is latent in the file itself or an interaction with whatever now sits beside it is the open question, and a standalone run of that file is being measured now.
Acceptance