feat(dashboard): make /bay canonical and clarify handoff telemetry - #1112
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. |
|
@clawsweeper review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Codex review: needs maintainer review before merge. Reviewed August 10, 2026, 6:18 PM ET / 22:18 UTC. ClawSweeper reviewWhat this changesThis PR makes Merge readinessThis PR is not implemented on current main and has a coherent, proof-backed route and telemetry change; it should remain open for a maintainer decision on the public-route and UI policy. Priority: P2 Review scores
Verification
How this fits togetherOpenClaw Bay is ClawSweeper’s public, observer-only dashboard backed by the dashboard Worker’s cached status snapshot. The proposed route and telemetry changes affect dashboard navigation, the browser page, and the stored operational-health history rendered to operators. flowchart LR
A[Legacy Bay bookmarks] --> B[Compatibility redirect]
C[Dashboard navigation] --> D[Canonical Bay page]
B --> D
D --> E[Dashboard status snapshot]
E --> F[Health history]
F --> G[Queue handoff telemetry]
G --> H[Operator-facing Bay card]
Decision needed
Why: The implementation and its proof are coherent, but this changes the public observer experience and route contract; VISION.md reserves product-direction taste for maintainers. Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Adopt the canonical route only with maintainer sponsorship, retain the tested redirect as the compatibility policy, and keep the observer dashboard limited to read-only telemetry. Do we have a high-confidence way to reproduce the issue? Not applicable: this is primarily a proposed public-route and dashboard experience change, and the PR supplies exact-head browser evidence for the intended behavior. Is this the best way to solve the issue? Unclear: the route, redirect, telemetry schema, and proof are technically coherent, but only a maintainer can decide whether redirect-only compatibility and removing Live activity are the desired product contract. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 24a140e12d58. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (3 earlier review cycles)
|
71b16d2 to
66f0163
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
66f0163 to
9fcfcd6
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Summary
/baythe single canonical public OpenClaw Bay route/bay-demoto/baywith its query string intactProblem
The public UI advertised and served the preview-named
/bay-demoroute. The page also spent prominent space and a 20-second polling loop on transient Live activity signals that did not help operators. Separately, Queue handoff showed three current counts and a bare status badge in a mostly empty card, with no trend or explanation.Removing the Live activity poll exposed an existing tide-ordering dependency: terminal nodes were committed away after 900 ms even though their visual wash transition lasts up to 1.05 s. Exact-base control proved the old page passed only with incidental scheduling slack from the unrelated activity request.
A later proof-only nondeterminism was separate: the browser assertion used Array.every() on the terminal-node set, so a delayed observation after clearing could satisfy the opacity check vacuously with zero nodes. The product had displayed the correct completion time; the harness had not atomically observed that display with the washed terminal set.
Implementation
/bayserves the Bay page;/bay-demoreturns the repository-standard permanent308redirect using the original URL object, preserving search parameters./bay./api/live-activity-bayremains unchanged for shared operational consumers.Last tide 17:58 UTCin the same pre-clear state; the cleared pool cannot satisfy the wash observation./bayand explicitly classified as historical evidence for their captured behavior source. Exact-final-head proof remains in this PR package. Fixture hashes describe canonical Git-tree LF bytes.Validation
pnpm run build:allpnpm run check:staticpnpm run lint:dashboardpnpm run lint:scriptsnode --test test/dashboard-operational-health.test.ts test/dashboard-worker.test.ts— 344/344 passgit diff --checkcodex review --uncommitted— clean after the expanded telemetry patchcodex review --base origin/main— no actionable correctness regressionspnpm run review -- --local-range --target-repo openclaw/clawsweeper --base origin/main—keep_open, high confidence,kept_open; local-only, no GitHub mutationReal Behavior Proof
Claim: exact built head serves the canonical route and compatibility redirect, removes Live activity and its polling, preserves shared telemetry and the rest of Bay, fixes tide ordering, and renders useful handoff telemetry at desktop and narrow widths.
24a140e12d58437433b06527d4cc40d85b0a4e509fcfcd6532a3fcc982be22fa96cdb0e0fcd3e70da127d36d6606f0d34d8210b05bd45250ff586c84mcr.microsoft.com/playwright:v1.60.0-noblesha256:9bd26ad900bb5e0f4dee75839e957a89ae89c2b7ab1e76050e559790e946b948git archivefrom the read-only common Git object store; 845-entryls-treemanifest and exact tree checked before executionv24.15.0, pnpm11.10.00cf6b147fe86f56e4ec8c77352e3d31433e3a1d2passed the strict tide assertion; final follow-up heads also passed the complete contract./bayloaded;/bay-demo?repo=openclaw%2Fopenclaw&q=proofreturned308to/baywith the exact query; main/header/triage links target/bay; no Live activity DOM or/api/live-activity-baybrowser request; shared API returned200; Queue handoff graph, legend, explanation and narrow visibility passed; narrow viewport was390pxwith390pxscroll widthC:\clawsweeper-work\artifacts\csw-124\canonical-docker-9fcfcd6532-finalcontains command log, manifests/hashes, image/container inspect, Docker events, test output, trace, report, desktop/narrow captures, and exit0Diagnostics retained but not treated as product failures: Crabbox leases
cbx_d4edc3adb688andcbx_8b06c0bf308bfailed at rsync transport before command execution; the first direct Windows-byte copy exposed checkout CRLF normalization; one later preflight manifest file contained a PowerShell UTF-8 BOM and stopped before repository execution. The canonical Git-object runs corrected those environment issues without waiving any check.Baseline control used exact base
e13791786799f6a51a39806938847bbc48948e5e(tree0a12323b11277566a4821f570cdfa7122bb31c4c) in the same image. Its checked-in proof passed all 51 assertions, including the tide assertion, classifying the initial head failure as a CSW-124 regression. The source-backed 1.2 s product timing fixed the initial ordering regression. The later unchanged-head pass/fail pair exposed a separate empty-set harness race; atomic state synchronization removed it without changing the semantic assertion or adding sleeps.Stale-route scan
Repository-wide source scan leaves
/bay-demoonly in:docs/proof/csw-*and their historical READMEs/scriptsThe repository-wide scan was manually classified in the proof package. Focused deterministic tests enforce the canonical Worker route, compatibility redirect, query retention, current header/navigation links, and unrelated-route behavior without pinning immutable historical artifact text.
Reconciliation
dashboard/worker.tsandtest/dashboard-worker.test.tsonly in unrelated branch-authority/queue scope; no worktree or code was copied.Risks and rollback
Risk is limited to public route/UI presentation and additive optional health-history fields. Old bookmarks remain compatible. Old stored history remains accepted. Rollback is the single commit; no data migration or queue/runtime policy change is required.
Non-goals