Contributing
Cordice is one repository. The server, the web client, the client library and this site all live in it, which means an API change and the client change that follows it land together rather than in two repositories that drift.
The full guide is CONTRIBUTING.md. The short version:
- Commit messages follow Conventional Commits. This is not a style preference — the release workflow reads them to decide the next version number.
- One pull request, one change. A branch carrying three unrelated things gets stuck on whichever one is contentious.
- Run the formatter.
cargo fmtfor Rust,pnpm fmtfor everything else. - Sign off your commits (DCO).
Rules the build enforces
Several things you might expect to be review conventions are checked mechanically instead, because a rule that depends on someone remembering it is a rule that eventually stops being true.
| What | Where |
|---|---|
| Crates may only depend downwards, and self-contained ones on nothing | architecture.toml |
| Every component carries the same version | docs/versioning.md |
| The published permission table matches the crate that enforces it | scripts/permissions-doc.py |
If one of these fails on your branch, the message says what to run.
Design notes
- Architecture — how the pieces are separated and why.
- Versioning — one number, propagated by script, and how platform parity is measured.
- Authorization — the specification for sign-in, verification and account recovery.
Where Cordice came from
Cordice is a fork of Stoat, which was formerly Revolt, and is licensed under the AGPL-3.0 like its upstream. UPSTREAM.md records the exact commit each component was forked from, which is a more honest account of the lineage than a version number would be.