Problem
ci-pnpm.yml detects and runs typecheck, build and test scripts, but never lint. A repo whose lint lives only in a lint script therefore gets no lint in CI:
- caersid has
"lint": "eslint . --concurrency ${ESLINT_CONCURRENCY:-4}", and CI never runs it. Its main branch has built up ~75 lint errors as a result (count reported by the caersid session).
- estimist isn't affected: its
test script runs pnpm run lint && pnpm run format:check && vitest run.
Proposal
Add a has_lint detection alongside the existing ones in the "Detect scripts" step, and a blocking Lint step that runs pnpm run lint when the script exists.
- Blocking, not advisory.
ci-uv.yml runs uv run ruff check . || true, which never fails anything; that is the pattern to avoid.
- Order: before Build, next to Typecheck, so it fails fast and doesn't wait on
next build.
Things to decide
- Rollout. Detection turns lint on for every caller with a
lint script the moment they bump their pin. caersid would go red immediately. Options:
- fix caersid's lint errors first, then land this; or
- ship it behind an opt-in input (e.g.
lint: true, default false) and flip the default once callers are clean.
- Double runs. estimist would run lint twice: once in the new step, once inside
test. Either accept it (oxlint is fast), or estimist drops lint from test once the shared step exists.
- Format check. Same gap for
format:check. It could ride along, or stay a separate decision.
Out of scope
Fixing caersid's existing lint errors. That's caersid work, sequenced per option 1.
Problem
ci-pnpm.ymldetects and runstypecheck,buildandtestscripts, but neverlint. A repo whose lint lives only in alintscript therefore gets no lint in CI:"lint": "eslint . --concurrency ${ESLINT_CONCURRENCY:-4}", and CI never runs it. Its main branch has built up ~75 lint errors as a result (count reported by the caersid session).testscript runspnpm run lint && pnpm run format:check && vitest run.Proposal
Add a
has_lintdetection alongside the existing ones in the "Detect scripts" step, and a blockingLintstep that runspnpm run lintwhen the script exists.ci-uv.ymlrunsuv run ruff check . || true, which never fails anything; that is the pattern to avoid.next build.Things to decide
lintscript the moment they bump their pin. caersid would go red immediately. Options:lint: true, defaultfalse) and flip the default once callers are clean.test. Either accept it (oxlint is fast), or estimist drops lint fromtestonce the shared step exists.format:check. It could ride along, or stay a separate decision.Out of scope
Fixing caersid's existing lint errors. That's caersid work, sequenced per option 1.