Public: anyone can read this; the crew can change it.
The tests outside the gate run on a schedule, so a suite that breaks is seen the day it breaks #2559
Check · Review · Land · Live done — Landed and live in production.
Each file in `EXCLUDED` now runs nightly, and a red one opens, updates or closes a `Red:` issue. The last check failed on a test I didn't touch. That failure is what parked the first pull (#2556).
shipped production is serving it deploy 93e874d
Each file in EXCLUDED now runs nightly, and a red one opens, updates or closes a Red: issue. The last check failed on a test I didn't touch. That failure is what parked the first pull (#2556).
- The failing test: the check failed on one test in
test/crew-parks.test.ts("the planner re-planning on its own pass: splits, drops what the crew wrote, closes what is done, and no more"). I couldn't reproduce it. It passes on its own, passes in the file's normal order, and passes three runs under CPU load. My diff doesn't touch that test or the code it covers, so I left it alone and pushed again to rerun the check. - Random order:
bun test --randomize test/crew-parks.test.tsdoes fail in several tests in that file. I don't know whether the randomize failures cause the check failure. That suite looks order-dependent and may need its own issue. - Nightly run:
.forgejo/workflows/outside-gate.ymlrunsbun scripts/flake-hunt.ts outside --file-issuesat 03:47 UTC, and on manual dispatch. It runs the files inEXCLUDEDone at a time with the gate's 60 s timeout. It needs the sameFORGE_TOKENsecret andFORGE_URLvariable asflake-hunt.yml. - Same list:
outsideFiles()inscripts/gate.tsis the complement ofgateFiles()overEXCLUDED. A test checks that the two together cover every test file exactly once, so a file moved into the gate stops being run by the schedule. - Issues:
- A newly red file opens one Red: test/x.test.ts issue naming its first failing test.
- Red on a different test updates the issue body, with a comment as fallback if the edit is refused.
- Red on the same test says nothing, so the owner's asks show it once.
- A file that passes again gets a comment and its issue is closed.
- The three named suites:
test/scale.test.ts,test/app-domains.test.tsandtest/web-ui.test.tsare already in the gate and pass, so there was nothing to fix or move. - Docs: the README now describes the nightly run.
I ran test/flake.test.ts and test/check-list.test.ts (38 pass) and tsc --noEmit. I never exercised the issue open, update and close calls against the forge, and the workflow hasn't run. A local outside run (in the sandbox, which blocks some network calls) had 4 of 25 files red: crew-interrupted, crew-sandbox-real, scaffold and snapshot-destination; the first nightly run will show which are real.
I did not fix any excluded suite or move one into the gate. It runs nightly only, not after each merge.
🤖 Generated with Claude Code
Approved. This is tooling only: a nightly workflow, a flake-hunt mode, and pure helpers (outsideFiles, redActions, redIssueFor, redFile) with tests. It adds no page, endpoint or dependency, and the token only goes to FORGE_API. The partition test (gate plus outside covers every file once) is the right guard. I did not exercise the preview, since there is no UI to see. Two things I would do next: (1) The issue open/update/close calls in outside() are untested and have not run against the forge. Run the workflow once by hand (workflow_dispatch) and check the first Red: issues before relying on it. Also check the close path: the comment POST result is ignored, so a failed comment is silent. (2) The assertion expect(issue.body).not.toContain("second one ")` in test/flake.test.ts is nearly vacuous because of the trailing space. Assert that the body names only the first failing test in its "first failing test:" line. Smaller: seed 0 now means unseeded in runFile, but freshSeed() can return 0 (1 in 4 billion). Use undefined or a flag instead. Four of 25 excluded files were red locally, so expect the first night to file several issues. Let the owner see them once, as designed.
Each file in
EXCLUDEDnow runs nightly, and a red one opens, updates or closes aRed:issue. The last check failed on a test I didn't touch. That failure is what parked the first pull (#2556).test/crew-parks.test.ts("the planner re-planning on its own pass: splits, drops what the crew wrote, closes what is done, and no more"). I couldn't reproduce it. It passes on its own, passes in the file's normal order, and passes three runs under CPU load. My diff doesn't touch that test or the code it covers, so I left it alone and pushed again to rerun the check.bun test --randomize test/crew-parks.test.tsdoes fail in several tests in that file. I don't know whether the randomize failures cause the check failure. That suite looks order-dependent and may need its own issue..forgejo/workflows/outside-gate.ymlrunsbun scripts/flake-hunt.ts outside --file-issuesat 03:47 UTC, and on manual dispatch. It runs the files inEXCLUDEDone at a time with the gate's 60 s timeout. It needs the sameFORGE_TOKENsecret andFORGE_URLvariable asflake-hunt.yml.outsideFiles()inscripts/gate.tsis the complement ofgateFiles()overEXCLUDED. A test checks that the two together cover every test file exactly once, so a file moved into the gate stops being run by the schedule.- A newly red file opens one
Red: test/x.test.tsissue naming its first failing test. - Red on a different test updates the issue body, with a comment as fallback if the edit is refused. - Red on the same test says nothing, so the owner's asks show it once. - A file that passes again gets a comment and its issue is closed.test/scale.test.ts,test/app-domains.test.tsandtest/web-ui.test.tsare already in the gate and pass, so there was nothing to fix or move.I ran
test/flake.test.tsandtest/check-list.test.ts(38 pass) andtsc --noEmit. I never exercised the issue open, update and close calls against the forge, and the workflow hasn't run. A localoutsiderun (in the sandbox, which blocks some network calls) had 4 of 25 files red:crew-interrupted,crew-sandbox-real,scaffoldandsnapshot-destination; the first nightly run will show which are real.I did not fix any excluded suite or move one into the gate. It runs nightly only, not after each merge.
🤖 Generated with Claude Code
Closes #812