This document covers the daily build discipline for this project. It exists so every PR is readable, every change is traceable, and the repo functions as proof-of-work — not just a code dump.
<type>/issue-{N}-<short-description>
| Type | Use for |
|---|---|
feature/ |
New functionality |
fix/ |
Bug fixes |
chore/ |
Maintenance, deps, config |
docs/ |
Documentation only |
refactor/ |
Code restructuring without behavior change |
test/ |
Test-only additions |
claude/ |
Claude Code automation branches |
Examples:
feature/issue-9-api-auth-login
fix/issue-22-timeline-sticky-row-resize
chore/issue-2-prune-requirements
docs/issue-3-prd-architecture-roadmap
test/issue-14-smoke-tests
Rules:
- Branch from
main. - Every branch maps to an open GitHub issue (
issue-{N}). - Keep branches short-lived — one issue per branch.
- Avoid force-push on shared branches.
Format: <type>(<scope>): <short description>
feat(api): add POST /api/v1/auth/login endpoint
fix(dashboard): restore sticky week row on viewport resize
chore(deps): remove unused streamlit and scipy from requirements
docs(adr): add ADR-0007 retroactive OS adoption
refactor(js): extract api module from dashboard.js
test(api): add smoke tests for GET /api/v1/orders
Valid types: feat fix chore docs refactor test
Rules:
- Use imperative mood in the description ("add", not "added" or "adds").
- Keep the subject line under 72 characters.
- Always include
Closes #Nin the commit body when resolving an issue. - Keep each commit under 200 lines (insertions + deletions). Split larger changes.
- No emoji in commit messages unless the project standard changes.
- Every change starts with a GitHub Issue.
- Use the correct template:
- Bug Report — something broken
- Feature Request — new behavior
- User Story — user-facing requirement
- Every issue must have:
- A clear title
- Acceptance criteria (specific, testable)
- A label (
bug,feature,chore,docs)
- Assign the issue to yourself before starting work.
- One PR per issue. PR title matches issue title.
- Use the PR template — fill every section.
- Link to the issue:
Closes #Nin the PR body. - Every PR must include a demo artifact (screenshot or test output).
- Self-review your own diff before requesting merge:
- No debug prints or commented-out code
- No secrets or real credentials
- No unrelated changes snuck in
- Squash or rebase before merging to keep
mainhistory clean.
ruff check . # lint — must exit 0
pytest tests/ -v # tests — must exit 0Install if missing: pip install ruff pytest
- Acceptance criteria from the issue are met
-
ruff check .exits 0 -
pytest tests/ -vexits 0 - No regressions in existing manual flows
- Demo mode still works (auto-login, read-only guard)
-
Closes #Nin commit body or PR body - Relevant docs updated (API contract, ADR, roadmap if scope changed)
- Demo artifact attached to PR (screenshot or
pytestoutput)
- Review open issues — pick the highest-priority unblocked one.
- Create or assign the issue to yourself.
- Create a branch:
feature/issue-{N}-short-description. - Implement in small, atomic commits.
- Open a PR referencing the issue.
- Fill the PR template; attach a demo artifact.
- Self-review the diff.
- Merge to
main. - Close the issue.
- Update
CHANGELOG.mdif the change is user-visible.
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
flask db upgrade
python run.pyRun lint and tests:
ruff check .
pytest tests/ -v