|
1 | 1 | # Spec — health-check-fast-timeout |
2 | 2 |
|
3 | | -**Status:** LOCKED (Codex adversarial design review 2026-06-14 folded; ready for implementation) |
| 3 | +**Status:** DONE (shipped v3.24.0, 2026-06-15; 4 Codex review rounds → SHIP) |
4 | 4 | **Created:** 2026-06-14 |
5 | 5 | **Baseline:** FuseBase Flow v3.23.1 |
6 | | -**Deploy hash:** N/A — framework/template change |
| 6 | +**Deploy hash:** a3d41fa (a3d41fabd95b57612400fb99a0d6e34767b3cbff) — tag v3.24.0; release https://github.com/fusebase-dev/fusebase-flow/releases/tag/v3.24.0 |
7 | 7 | **Source:** real consumer install (Windows/schannel-impaired) — `fusebase-flow-health-check.sh` did not return within 2 minutes during install; reproduced in the maintenance session. Backlog: `docs/backlog/health-check-fast-timeout/`. |
8 | 8 | **Design review:** Codex 2026-06-14 → **BUILD-WITH-CHANGES**; biggest risk = **false-HEALTHY when a critical check doesn't run.** All findings folded (new `PARTIAL_UNVERIFIED` verdict; bound `check-cli-flow-conflicts` too; fix the pre-existing run-tests rc-masking; split `--fast`/`--no-upstream`; `gtimeout` fallback; SLO-budgeted timeouts). |
9 | 9 |
|
@@ -76,6 +76,24 @@ Bounding/skipping these checks naively creates a **false HEALTHY**: today an emp |
76 | 76 | - **Th** Docs + CHANGELOG + release notes + version bump; mirror if overlay copy exists. |
77 | 77 | - Gate → deploy. |
78 | 78 |
|
| 79 | +### Implemented tasks (T1–T12 → SHA, shipped v3.24.0) |
| 80 | +| T | Maps to | SHA | Description | |
| 81 | +|---|---|---|---| |
| 82 | +| T1 | Ta | 73afb1e | run_with_timeout helper lib + source it in health-check engine | |
| 83 | +| T2 | Tb | e88dd0a | LOCAL_UNVERIFIED tracking + PARTIAL_UNVERIFIED verdict + exit 4 | |
| 84 | +| T3 | Tc | 92b8ead | bound all 4 slow ops; criticals→UNVERIFIED, upstream→note-only | |
| 85 | +| T4 | Td | db68b20 | fix run-tests rc-masking (H6) — harness crash ⇒ BROKEN | |
| 86 | +| T5 | Te | 758638c | --no-upstream (exit 0 OK) and --fast (exit 4, never 0) flags | |
| 87 | +| T6 | Tf | c2cf8f0 | document worst-case bound + scope conflict-reporter glob scan | |
| 88 | +| T7 | Tg | 902232c | tests for AC1–AC6 + AC8 caller note + test-driven hardening | |
| 89 | +| T8 | Th | 139689c | health-check fast-timeout docs + v3.24.0 bump (AC8) | |
| 90 | +| T9 | — | de6c53f | treat rc 137 as timeout-induced in run_with_timeout (Codex B2) | |
| 91 | +| T10 | — | 1670896 | require a non-empty PASS line for hook-tests OK (Codex A1) | |
| 92 | +| T11 | — | 3628f41 | reword unverified-block to not assert PARTIAL_UNVERIFIED (Codex B1) | |
| 93 | +| T12 | — | 6fd2f9d | extract HT health-check-timeout fixtures to own test file (Codex A2) | |
| 94 | + |
| 95 | +Post-gate Codex hardening (round-2/round-3, not T-numbered): ebafd41 (validate PASS counts — round-2 A1), 9294b08 (close two residual PASS-classifier spoofs — round-3 A1+A2). Step-0 threat-model note (round-4): c4252a8. Release-date set: a3d41fa. |
| 96 | + |
79 | 97 | ## Notes |
80 | 98 | - One engine script + tests + docs. FR-25: currently 633 lines; the additions (helper + UNVERIFIED + flags) may approach 800 — extract the timeout helper / verdict logic along a clean seam if so. |
81 | 99 | - **New exit code 4 is a contract change** — sweep for any consumer/recovery script or hook that branches on the health-check exit code and teach it exit 4 = partial/unverified (not failure, not full health). |
0 commit comments