Instructions for AI agents working in this repository. The full rationale lives
in CONTRIBUTING.md; this is the operational summary.
Implement pm, the PM CLI, against the frozen format and CLI
specifications in docs/spec/. Do not change the documented
format or CLI behavior; only the implementation path is ours to decide. See implementation-plan.md.
- Never push to
main. Work on atype/short-slugfeature branch and open a draft pull request. Merge only with explicit maintainer authorization, using squash merge. - Use Conventional Commits with the package name as scope (for example
feat(validate): check blocker cycles). Allowed types:feat,fix,docs,test,refactor,chore,ci,build. - Do not add
Co-Authored-Byor any AI-attribution trailer to commits. - Before committing, run
make check(gofmt,go vet,golangci-lint,go test -race). Keepgo mod tidyclean and commitgo.sum. - Add or update tests in the same change that adds or changes behavior. Never mutate real task files from tests; use temporary copies.
- Keep lifecycle dates behind the injectable clock; never read the machine date directly.
- In a sandbox, build to a scratch path, not
./bin. When the working tree is a mounted copy of the host's (for example a Docker sandbox), a binary you compile is built for the sandbox OS/arch and will overwrite the host'sbin/pmwith something it cannot exec ("exec format error"). Usego build -o /tmp/pm ./cmd/pmorgo run ./cmd/pm ...for smoke tests, and leavebin/for the host's ownmake build. - This project's task state and decision record live outside this repo, in
the maintainer's private knowledge base (
~/plaintext-brain,projects/pm-cli/). Work is not finished until it is reflected there — see thekb-syncskill (.claude/skills/kb-sync/SKILL.md) for how to locate the checkout and the sync workflow. Skip it if that checkout is not present on the current machine.
Package layout and the ordered task breakdown (T1–T13) are in
implementation-plan.md.