fm-land: name the handoff path on rerun, and stop a spurious stderr diagnostic #20
Loading…
Reference in a new issue
No description provided.
Delete branch "fm/fm-land-manifest-handoff-path"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What was wrong
Two small, real faults in
bin/fm-land.sh, split out deliberately so a bounded run could finish. Neither risks anything; both were quietly wrong every time the code ran.1. The landing marker dropped the handoff paths on a push-only rerun. A rerun rewrote the manifest with
handoff=already-landed, so the marker no longer named any worker's handoff path — directly contradicting its own "handoff paths + push outcomes" header. The path was known at that point and simply not printed. It now names the real path alongside the already-landed state, in the dry-run line too.2. A spurious diagnostic reached the operator's stderr on every first landing. In the sentinel pid read,
2>/dev/nullwas applied after the failing input redirect, so bash's own "no such file" diagnostic still printed. The behaviour was correct — the function returned 1 and the sentinel launched — but the noise appeared on every first landing and looked like a fault. Reproduced standalone on bash 5.3; the redirect is now ordered before the input redirect.The third change, from review
The review gate caught something worth keeping: the already-landed guard was vacuous — it could not fail, so it was not actually a check. That is fixed here too, rather than left as a passing assertion that proved nothing.
Tests
Both fixes have tests that fail against the pre-fix code, plus coverage of the guard. 63 lines added to
tests/fm-land.test.shagainst 8 changed lines ofbin/fm-land.sh— the ratio is the point: these are behaviours that were silently wrong and had nothing watching them.Note on how this was built
This ran on the local
qwen38-rvn-localmodel. Worth recording honestly: it needed the exact edits spelled out before it produced anything — its first two attempts spent the whole 98k context window deliberating and changed no files. Once given precise instructions it did the work cleanly and even caught a third occurrence that had not been named. Useful data for how to route local work, not a complaint about the result.