You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
console + runner: 17 ESLint errors that were never seen, incl. 12 React-correctness bugs #2927
Split out of #2923 so the CI wiring can land without bundling runtime-behaviour changes.
apps/console and packages/runner had no lint script, so turbo run lint skipped them silently. They carry 17 ESLint errors — error severity under the repo's own eslint.config.js, not warnings — that nobody has ever seen. They are parked in DEBT in scripts/check-lint-coverage.mjs until fixed.
apps/console — 14 errors
react-hooks/purity x8 — impure call during render
Date.now() called during render in ApprovalsInboxPage.tsx at lines 1397, 1399, 1400, 1401, 1601, 1605 (+2 more).
Cannot call impure function during render. Date.now is an impure function.
Render must be pure — an impure call makes output depend on when React happens to render, which breaks under StrictMode double-render, concurrent re-render, and the React Compiler's memoisation assumptions. A relative-time display computed this way silently disagrees with itself across renders.
Fix shape: hoist the timestamp out of render — compute in an effect/event and hold it in state, or pass it in — rather than reading the clock mid-render.
react-hooks/static-components x4 — component created during render
Cannot create components during render. Components created during render will reset.
This is the user-visible one. A component defined inside render is a brand-new type every render, so React unmounts and remounts it: local state is lost, inputs lose focus mid-typing, animations restart. Three of the four are Settings pages — i.e. forms, where state loss is most noticeable. Worth checking whether any known Settings flakiness traces to these.
Fix shape: hoist the component to module scope and pass what it needs via props (or useCallback a render function rather than defining a component).
2 minor
apps/console/src/lib/auth-preflight.ts:39 — no-useless-assignment: the value assigned to token is never used in subsequent statements. Worth a look rather than a blind delete: a dead assignment on an auth path can mean an intended write went missing.
apps/console/src/sdui-workbench-preview.tsx:25 — prefer-const on store.
packages/runner — 3 errors
react-hooks/static-components x3 in LayoutRenderer.tsx at 70, 106, 168 — same class as console's.
Suggested order
The two static-components clusters are the same fix applied in two places and the highest value — start there. purity is contained to one file. The 2 minor ones are trivial but auth-preflight deserves a real read.
Closing this out
@object-ui/console (14) and @object-ui/runner (3) are listed in DEBT in scripts/check-lint-coverage.mjs. Per package: fix the errors, add "lint": "eslint .", then delete the DEBT entry — the guard fails if an entry outlives its gap and will remind you to close this issue.
Note these are pre-existing, not a regression — they were simply invisible. The gate added in #2923 does not turn them red; it declares them.
Activity
feat(lint): run ESLint on PRs, and cover every package (#2923) (#2928)
fix(console,runner): render the approvals inbox against one ticking c…