- Default branch:
develop. All PRs merge intodevelop; release or hotfix branches may targetmainwhen used. - Feature branches: Create from
developwithnpm run start-feature(or./scripts/start-feature.sh). The script creates branches named e.g.feature/name,fix/name,chore/name,docs/name,hotfix/name,release/name, orllm/name(LLM-only paths; see docs/development/llm/DOCS-DEVELOPMENT-LLM.md). - Staging and main (mirrors, no direct feature commits on those branches):
stagingis the preprod line—fast-forward it fromdevelop, then run Publish (staging). When you are ready for production, fast-forwardmainfromstaging(not fromdevelopin one hop); Publish (main) promotes existing staging images in GHCR toX.Y.Z/:latestwithout rebuilding. See PUBLISH.md.
CI does not run on push to develop or main, and it does not run automatically when a PR is opened or updated. It runs only when an OWNER, MEMBER, or COLLABORATOR comments /test on a pull request. A reaction (e.g. rocket) is added to the comment; on success or failure a PR comment and commit status are posted.
Comment-Triggered CI: This keeps Actions usage and branch-protection checks under maintainer control and avoids CI runs from untrusted or high-volume PRs.
The validate job in .github/workflows/ci.yml runs when a maintainer comments /test on a PR. It includes:
- Linear migration file validation and linear baseline 0003 verification
- DB init sync check (
make check_k8s_postgres_init_sync) and bootstrap contract verification - Runtime
CREATE EXTENSIONguard npm ci(with retry),npm run build:packages,npm run lint,npm run build:appsnpm run i18n:validateandnpm run type-check- Test database setup (Postgres/Valkey service containers on ports 5632 / 6579)
Unit and E2E tests are skipped in CI; run locally before merge (see AGENTS.md).
| Workflow | Trigger | Purpose |
|---|---|---|
| complete-feature.yml | PR merged to develop |
Moves .llm/history/active/<feature>/ to .llm/history/completed/YYYY-MM/ when present |
| vulnerability-scanner.yml | Schedule (2× daily) + manual | npm audit --omit=dev; may open security issues |
| i18n.yml | Push to develop (i18n paths) |
Sync and compile translations |
| publish-staging.yml | Push to staging |
Build and push staging images |
| publish-main.yml | Push to main |
Promote staging images to RTM tags |
| publish-metaboost-signing.yml | Tag / manual | Publish metaboost-signing to npm |
| metaboost-infra-alpha-contracts.yml | Manual / schedule | GitOps pin contract checks |
Workflow authoring: .cursor/rules/github-actions-yaml.mdc.
For one-time GitHub configuration (labels, branch protection, default branch), see repo-management/GITHUB-SETUP.md. See also repo-management/BRANCH-PROTECTION.md and repo-management/GITHUB-LABELS.md.
.github/workflows/ci.yml defines how validate runs (/test comment trigger).
Whether validate is required for merge is controlled by GitHub protection
settings (prefer Rulesets), not by workflow YAML alone.
These protection/configuration instructions are GitHub-specific. Forks hosted on GitLab, Gitea, Bitbucket, or other providers must configure equivalent protected branch + required-check policies using that platform's native features.