Add explicit rollback bootstrap and maintenance model

This commit is contained in:
2026-07-20 00:30:30 -07:00
parent 328fa39c55
commit e0c9e0db94
6 changed files with 486 additions and 11 deletions

View File

@@ -155,14 +155,31 @@ have real passing evidence can the manifest honestly contain certified
`current` and `previous` tuples. Until then, `promotion_readiness` remains
blocked and the candidate PR must not be treated as a deploy authorization.
The schema-v1 promotion command deliberately cannot perform the first degraded
bootstrap transition when `current` is a known-failing baseline. Do not bypass
that guard by hand-editing the manifest or relabeling alpha2 evidence. A
separate reviewed state-machine change must first add an explicit
`bootstrap-current-only` state that preserves the failed baseline as
uncertified emergency provenance and leaves `previous` null. Itemized rollback
certification is complete only after a later, materially distinct passing tuple
can move the first certified current into `previous`.
Use the explicit degraded-bootstrap transition for the first passing rollback
tuple. It requires passing evidence bound to the complete candidate fingerprint
and a literal acknowledgement; it preserves the failed baseline as uncertified
`emergency_provenance`, leaves `previous` null, and records the temporary
`bootstrap-current-only` state:
```sh
ruby scripts/promote_runtime_tuple.rb bootstrap-current \
--consumer travelwolf \
--consumer-commit FULL_40_CHARACTER_ROLLBACK_COMMIT \
--status pass \
--certified-at 2026-07-20T12:00:00Z \
--evidence evidence/travelwolf-rollback.json \
--acknowledge-degraded-rollback \
accept-degraded-rollback-with-failed-emergency-provenance \
--dry-run
```
Review the dry run, repeat without `--dry-run`, and then treat that passing
tuple as the base for a normal promotion. Normal promotion moves it into
`previous`, removes the degraded rollback marker, and keeps the original failed
baseline only as historical emergency provenance. The repository becomes
`certified` only when every consumer has exact passing `current` and `previous`
tuples. Never use bootstrap to replace an existing previous tuple or to certify
a baseline already known to fail.
## Rollback