Skip to content

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). deriveViaModule took 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.