RC rollback, yank, revocation, notification rehearsal (JOE-1895)¶
Document version: 1.0
Mode: non-production tabletop + dry-run scripts (never rewrites published tags)
Principles¶
- Supersede, do not rewrite release tags or Git history of published assets.
- Yank crates.io only for safety-critical broken builds; prefer advisory + new tag.
- Cosign/SBOM of the superseding tag are the new trust root.
- Model pin revoke follows model-revocation.md.
- Human sign-off is required for 1.0 RC exit — automation cannot self-declare.
Scenarios rehearsed¶
| ID | Scenario | Dry-run action |
|---|---|---|
| RB-01 | Bad binary discovered after publish | Document superseding tag plan; do not delete old tag |
| RB-02 | crates.io yank decision tree | Checklist only (no yank without human) |
| RB-03 | Model pin compromise | rehearse_model_revocation.sh |
| RB-04 | Vulnerability disclosure publish | rehearse_disclosure_tabletop.sh |
| RB-05 | User notification text | Template in evidence pack |
Operator procedure (production)¶
- Stop recommending the bad tag in docs/README if needed.
- Triage severity; open private advisory if security-related.
- Fix on a branch; green CI +
release_gate.sh. - Publish
vX.Y.Z+1(or next 0.0.x) with CHANGELOG Security/Fixed section. - Verify independent
release-verify.yml/independent_release_verify.sh. - Notify — GitHub Release notes, optional crates.io yank, advisory.
- Quarantine local caches if model-related (
aurum cache verify). - Record evidence under
dist/security-rehearsal/or RC exit binder.
Dry-run¶
Writes dist/security-rehearsal/RC_ROLLBACK_REHEARSAL.md with sign-off fields.
Human sign-off (1.0 RC exit)¶
| Field | Value |
|---|---|
| RC tag under evaluation | |
| Freeze inventory version | docs/operations/rc-freeze.md |
| Dogfood evidence complete | yes / no |
| Rollback rehearsal date | |
| Independent verify run URL | |
| Residual risks accepted | |
| Approver name | |
| Approve 1.0 cut? | yes / no |
| Date (UTC) |
Automation must not fill the approver fields.