Repository navigation
fix: preserve Swarm progress and simplify owner plumbing - #139269
Conversation
Keep loaded dashboard progress beside a compact retry notice, and carry the acknowledged board owner into retained raw-key widgets. Preserve qualified-key request semantics while removing browser version negotiation. Simplify Swarm config and scheduler forwarding, remove the collector global test API, and strengthen ownership, retry, restart and browser coverage. Fixes #139219 Fixes #139223
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. Reviewed September 5, 2026, 2:21 PM ET / 18:21 UTC. ClawSweeper reviewWhat this changesPreserves dashboard progress during refresh failures, carries acknowledged session ownership into retained panes, and simplifies Swarm configuration, scheduler forwarding, and test support. Merge readiness✅ Ready for maintainer review This PR remains useful: both dashboard defects persist on fetched main. No introduced blocking defect was found, and the compatibility cleanup follows the established Control UI policy. Priority: P2 Review scores
Verification
How this fits togetherThe Control UI reads session progress from the Gateway and shares cached cards across dashboards, composers, and hovercards. Session identity determines which card is requested; refresh results determine whether existing content remains visible. flowchart TD
A[Saved pane or selected session] --> B[Accepted board or history owner]
B --> C[Progress card cache]
C --> D[Gateway session access checks]
D --> E[Progress response]
E --> F{Refresh outcome}
F --> G[Show refreshed or retained card]
F --> H[Hide card when access denied]
Before mergeNone. Agent review detailsSecurityNone. PR surfaceSource -65, Tests +164, Docs 0, Other 0. Total +99 across 29 files. View PR surface stats
Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Technical reviewBest possible solution: Keep progress retention in the shared store, repair dashboard presentation at its renderer, and propagate acknowledged ownership without changing canonical session identity. Do we have a high-confidence way to reproduce the issue? Yes, source establishes both failures: an unavailable refresh takes the widget’s early error return, and a retained raw-key board omits its acknowledged owner. The supplied reports describe failing browser/component cases; this review did not execute them. Is this the best way to solve the issue? Yes. The patch fixes the renderer and owner handoff directly; changing shared retention or rewriting session keys would disturb already-correct sibling behavior. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 64c543a78b7f. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
|
|
Land-ready review completed for The final independent P2 review is clean. I read the latest ClawSweeper review: no findings, no pre-merge actions, and no Rank-up moves were listed. Its image download failed; I separately inspected all 13 latest dashboard captures and the six attached before/after images. Browser proof uses the built UI with a mocked Gateway, with no live-provider or Team-deployment claim. Proceeding through native preparation and merge. |
|
Merged via squash.
|
* commit '911d7d5b0c107f7274f2415ca9655dcc6105f0e8': (867 commits) fix(skills): deliver pending Workshop approval controls (#139248) fix(gateway): deliver loopback ask_user prompts to the originating channel (#138831) docs: keep root agent instructions focused on repository policy (#139258) fix(matrix): exclude archived state roots from scans and selection (#112329) perf(agents): prepare exact tool names once per catalog batch (#139267) fix: preserve Swarm progress and simplify owner plumbing (#139269) fix(tailscale): release claims after gateway process-group exit (#139261) refactor(cli): simplify lazy command registration (#139108) test(ui): retain synthetic widget failure evidence (#139229) fix(buzz): keep implicit replies at thread root (#138879) test(diagnostics): await graceful Gateway shutdown before cleanup (#139247) fix(ci): unblock releases with different tooling package managers (#139259) feat(ui): add social preview links for private sessions (#139250) fix(codex): retain failed conversations for guarded continuation (#139246) chore(ui): refresh control ui locales (#139200) fix(ci): run browser checks for real-gateway inputs (#139256) fix(llama-cpp): reconcile managed router state before requests (#136363) chore(i18n): refresh native locales (#139237) refactor(worker): unify inference payload handling (#139245) refactor(terminal): replay wrapped prefixes in one pass (#139240) ...
…9269) Keep loaded dashboard progress beside a compact retry notice, and carry the acknowledged board owner into retained raw-key widgets. Preserve qualified-key request semantics while removing browser version negotiation. Simplify Swarm config and scheduler forwarding, remove the collector global test API, and strengthen ownership, retry, restart and browser coverage. Fixes openclaw#139219 Fixes openclaw#139223
Closes #139219
Closes #139223
Additional instructions
MUST: Keep Allow edits from maintainers enabled for this PR so maintainers can help update the branch when needed.
What Problem This Solves
Fixes issues where dashboard progress disappears after a temporary refresh failure, or never loads in a retained pane whose unqualified session key already has an acknowledged board owner.
Why This Change Was Made
The dashboard keeps its last loaded card beside a compact retry notice. Widgets inherit only a missing agent owner from their own loaded board acknowledgment, preserving the original session key and explicit owner. Retained chat panes wait for accepted history before requesting progress. Participation denial still clears the displayed card.
The accompanying maintainer-requested Swarm cleanup removes browser-only Gateway-version negotiation and its unused presentation plumbing. The Control UI ships with its Gateway; independently upgraded native clients retain their existing capability checks. Qualified progress keys keep their existing key-only RPC shape, and raw targets retain their explicit owner. Collector tests now use the production peek/consume API instead of a global test API, scheduler enqueue reuses its existing reservation/activation parameters, and numeric config bounds share one reader with unchanged defaults and inheritance.
User Impact
Dashboard progress remains readable during temporary failures, Retry restores fresh data, and saved raw-key panes display the correct agent's card. Swarm scheduling, configured limits, cancellation, structured-result retry budgets, and native-client compatibility retain their behavior.
Production LOC: +75/−140 (net −65). Tests: +483/−301 (net +182). Test support: −18. Additional tests exercise failure recovery and ownership; no configuration options, dependencies, database schemas, migrations, or protocol fields change.
Evidence
board.getrequest, and verifies the acknowledged owner reaches the rendered widget. Its before-repair owner assertion fails; explicit-global and ordinary qualified targets remain distinct, and a pending replacement board does not reuse the old owner.2c60be7144521726cceb791c0376ea399ab54b84, including core lint, source contracts, guards, tests, andopenclaw/ci-gate. The pre-push rebase preserved the reviewed patch (git range-diff: identical).Browser proof uses the actual built Control UI and a deterministic mocked Gateway WebSocket; it does not claim a live provider run or a Team deployment. All attached captures were inspected and contain synthetic data only.
Desktop refresh failure
Mobile refresh failure
Retained unqualified pane
Validation commands
The listed tests were executed in scoped batches; the first combined run exposed the retained-history guard dependency, which was repaired and rerun. Failure and success receipts remain separate.