main ← develop ← feature/*, fix/*, hotfix/*
main— production-ready, always stabledevelop— integration branch, receives completed workfeature/*— one branch per feature (feature/coach-lesson-browser)fix/*— bug fixes (fix/sticker-mapping-orientation)hotfix/*— urgent fixes applied directly to main (hotfix/timer-crash)
Naming rules:
- Always full words, never abbreviations:
featurenotfeat,fixnotfx - kebab-case after the prefix:
feature/solver-step-navigation - Be descriptive:
feature/coach-lesson-browser, notfeature/coach
- Conventional commits:
type(scope): description - Types (enforced by
@commitlint/config-conventional):feat,fix,refactor,test,docs,style,chore,build,ci,perf,revert - Atomic — one logical change per commit
- Imperative mood — "add timer component", not "added timer component"
- Commit body, when present, lists changed filenames as bullets — no paragraphs, no signatures
featis a commit type imposed by commitlint. It does not mean branches or PR titles usefeat— those always use full words (feature).
Run all four checks before committing (see verification).
- Required for merging:
feature/*→develop,develop→main - Assign the PR to the author
- Use labels — create them if missing:
feature,fix,refactor,documentation; scope labelscube-engine,solver,coach,timer; statusready-for-review,work-in-progress - Title — full words, human-facing (
feature, neverfeat) - Description — summary of changes + test plan
- Rebase merge only — every commit stays in history, no squash
- Merge and branch deletion are done manually on GitHub by the developer
- After merging on GitHub, local sync (when asked):
git fetch --prune- delete the local branch that was removed on GitHub
- checkout
develop(ormainif the merge target wasmain) - pull latest
Keep it clean and linear (rebase, not merge commits). Every commit stays in the log — no squashing.
Before every commit, all four must be green:
bun run format:check
bun run lint:check
bun run typecheck
bun run testEnforced locally by Husky — pre-commit: lint-staged · commit-msg: commitlint · pre-push:
bun turbo run typecheck test build. CI (.github/workflows/ci.yml) re-runs the full chain on
every PR/push and pushes Docker images to GHCR on main/develop.