- Read
CONTRIBUTING.md. - Read the relevant convention under
docs/development/. - Read
docs/backend/spec/for the domain you are touching, plus the recent entries indocs/backend/worklog/. If you are about to overturn a decision already made, read the matching record indocs/backend/decisions/first. - Inspect existing tests before changing code.
- Write or update the failing test first.
- Use PostgreSQL Testcontainers for every DB-dependent test.
- Backend Flyway migrations use
V2–V99only;V100–V199belongs to the AI part. Do not redefinecore.feed_event(AI-ownedV102), and do not depend on objects from another part's range — apply order differs by environment. - Run
./gradlew clean check --no-daemonbefore reporting completion. - If code and documentation conflict, stop. Do not resolve it yourself — the canonical spec wins and it is not ours to edit. Leave a marked note at the conflicting spot in the document, and repeat it in the PR.
- Document as you work, in your part's docs zone (backend:
docs/backend/, AI:docs/ai/— follow each zone'sREADME.md): decisions with their trade-offs as ADRs, implementation reports and troubleshooting as their own entries, plus one worklog entry per task in the form your zone'sREADME.mdprescribes. - Decision, implement, and troubleshooting records are preservation zones: never delete, update the status instead. Only
spec/is a living document to edit in place.