This file defines the development workflow, branching strategy, and release process for Sinau LMS. All agents working on this project must follow these rules.
main (production)
|
└── develop (integration)
|
└── feature/* (per-feature branches)
| Branch | Purpose | Protected |
|---|---|---|
main |
Production releases. Only tagged versions. | Yes - no direct push |
develop |
Integration branch. All features merge here. | Yes - PR + checks required |
feature/* |
Individual feature development. Created from develop. |
No |
1. Create feature branch from develop
$ git checkout develop
$ git pull origin develop
$ git checkout -b feature/course-clone
2. Implement changes
- Write code
- Write/update tests
- Update docs if needed
3. Commit (conventional commits)
$ git commit -m "feat(courses): add course clone endpoint"
4. Push and create PR to develop
$ git push origin feature/course-clone
$ gh pr create --base develop --title "feat(courses): add course clone endpoint"
5. CI must pass (tests, lint, build)
CTO agent merges when CI is green.
6. After merge, delete feature branch
$ git branch -d feature/course-clone
$ git push origin --delete feature/course-clone
Follow Conventional Commits:
feat(scope): description
fix(scope): description
docs(scope): description
refactor(scope): description
chore(scope): description
test(scope): description
ci(scope): description
Examples:
feat(courses): add course clone endpointfix(auth): resolve JWT expiry race conditiondocs(prd): update F-010 search specrefactor(media): extract StorageBackend trait
Step 1: Verify readiness
- All planned features for this version are merged to develop
- CHANGELOG.md is updated with all changes
- Documentation is complete (VitePress docs site)
- All tests pass
Step 2: PR develop -> main
$ git checkout develop
$ git pull origin develop
$ git checkout main
$ git pull origin main
$ gh pr create --base main --head develop --title "Release v0.x.0"
Step 3: Review and merge
- CTO reviews the PR
- Verify CHANGELOG.md completeness
- Verify docs are up-to-date
- Merge PR (main <- develop)
Step 4: Tag and push
$ git checkout main
$ git pull origin main
$ git tag v0.x.0
$ git push origin main --tags
# This triggers release CI (Docker build, publish, deploy)
Step 5: Post-release
- Verify deployment
- Announce release (changelog summary)
- Update develop to sync with main
$ git checkout develop
$ git merge main
$ git push origin develop
Before creating the release PR:
- CHANGELOG.md updated with version header and all changes
- VitePress docs site updated (if applicable)
- README.md reflects current state
- .env.example is up-to-date
- All Tier 1 features for this version are implemented
- Tests pass on CI
- No known critical bugs
- Rust:
cargo test+cargo clippy - Rust:
cargo build --release(compile check) - Frontend:
bun run check(type check) - Frontend:
bun run build(build check) - Cora code review (non-blocking advisory)
- Build Docker images (server + web)
- Push to container registry (Zot)
- Deploy to staging/production (Traefik)
Follow semantic versioning, but stay in 0.x.x indefinitely:
- Patch (0.0.x): Bug fixes, documentation updates
- Minor (0.x.0): New features, feature batches
- NEVER jump to 1.0.0 until the project is stable and mature
All commits must use:
user.name=ajianaz
user.email=ajianaz@users.noreply.github.com
- Push directly to
mainordevelop(always PR) - Force push to any branch
- Include hardcoded secrets or credentials
- Merge without CI passing (except docs-only PRs)
- Skip CHANGELOG.md updates on releases
- Create tags from non-main branch