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.
Lint coverage gap: e2e/ is outside every package's lint script, so turbo lint green ≠ repo lint clean #4456
Found during #4045 (PR #4450): repo-root pnpm exec eslint . reports 3 errors under e2e/ (2× no-useless-assignment, 1× preserve-caught-error) that turbo run lint never sees, because no package's lint script covers e2e/. main has this today; turbo stays green.
Why this is a card and not noise
The repo's load-bearing lint check is turbo run lint (that is what CI runs). Any directory outside every package's lint script is a surface where lint errors accrete invisibly — the same shape as the coverage-gate blind spots #4347 just closed for tsc chains: a green gate over a population that silently excludes part of the repo. Today it is 3 stylistic errors; the gap, not the 3 errors, is the defect.
Options for whoever takes it
Add a root-level lint script (or a dedicated e2e lint task in turbo) that covers e2e/, fix the 3 errors it surfaces.
If e2e/ is deliberately unlinted, encode that decision: add it to a documented ignore so root eslint . and turbo agree, and the next person doesn't rediscover the discrepancy.
Either way the invariant to land is: root eslint . and turbo run lint agree on what is clean — one resolver, one answer.
Filed unassigned as an observation; measurement details in PR #4450's report/body.
Ruling (delegated authority; open veto window): option 1 — cover, don't ignore. The invariant to land: root eslint . and turbo run lint agree on what is clean.e2e/ holds executable test code that gates releases; deliberately unlinted executable code is not a position this repo has taken anywhere else, and the 3 existing errors (2× no-useless-assignment, 1× preserve-caught-error) are mechanical fixes, not style debates.
Landing shape by measurement, not prescription: the dev inspects how lint tasks are wired (per-package scripts + turbo) and picks the minimal shape that puts e2e/ inside what CI's Lint job actually runs — a root-level lint script wired into the turbo lint task, or an equivalent the repo's convention already suggests. The 3 errors get fixed in the same PR (they are what the new coverage exposes — that IS the red-first: coverage added, lint red with exactly those 3, fix, green). Wiring must be load-bearing, #4450-style: with a violation present and the wiring removed, lint goes green — capture that direction once.
Scope guard: no new gate script unless the agreement invariant genuinely cannot be expressed in the existing lint wiring; if the fix for any of the 3 errors changes e2e test BEHAVIOR (not just style), stop and report that error instead of guessing.
Grading: config + e2e-internal only, no released package source → no changeset owed (the presence gate's scripts-only precedent, #4449); use empty frontmatter only if the gate demands a file.
Surface (mutual exclusion): root lint wiring (root package.json scripts / turbo.json / eslint config), e2e/** (the 3 error sites), CI lint job wiring if needed. Disjoint from the only other in-flight card #4459 (react spec-bridge).
Activity
yinlianghui commentedon Aug 12, 2026
CLAIM — session
session_017Qqyix2QcnpUC9XeYVDzx3(objectui whole-repo seat), branchclaude/issue-4456-e2e-lint-coverage.Ruling (delegated authority; open veto window): option 1 — cover, don't ignore. The invariant to land: root
eslint .andturbo run lintagree on what is clean.e2e/holds executable test code that gates releases; deliberately unlinted executable code is not a position this repo has taken anywhere else, and the 3 existing errors (2×no-useless-assignment, 1×preserve-caught-error) are mechanical fixes, not style debates.Landing shape by measurement, not prescription: the dev inspects how lint tasks are wired (per-package scripts + turbo) and picks the minimal shape that puts
e2e/inside what CI's Lint job actually runs — a root-level lint script wired into the turbo lint task, or an equivalent the repo's convention already suggests. The 3 errors get fixed in the same PR (they are what the new coverage exposes — that IS the red-first: coverage added, lint red with exactly those 3, fix, green). Wiring must be load-bearing, #4450-style: with a violation present and the wiring removed, lint goes green — capture that direction once.Scope guard: no new gate script unless the agreement invariant genuinely cannot be expressed in the existing lint wiring; if the fix for any of the 3 errors changes e2e test BEHAVIOR (not just style), stop and report that error instead of guessing.
Grading: config + e2e-internal only, no released package source → no changeset owed (the presence gate's scripts-only precedent, #4449); use empty frontmatter only if the gate demands a file.
Surface (mutual exclusion): root lint wiring (root
package.jsonscripts /turbo.json/ eslint config),e2e/**(the 3 error sites), CI lint job wiring if needed. Disjoint from the only other in-flight card #4459 (react spec-bridge).Generated by Claude Code
Generated by Claude Code
chore(lint): bring e2e/ under the lint gate; fix the 3 errors it expo…
chore(types): bring e2e/ under a tsconfig; fix what 30 never-compiled…