Release Checklist
This document is the authoritative release gate policy.
Release-Blocking Conditions
A release is blocked unless all conditions below are true:
- No merge conflict markers in tracked source/doc files.
- Naming hygiene checks pass for public docs.
- Configure/build sanity passes (
cmake -S . -B ...andcmake --build ... --target sima_neat). - Docs link checks pass in strict mode (
DOCS_STRICT_LINKS=1). - Working tree is clean after generation steps.
- Zero unresolved crash/correctness failures before push and on release refs.
- Crash/correctness/stress/sanitizer gates are green on the release ref.
- MPK security gate is green (
mpk-security-gate). - Install smoke gate is green (
install-smoke). - Performance regression gate is green (
perf-regression-gate). - Soak stability lane is green for release tags (
soak-weekly). - Fuzz lane is green for release candidates (
fuzz-nightly). - Zero-skip gate is green (
zero-skip-gate) for strict test lanes. - Required governance files are present and valid:
.github/CODEOWNERS.github/PULL_REQUEST_TEMPLATE.mdCONTRIBUTING.mddocs/contribute/release-checklist.md
- Release metadata is complete:
project(SimaNeat VERSION x.y.z)updated inCMakeLists.txtCHANGELOG.mdhas## [x.y.z]entry- release notes prepared in the release/tag body
No "known crashers" list is allowed in release flow. Any crash regression blocks release until fixed.
Required Status Checks
The following checks are required on release PRs and release tags:
repo-hygieneconfigure-build-sanitydocs-link-checkcrash-correctness-gatempk-security-gateinstall-smokeperf-regression-gatezero-skip-gatesoak-weekly(required for release tags)fuzz-nightly(required for release candidates)stress-gateasan-ubsan-gaterelease-policy-check
These checks are implemented in:
.github/workflows/release-gate.yml.github/workflows/test-crash-correctness-nightly.yml.github/workflows/mpk-security.yml.github/workflows/install-smoke.yml.github/workflows/perf-regression.yml.github/workflows/zero-skip.yml.github/workflows/test-soak-weekly.yml.github/workflows/long-tests-weekly.yml.github/workflows/test-fuzz-nightly.yml.github/workflows/test-stress-nightly.yml.github/workflows/sanitizers.yml
Trigger ownership to avoid duplicate gate execution:
- Non-release PRs into
mainrunmpk-security,install-smoke,perf-regression, andzero-skipfrom their standalone workflows. - Release PRs (
release/*head refs) and release refs (release/**,v*) run those same lanes from.github/workflows/release-gate.yml.
GitHub Branch and Tag Protection
Configure GitHub repository settings:
- Protect
main:- Require pull request before merge.
- Require at least one code-owner approval (two recommended when available).
- Dismiss stale approvals on new commits.
- Require all required status checks.
- Disallow force pushes.
- Use squash-only or linear history.
- Protect
v*tags to restrict who can create release tags.
Release Flow
- Cut
release/x.y.zfrom greenmain. - Freeze non-release PR merges.
- Run release gate workflow on release branch.
- Create
vX.Y.Z-rcNtag(s) for candidate validation. - Promote to final
vX.Y.Ztag. - Fast-forward merge release branch back to
main. - Publish release notes and post-release follow-up issues.
Operational Notes
- No release from dirty branches.
- No release from unreviewed code.
- No release when required checks are red.
- No push allowed when local crash/correctness gate fails.
- No manual bypass path for hygiene failures.
Perf Regression Contract
- Perf gate entrypoint is
scripts/ci/run_perf_regression_gate.sh. - Baselines are profile-scoped under
tests/perf/baselines/v2/modalix_default/:profile.jsondefines the fixed Modalix environment contract.- one scenario file per scenario ID (
<scenario_id>.json).
- Required scenarios:
mpk_parse_smokeruntime_session_sync_rgbruntime_session_async_rgbruntime_graph_fanoutruntime_graph_join_bundle
- Every perf run publishes per-scenario result files in
build-perf-gate/perf_results/. - Each result must include:
scenario_idmodalix_profile_idstatusfailure_classreason_codemetricsrun_metatimestamp
- Any
REGRESSION,HARNESS_ERROR, orENV_BROKENclassification blocks the lane.