fix: preserve live pane nonce across child claims - #136
Open
Florious95 wants to merge 15 commits into
Open
Conversation
Drive two independent claim-leader CLIs through empty live-nonce observation, then tmux set-option -p -o / already-set readback, and persist the same winner into both receivers.
Keep both claim-leader inventories empty until both set-option -o clients arrive, publish the winner nonce with an atomic rename under the lock, and fail the fixture on a bounded wait instead of hanging.
Keep the four-canary physical gate. Before cleanup, journal MCP status/reason/channel/id, fixture event typed refusals, coordinator liveness/stdio, and binding-vs-live nonce match hashes.
Claim save derived a sibling team from the workspace directory because the seed had session_name/team_dir but no team_key. Seed root and teams.current with team_key=current, assert the canonical team is the only map entry and the receiver stays on current, and drop the temporary diagnostic framework. Do not copy a top-level receiver.
Fresh leader revalidation passed Value::Null, which matched owner current via team_state_key's default and returned Null as the projected state. Non-object fallbacks are ineligible, and a state with teams entries must go through project_top_level_view rather than a root/active-label shortcut. Legacy no-teams top-level receivers stay on the no-team path. Missing selected-team receivers do not borrow a sibling binding.
Projection unit fixtures omit receiver.tmux_socket so delivery borrows the product OfflineTransport and can assert inject_targets for the expected pane. Internal in-workspace claims are not required to persist scope_authority=explicit_claim. Absolute sockets stay on the real shared-pane target.
Canonical teams projection is the delivery view. MCP sim nested teamA must carry session_name and worker pane/window so broadcast injects peer canaries; status-only nested agents left worker_b empty.
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.
Claiming a second external workspace used to rotate the live pane nonce and invalidate the first Team's leader notifications. Additional claims now reuse the pane-instance nonce. Concurrent first claims initialize it through tmux's pane-local
set-option -p -o; the losing claim reads and persists the winner. Existing owner, workspace, and endpoint guards remain in force.Fresh leader delivery revalidation no longer treats a Null fallback as matching owner
current. States withteamsentries go through canonicalproject_top_level_view. Legacy no-teams top-level receivers stay on the no-team path.MCP sim nested
teams.teamAnow carries the samesession_nameand worker pane/window bindings as the current derived snapshot. Owner-team delivery projectsteams.<owner>as the inject view; status-only nested agents persisted broadcast rows but leftworker_b/worker_cpanes empty.Validation:
release/0.5.74-startup-routingatf2926d467f45d684549054bcc562607a255e6eea.55e0ed256146100afdac69f67eea8dcdc4d3c619(tree1657b2c390569f66b36bacaa229fac523edbc506). Product projection remains3a0de905. This head adds the nested teamA delivery seed and libowner_projection_peer_inject_uses_nested_worker_pane_not_top_level.gb-dab9e0997c250f2259e3977350b3a4528f21f530-pr136-fixture-a1(ExecMainStatus=0) covers the previous 4owner_projection_*cases andexplicit_claim_takeover_any_live_pane_red4/4 only. It does not cover the candidate-full broadcast failure.25170066e3aa204e728679c5e160f2fb7fb5c871journal:mcp_worker_broadcast_fans_out_to_team_peers_and_leader_excluding_senderfailedpane_contains_count("worker_b", canary) >= 1after recipient rows and leader canary already passed.Recommended scoped (disposable seat, this SHA):
Addresses #135.