docs(release): release model usage + recorded M3 drills (#13)
- README: Release model section (package/activate/rollback/status, pointer + append-only log, gate-then-flip guarantee) - BUILD-LOG Phase 7: drills recorded (update, refusal, rollback), two harness/product corrections documented Drill evidence: 0.0.3 -> 0.0.4 update with unchanged config checksum and green verify; fault-injected refusal left pointer untouched; health-gated rollback restored 0.0.3; full append-only event history. Closes #13
This commit is contained in:
@@ -163,4 +163,33 @@ Configuration-driven Hello World verified. `main` merged with M1 and tagged `con
|
||||
|
||||
Mission/task layer verified end-to-end. `main` merged with M2 and tagged `mission-task-v1`.
|
||||
|
||||
---
|
||||
|
||||
## Phase 7: Release model and safe updates (M3)
|
||||
|
||||
### Entry 7.1 — before
|
||||
|
||||
- Timestamp: 2026-09-03
|
||||
- Intended action: Add the release substrate (Gitea milestone M3, issues #10-#13): RELEASE file single-sources the version (0.0.X line per owner direction), image tags derive from it, scripts/release.sh provides package/activate/rollback/status, activation is health-gated by the M2 task runner, pointer + append-only log under <dataRoot>/state/.
|
||||
- Reason: The owner's top invariant — updates must never corrupt a working installation — needs a mechanism, not a convention: gate-then-flip with recorded history and rollback.
|
||||
- Expected result: Update, refusal, and rollback drills all green with config checksums unchanged.
|
||||
|
||||
### Entry 7.2 — after
|
||||
|
||||
- Timestamp: 2026-09-03
|
||||
- Commands run: scripts/test-release.sh (14 cases); recorded drills: update (0.0.3 -> 0.0.4 package+activate+verify), fault-injected refusal, rollback to 0.0.3.
|
||||
- Observed result:
|
||||
- Selftests: 14 passed, 0 failed.
|
||||
- Update drill: packaged and activated r0.0.4 after exact-marker health gate; verify green under the new tag; config checksum unchanged.
|
||||
- Refusal drill: health-gate fault injection -> activation refused (exit 1), pointer untouched, refusal appended to the log.
|
||||
- Rollback drill: health-gated rollback to r0.0.3; pointer restored; log records package/activate/refused/rollback history append-only.
|
||||
- Failure or correction:
|
||||
1. release.sh initially failed with missing state/ directory (no mkdir before pointer/log writes); fixed.
|
||||
2. Selftest harness mutated the repo RELEASE and restored the mutated copy (mv-back bug) plus a second trap replacing the first; fixed with inline backup restore and one self-healing exit trap. Product code unaffected.
|
||||
- Credential check: no credential material in release state, logs, or drills.
|
||||
|
||||
## Result (M3)
|
||||
|
||||
Release model and safe updates verified by drills. `main` merged with M3 and tagged `release-model-v1`.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user