We follow strict engineering practices to ensure maintainability and clarity.
We strictly adhere to Conventional Commits specification.
<type>(<scope>): <description>
[optional body]
- feat: A new feature (correlates with MINOR in SemVer).
- fix: A bug fix (correlates with PATCH in SemVer).
- docs: Documentation only changes.
- style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc).
- refactor: A code change that neither fixes a bug nor adds a feature.
- perf: A code change that improves performance.
- test: Adding missing tests or correcting existing tests.
- chore: Changes to the build process or auxiliary tools and libraries such as documentation generation.
feat(auth): add pessimistic locking to reservation flowfix(db): resolve deadlock issue in seat allocationdocs(adr): add decision record for outbox pattern
- CI Enforcement: The CI pipeline uses
commitlint. If a commit message does not follow Conventional Commits (e.g. starts withUpdate...instead offeat: ...), the build WILL FAIL. - Chore vs Style:
- Use chore: For configuration changes (Docker, Makefile, Composer, .gitignore) that do not touch PHP code.
- Use style: For code formatting (PHP-CS-Fixer, Pint) or whitespace changes.
- Use docs: For any change to
.mdfiles or PHPDoc.
main: Production-ready code.develop(ordev): Integration branch.feature/feature-name: For new features.fix/bug-name: For bug fixes.
- All work on
feature/*orfix/*branches. - PR required → minimum 1 approval from senior.
- PR template required (includes checklist for tests, phpstan, DCO).
- After merge to
main→ GitHub Action auto-tags with SemVer (vX.Y.Z). - Weekly
release/vX.Ybranch for hotfixes.
- Managed with GitHub Actions (see
.github/workflows/ci.yml). - Main stages: test (pest + coverage >= 95%), phpstan level 8, pint, commitlint, trivy container scan, build docker image.
- Every PR must pass CI.
Before pushing, ensure:
- Tests pass:
make test - Static Analysis passes:
make analyse - Code Style is fixed:
make lint
- All PRs merged to main → GitHub Actions creates tag vX.Y.Z (conventional commits)
- Run
npm run changelog→ generates CHANGELOG.md - Create GitHub Release with changelog
- ArgoCD picks up new tag automatically (staging)
- Promote to production via ArgoCD sync or manual button
- feat → MINOR
- fix → PATCH
- Breaking change → MAJOR + ADR + migration guide
- Unit: 100% Domain, 95% overall
- PHPStan level 8: 0 errors
- Pint: 0 issues
- Load test (k6) must pass on main every night