- Read
AGENTS.md,docs/constitution.md, and relevant accepted specs and ADRs. - For product behavior, obtain owner acceptance of a spec before implementation.
- Branch from
devusingtype/short-kebab-slug. - Install exact tooling with
bun install --frozen-lockfile, then runbun run hooks:install. - Install the external gate tools the full check needs: Gitleaks 8.30.1 and actionlint 1.7.12.
- Bun is the only JavaScript package manager.
- Use versions and commands defined by committed manifests and lockfiles.
- The Rootform CLI owns every architecture semantic. Never reimplement parsing, diffing, policy evaluation, or coverage here.
- Use synthetic, redacted Terraform fixtures only. Never submit real state, plans, credentials, account IDs, or customer configuration.
dist/is build output. Rebuild it with its tool and never hand-edit it.- Keep private product and AI material in paths documented by
docs/engineering/public-private-boundary.md. - Run focused checks while working and
bun run verifybefore opening a pull request.
- Use Conventional Commits, for example
feat(installer): verify the published checksum. - Target
dev; keep pull requests small and squash-mergeable. - Complete the pull request template with spec, evidence, risks, and privacy review.
- Do not add automated AI attribution trailers. Human accountability remains with the contributor and reviewer.
- Do not bypass hooks or weaken gates.
- Contributions are accepted under the Apache License 2.0. Submitting a pull request means you have the right to license your contribution under it.
Commit subjects are the release notes. fix: and feat: reach the published
changelog verbatim, so write the subject for a reader who does not know the
change.
Merging into dev publishes nothing, and neither does promotion. A promotion
is a pull request from dev into main; once quality passes on its exact
head, a maintainer runs gh workflow run promote.yml --ref dev -f pull_request=<number>,
which fast-forwards main to that commit.
A release is a separate maintainer dispatch on main:
gh workflow run published-release-integration.yml --ref main -f version=<stable Rootform version>proves the promoted commit installs a published Rootform release anonymously.gh workflow run release.yml --ref mainchecks that proof andqualityon the same commit, then semantic-release computes the version from the Conventional Commit history and creates the tag and the GitHub Release together.fixis a patch,feata minor and a breaking change a new major version. A promotion carrying onlychore,ci,docs,style,test, orrefactorcommits releases nothing.- The same run points the major tag (
v1forv1.x.y) at the new release. It only moves forward, and only once GitHub reports the release immutable (the repository enforces immutable releases). Rerunning resumes an interrupted release. Seedocs/adr/007-promoted-releases-and-major-tags.md.
Never create, move, or delete a tag or release by hand. Published references are what other people's workflows execute; correct a mistake with a new release.
CODE_OF_CONDUCT.md applies to every interaction in this repository.