Contributing

The rules are in the repository: CONTRIBUTING.md for how a change is reviewed and AGENTS.md for the nine working rules, whether you are a person or a coding agent. This page is what they add up to.

The shape of a change

A change lands in one repository, as one logical change, with make check green before the commit and real command output in the commit body. It removes the implementation it replaces in the same change; there is no legacy path kept for later. It adds no registry type, configuration namespace or generated document: the composition path is the one that exists.

A module is contracts before implementation. Define the public behaviour and its conformance cases first, make the fake pass them, then fill internal/ until the real service passes the same cases against Postgres. Import another module only through its contracts/.

Code should read like the business

Use the words people use for the capability. Make the normal path readable top to bottom, with early returns for refusals. Show inputs, time, identifiers, state changes, transaction ownership and external effects explicitly rather than hiding them in context values. Name a helper for a domain concept or an actual repetition, not for a trivial step. Keep decision functions deterministic. Write tests around examples, refusals and invariants with independently chosen expectations.

A reviewer should be able to explain a changed command’s inputs, decision, state change, effects and failure behaviour from the command and its rule alone.

Budgets

Every bucket of source has a ceiling, and a change that exceeds one first removes what it replaces, then splits unrelated work, and only then asks for a separate owner budget commit that names the bucket, the cost and the evidence. go run ./tools/locbudget --write lowers ceilings; raising them is the owner’s. Do not compress readable code or remove useful tests to make a count smaller.

This site

The documentation is its own repository, platformkit-docs. A page links to the file that is the truth for what it describes and states nothing that file does not; make check there fails on any Antora warning. Open a pull request against it for a documentation change, and against the source repository for anything the documentation describes.