v0.50.1 — CI hotfix: two lint errors from v0.50.0
pnpm lint is CI's first gate, so nothing downstream of it ran. It failed on two ESLint errors in
packages/server-core, both introduced by v0.50.0:
characters.ts:1296—'updated' is defined but never used(@typescript-eslint/no-unused-vars).deriveViaModuletook the caller's copy of the character and then deliberately ignored it: it re-reads the row itself, because derivation runs off the request's critical path and a second write may have landed in between. The parameter is dropped rather than renamed to_updated— it was never a value the function could honestly use, and keeping it invites someone to use it.mapLayersGrid.test.ts:77—Unnecessary escape character: \/(no-useless-escape). A test name was written as a plain string but escaped as though it were the regex on the line above it.
Both fixes are contained: pnpm lint exits 0, tsc --noEmit is clean, and server-core's suite is
121 files / 1187 tests green, including the 23 in the two touched files. The source-contract test
guarding this seam matches await deriveViaModule\(, so the narrower signature satisfies it
unchanged.
Why the release commit did not catch what CI did. Two things hid it.
pnpm lint runs every package, but apps/web's own lint script ends in || true, so its errors
have never failed a build — only packages/{server-core,shared,client-sdk,ui-components} can turn
the gate red. And the run prints ~1700 lines, essentially all of it pre-existing
no-explicit-any warnings, with the ✖ N problems (2 errors, 1132 warnings) summary buried
per-package. Two errors in that haystack are invisible unless you look for errors specifically.
The whole repo can be linted errors-only in one pass, in about seven seconds, because there is a single flat config at the root:
pnpm exec eslint packages apps --quiet
Run that way, apps/web stops being exempt: it currently reports 6 errors of its own
(CharacterSheet.tsx, ContextPanel.closeImpersonated.test.ts, useDiceSync.test.ts,
useMapLayers.ts, system8AbilityScores.ts). None of them can fail CI today, and none are fixed
here — this release is the CI-blocking pair only — but they are the standing argument for dropping
the || true, which is its own change.