|
D-137 ruling 1 EXECUTED: tier 1 wired as the blocking preflight P5
Operator answer, exact utterance: "wire tier 1 as the blocking preflight Pn" (2026-07-26), resolving the open sequencing question. Recorded on D-137. preflight.sh gains P5: credential matrix (D-137 tier 1), blocking, with worst-exit aggregation, placed AHEAD of the stage-2 reminders block (now P6) so its verdict participates in the deploy decision. Tier 1 only -- it is offline and its findings ARE the three ruled failure classes. Tier 2 needs --remote/--privileged and a caller-supplied --pending-stage, which do not belong in an unattended gate; that stays an open decision. FAIL-OPEN in my own wiring, caught by the new test: a missing creds-matrix.py makes python3 exit 2, which `note` maps to WARN -- so deleting the gate would have downgraded it to a warning rather than stopping the deploy. P4 already guarded this class; P5 did not until T9 failed. Now guarded explicitly. tests/preflight 7 -> 10: T8 a red register FAILS the deploy (blocking, not advisory); T9 fails closed when the checker is absent; T10 the gate runs before the reminders block. CONSEQUENCE, not overclaimed: preflight exits 1 with P5 among the reasons, but preflight was ALREADY exiting 1 before this change (P4: octavia-pki.yaml absent, MAAS unreachable from the jumphost). P5 adds a fifth reason to an already-red gate; it flipped nothing and closes no open deploy path. Verified by stashing the change and re-running. Gauntlet ALL GREEN (80), repo-lint 0-fail. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf |
|---|
|
|
| docs/CURRENT-STATE.md |
|---|
| docs/changelog-20260726-d137-tier1.md |
|---|
| docs/design-decisions.md |
|---|
| scripts/preflight.sh |
|---|
| tests/preflight/run-tests.sh |
|---|