✨ Add npm run fix aggregator for the fix:* scripts

Override the prior design choice: there is now an npm run fix
script that runs fix:oxlint && fix:oxfmt. Rationale: the friction
of having to remember and run two separate fix commands after
npm run check outweighs the 'intentional fixes' argument once
check has already told you which fixers are needed. The diff
after running fix remains the review surface.

- package.json: new 'fix' script (npm run fix:oxlint && npm run fix:oxfmt)
- project-specs.md: updated the FIX section to document the new
  aggregator, removed the 'no fix aggregator by design' text in
  two places (FIX section and PREFIX CONVENTION section)
- README.md: same updates, plus the Development section header
  changed from 'Format/Fix' to 'Individual fixes' to reflect
  the new hierarchy
This commit is contained in:
tmu committed 2026-09-04 23:58:18 +02:00
1 parent 8a8d57172c
commit 1fe3dbe28b
3 files changed
+10 -7

No files matched your search

+2 -2
View File
@@ -7,7 +7,7 @@ Pattern matching for TypeScript/ESM environments (F#-style, not regex).
- **Build:** `npm run build`
- **Test:** `npm run test`, `npm run test:ci`
- **Checks:** `npm run check`, `npm run fix`
- **Format/Fix:** `npm run fix:oxfmt`, `npm run fix:oxlint`
- **Individual fixes:** `npm run fix:oxfmt`, `npm run fix:oxlint`
### Tooling
@@ -43,7 +43,7 @@ Pattern matching for TypeScript/ESM environments (F#-style, not regex).
Script names follow a prefix convention that signals _when_ they run:
- `check:*` — read-only verification. Aggregated by `npm run check`. Used in pre-commit hooks and CI's build job.
- `fix:*` — mutating counterpart of `check:*`. Run individually (no `npm run fix` aggregator by design — fixes should be intentional, not batched).
- `fix:*` — mutating counterpart of `check:*`. Aggregated by `npm run fix`. Use after `npm run check` to auto-resolve issues.
- `test:*` — test scripts. `npm run test` runs the full suite; `test:unit` / `test:ci` are scope-specific variants.
- `publish:*` — runs only at publish time, in the CI `publish` job (immediately before `npm publish`). There is no local `npm run publish` script — publishing is CI-only by policy.
+1
View File
@@ -43,6 +43,7 @@
"check:oxlint": "oxlint ${LEFTHOOK_FILES:-src}",
"check:tsc": "tsc",
"clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\"",
"fix": "npm run fix:oxlint && npm run fix:oxfmt",
"fix:oxfmt": "oxfmt ${LEFTHOOK_FILES:-.}",
"fix:oxlint": "oxlint --fix src",
"test": "npm run check:tsc && node --test --strip-types \"src/**/*.test.ts\"",
+7 -5
View File
@@ -176,9 +176,9 @@ script's intended lifecycle:
(which runs all `check:*` scripts in order). Called from the
lefthook pre-commit hook on staged files, and from the CI build
job on the full project. Read-only; never modifies files.
- `fix:*` — mutating counterpart of a `check:*` script. There is
**no** `npm run fix` aggregator by design: fixes should be
intentional, not batched. Run individually.
- `fix:*` — mutating counterpart of a `check:*` script. Aggregated
by `npm run fix`. Use after `npm run check` to auto-resolve
issues; the diff is the review surface.
- `test:*` — test scripts. `npm run test` is the canonical entry
point (`check:tsc` + unit tests); `test:unit` skips the typecheck
for fast local iteration; `test:ci` adds c8 coverage and is the
@@ -268,12 +268,14 @@ script does not belong in the standard pipeline.
### FIX
- `fix`: Run all fixes in order — `fix:oxlint`, then `fix:oxfmt`.
Use this when `npm run check` reports issues you want to
auto-resolve. The fix scripts write changes in place; review
the diff before committing.
- `fix:oxlint`: `oxlint --fix src`.
- `fix:oxfmt`: `oxfmt ${LEFTHOOK_FILES:-.}` — same scoping as
`check:oxfmt` (whole project by default, staged files from
lefthook). Writes changes in place.
(There is no `fix` aggregator in the scripts; run the `fix:*` scripts
individually.)
### PUBLISH