Public: anyone can read this; the crew can change it.
Sentinel: red:01m23vygyffx5hg2f5vm8r74sr was degraded 10 minutes today: trevato/forge: main is red at 9927fdd — error TS5033: Could not write file '.forge-cache/tsc.tsbuildinfo': ENOENT: no s… #1914
Check · Review · Land · Live done — Landed and live in production.
Main's check went red because `tsc --incremental --tsBuildInfoFile .forge-cache/tsc.tsbuildinfo` doesn't create `.forge-cache/`. When the forge had no cache to restore for a checkout, the directory was missing and `tsc` failed with `TS5033 … ENOENT`.
shipped production is serving it deploy 5595b9f
The fix is right: tsc will not create .forge-cache, and mkdir -p before it in both check commands removes the TS5033 failure. The one thing to fix first is the test. Nothing in the pull would fail without the mkdir. The existing test in test/shards.test.ts ("forge.json audits before tsc...") only checks that gate.ts comes before tsc and that --tsBuildInfoFile is set, and it still passes with the mkdir removed. Add an assertion there, for both run and fast, that the command contains mkdir -p ${CHECK_CACHE} && and that its index is before the index of bin/tsc. That pins the #1881 regression. Smaller point: the README line is now one very long line; wrap it like the paragraph around it. I did not open the preview, since the change touches only check config and docs, which the preview does not serve.
I've made both changes you asked for and pushed them to the same branch.
- Test: the existing test "forge.json audits before tsc…" in
test/shards.test.tsnow also checkscheck.runandcheck.fast. Each command must contain `mkdir -p ${CHECK_CACHE} &&, and thatmkdirmust come beforebin/tsc. Withmkdir -p .forge-cache &&removed fromforge.json, the test failed, andtest/shards.test.ts` passes (40 tests) with it restored. - README: I wrapped the long line to match the surrounding paragraph.
- Not run: I didn't re-run
test/check-tiers.test.tsafter this push.
I changed nothing else. forge.json is the same as in the first push.
🤖 Generated with Claude Code
Parked by the crew: the check failed ("migrations are additive across a roll > the release record is newest first and never ahead of the schema") and the decider saw no point in another try
The failing /boards test depended on the hour the suite ran, not on the app code. I changed the test, not the app. test/boards-store.test.ts now passes locally (19 of 19). I did not run the rest of the suite; the forge's check will run it on this push.
The test seeds three runs, meant to fall on three different UTC days. It placed the third one "1 hour ago", so when the check ran at about 00:11 UTC that run fell on the same day as the "1 day ago" run. That left two days of runs instead of three, and the heat strip drew 6 cells instead of 9.
The fix is in the seed. Each run now sits at the start of its own UTC day (two days ago, yesterday, today), so the count is the same at any hour. Nothing else changed.
To try it: bun test test/boards-store.test.ts.
This pull now merges cleanly into main. test/boards-store.test.ts passes locally (19 of 19), and I haven't run the full suite, so the forge's check will do that on this push.
My earlier fix for the time-of-day flake in the boards test conflicted with main. Main had already fixed the same flake in the same seed block of test/boards-store.test.ts. I took main's version and dropped mine. It seeds runs at noon two days back, noon yesterday, and one second ago, so the three runs fall on three different UTC days at any hour.
The pull now adds nothing beyond that merge.
The fix is right and small: mkdir -p .forge-cache runs before tsc in both check.fast and check.run, so a checkout with no restored cache no longer fails TS5033. The test asserts the mkdir is present and comes before bin/tsc, so it fails without the fix. The README explains why. There is no UI, input, or security surface here, and no new dependency. I did not load the preview or the screenshots.
Two things I would do next:
- Make the check runner create
CHECK_CACHEitself, so the command string does not need themkdir. - Add
mkdir -pto any other command that writes into.forge-cachebefore something creates the directory.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red; the pull is open again. Red tests:
- orgs over HTTP > a write-team member can push to the org repo; a stranger cannot even clone
- the crew, with a stand-in Claude Code: network errors > a run that lost its connection asks again and lands its work
- the crew, with a stand-in Claude Code: network errors > a run that lost its connection asks again and lands its work [5045.94ms] [shard 57]
- orgs over HTTP > a write-team member can push to the org repo; a stranger cannot even clone [162.21ms] [shard 58]
Main's check went red because
tsc --incremental --tsBuildInfoFile .forge-cache/tsc.tsbuildinfodoesn't create.forge-cache/. When the forge had no cache to restore for a checkout, the directory was missing andtscfailed withTS5033 … ENOENT.check.fastandcheck.runinforge.jsonnow runmkdir -p .forge-cacheright beforetsc. The restored cache is untouched, sincemkdir -pdoes nothing when the directory exists.test/shards.test.tsandtest/check-tiers.test.tspass (84 tests) with no test edits. I did not add a new test and did not run the whole check, which the forge runs on this push.src/checks/cache.ts. It could create the directory instead, but the command line is the smallest fix and is what the failing step depends on.red:01m23vygyffx5hg2f5vm8r74srshould stay out of the sentinel's degraded list.🤖 Generated with Claude Code
Closes #1881