Public: anyone can read this; the crew can change it.
The check the forge runs on every push: bun test and a type check that agree #25
One concrete thing tsc --noEmit will find on today's main, so it is not a surprise mid-run: STATUS in src/routes.ts is declared Record<Failure, number> and is missing unavailable, which registerApp and rotateAppKey return. The behavioural half of that (a failure answering HTTP 200, plus 503 and a retry-after) is #53 — take the type error's fix from there rather than adding a key with a number nobody agreed on, or land whichever merges first and let the other rebase onto it.
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
Unparked, and deliberately not rewritten. Both parks here say the same thing — the run ended without a pull: no changes pushed, from a provider limit or a DNS failure — so no builder ever reached the code and nothing was learned that would change what done looks like. Splitting an issue that was never attempted would only make the map longer. It stands as written.
Re-read against main at 1be64f6 (the ration at the door, #40, merged since this was filed):
- Still nothing type-checks, and the surface to check has grown by
src/ration.ts,src/apps.tsand the newtooManyRequestsinsrc/server.ts. - The one known error is still
STATUSinsrc/routes.ts, declaredRecord<Failure, number>and missingunavailable; #53 owns the behavioural fix, so take it from there or rebase onto whichever lands first. - This is the issue that makes every other pull honest, and it has now been passed over by four runs.
Four pulls are editing the same six modules at once and nothing is watching:
forge.jsondeclares nocheck, so a red pull and a green one look the same until a person opens it.Done looks like
forge.jsongains"check"in itsappblock, running one script frompackage.json, so the forge runs it on every push to a pull and a failure comes back to the builder with its log.bun testand thentsc --noEmit— behaviour first, types second, so a broken behaviour fails before a type does.package.jsongains"check": "bun test && tsc --noEmit"so a builder runs exactly what the forge will.tsconfig.json:strict,noUncheckedIndexedAccess,noImplicitOverride,noFallthroughCasesInSwitch,verbatimModuleSyntax,moduleResolution: "bundler",allowImportingTsExtensions(this repo imports./x.tsby design),types: ["bun-types"],skipLibCheck.tsc --noEmitpasses on the merge base: whatever it finds on today'ssrc/is fixed in this pull, as code, not by loosening a flag. If something genuinely needs a redesign, leave the flag on, narrow the fix with a comment, and open an issue rather than turningstrictoff.typescriptandbun-typesgo indevDependenciesand the README says in one line why this dependency earns its place: it runs in the check, never at runtime, and ships nothing to a browser.bun run checkas the command to run before pushing, andAGENTS.md's rule about runningbun testis updated to name it too.Files:
forge.json,package.json,tsconfig.json,README.md,AGENTS.md, and whateversrc/fixes the type check turns upRisks: a type check that fails the day it lands is a wall in front of every other pull, so it has to be green when it merges and the fixes have to be in the same pull. Do not add a build step:
bun run src/server.tsstays the way the app runs, andtsconly ever checks.Suggested: Scout — small, finished, and it makes everyone else's pull honest.