Files
pulse/docs/release-control
rcourtman f373beae27 Describe releases as the fixed release train everywhere (#2565)
## Why

Releases have run on a fixed train since 4 October 2026, but most
release documentation still described the model it replaced. Readers and
agents got different answers depending on which page they read.

## What changes

- **Shipped docs** (`docs/` and the `frontend-modern/public/docs/`
mirror):
- `RELEASE_PROCESS.md` describes the train: a cut from `main` 14 days
after the last stable (only when `main` has changed), or earlier on
request; a 24-hour Preview soak; promotion of the unchanged candidate.
  - Consecutive minor versions, with no scheduled patch releases.
- A `release-blocker` issue is closed once its fix is on `main`, and
closing the last one cuts a fresh candidate.
- `AI_TRANSPARENCY.md` states the same rules and says no model chooses
release scope or timing.
- **Promotion policy:** a new **Release Train** section is the single
statement of the rules (cut, versions, soak, promote, stop, failures,
workflow checks), checked against the train's implementation. It covers:
  - when an early-cut request takes effect;
  - `rc.N` numbering;
  - the 72-hour held alert;
  - the Pro source-pair failure;
  - the 12-hour retry.

The earlier release models move under History. The stable patch path
stays because the workflow still supports it, but nothing schedules it.
- **Checklist, source of truth, development protocol, control plane,
workflows README, RC-to-GA template and the deployment-installability
contract:** now consistent with that section.
- No 72-hour soak, no steward admission, no severity-scheduled patches.
- v6 resolves to `main`, and only 6.3.2 and 6.4.3 to 6.4.6 stay bound to
release lines.
  - Helm charts are packaged from the validated release tag.
  - The stable patch dry run is optional, as the policy already said.
- **Workflow comments:** `release-signing-preflight.yml` no longer
claims a nightly dispatch that was switched off, and `helm-pages.yml` no
longer names the retired steward.
- **`status.json`:** the release-train coverage gap becomes a resolved
decision.
- **Scripts:** removed
`scripts/release_control/internal/resolve_release_promotion.py` and its
test. It was an unused duplicate of the live resolver and still enforced
a 72-hour soak. The live resolver's comment and error text now name the
train.

## Checks

- Docs mirror check passes.
- `release_promotion_policy_test` and `resolve_release_promotion_test`
pass (108 tests).
- Registry, contract and status audits pass, as does
`subsystem_contracts_test`.
- The canonical completion guard passes in its CI form.
2026-10-06 12:34:16 +01:00
..