Working Agreements
This document is the team’s shared agreement on how we work together — our Git workflow and how the Definition of Done is enforced.
1. Git workflow
1.1 Branches
Branch |
Purpose |
Protected? |
|---|---|---|
|
Latest working release |
Yes — no direct pushes |
|
Current sprint integration branch |
Yes — no direct pushes |
|
One unit of work; |
No |
|
Urgent fix to |
No |
Flow:
<type>/* ──► (PR) ──► dev ──► (PR, merge commit) ──► main
Branch from
devfor every new piece of work.Branch names:
<type>/<issue-number>-<short-name>where<type>isfeaturefixdocu
e.g.
feature/42-onboarding-path-stub,docu/63-update-readme.Exceptions that may target
maindirectly: see Fast-Track (1.6).One sprint = one
dev → mainmerge, executed as a merge commit so each sprint boundary is explicit inmain’s history while the dev commits stay preserved.
1.2 Pull Requests
Rule |
Detail |
|---|---|
Reviewers |
At least 1 approving review from a non-author |
CI |
All required checks green (see Definition of Done) |
Linked issue |
PR description includes |
Description |
Fill in the DoD checklist directly in the PR body |
Self-merge |
Allowed after approval + green CI |
Force pushes |
Disabled on |
1.3 Commit messages
Imperative mood:
add onboarding path generator, notadded.Reference the issue when relevant:
add onboarding path generator (#42).
1.4 Conflicts and rebases
Prefer rebase onto
devto keep feature branches linear.If a conflict can’t be resolved trivially, ask the conflicting change’s author in the team channel before force-resolving.
1.5 Enforcement
GitHub branch protection on
devandmain: 1 review required, status checks required, no force-push, no direct push.CI runs on every PR.
1.6 Fast-Track to main
For trivial changes that do not affect product behavior, a PR may target
main directly, bypassing dev.
Examples:
Documentation, README
Typo fixes in user-facing strings
Tooling configs (e.g. .gitignore)
CI workflow changes that don’t alter required checks
Reverts of broken merges
Rules:
CI must pass (no exception)
After merge to
main, immediately back-mergemain → devto keep branches in sync.
1.7 Release freeze
The day before each Sprint Review (every second Tuesday, 06:00) the sprint
goes into release freeze: no more feature merges into dev. The remaining
time is for testing and integration:
Each repo does its
dev → mainmerge.The three services (backend, frontend, AI) are run together and smoke-tested end to end. This step proves each service still talk to each other.
After the merge, tag each repo’s
mainwith the sprint’s release version — the same tag in all three repos (e.g.v0.2.0).
While the freeze is on, if you find a bug:
Non-critical? Either open a GitHub issue for a later sprint, or fix it on a branch but don’t merge into the frozen branch — it lands after the freeze lifts.
Release-blocking? Fix it now with a minimal diff, 1 review, and green CI, then merge so the demo build is fixed.
The freeze lifts when the next sprint starts.
2. Quality enforcement
How the Definition of Done is verified — automated where possible, manual where it must be judgmental.
DoD requirement |
Mechanism |
|---|---|
Lint / tests / build / secret-scan |
GitHub Actions required CI |
One review approval |
GitHub branch protection on |
All boxes filled on the PR |
PR template (Sprint 1+) + reviewer responsibility |
Black-box test per functional requirement |
Reviewer verifies during PR review |