Skip to content

link sync store: fence when identify gives no capability list - #35799

Merged
cmux-bot[bot] merged 2 commits into
feat-cmux-nextfrom
blob-sync-fence-unknown-caps
Nov 4, 2026
Merged

cmux-bot[bot] merged 2 commits into
feat-cmux-nextfrom
blob-sync-fence-unknown-caps

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Follow-up 1 of #35652, from the Codex review that gave SHIP on #34604.

What it fixes

When a machine's identify answer succeeds but its capabilities are missing or not a list, fetch_served read it as Some(false): "this machine serves no blob fetch". The push then skipped the fence, so an older blob.fetch job still running there could commit files over what this push writes. A missing list says nothing about what the machine serves, so it is now None, and the push takes fence_unknown (the path already used when identify does not answer at all). A machine whose list is present and lacks blob-fetch-v2 is still Some(false), unchanged.

The decision is pulled out of fetch_served into serves_fetch(&Value) so it can be tested without a socket.

Test

cargo test -p cmux-tui --lib an_identify_answer_without_capabilities (hosted, ./scripts/verify-cmux-tui-hosted.sh --filter):

  • Red on the test-only commit b2e3c83 (run 41878360641): left: Some(false), right: None.
  • Green on the head: the hosted run for link::sync_cli::store (result in a comment below).

Observed / Not run

  • Observed: the red above, from the hosted run's log.
  • Not run: the link_sync_store end-to-end test, which has no fixture for an identify answer without capabilities. This change only affects that case.

risk: low (one branch of a capability check, toward the cautious path).

Changelog

none

Agent session: agent session

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Fences a push when a machine's identify succeeds but its capabilities are missing or not a list, closing a window where an older blob.fetch job could still commit files over the push's writes.

Previously a missing or non-list capabilities field was read as Some(false) ("serves no blob fetch") and the push skipped the fence. It now reads as None and the push takes fence_unknown, the same path used when identify does not answer at all. A present list that lacks blob-fetch-v2 is still Some(false), unchanged.

The capability check is pulled out of fetch_served into serves_fetch(&Value) so it can be tested without a socket, with a new unit test covering the missing, malformed, and present-list cases.

Written for commit 05d95d5. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits November 4, 2026 17:29
… is unknown

Red: serves_fetch reads a missing or malformed capabilities field as
Some(false), so the push skips the fence (#35652, item 1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c76279e2406909277323
An identify answer whose capabilities are missing or not a list says
nothing about blob-fetch-v2, so it is unknown (None) and the push takes
fence_unknown, instead of Some(false), which skipped the fence and could
let an older fetch job write over this push (#35652, item 1).

Red at b2e3c83 (run 41878360641): left Some(false), right None.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-c76279e2406909277323
@teamleaderleo teamleaderleo added the risk:low Risk tier (docs/ci/risk-tiers.md) label Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 05d95d5: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr35799 -f ref=blob-sync-fence-unknown-caps -f platform=macos -f backend_mode=local

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Nov 4, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 05d95d5

Reviewer: codex gpt-6.1-sol xhigh, fast tier.

SHIP at 05d95d5

Visual verdict: unchanged by this diff

The capability parsing and fence dispatch match the stated behavior; no correctness findings.

Follow-ups: none

@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)/
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 05d95d5: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@cmux-bot
cmux-bot Bot merged commit 62d8da1 into feat-cmux-next Nov 4, 2026
221 of 240 checks passed
@cmux-bot
cmux-bot Bot deleted the blob-sync-fence-unknown-caps branch November 4, 2026 19:07
lawrencecchen added a commit that referenced this pull request Nov 4, 2026
…5799 and #35341 (#35845)

cmux-tui-rust-check.sh fmt is red on feat-cmux-next 78fcd7c (fleet step
95f2e1ad65b5194a3429b675): 9 diffs in link/sync_cli.rs, link/sync_cli/store.rs,
cmux-tui-core lib.rs and apps/grants.rs. Every PR whose Rust check runs fmt
inherits it (S3a e3538ce6 and a0d75c74 failed only on these files).
Formatting only: rustfmt 1.95.0 with cmux-tui/rustfmt.toml, edition 2024.

This branch was previously deployed

3 inactive deployments
artifacts — 05d95d58 Deployed Nov 4, 2026 by teamleaderleo via publish tree-addressed cmux-tui #112760
sentry-dsyms — 05d95d58 Deployed Nov 4, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #112760
ci-routing-agent — 05d95d58 Deployed Nov 4, 2026 by teamleaderleo via cmux-tui tree preflight #112760
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant