fix(ignores): stop ignoring .playwright and .storybook - #40
Merged
Conversation
Both directories were bare entries in the ignores defaults. A config object carrying only `ignores` is a GLOBAL ignore in flat config, and a global ignore beats any later block's `files`, so the two blocks scoped to those directories were shadowed by the defaults they ship alongside. `playwright` scopes itself to `.playwright/**/*.ts?(x)` and never matched a file; `storybook` kept its `*.stories.*` rules but its `.storybook/main.*` rules never ran. The composed config read as covering directories nothing checked, and `pnpm lint` reported zero problems for them. The defaults now name only generated output, non-source assets, and tool-owned script directories. Authored source stays out of the list. Add an `ignores` suite that asks ESLint which paths survive the defaults, so a future directory-level entry that shadows a scoped block fails a test rather than shipping. The catch-all `files` block in that suite is load-bearing: flat config treats a file matched by no configuration as ignored, so without it every path answers `true`. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01728LepSoRCrVZ7L2HkEoHa
Un-ignoring `.playwright` runs `no-skipped-test` against real specs for the first time, and the recommended set's default flags both forms of `test.skip`. The bare call is a test switched off at author time and stays flagged. The two-argument form is Playwright's own API for a test that does not apply to the environment it just found, which is the shape GAIA's own template uses for a capability its projects may not have enabled, so flagging it would fail lint on shipped template code. Severity stays at the recommended set's `warn`; only the option changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01728LepSoRCrVZ7L2HkEoHa
This was referenced Jul 21, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
.storybookand.playwrightwere bare entries in theignoresdefaults. A config object carrying onlyignoresis a global ignore in flat config, and a global ignore beats any later block'sfiles. The two blocks that scope themselves to those directories were therefore shadowed by the defaults they ship alongside:playwrightscopes itself to.playwright/**/*.ts?(x)and never matched a file. Fully inert, including theplaywright/expect-expectoptions this package tunes by hand.storybookkept its*.stories.*rules (those files live outside the directory) but its.storybook/main.*rules never ran.The composed config read as though both directories were covered. Downstream,
pnpm lintreported zero problems for code nothing had checked.Change
.storybookand.playwrightfromdefaultIgnores. What remains names only generated output, non-source assets, and tool-owned script directories; authored source stays out.src/configs/ignores.test.ts, which asks ESLint itself (isPathIgnored) which paths survive the defaults. A future directory-level entry that shadows a scoped block now fails a test instead of shipping. The catch-allfilesblock in that suite is load-bearing: flat config treats a file matched by no configuration as ignored, so without it every path answerstrueand the suite proves nothing.playwrightrow (e2e/was never the glob) and note thestorybookblock's.storybook/main.*half.Downstream impact
Verified against
gaia-react/gaia, which composes this preset: un-ignoring both directories surfaces 78 problems across 11 files, 59 of them auto-fixable. The manual remainder is mostlyno-underscore-dangleon harness globals whose names are fixed by contract, plus two genuine Playwright-rule violations (playwright/no-conditional-in-test,playwright/no-skipped-test) that the inert block should have been catching all along.Consumers see new lint errors on upgrade.
...lint.ignores({extra: ['.playwright', '.storybook']})restores the old behavior for anyone who wants it.🤖 Generated with Claude Code
https://claude.ai/code/session_01728LepSoRCrVZ7L2HkEoHa