MARLO uses a structured four-tier branching model to protect the production environment while giving contributors a clear path from idea to deployment. Every feature starts on anDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/CCAFS/MARLO/llms.txt
Use this file to discover all available pages before exploring further.
aiccra-<slug> branch, merges into aiccra-staging after review, and is eventually promoted to AICCRA (production) by the maintainers. This page covers the full hierarchy, naming conventions, CI/CD triggers, and the contribution workflow.
Branch hierarchy
| Branch | Role | Commit rules |
|---|---|---|
AICCRA | Production | Merge-only from aiccra-staging. No direct commits, ever. |
aiccra-staging | Stable integration | All feature branches merge here via PR. |
aiccra-dev | Experimentation | Highly unstable; for integration testing only. |
aiccra-<slug> | Feature / fix branches | Created from aiccra-staging; merged back into it. |
Feature branch naming
Feature branches follow the patternaiccra-<slug>, where <slug> is a short, lowercase, hyphen-separated description of the work:
java17 or java_17 in the name. This signals the run scripts and CI pipeline to use the Java 17 toolchain:
CI/CD pipeline
Jenkins
Pushing to any branch triggers the Jenkins job namedmarlo-<branch-suffix>. For example, pushing to aiccra-staging triggers marlo-aiccra-staging. The job runs a full Maven build and deploys to the corresponding environment.
Slack receives a success or failure notification after each build, so the team has immediate visibility into the integration state.
GitHub Actions
Two GitHub Actions workflows run automatically on push and pull request:| Workflow | Trigger | What it does |
|---|---|---|
| Jenkins trigger | Push to any branch | Calls the Jenkins webhook to start the downstream build |
| SonarCloud analysis | Push / PR | Static analysis, code smell detection, coverage reporting |
Quality gates that block a merge
A PR intoaiccra-staging must pass all three gates before it can be merged:
Checkstyle
Run
mvn checkstyle:check locally before pushing. Line length, indentation, naming conventions, and file length must all pass.SonarCloud
Static analysis on the PR diff. New code must not introduce blocker or critical issues. Review findings in the SonarCloud PR comment.
Snyk
Dependency vulnerability scan. New or upgraded dependencies must not introduce high-severity CVEs.
Contribution workflow
Read the constitutional documents
Before writing any code, read
AGENTS.md and CLAUDE.md at the repository root. They define the hard rules, code style, naming conventions, and specificity workflow that every contributor must follow.Branch from aiccra-staging
Always create your feature branch from the current
aiccra-staging, not from aiccra-dev or AICCRA:Draft the spec
MARLO uses Spec-Driven Development. Before implementing, create the spec files under Get the spec reviewed before you start coding.
docs/specs/:Implement and keep task.md up to date
Work through the implementation checklist in
task.md, adding verification notes as you complete each item. If your change alters routing, validation, phase replication, or frontend composition, update the relevant reports/ai-context/*.md runbook.Run local quality gates
Open a PR into aiccra-staging
Push your branch and open a pull request targeting
aiccra-staging (not AICCRA). The PR description should reference the spec and summarise the change. Wait for Checkstyle, SonarCloud, and Snyk to all pass before requesting a review.Promotion to production
Only maintainers (IBD Team) mergeaiccra-staging into AICCRA. This is done as a regular merge commit after:
- All pending feature PRs on
aiccra-stagingare merged and CI is green. - The staging environment has been smoke-tested.
- The team has agreed on the release scope.