Loading workspace insights... Statistics interval
7 days30 daysLatest CI Pipeline Executions
bdb3e371 Fixed 4 factory bugs surfaced by agent review
no ref
1. Portal TS files were unparseable. tsconfigRootDir was hardcoded to import.meta.dirname inside the factory, which resolves to the factory file's location (repo root), not the consumer workspace. Added a tsconfigRootDir option to reactAppConfig (default process.cwd()) and threaded it through portal's eslint.config.js.
2. Portal's split-JS-TS .ts block was missing baseSrcRules. It was applying only reactFlat + reactJsxRuntime + i18nextFlat + jsReactAppRules — no js.configs.recommended.rules, no react-hooks rules, no viteOnlyExtras. Now spreads baseSrcRules into both blocks so .js and .ts files get the same baseline.
3. comments-ui test files (33 files in test/unit, test/e2e, test/utils) were completely unlinted. srcGlobs only matched src/**, and testGlobs: false skipped the test block entirely. Extended srcGlobs to include test/**, surfacing 4 real violations (3 Playwright empty-pattern fixtures + 1 prefer-const). Added overrides with TODO/justification comments rather than touching source.
4. Storybook flat/recommended preset injected 3 warn-level rules (hierarchy-separator, no-redundant-story-name, prefer-pascal-case) into shade — violating the no-warns principle. Added a post-spread normalization block: hierarchy-separator and no-redundant-story-name flipped to error (zero violations across shade — free flip); prefer-pascal-case dropped to off with TODO (29 violations).
Lint: 0 errors / 0 warnings across all 16 affected workspaces (including comments-ui test/ which is now lintable for the first time). e0ed8b6c Collapsed ESLint configs to 2 unified factories (reactAppConfig + nodeLibConfig)
no ref
Replaced the 4 per-shape factories from the previous iteration (viteTsReactAppConfig, umdTsReactAppConfig, vanillaReactAppConfig, tsNodeLibConfig) with two unified ones:
- reactAppConfig({typescript, reactRefresh, i18next, storybook, tailwindCssPath, legacyTailwindV3ConfigPath, shadeRestricted, sortImports, legacyJsTsSplit, ...}) — every frontend React app, including portal
- nodeLibConfig({typescript, commonjs, localFilenamesMode, ...}) — every Node lib
Every variation that used to justify a separate factory is now a parameter on the unified one. Params prefixed 'legacy*' are escape hatches for known-going-away configs (Tailwind v3 → v4 in comments-ui/signup-form, portal's mid-finished JS → TS migration) — intentional and visible so PRs to remove them are scoped.
Added eslint-plugin-react-hooks to UMD apps (comments-ui, signup-form) — the plugin was previously skipped because they bundle as UMD rather than via Vite, but the hooks rules catch real bugs regardless of bundler. Surfaced 22 legacy exhaustive-deps violations in comments-ui (overridden to off with TODO comment) and 1 in announcement-bar (covered by the factory's blanket off-with-TODO for the same rule).
Every factory has full JSDoc (@typedef + @param + @example). Inline 'why' comments on every dropped rule with violation counts where applicable. AGENTS.md gets a 4-line ESLint Config section pointing readers at the shared module.
Workspaces still standalone (genuinely don't fit either factory):
- ghost/core — 13 file-glob blocks for migrations/schema/seam enforcement
- ghost/admin — Ember workspace, babel parser + 90+ ember-plugin rules
- apps/admin — host shell, recommendedTypeChecked posture + custom local plugins
- apps/admin-toolbar — vanilla JS + jQuery, no React
Lint: 0 errors / 0 warnings across every workspace. e0ed8b6c Collapsed ESLint configs to 2 unified factories (reactAppConfig + nodeLibConfig)
no ref
Replaced the 4 per-shape factories from the previous iteration (viteTsReactAppConfig, umdTsReactAppConfig, vanillaReactAppConfig, tsNodeLibConfig) with two unified ones:
- reactAppConfig({typescript, reactRefresh, i18next, storybook, tailwindCssPath, legacyTailwindV3ConfigPath, shadeRestricted, sortImports, legacyJsTsSplit, ...}) — every frontend React app, including portal
- nodeLibConfig({typescript, commonjs, localFilenamesMode, ...}) — every Node lib
Every variation that used to justify a separate factory is now a parameter on the unified one. Params prefixed 'legacy*' are escape hatches for known-going-away configs (Tailwind v3 → v4 in comments-ui/signup-form, portal's mid-finished JS → TS migration) — intentional and visible so PRs to remove them are scoped.
Added eslint-plugin-react-hooks to UMD apps (comments-ui, signup-form) — the plugin was previously skipped because they bundle as UMD rather than via Vite, but the hooks rules catch real bugs regardless of bundler. Surfaced 22 legacy exhaustive-deps violations in comments-ui (overridden to off with TODO comment) and 1 in announcement-bar (covered by the factory's blanket off-with-TODO for the same rule).
Every factory has full JSDoc (@typedef + @param + @example). Inline 'why' comments on every dropped rule with violation counts where applicable. AGENTS.md gets a 4-line ESLint Config section pointing readers at the shared module.
Workspaces still standalone (genuinely don't fit either factory):
- ghost/core — 13 file-glob blocks for migrations/schema/seam enforcement
- ghost/admin — Ember workspace, babel parser + 90+ ember-plugin rules
- apps/admin — host shell, recommendedTypeChecked posture + custom local plugins
- apps/admin-toolbar — vanilla JS + jQuery, no React
Lint: 0 errors / 0 warnings across every workspace.