Guidance for coding agents working in this repository.
Pull requests land through a GitHub merge queue, which builds them against the
current main before merging.
A pull request therefore doesn't need to be up to date with main, so only
merge main in when something actually needs it, like resolving a conflict or
picking up a change the branch depends on:
git fetch origin
git merge origin/mainThe merge queue also sets the merge strategy, so don't pass one when merging:
enable auto merge with gh pr merge <number> --auto, without --squash,
--merge or --rebase.
Do not rebase a pushed branch onto main and force-push it.
A force push rewrites history that reviewers and CI have already seen.
Stacked pull requests managed with gh stack are the exception: keep one
commit per layer, update the stack with gh stack rebase once a layer below
is merged or main is needed, and force-push it with gh stack push or
gh stack submit.
All tooling runs through pnpm:
mise install: install Node.js, pnpm and the workflow linters pinned inmise.tomlpnpm install --frozen-lockfile: install dependencies, also aftermise installpnpm tool-versions: download the embedded tool-versions data, the unit tests validate it and fail without it (pnpm builddownloads it too)pnpm vitest run: run the unit testspnpm tsc --noEmit: type checkpnpm oxlintandpnpm oxlint-fix: lint and fix lint findingspnpm prettierandpnpm prettier-fix: check and fix formattingpnpm lint:markdown: lint markdownpnpm lint:schema: check the committed json schemas are up to datepnpm schema: regenerate the committed json schemaspnpm test:docker -b -t test-x86_64 node: run the container test intest/nodepnpm test:docker -b -t test-distro noble: run the distro test fromtest/Dockerfile.distroon noble (omit the distro to run all)
The container tests build the whole image, so they take several minutes.
jactionlint and zizmor lint the GitHub workflows and local actions, install them with mise install.
CI runs them through mise in the lint job.
When adding or changing a tool installer, follow the tool installer best practices.