- Issue first — every change starts with a GitHub issue stating purpose, scope and acceptance criteria.
- Branch —
feat/GH-{issue}-description,fix/GH-{issue}-description, etc. - Code — follow
GUIDELINES.md. - Test — the local gate must pass (below). There is no CI safety net.
- PR — open a pull request, link the issue, complete the checklist.
- Review — merge only when green.
- Cleanup — squash-merge, delete the branch.
feat: description (#issue)
fix: description (#issue)
chore: description (#issue)
docs: description (#issue)
refactor: description (#issue)
test: description (#issue)
feat/GH-{nr}-short-description
fix/GH-{nr}-short-description
chore/GH-{nr}-short-description
docs/GH-{nr}-short-description
Quality is local. .github/workflows/ carries deploy and release workflows only — nothing in
this repository verifies your change for you after you push.
gofmt -l . # must print nothing
go vet ./... # must be clean
go test -race ./... # must passA change that touches platform-specific code must be run on that platform before merge. Claiming "CI will catch it" is not available here, by design.
- The local gate above is green
HISTORY.mdhas an entry under[Unreleased]- No new dependency without a note in the PR describing why the standard library is insufficient
CLAUDE.md lists seven security invariants. A PR that touches permission handling, name
resolution, stale cleanup, or frame-length checking must:
- state which invariant it affects,
- add or extend a test that would fail if the invariant were violated,
- never relax a default to make a test pass.
If you believe an invariant is wrong, open an issue arguing that — do not weaken it inside a PR about something else.
Do not open a public issue. Use GitHub's private vulnerability reporting on this repository.