Code quality plan, MR E: UI lint, leaks, and type drift
Phase E of the code quality action plan (https://gitlab.com/postgres-ai/database-lab/-/blob/docs/code-quality-action-plan/docs/plans/20260913-code-quality-assessment-action-plan.md). One MR, or two if 21b needs a separate sign-off.
Findings
- only
packages/ce/srcis linted: 235 of 314 UI files never see ESLint;packages/sharedhas no eslint, no test runner, one devDependency useWsScroll.tsx:36uses the deprecatedDOMNodeInsertedevent, so auto-scroll is dead in current browsersLogs/index.tsx:216opens a WebSocket with no cleanupInstance/Configuration/index.tsx(1345 lines) deep-clones the config every render and feeds the clone into three dependency arrays- no error boundary anywhere in
ui/ CloneDtolacksrevision,deleteAt; metadata lackslogicalSize,maxIdleMinutes- 132 files carry a "Proprietary and confidential" header in an Apache-2.0 repo;
shared/package.jsonandce/package.jsonhave nolicensefield
Tasks
- 17a. Shared ESLint base config; lint devDependencies and
lintscript inshared; CI runspnpm -r lint - 17b. Vitest,
happy-dom, testing-library insharedwith atestscript (ceuses Vitest, not Jest) - 18.
MutationObserverwith the existing tagName guard as a nodeName filter; socket closed on unmount - 19. Error boundary component in
shared, wrapped around theceroot - 20.
useMemothe clone; narrow the three dependency arrays to primitives - 21a. Sync
CloneDtowithmodels.Clone; formatter test - 21b.
licensefield in both packages; header sweep in a separate commit. Needs maintainer sign-off:sharedis published to npm, so this is a publishing-license change
Out of scope
- MUI v4 → v5 consolidation and React 17 → 18: separate migration plan once the lint baseline exists