all-check
Goal: in one pass, run everything this project knows how to check except e2e, and report briefly —
one line per check, findings limited to the files of the PR.
1. The PR files
- Base:
gh pr view --json baseRefName -q .baseRefName; with no PR, the release/* branch the
current one was cut from (git branch -r | grep release/), otherwise main.
- List:
git diff --name-only origin/<base>...HEAD plus uncommitted work (git status --short).
Save it to a file in the scratchpad and use that file from then on.
- In zsh a variable is not word-split: pass the list as
${=FILES} or through xargs.
2. Which checks
Read scripts in package.json and sort them into the categories below. Run everything that is
there and invent nothing: no script, no check.
| Category |
Typical scripts |
Scope |
| lint |
lint:check, oxlint, eslint |
PR files |
| format |
format:check, oxfmt, prettier |
PR files |
| types |
tsc, typecheck |
whole project |
| unit tests |
test, vitest, jest |
vitest run --changed origin/<base> (related tests); otherwise the PR's specs plus the specs of changed sources |
| mutation |
mutate, stryker |
--mutate 'a.ts,b.ts' as one comma-separated list of changed files that fall inside the config's mutate glob (usually services/stores/lib); always --force — the incremental cache lies when a file has only just gained a spec |
| build |
build |
whole project |
| duplication |
jscpd, dup |
whole project, filter the output by the base names of the PR files |
| architecture drift |
drift, arch* |
whole project, show the output in full (it is short) |
| dead code and exports |
knip, dead* |
whole project, filter by PR files, show the summary lines |
| React health |
react-doctor |
whole project, summary only |
Skip: anything matching e2e, playwright, staging, codegen, dev, deploy,
strip-comments, *:fix, *:write, openapi-ts, and mutate when no service files changed.
3. How to run them
- Light ones (lint, format, tsc) in a single call. Heavy ones (vitest, stryker, build, scanners) in
parallel calls, but never alongside e2e: they starve each other on CPU.
- macOS has no
timeout; cap them with the tool's own timeout, 10 minutes for Stryker and build.
- Stryker prints survivors for the whole incremental set: read only the table rows and the
[Survived] blocks for PR files. Put the full output in a scratchpad file and grep it.
- A surviving mutant is a missing assertion, not a number. Leave equivalent ones and name them.
4. The report
A table: check → result → findings in PR files, one line each. On a separate line, findings that
predate the PR (confirm with git blame or a run on the base) — do not fix those silently.
Change nothing without asking, except formatting of files the PR already touches. If everything is
clean, say so in one sentence, no table.
1---2name: all-check3description: Run every check the project has except e2e, scoped to the files of the current PR or branch, and report one line per check. Triggers — "/all-check", "run all the checks", "all checks except e2e", "check the PR files", «запусти все проверки», «прогони проверки по файлам PR».4---56# all-check78Goal: in one pass, run everything this project knows how to check except e2e, and report briefly —9one line per check, findings limited to the files of the PR.1011## 1. The PR files12131. Base: `gh pr view --json baseRefName -q .baseRefName`; with no PR, the `release/*` branch the14 current one was cut from (`git branch -r | grep release/`), otherwise `main`.152. List: `git diff --name-only origin/<base>...HEAD` plus uncommitted work (`git status --short`).16 Save it to a file in the scratchpad and use that file from then on.173. In zsh a variable is not word-split: pass the list as `${=FILES}` or through `xargs`.1819## 2. Which checks2021Read `scripts` in `package.json` and sort them into the categories below. Run everything that is22there and invent nothing: no script, no check.2324| Category | Typical scripts | Scope |25| --- | --- | --- |26| lint | `lint:check`, oxlint, eslint | PR files |27| format | `format:check`, oxfmt, prettier | PR files |28| types | `tsc`, `typecheck` | whole project |29| unit tests | `test`, vitest, jest | `vitest run --changed origin/<base>` (related tests); otherwise the PR's specs plus the specs of changed sources |30| mutation | `mutate`, stryker | `--mutate 'a.ts,b.ts'` as one comma-separated list of changed files that fall inside the config's `mutate` glob (usually services/stores/lib); always `--force` — the incremental cache lies when a file has only just gained a spec |31| build | `build` | whole project |32| duplication | `jscpd`, `dup` | whole project, filter the output by the base names of the PR files |33| architecture drift | `drift`, `arch*` | whole project, show the output in full (it is short) |34| dead code and exports | `knip`, `dead*` | whole project, filter by PR files, show the summary lines |35| React health | `react-doctor` | whole project, summary only |3637Skip: anything matching `e2e`, `playwright`, `staging`, `codegen`, `dev`, `deploy`,38`strip-comments`, `*:fix`, `*:write`, `openapi-ts`, and `mutate` when no service files changed.3940## 3. How to run them4142- Light ones (lint, format, tsc) in a single call. Heavy ones (vitest, stryker, build, scanners) in43 parallel calls, but never alongside e2e: they starve each other on CPU.44- macOS has no `timeout`; cap them with the tool's own timeout, 10 minutes for Stryker and build.45- Stryker prints survivors for the whole incremental set: read only the table rows and the46 `[Survived]` blocks for PR files. Put the full output in a scratchpad file and grep it.47- A surviving mutant is a missing assertion, not a number. Leave equivalent ones and name them.4849## 4. The report5051A table: check → result → findings in PR files, one line each. On a separate line, findings that52predate the PR (confirm with `git blame` or a run on the base) — do not fix those silently.53Change nothing without asking, except formatting of files the PR already touches. If everything is54clean, say so in one sentence, no table.