Why
The required local test:httpapi:ci command can finish its coverage and auth summaries but leave the Bun process alive before the effect leg starts. During the graphagent-v1.0.37-dev.1 regression this reproduced twice on macOS, so the documented composite gate could not produce an exit code even though each mode passed independently.
What to build
Make the three-mode HttpAPI CI command release every server, timer, listener, and process handle between modes so the composite command terminates reliably without weakening coverage, auth, effect, missing-scenario, or skipped-scenario checks.
Reproduction evidence
- Run
bun run test:httpapi:ci from packages/opencode on macOS.
- Coverage reports
230 pass / 0 fail; auth reports 230 pass / 0 fail; the process remains alive and the effect leg does not start.
- The same behavior occurred in two bounded runs.
- Running coverage, auth, and effect separately exits 0 for all three modes with
230 pass / 0 fail each.
- The release tree was
graphagent-v1.0.37-dev.1; the affected runner was not changed by that release.
Acceptance criteria
Blocked by
None - can start immediately.
Why
The required local
test:httpapi:cicommand can finish its coverage and auth summaries but leave the Bun process alive before the effect leg starts. During thegraphagent-v1.0.37-dev.1regression this reproduced twice on macOS, so the documented composite gate could not produce an exit code even though each mode passed independently.What to build
Make the three-mode HttpAPI CI command release every server, timer, listener, and process handle between modes so the composite command terminates reliably without weakening coverage, auth, effect, missing-scenario, or skipped-scenario checks.
Reproduction evidence
bun run test:httpapi:cifrompackages/opencodeon macOS.230 pass / 0 fail; auth reports230 pass / 0 fail; the process remains alive and the effect leg does not start.230 pass / 0 faileach.graphagent-v1.0.37-dev.1; the affected runner was not changed by that release.Acceptance criteria
bun run test:httpapi:cicompletes and exits 0 on macOS in at least two consecutive clean runs.Blocked by
None - can start immediately.