# Rule: CI bump and release flow (mandatory)

## Requirement

Every A2C-governed **software** repository must implement the release semantics in [ADR-0009](../docs/adr/0009-release-semantics-and-master-promotion.md) (supersedes ADR-0004).

**`a2c-workflow` Python publishing** additionally follows [ADR-0010](../docs/adr/0010-testpypi-pypi-publishing-gated-by-release-state.md): fully automated TestPyPI `X.Y.ZrcU` then PyPI `X.Y.Z` on tag pipelines only.

## Core expectations

CI must distinguish three profiles:

| Profile | Purpose |
|---------|---------|
| **Development CI** | Build, test, quality gates on feature branches, `develop`, and `release/X.Y.Z` |
| **Release CI** | Tag pipelines: verify, package, publish |
| **Master CI** (optional) | Light, non-gating jobs on `master` (reporting/audit only) |

Additional requirements:

- bump versions using **Semantic Versioning** and `scripts/bump_release.py`
- ensure **`CHANGELOG.md`** contains a finalized entry for each released version
- treat **annotated Git tags** `vX.Y.Z` as canonical release markers
- use dedicated **`release/X.Y.Z`** branches for release bumps (never `develop` as release line)
- include **`release:verify`** (or equivalent) on tag pipelines

## Promotion rules (ADR-0009)

- **Untagged** commits may ff-merge to `master` only when **code_clean** (Development CI green)
- **Tagged** commits may ff-merge to `master` only when **released** (Release CI green; for `a2c-workflow`, PyPI smoke per ADR-0010)
- Master CI success does **not** imply `code_clean` or `released`

## AI behavior

- **Bootstrap:** add release scripts and CI from `a2c-workflow` templates
- **Edit CI / release scripts:** preserve ADR-0009 state model and branch semantics
- **Fundamental flow changes:** propose a new ADR — do not silently fork release policy
- **Prepare release:** use `release/X.Y.Z` from `master`; gate tag on Development CI; gate `master` ff-merge on Release CI; prefer `scripts/publish_release.py` when automating
- **Tags:** avoid manual tag edits that bypass validation; document tag moves per ADR-0009

## Canonical reference

[docs/workflow/ci-release-flow.md](../docs/workflow/ci-release-flow.md), [docs/release-pipeline.md](../docs/release-pipeline.md), [ADR-0009](../docs/adr/0009-release-semantics-and-master-promotion.md), and [ADR-0010](../docs/adr/0010-testpypi-pypi-publishing-gated-by-release-state.md) for `a2c-workflow` Python publishing.
