Context
The new CI workflow (PR #208) added npm run lint enforcement, but the codebase has 59 pre-existing eslint errors. To unblock the cross-platform CI rollout, eslint runs with continue-on-error: true — it's visible in the run summary but doesn't fail the job. This issue tracks the cleanup needed to flip that flag.
Breakdown
After running npx eslint . --fix (which auto-resolved 1 of 60), the remaining errors are:
| Count |
Rule |
Difficulty |
Notes |
| 14 |
@typescript-eslint/no-unused-vars |
Easy |
Remove imports or _ prefix |
| 13 |
svelte/no-unused-svelte-ignore |
Easy |
Just delete the stale comments |
| 12 |
svelte/prefer-svelte-reactivity |
Hard |
Svelte 5 runes migration ($state, etc.) |
| 10 |
svelte/require-each-key |
Medium |
Add stable key per {#each} block |
| 5 |
@typescript-eslint/no-unused-expressions |
Medium |
Inspect each — could be intent or bug |
| 2 |
svelte/no-dom-manipulating |
Medium |
Refactor direct DOM access |
| 2 |
svelte/no-at-html-tags |
Security |
Audit {@html} usage for XSS |
| 1 |
no-control-regex |
Medium |
Review the regex in question |
Suggested cleanup order
- Mechanical pass (deletes + renames): unused-vars, unused-svelte-ignore, prefer-const. Low risk, big visual win (~28 errors).
- Each-block keys: pick stable keys per loop (likely
id or index). ~10 errors.
{@html} audit: confirm each call site only renders trusted content; switch to safe alternatives where possible. Do this before any prefer-svelte-reactivity migration touches the same files. ~2 errors.
- Unused-expressions + control-regex + dom-manipulating: case-by-case. ~8 errors.
- Svelte 5 reactivity migration: 12 errors, riskiest. Bundle with related rendering changes if any.
Done when
.github/workflows/ci.yml has continue-on-error: true removed from the ESLint step, the CI gate is strict, and PRs fail on new lint regressions.
Context
The new CI workflow (PR #208) added
npm run lintenforcement, but the codebase has 59 pre-existing eslint errors. To unblock the cross-platform CI rollout, eslint runs withcontinue-on-error: true— it's visible in the run summary but doesn't fail the job. This issue tracks the cleanup needed to flip that flag.Breakdown
After running
npx eslint . --fix(which auto-resolved 1 of 60), the remaining errors are:@typescript-eslint/no-unused-vars_prefixsvelte/no-unused-svelte-ignoresvelte/prefer-svelte-reactivity$state, etc.)svelte/require-each-key{#each}block@typescript-eslint/no-unused-expressionssvelte/no-dom-manipulatingsvelte/no-at-html-tags{@html}usage for XSSno-control-regexSuggested cleanup order
idor index). ~10 errors.{@html}audit: confirm each call site only renders trusted content; switch to safe alternatives where possible. Do this before anyprefer-svelte-reactivitymigration touches the same files. ~2 errors.Done when
.github/workflows/ci.ymlhascontinue-on-error: trueremoved from the ESLint step, the CI gate is strict, and PRs fail on new lint regressions.