gitmote

gitmote / CONTRIBUTING.md  ·  history  ·  branches

3711 bytes · raw

Contributing

Entry point for anyone — human or agent — working on gitmote. Read it first.

The repo is documentation-first. The design lives in docs/architecture/ and is the source of truth for what the system does and why it's shaped this way. If code and docs disagree, fix one of them in the same change — never leave the divergence silently.

Layout

docs/
  architecture/   The design and its decisions — source of truth
  notes/          Open design questions, one concern per file
  evolution/      Speculative future directions — ideas, not commitments
  ops.md          Canonical infra doc — deploy, env, the single-writer rule
tasks/            The frontier — active/upcoming work; deleted once landed

The Go server, Makefile, and CI arrive as code lands.

Commit messages

Conventional Commits, no scope.

type: short imperative description

Optional body explaining why, not what.

Types: feat fix refactor perf ci chore docs revert Breaking change: append ! — feat!:.

Testing — test everything

"Safe" is the top priority (see safety), so tests are not optional:

Every change passes, in order — format → lint → test:

gofmt / goimports    # format
golangci-lint run    # lint (includes vet)
go test ./...        # test

A Makefile will front these as the single source of truth once code lands; CI runs the same targets, so green locally = green in CI.

Tasks

tasks/ is the frontier — one file per intent-to-implement unit of work, deleted once it lands (commits and git history are the record; tasks are not a changelog). Each file follows:

## Spec      What the change must achieve (link the docs/architecture/ section)
## Current   How it works today (or "nothing yet")
## Change    The plan — files, approach, trade-offs
## Verify    How we'll know it's done — the tests/checks that must pass

Keep tasks/README.md a forward-looking, one-line-per-item list of active/upcoming work. Never let it accrete "landed X…" prose.

Docs