Files
TREK/client/scripts/skip-lint.mjs
T
Maurice bd267c67f8 ci(client): fail the count ratchets on an entry above the tree
lint:size, lint:layers, lint:rtl (both baselines), lint:skips and
lint:warnings only failed a count that passed its entry. A count that
fell below its entry was logged and nothing more, so a file that shrank
could grow back to its old entry unseen, and the entry of a deleted
file stayed behind for the next file at that path. lint:format and
lint:offline already fail on such a stale entry, and the docs said
these counts may only shrink.

Each of them now fails on an entry that lowerCounts would lower or
drop, naming its count or saying the file is gone, and tells to run
--update, which still only lowers. staleCounts and reportStale in
lib/ratchet.mjs hold the shared part. Every baseline matches the tree
today, so none needed lowering. The client CLAUDE.md says so, and that
CI lints through lint:warnings rather than lint:check.
2026-10-08 14:11:54 +02:00

29 lines
1.4 KiB
JavaScript

#!/usr/bin/env node
/*
* lint:skips: no test is focused, and skipped tests may only go away.
*
* A stray .only passes CI while the rest of its file never runs, so it fails
* this check wherever it appears. A skipped or todo test is coverage that was
* switched off and then forgotten (JourneyDetailPage.test.tsx has carried 35
* skipped blocks since April); the files that hold some are listed in
* scripts/skip-baseline.json with their count, and a file may hold no more.
* An entry above what its file holds now, or for a file that is gone, fails
* as well until --update lowers it.
* Playwright's test.fixme counts as a skip. Only a skip that decides at run
* time is left out: skipIf and runIf, and in a Playwright spec
* test.skip(condition, 'why'), unless the condition is a literal that always
* skips (skipIf(true), runIf(false), test.skip(true, 'why')).
* Covers the vitest tests under src/ and tests/ and the Playwright specs
* under e2e/.
*
* npm run lint:skips check against the baseline (CI)
* npm run lint:skips -- --update lower the baseline to what the files hold now;
* it never raises an entry
*/
import { fileURLToPath } from 'node:url';
import { runCli } from './lib/ratchet.mjs';
import { check } from './lib/skips.mjs';
const root = fileURLToPath(new URL('..', import.meta.url));
await runCli('lint:skips', (args) => check({ root, update: args.includes('--update') }));