Repository navigation
Conversation
…l claims it fm-spawn's crewmate path now acquires the pool slot through Treehouse's own durable get --lease --lease-holder rather than the interactive pane's plain get, and binds the spawn-side owner claim to that lease. Before any get, fm-spawn refuses when a still-recorded state/*.meta anywhere reachable (including secondmate homes) names that slot without a durable lease, closing the reissuance window a landed-but-not-torn-down task record used to leave open. fm-teardown re-verifies the recorded lease at every destructive boundary and now refuses outright (never with --force) on a claim naming another task or a lease that no longer matches, rather than warning and finishing only its own cleanup, per the requirement to refuse otherwise. fm_treehouse_require_reserved_records only enforces the lease requirement for paths structurally registered in a treehouse-state.json, so an ordinary worktree recorded incidentally against the same project is never mistaken for a pool slot.
…ease-identity floor
Slot ownership now binds a task id to its canonical home, so teardown must run with the FM_HOME the task was spawned from. The launcher-workspace e2e spawns dupC from the primary home but tore it down with only FM_ROOT_OVERRIDE set, so teardown resolved the repository root as its home and refused the slot's own claim as another task's.
The task pane of an aborted spawn is now a lone idle shell, so cleanup removes it through Herdr's pane-death path, which logs no pane.close. The order check only looked for pane.close on the task pane and saw no close at all. Count any pane.close inside the task's own projected workspace, the seeded pane's prune included, so the create-then-close serialization is still asserted for both aborts.
MLA82
force-pushed
the
check/4366
branch
2 times, most recently
from
September 20, 2026 18:19
66375d6 to
a943b48
Compare
The pane's own shell used to cd into the leased slot, so teardown's reap of processes under the slot ended the endpoint shell itself. Herdr then removed the pane and its workspace on its own, ahead of the focus-preserving close, and the active workspace jumped. Run the worker in a child shell inside the slot, as the interactive treehouse get subshell did, so the endpoint shell stays in the project.
A claim naming another task is never overwritten by a later spawn, so the restart fixtures, which return their leased slots with treehouse directly instead of through teardown, left a stale claim behind. The next fixture then received that slot and its spawn refused to claim it. Return the lease and drop the claim together, as reconciling such a slot by hand does.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dieser PR dient zur Validierung der Anpassungen aus Beitrag 4366 im Fork.