Skip to content

chore: apply v2 tooling/CI/release standard (stage 1) - #37

Merged
bhouston merged 1 commit into
mainfrom
chore/36-v2-standard-stage1
Sep 25, 2026
Merged

bhouston merged 1 commit into
mainfrom
chore/36-v2-standard-stage1

Conversation

@bhouston

Copy link
Copy Markdown
Owner

Summary

Stage 1 of the org-wide v2 repo standard: tooling, hooks, CI, and release workflow.

  • engines.node → >=22 (root + three-ntc + three-ntc-trainer); packageManager was already pnpm@11.27.0 from chore: bring repo config to the shared standard #35
  • pnpm-workspace.yaml: minimumReleaseAgeExclude entries use package names, not name@version (three, @tanstack/charts)
  • Canonical .oxfmtrc.json (repo's routeTree.gen.ts exclusion is already covered by the canonical **/*.gen.ts pattern)
  • Canonical .oxlintrc.json base: turned eslint/no-unused-private-class-members and unicorn/no-new-array to error now (produce zero errors); kept typescript/no-explicit-any off — enabling it currently errors on ~60 call sites, deferred to stage 3 per the standard
  • Canonical commitlint.config.js (explicit type-enum)
  • Canonical scripts/check-pr.mjs + .github/workflows/pr-policy.yml — job renamed to contribution (branch protection requires this exact name); commitlint title/range checks now run as pr-policy steps instead of being invoked from inside check-pr.mjs
  • .github/workflows/ci.yml — job renamed to ci (branch protection requires this exact name), canonical concurrency group, added format-check (oxfmt --check) and Codecov steps, kept this repo's dist-verification, release:check, bundle-size, and blocking-prod/advisory-dev audit steps. The skip-gpu workflow_call input now defaults to true (canonical release.yml calls ci.yml with no inputs, so the default has to keep skipping GPU there — matches current behavior where release.yml explicitly passed skip-gpu: true)
  • .github/workflows/release.yml — byte-identical canonical file

lint-staged, .husky/pre-commit, .husky/commit-msg, and CONTRIBUTING.md were already canonical from #35, no changes needed.

Deliberate deviation to flag

The previous release.yml had a repo-specific "Restore generated changelog from the previous release" step (downloads the prior release's CHANGELOG.md before @semantic-release/changelog runs, since root CHANGELOG.md isn't committed to git). The v2 standard calls for release.yml to be byte-identical to the canonical file, which doesn't have this step. I copied it byte-for-byte per the standard, but this means the next release's CHANGELOG.md will start fresh instead of appending to history unless that behavior is restored some other way (e.g. committing CHANGELOG.md, or a different mechanism). Flagging for the maintainer's decision — did not add a workaround since the standard is explicit about byte-identical here.

Validation (in worktree)

  • pnpm install — lockfile unchanged
  • pnpm build — pass
  • pnpm tsc — pass
  • pnpm lint — pass (warnings only, no errors)
  • pnpm exec oxfmt --check . — pass
  • pnpm test — 18 test files / 61 tests passed
  • pnpm release:check — 9/9 passed
  • pnpm size — within budget (three-ntc 9168B/11000B, three-ntc-trainer 44820B/52000B)
  • node .../standards/check-drift.mjs <worktree> — clean except the documented .oxlintrc.json no-explicit-any exception above

Note

There's a stale, conflicting open PR #18 (chore/13-repo-standards) from an earlier session touching overlapping files — left untouched per instructions.

Closes #36

Bring the repo's shared tooling, hooks, CI, and release workflow in line
with the org-wide v2 standard:

- packageManager/engines: node >=22 (root + published packages)
- pnpm-workspace.yaml: minimumReleaseAgeExclude uses package names, not
  name@version
- canonical .oxfmtrc.json (ignorePatterns already covered by **/*.gen.ts)
- canonical .oxlintrc.json base; turn on no-unused-private-class-members
  and no-new-array now (no errors), keep no-explicit-any off until stage 3
  (currently errors on ~60 call sites)
- canonical commitlint.config.js (adds explicit type-enum)
- canonical scripts/check-pr.mjs + .github/workflows/pr-policy.yml
  (job renamed to `contribution`; commitlint now runs as pr-policy steps
  instead of being invoked from check-pr.mjs)
- .github/workflows/ci.yml: canonical `ci` job name, concurrency group,
  format-check and codecov steps, alongside this repo's existing dist
  verification, coverage-gated tests, release:check, bundle-size gate,
  and blocking prod / advisory dev dependency audit steps; skip-gpu
  workflow_call input now defaults to true so the release workflow's
  unparameterized ci.yml call keeps skipping the advisory GPU job
- .github/workflows/release.yml: byte-identical canonical file

Closes #36
@bhouston
bhouston merged commit 71199c4 into main Sep 25, 2026
3 of 4 checks passed
@bhouston
bhouston deleted the chore/36-v2-standard-stage1 branch September 25, 2026 18:18
bhouston added a commit that referenced this pull request Sep 25, 2026
## Summary
Stage 2 of the v2 repo standard (vitest half — TypeScript is already
`^7.0.2` at root with no per-package pins, so that part was already
done).

- `vitest` `^4.1.10` → `^5.0.2`
- `@vitest/coverage-v8` `4.1.11` → `5.0.2`
- `@vitest/browser-playwright` `^4.1.11` → `^5.0.2`
- `@vitest/browser-webdriverio` `4.1.11` → `5.0.0`
- `pnpm-workspace.yaml`: pnpm's `minimumReleaseAge` policy auto-added
the newly-published `@vitest/*` packages to `minimumReleaseAgeExclude`
in `name@version` form during `pnpm install`; trimmed those to package
names only, matching the standard applied in #37

No source changes were needed — build, tsc, lint, and tests were
unaffected by the major version bump.

`vitest-environment-webgpu-node` (peer dep `vitest: >=3 <5`) isn't
referenced on `main` (only on the separate, not-yet-merged
`gpu-webgpu-node-tests` branch), so it wasn't a blocker.

## Validation (in worktree)
- `pnpm install` — clean
- `pnpm build` — pass
- `pnpm tsc` — pass
- `pnpm lint` — pass (pre-existing warnings only)
- `pnpm exec oxfmt --check .` — pass
- `pnpm test` — 18 test files / 61 tests passed on vitest 5.0.2
- `pnpm release:check` — 9/9 passed
- `pnpm size` — within budget
- `pnpm test:gpu` (advisory, `continue-on-error` in CI) — ran under
Playwright/Chromium+SwiftShare locally with the same pre-existing WebGPU
"Device Lost" flakiness noted in `vitest.config.ts`'s comments,
unrelated to the vitest version bump

Closes #38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore: apply v2 tooling/CI/release standard (stage 1)

1 participant