Skip to content

fix(ci): drop the stale ESLint cache restore-keys fallback from ci.yml (#11600) - #11996

Merged
diegosouzapw merged 1 commit into
release/v3.8.51from
fix/11600-eslint-gate-cache-suppressions
Aug 29, 2026
Merged

diegosouzapw merged 1 commit into
release/v3.8.51from
fix/11600-eslint-gate-cache-suppressions

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Aug 29, 2026 •

Copy link
Copy Markdown
Owner

Refs #11600

Scope — deliberately half of the issue

Issue #11600 has two distinct, independently-provable sub-defects. PR #11983 (opened by a parallel session) already covers the second one; this PR covers only the first, so the two do not collide.

Sub-defect Where Covered by
A. stale .eslintcache restore-keys fallback still in ci.yml .github/workflows/ci.yml this PR
B. run-eslint-json.mjs missing --pass-on-unpruned-suppressions scripts/quality/run-eslint-json.mjs #11983

This branch originally carried both; the run-eslint-json.mjs change and its test were dropped once #11983 appeared, to avoid two PRs editing the same file and the same new test path.

Root cause (sub-defect A)

PR #11963 removed the restore-keys: | eslint-${{ runner.os }}- fallback from quality.yml's two "Restore ESLint file cache" steps, with a comment citing this issue: a cache restored on a prefix match is a cache built under a different lint config, suppressions file or lockfile, and it reports stale per-file verdicts.

ci.yml was left untouched — and ci.yml is the workflow that runs the blocking Lint job on every PR. Both of its "Restore ESLint file cache" steps (the lint job and the quality-gate job) still carried the prefix fallback, so the exact mechanism #11963 fixed for quality.yml was still live on the gate that actually blocks contributors.

Fix

Removed the restore-keys fallback from both steps in ci.yml and replaced it with the same explanatory comment quality.yml already carries, so the two workflows now state and enforce the same policy: exact key or a cold full lint, never a partial cache from another configuration.

Validation

No unit test can cover a workflow-runner cache policy. Validated by:

Stated plainly: this half is validated by review + parity, not by a test. Hard Rule #18's TDD path does not apply to a CI runner-cache directive.

Note on the issue's headline

The "223 errors hidden by the cache" headline was investigated earlier this cycle and found to be a phantom local-devbox measurement (a 215-entry freeze was committed and then reverted; CI's own clean-checkout artifact showed zero unsuppressed errors). This PR does not freeze or add any suppression.

@diegosouzapw
diegosouzapw force-pushed the fix/11600-eslint-gate-cache-suppressions branch from ea1dba2 to 7945433 Compare August 29, 2026 08:53
@diegosouzapw diegosouzapw changed the title fix(ci): mirror the eslint-cache fix into ci.yml + tolerate stale suppressions in run-eslint-json.mjs (#11600) fix(ci): drop the stale ESLint cache restore-keys fallback from ci.yml (#11600) Aug 29, 2026
@diegosouzapw
diegosouzapw merged commit c8dc982 into release/v3.8.51 Aug 29, 2026
20 checks passed
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
diegosouzapw#11600) (diegosouzapw#11996)

Fixes the blocking Lint job's own ci.yml cache: PR diegosouzapw#11963 removed the stale restore-keys fallback from quality.yml but left ci.yml's two "Restore ESLint file cache" steps carrying the same prefix-match fallback that lets a cache from a different lint config report stale per-file verdicts. Byte-level parity with diegosouzapw#11963's already-merged fix.

Deliberately half of diegosouzapw#11600 — the other half (run-eslint-json.mjs) is covered by PR diegosouzapw#11983 from a parallel session, so the two don't collide on the same file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants