Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
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

Closed

Description

@yinlianghui

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

  1. Add a root-level lint script (or a dedicated e2e lint task in turbo) that covers e2e/, fix the 3 errors it surfaces.
  2. 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.


Generated by Claude Code

Activity

  1. self-assigned this
    on Aug 12, 2026
  2. yinlianghui commented on Aug 12, 2026

    @yinlianghui
    ContributorAuthor

    CLAIM — session session_017Qqyix2QcnpUC9XeYVDzx3 (objectui whole-repo seat), branch claude/issue-4456-e2e-lint-coverage.

    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).


    Generated by Claude Code


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions