chore: strengthen lint coverage and update project housekeeping

- Recursively lint all production JS/JSX under src/ and shared/
- Exclude tests, mocks, and node_modules from static guard
- Update TODO status
- Exclude TODO.md from Docker build context
This commit is contained in:
david raistrick
2026-07-14 22:38:44 -04:00
parent 7d0ea883b0
commit 30712f0e1e
3 changed files with 31 additions and 20 deletions
+1
View File
@@ -1,3 +1,4 @@
TODO.md
node_modules node_modules
**/node_modules **/node_modules
.git .git
+12 -11
View File
@@ -2,44 +2,45 @@
Backlog of bugs + long-term items. Milestones live in REWORK_PLAN.md. Backlog of bugs + long-term items. Milestones live in REWORK_PLAN.md.
## Open ## Open
x fullscreen and dont lock on main app dm view and the no-game-player view ...and doesnt actually prevent lock on android x fullscreen and dont lock on main app dm view and the no-game-player view ...and doesnt actually prevent lock on android
also better vert tab layout - labelt friendly x also better vert tab layout - labelt friendly
x needs AC for players dude x needs AC for players dude
x and quick entry hp x and quick entry hp
hp do not carry from encounter to ecnounter!!! x hp do not carry from encounter to ecnounter!!!
^feature to add back to campaign character after encounter? ^feature to add back to campaign character after encounter?
maybe campaign toggle in charc section (choosing each end is DM overload will be missed forgotten done wront) maybe campaign toggle in charc section (choosing each end is DM overload will be missed forgotten done wront)
hp wont go over max and no temp hp support
x refresh/reload/code update causes UI to update to top unselected cambpaign have to drill all the way back down to active encounter....every time. siemtmes? x refresh/reload/code update causes UI to update to top unselected cambpaign have to drill all the way back down to active encounter....every time. siemtmes?
x encounters cards need clear "in progress"...
I wonder...if a charcter-list-character should have a isNPC option vailble to them - for longer lived
x I wonder...if a charcter-list-character should have a isNPC option vailble to them - for longer lived
npcs..... npcs.....
x hp wont go over max and no temp hp support
## monsters per campaign and npcs
## or/and ....copy from encoubnter?
### dm list - keep active particpant in view (scroll)
not sure good way to do this
### npm install warnings cleanup pass ### npm install warnings cleanup pass
lots of updates lots of updates
## monsters per campaign and npcs
## or/and ....copy from encoubnter?
+18 -9
View File
@@ -1,21 +1,30 @@
// STATIC GUARD: prod source must pass eslint with zero errors/warnings. // STATIC GUARD: prod source must pass eslint with zero errors/warnings.
// Scans App.js + storage adapters + shared modules. Catches unused imports, // Scans ALL .js/.jsx in src/ + shared/ (excl tests/mocks). Catches unused imports,
// dead code, undefined vars before they hit the browser console. // dead code, undefined vars before they hit the browser console.
// Run via: npx eslint <files> --format json -> parse -> fail on any problem. // Run via: npx eslint <files> --format json -> parse -> fail on any problem.
const { execSync } = require('child_process'); const { execSync } = require('child_process');
const path = require('path'); const path = require('path');
const fs = require('fs');
const ROOT = path.resolve(__dirname, '..', '..'); const ROOT = path.resolve(__dirname, '..', '..');
function walkJs(dir) {
let out = [];
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const full = path.join(dir, entry.name);
if (entry.isDirectory()) {
if (entry.name === 'node_modules' || entry.name === 'tests' || entry.name === '__mocks__') continue;
out = out.concat(walkJs(full));
} else if (/\.(js|jsx)$/.test(entry.name)) {
out.push(full);
}
}
return out;
}
const TARGETS = [ const TARGETS = [
'src/App.js', ...walkJs(path.join(ROOT, 'src')),
'src/storage/contract.js', ...walkJs(path.join(ROOT, 'shared')),
'src/storage/firebase.js',
'src/storage/index.js',
'src/storage/server.js',
'shared/index.js',
'shared/logEvent.js',
'shared/turn.js',
]; ];
function runEslint(files) { function runEslint(files) {