fix(teardown): name branch and push-PR remedy in committed-but-never-pushed refusal #1
Loading…
Reference in a new issue
No description provided.
Delete branch "fm/fm-delivery-gate"
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 this changes
On 2026-08-06 a ship worker appended
done:having only committed locally, six times across four runtimes (Claude, Codex, Pi/GLM, Pi/qwopus): the branch was never pushed and no pull request existed. Two were caught only because firstmate independently checked whether the PR URL resolved.The enforcement condition already existed.
bin/fm-teardown.sh'svalidate_worktree_teardown_safetyalready refused a branch whose commits exist on no remote whenwork_is_landedcould not prove a merged PR or content already in the default branch -test_no_mistakes_truly_unpushed_refusesand matrix row (e) already asserted REFUSE at the base commit. This change does NOT introduce that refusal; it improves a guard that is now demonstrably load-bearing. It is the last line that would have caught those six prematuredonereports.The most useful fact for whoever reads this next: the guard was already there, and still six workers reported done early. The gap was not a missing refusal - it was that the refusal did not make the remedy obvious.
What was actually missing, and what this fixes
--forcenudge).tests/fm-teardown.test.shcover: no-mistakes and direct-PR unpushed refusal naming the branch and remedy, pushed-branch not refused, unrecognized-mode fail-closed, local-only not caught, scout unaffected, and the--forceescape hatch.bin/fm-brief.sh's direct-PR definition-of-done now states plainly that committing is not done - done is the pull request.Scope and invariants
work_is_landedis unchanged, so the squash-merge-then-delete-branch flow and the content-in-default fallback still allow genuinely landed teardowns.--forceexplicit-discard override still works; no new bypass is added.bin/fm-lint.shpasses andbin/*.shstays shellcheck-clean. A pre-existing SC2086 intests/fm-spawn-dispatch-profile.test.sh(a word-split flag string, present at the base commit) was also cleared so the lint gate is green.Pre-existing, not caused by this change (flagged for transparency)
bin/fm-doc-audience-check.shfails on 7 unclassified imported skill pages (before-building,handoff,next-decision,pi-custom-model,to-spec,to-tickets,wayfinder) present at the base commita5ec819. Classifying them is a separate change against that skills import; this change touches no documentation surface and did not cause it.Test plan
bash tests/fm-teardown.test.sh- 46 ok, 0 not ok (39 existing + 7 new).bash tests/fm-brief.test.sh- 20 ok, 0 not ok.bin/fm-lint.sh- PASS.