Overview
.github/workflows/ci.yml runs npm run lint -- --cache --max-warnings=250, while .github/workflows/syntax.yml runs npx eslint . --max-warnings=0. Two gates on the same tool with thresholds 250 apart means one of them is always the real gate and the other is theatre — and neither can pass today. A 250-warning allowance also has no ratchet, so warnings can accumulate up to the cap without any signal.
Specifications
Features:
- One lint gate with one threshold
- A ratcheting warning budget that can only decrease
- The redundant gate removed
Tasks:
- Fix the ESLint configuration, then measure the real warning count
- Set a single threshold at the measured count and remove the duplicate gate
- Add a CI step that fails if the count rises
- Schedule the warning count down over time
Impacted Files:
.github/workflows/ci.yml
.github/workflows/syntax.yml
eslint.config.js
Acceptance Criteria
- Exactly one workflow gates on lint
- The warning budget is measured, not guessed
- The budget can only decrease
Overview
.github/workflows/ci.ymlrunsnpm run lint -- --cache --max-warnings=250, while.github/workflows/syntax.ymlrunsnpx eslint . --max-warnings=0. Two gates on the same tool with thresholds 250 apart means one of them is always the real gate and the other is theatre — and neither can pass today. A 250-warning allowance also has no ratchet, so warnings can accumulate up to the cap without any signal.Specifications
Features:
Tasks:
Impacted Files:
.github/workflows/ci.yml.github/workflows/syntax.ymleslint.config.jsAcceptance Criteria