v0.263.1: the undo asks the old probe even on an app marked unhealthy (R-637)
gates / gates (push) Successful in 27s

Found live on 9202: the periodic probe (current .felhom.yml, new port) flips
the app to unhealthy, and the update's health wait probed only 'running'
apps - so the undo's old probe was never asked and a serving old version was
judged "did not start". With the undo's override, an unhealthy app is probed
and the old check decides; never settled on container state.

New seam probeRunFn; the test drives the real wait loop and reproduces the
live message when the fix is switched off.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-23 11:35:25 +02:00
parent 8fc2b4a1a9
commit 5d38573a1a
4 changed files with 109 additions and 3 deletions
+19
View File
@@ -1,3 +1,22 @@
## v0.263.1 — the undo asks the OLD probe even when the new one has marked the app unhealthy (2026-09-23, R-637)
**MinAgent: 0.131.0** (unchanged). No new strings.
**Caught by the live proof on 9202, not by a test.** v0.263.0's undo put docmost's data and old
definition back, and then judged the old version "did not start" after the full 90 s — while it was
serving. The periodic health probe judges an app with its CURRENT `.felhom.yml`; the new version had
brought a probe the old one does not answer (the drill's wrong port, and a real case whenever a probe
moves with a version), so it flipped the app to `unhealthy` every 10 s — and the update's health wait
only probes an app whose state reads `running`. The old probe was never asked (`last: state unhealthy`).
**Fix:** with the undo's override probe, an `unhealthy` app IS probed, and the old check decides; it
is never settled on container state (the settle path still requires `running`). The normal update
path is unchanged. **Why the unit tests missed it:** `TestUndo_UsesTheOldProbe` injects the undo's
whole health wait, so it never reached the state gate. The new test drives the real wait loop with only
the network probe faked (new seam `Manager.probeRunFn`) and reproduces the live message verbatim when
the fix is switched off. The first live attempt ended in an honest HOLD (data put back, old version
not judged healthy) — kept as evidence.
## v0.263.0 — a failed update puts the app back by itself (2026-09-23, R-637)
**MinAgent: 0.131.0** (unchanged). New strings, all born as bundle keys (hu + en): `app_info.update_undone`,