Repository navigation
Conversation
…page Replace the flat notification list with the web Control UI Inbox model: only items that still need the user, action-first order, All/Approvals/ Mentions/Automations/System tabs, expandable rows, Dismiss shown, a notification settings shortcut and a 9+ capped badge that turns caution while an approval waits. - InboxProjection (WinUI-free) owns classification, order, tabs and badge - InboxView is shared by the bell flyout and the full Inbox page - Banner 'Show more' only appears when the Inbox has another entry - Strings localized in all six locales; ledger rows updated Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
🦞👀 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: blocked before merge. What this changesThis PR adds Gateway approvals, automation failures, and provider-account alerts to the native Inbox. Example: The Gateway requests approval for curl https://example.test/run?token=fixture-secret ; echo fixture-end with a 45-second lifetime.
Review scores
ProductKind: Feature · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 1 item remains Keep open: this maintainer-authored feature remains absent from main, and its explicit landing hold remains active; no new actionable code defect was found. Priority: P2 Before merge
FindingsNone. Tests
Agent review detailsHow this fits togetherThe existing operator connection supplies Gateway events and inventories to an App-owned source; a shared feed and projection produce Inbox rows, tab counts and footer badges. flowchart TD
Gateway[Authenticated Gateway] --> Client[Existing operator client]
Client --> Source[Inbox Gateway source]
Notifications[App notifications] --> Feed[Shared Inbox feed]
Source --> Feed
Feed --> Projection[Inbox projection]
Projection --> Views[Bell and Inbox page]
Views --> Actions[Chat and Settings actions]
Technical reviewBest possible solution: Land one App-owned Gateway source feeding the shared Inbox projection and view after its presentation dependency and recorded landing gates are resolved. Do we have a high-confidence way to reproduce the issue? Current main's notification-only flyout establishes the missing Gateway feed in source; this read-only review executed no target code. Is this the best way to solve the issue? The missing facts belong in a connection-bound source, with rows, counts and badges sharing one projection; the patch reuses the operator connection, pagination reader, sanitizer and navigation owners without introducing a competing connection or decision path. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against e70292487958. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceWhat I checked:
Likely related people:
Preflight sourceSource unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified. Review metrics
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (4 earlier review cycles)
Reviewed November 8, 2026, 5:37 PM ET / 22:37 UTC (Revision 5). |
InboxView unbound itself on Unloaded, and a late Unloaded from the previous close could disconnect the freshly opened flyout. Hosts now own the binding: the flyout unbinds on Closed and the page on its own Unloaded. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
4501042 to
5117ece
Compare
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
5117ece to
a4de999
Compare
…yout The full Inbox page restores the standard SelectorBar spacing. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…ount alerts Wire Gateway-sourced items into the web-aligned Inbox through the existing operator client: - Typed pending approvals (exec, plugin, system agent) from approval events, hydrated with *.approval.list on connect and removed on resolve, expiry or disconnect. Expanded rows show the expiry countdown, scope/effect text, warning, command preview and Open chat (decisions follow in layer 3). - Failed and overdue automations from cron.list/cron.status, matching the web Control UI rules, with Ask OpenClaw and Open Automations. - Expired or missing model-provider accounts from models.authStatus, with Ask OpenClaw and the matching sign-in or API key action. - InboxFeed combines app notifications and Gateway facts so rows, tab counts and the badge share one projection. Gateway text is never logged. - New strings localized in all six locales; ledger rows updated. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…sts and long commands Review fixes for the Gateway-sourced Inbox items: - Out-of-range epoch-ms times (e.g. 9007199254740991) are rejected or clamped through one GatewayUnixTime helper instead of throwing and freezing every Gateway Inbox item until disconnect. - Approvals expire on a local-clock deadline fixed at arrival (arrival plus the Gateway's own lifetime), so a skewed Gateway clock cannot end them early or keep them forever. Repeats keep the original deadline. - host "gateway" is labelled "Gateway" (localized), not "This computer"; the Gateway may be remote. - The approval command preview shows the complete command in a scrollable, selectable block; hidden control, bidi and format characters are shown as visible escapes instead of being trimmed or rendered invisibly. - WorkspaceWindow no longer creates a fallback InboxFeed that never unsubscribed from the notification service. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
a4de999 to
6bc181e
Compare
Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Preserve complete approval disclosure and exact observation fences. Native hardware validation covers the integrated top-layer snapshot; per-layer CI and mounted UI proof remain explicit gates. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Exercise authenticated live and reconnect feeds, complete redacted disclosure, real local expiry and native actions. Use provider-supported Character movement with zero-content-only outer normalization, exact text and strict visible range/geometry checks. Preserve approval-review and lost-ack fixture admission. Native CI remains required. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Keep the successful native button observation and invoke once outside the existing bounded readiness poll. Preserve exact row/action identity, visibility, single-send receipts and all current time budgets. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Current native Inbox proof (8b20cf4)Source: PR head The actual fixture TRX records 84/84 passed, zero skips. These are real mounted WinUI controls and authenticated synthetic Gateway traffic. No command, plugin operation or external provider was executed. Images show current successful scenarios, not a pre-repair binary comparison. The two new journeys passed complete redacted command/metadata on page and bell, real 45-second local expiry despite a +3-hour producer clock, connection-bound initial/reconnect inventory, native Automations/Models destinations and exactly one accepted automation explanation send. Account Ask is checked for presence; its prompt is not sent by the native case. Full CI is green. Live approval: redacted full command in the bellActual Ask OpenClaw sendThe test requires the successful chat.send receipt and exact prompt in the main conversation. This frame is the sent-prompt state; it does not claim a provider answer. Selected actual native test durations:
Images were visually inspected and are byte-verified after upload. Browser rendering verification remains unavailable. Existing historical comparisons keep their original source labels. |
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Preserve shared Inbox and Back to app/Escape focus contracts, all six locale unions and layer-specific behavior. Carry bounded fixture cleanup, private native exit diagnostics and deterministic reconnect ownership tests without weakening assertions or deadlines. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve strict fixture selection and voice visibility contracts. Make queued-send proof causal and retain bounded exception metadata. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve strict selection, queue, and natural-tail assertions. Record bounded native bring observations without changing navigation policy. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve shared Inbox ownership and retain reminders until navigation is admitted. Include strict fixture data and existing runtime proof gates. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve the reviewed Inbox navigation admission and diagnostic corrections. Upstream changes are limited to DESIGN guidance and its docs-only classifier case. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Retain the primary Type.Method guard and document the companion host-wiring guard in the invariant. No runtime or test assertion changes. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve existing assertions, timeout budgets and production behavior. Source review and focused native evidence remain separately recorded; no OS toast-activation claim. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Preserve all reviewed Inbox proof changes and explicitly compose the DND fixture selection tokens with upstream contract tests. No required runtime checks are waived. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Keep native selection, sidebar geometry, and deferred retry proof within the existing budgets. Add passive bring-option diagnostics without changing scroll policy. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>
Keep exit diagnostics and strict result admission inside the upstream animation preference lifecycle. Co-authored-by: bkudiess <7658216+bkudiess@users.noreply.github.com>


Original implementation by @bkudiess. Review repairs and additional verification by Roboclaw.
Work sessions
Linked for team reference; these sessions aren’t public.
Landing status (2026-11-09): preparing for author review, not merge-ready. Current head
4ff81a1e25f0incorporates current main and is conflict-free. Fresh CI is in progress. Green current-head CI and a fresh ClawSweeper Platinum assessment are still required.Depends on #2057 (feat: web-aligned Inbox for the footer bell and notifications page). This is layer 2 of 4. The branch remains cumulative; the dependency must land first and the stack must be reconciled before the next landing.
What Problem This Solves
The Inbox from #2057 only showed local app notifications, so pending approvals, failed or overdue automations and expired model-provider accounts that the Gateway knows about never reached the bell or the Inbox page.
User Impact
User impact: the bell and Inbox now show what is waiting on the Gateway, matching the web Control UI: pending command/plugin/system approvals (with an expiry countdown, scope or effect text, command preview and Open chat for exec, or Open Dashboard for non-exec approvals), failed or overdue automations and expired or missing model-provider accounts (each with Ask OpenClaw plus a link to Automations or Models). The badge turns amber while an approval waits. Approve/deny from the Inbox is intentionally not here yet (layer 3); exec approvals are still decided in chat, while non-exec approvals are reviewed in the Dashboard.
Why This Change Was Made
OpenClawGatewayClientnow raises typedPendingApprovalRequested/PendingApprovalResolvedforexec,pluginandopenclawapproval events. The existing exec-to-chat translation is unchanged.InboxGatewaySourceobserves the operator client supplied byGatewayConnectionManager(no new connection). On connect it hydrates*.approval.list(when the client has approval scope), requestscron.list/cron.statusand readsmodels.authStatus. Approvals leave on resolve, disconnect, or a local-clock deadline fixed when they arrive (the Gateway's own lifetime measured on this machine), so a Gateway with a skewed clock cannot end them early or keep them forever. Late replies from an earlier connection epoch are dropped. Automation and account rules mirror the web UI'ssidebar-attention-items.ts, including provider alias grouping and refreshing when a credential reaches its expiry.InboxFeedcombines app notifications and Gateway facts.InboxProjectionstill owns order, tabs, dismissible set and badge for both, so the rows, tab counts and badge always agree.Gaps and follow-ups (data the native client does not expose yet)
mentions.list), outbox/held messages and Gateway update errors/warnings: no native client producer yet. The projection already classifies them when a producer publishes them.outbox,update,scope-upgrade) stays deferred until those producers exist.Evidence
Earlier rating-repair evidence
Earlier native screenshots
Exact source, test assertions and limits. These are current successful states, not a pre-repair comparison.
Public asset bytes match the inspected PNGs. Browser rendering verification remains unavailable. The static DND footer, where present, does not prove native toast suppression or packaged privacy behavior.
The latest test-only correction waits within the existing observation budget for the exact row action to be visible and enabled, retains that native button handle, then invokes once outside the poll. It does not retry an action, increase a timeout, weaken an outcome check or change product behavior. Independent source review found no confirmed defect; the current native fixture suite passed 84/84 with zero skips.
Adds three real-client protocol facts and two mounted native journeys for live approval redaction on page/bell, real local expiry, initial/reconnect inventory hydration, native navigation and the actual restricted Ask OpenClaw send. These tests use the existing authenticated synthetic Gateway, not live providers or command execution. Complete meaningful text, gap-free native visible ranges and every finite positive viewport rectangle are required. Provider-supported Character round trips may remove only strictly zero-content outer positions; FindText is not used. Source, closure and joined-fixture reviews found no remaining confirmed finding. Current native execution and inspected images are documented in this source-bound proof comment.
The shared secret-redaction repair and original age-clock case remain unchanged. Prior CI and clock pictures retain their original source labels below.
Prior repair evidence (historical)
Cron inventory reads include all pages with consistent revision checks. Reconnects retain original approval deadlines. Non-exec approvals open the Dashboard instead of an unrelated chat.
Earlier author evidence (historical)
Live fixture-Gateway run of the pushed commit: a real top-level
exec.approval.requestedevent lands in the bell flyout with an amber badge, the expanded row shows the countdown, command preview, host and Open chat, and the row and badge clear when the approval is denied in chat or times out.After the approval's local deadline passed, both the flyout and the page showed Nothing waiting and the badge cleared (observed in the live window at
5117ece1; the earlier4501042ctimeout screenshot shows the same empty state).Change Type
Scope
winnodeRequired proof pools
windows-winui-interactive: new Inbox row states (approval countdown, Ask OpenClaw, Automations/Models links) need current-head visual and accessibility proof in the isolated WinUI app.Validation
Current readiness revision
Head
4ff81a1e25f03dda55737eeada7fd89f87f13734, treeee0045b6d7ed3d9fcb0ed5823f3e829f41fef849, mainb31d7d5e8bfb722d5ef77ae5b8c0586ccd9bc12e. Build and Test 42583501417 is in progress. This is a new source revision, not an unchanged retry.The reviewed test-only Settings repair waits for the expected page and the original owned, visible Forward control in its required enabled state. Both theme cases, all explicit assertions, single Back/Forward actions and existing budgets remain. The ledger format correction preserves both guard tests. No production behavior or historical crash cause is claimed.
Not verified / blocked: final current CI, current UI/proof receipts and fresh ClawSweeper rating. Previously retained security/runtime/compatibility and second-model limits remain visible below. Separate private crash capture is parked. One bounded non-memory comparison is being prepared only to classify the still-blocking ordinary UI crash; no assertion, timeout, exception handling or test selection is weakened.
Previous source-bound results and failures
Previous source-bound validation
Latest terminal readback: Current full CI completed with only UI and CI Gate failed. Core/Tray and all WSL E2E gates passed. Ordinary UI aborted after 245 passes/6 skips with reported host exit 0xC000027B while a reasoning-picker case was active. Exact-current-head hardware run 42576535676 passed all three full builds and Shared/Tray suites: Azure Shared 4,939/25 existing skips, each ARM64 Shared 4,940/24, and Tray 5,445/zero skips on each host. Source-bound non-memory metadata and sequence are retained; the crash cause remains unclassified, with no blind rerun or memory capture.
Head
6d47bf66caf2e8c6d128f0ea0f15cfedc19f637f, tree2b0e2ffecae40c1ea24f86dc3fe603007a3d4957, incorporating mainb5c37e14. Build and Test 42575157510 completed with failure. GitHub reported the reconciled branch mergeable; required checks and proof still govern review readiness.Earlier head 1f46289 passed full fixture UI 87/87 and all five new feed-admission cases. Shared failed solely on the ledger reference. Ordinary UI aborted after 175 passes/3 skips with reported host exit 0xC000027B while a reasoning-picker case was active; activity does not establish cause. The failure is retained, and this new source must pass its own full UI gate.
The completed preceding/current source-bound Tray suite passed 5,445 cases with zero skips. Fixture profile integration passed 48/48, Functional UI 19/19, and the existing portable-profile compatibility case passed. These boundaries do not prove native OS toast authority, packaged privacy or DND-specific upgrade behavior.
The ledger correction preserves both real guard tests: one valid Type.Method stays in the machine-readable column, and the companion guard is named in the invariant. No production behavior, assertions, filters, cycles or timeouts are relaxed. Earlier test compiler/analyzer and positive-GUID-fixture corrections are included.
Three-host run 42571519795 on L1 tree bebd585e passed all builds/cleanup and metadata 19/19 per host, then failed the same ledger check (Azure Shared 4,902 passed/1 failed/25 skips; each ARM64 4,903/1/24). Tray was not reached. Earlier run 42569076140 passed full build/Shared/Tray on pre-main tree d2b8fa95; it remains supporting correction evidence, not a later-head pass.
Not verified / blocked: current passing full validation and fresh ClawSweeper assessment; all layer-specific proof and second-model limits below remain open. A passing UI run does not establish a historical crash cause. Separate main-only crash capture remains parked, with no memory capture performed.
Earlier diagnostic-source validation (historical)
Current head
1f651c951fa7cca90813bdbb9b6b336f1b208cf9, treee76770e5674ebcdc3729bf2defe92eef0fdb6be8, main parent1c7901f6cb1e743ad42e8528780824ffd23af214. CI run 42562512876 completed with failure. Current-source results below do not validate the later local corrections.Ordinary UI passed 710 cases / 7 existing skips, including all three Back-to-app mouse/Enter/Escape cases and all five new pure voice/selector observation cases. Mounted Gateway fixture UI passed 84/84, zero skips. Latest-stable portable profile compatibility passed 1/1; Local AI profile proof passed 12/12. These passing UI results do not override the Shared/Tray compilation failures or establish the cause of other runs’ native crashes.
Exact-source three-host full build/Shared/Tray closeout remains pending; another layer’s candidate result is not substituted for this tree.
No test filters, cycle counts, visible assertions, exception-handling outcomes or timeouts were relaxed. Independent source reviews covered components and composition, but native compiler/runtime evidence remains decisive. Private crash classification and the separate Windows runtime proof pools remain open. Prior screenshots and results below keep their original source identities.
Earlier combined-source native results
Current head
7808cec06642680e5c2d242046a4cdad5c3124e4, treece4bb2634367014a6d2b81038dfa644cd2841209, with main parenta39bd70aab55bfdc0053b278756a87c8a3305bcf. Current CI run 42554759061 completed with failure. GitHub tested synthetic mergeba8af633against maina39bd70a, not the branch tip alone.Shared: 4,937 passed / 8 existing skips / 0 failed. Tray: 5,397 passed / 0 skipped / 0 failed.
Diagnostic self-tests: 29 passed. Failure-lifecycle owner: 18 passed. Inbox/Settings composition: 7 passed. Fixture profile/app integration: 48/48 passed. Functional UI: 19/19 passed.
Mounted Gateway fixture UI: 83/84 passed, 1 failed, zero skips.
Latest-stable portable-profile compatibility: 1/1 passed. It does not establish installer/Store or DND-specific upgrade behavior.
Ordinary UI: 665 passed / 7 existing skips / 0 failed, including all three Back-to-app mouse/Enter/Escape cases. Current focus screenshots remain separately uninspected.
The sole mounted failure is selected-agent acknowledgement during cycle 2 of the twelve-cycle session-switch fact. There is no completed acknowledgement sample after the research activation, so the evidence does not establish that the selection stayed on main. Failure capture timed out, but owned stop, drain and disposal completed and the suite returned its full TRX.
Exact-source three-host full build/Shared/Tray closeout remains pending. The native assistant-selector operation/exception boundary is receiving narrow diagnostics and a one-shot SelectionItem contract clarification; no product selection cause or fix is claimed.
No assertions, cycle counts, test filters or timeouts were relaxed. No unchanged rerun was used to clear these failures. New local candidates are not included in the published source above. Previous screenshots and results below retain their historical source identities.
Earlier verified native validation
PR head
8b20cf4467d450404bcd4159cafd3c40056923a2, tree7a2614c0a26bbc2574167421c7c3ef26adc4178b. CI run 42526534251 tested mergee26dc2af607d70baec2250dcff6859c84ae79e79with maine70292487958be9e70170e2f3affe7afc42056e8, not the branch tip alone.The complete three-PR proof delta and merged fixture admission passed independent source reviews. Required local commands were attempted but could not execute on the Linux coordinator; the native results above are separately identified. Historical crashes and failures remain retained below, not declared fixed from a later green run.
Earlier validation and original author results
The earlier layer-two green run predates the new feed journeys. The preceding integrated run had an ordinary UI host crash, a historical voice-tail timeout, an immediate Ask lookup failure and an incomplete fixture lane stopped at its 15-minute bound. Those failures are retained; the current passing run does not establish their root causes.
Earlier author validation (historical)
Run on head
5117ece1(rebased on layer 18b7bec92) source (Windows 11 ARM64, .NET SDK 10.0.403),OPENCLAW_REPO_ROOTset to the worktree:./build.ps1: passed (Shared, Cli, WinNodeCli, SetupEngine, WinUI; docs and proof-pool validation passed).dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj: passed 4892, failed 0, skipped 25 (existing opt-in integration/MXC/GPU skips).dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj: passed 5318, failed 0, skipped 0.GatewayPendingApprovalTests+OpenClawGatewayClientApprovalTranslationTests(31 passed);InboxGatewayItemsTests,InboxGatewaySourceTests,InboxProjectionTests(55 passed), covering cron/model-auth rules, alias grouping, expiry refresh, hydration, late replies after disconnect, client swaps, dismissal recurrence and feed routing.LocalizationValidationTestsandDiagnosticsPageContractTests(single Inbox feed guard) pass inside the Tray run.Review fixes (dual-model review of the Inbox stack,
5117ece1), each with a regression test:9007199254740991) are rejected at parse time or clamped through oneGatewayUnixTimehelper, instead of throwing in date conversion and freezing every Gateway Inbox item until disconnect (GatewayPendingApprovalTests.TryParse_RejectsTimestampsBeyondTheRepresentableRange,InboxGatewayItemsTests.Builders_IgnoreTimestampsBeyondTheRepresentableRange,NextModelAuthRefreshAt_ClampsAFarExpiryInsteadOfThrowing).LocalDeadline_MeasuresTheGatewayLifetimeOnTheLocalClock,ApprovalsFromASkewedGatewayClock_UseTheirLifetimeOnTheLocalClock,RepeatedApprovalRequests_KeepTheirOriginalDeadline).gatewayis labelled Gateway (localized in all six locales with the app's existing Gateway terms) instead of "This computer", because the Gateway may be remote.\u{XXXX}escapes (DisplayCommand_KeepsTheWholeCommandAndRevealsHiddenCharacters,DiagnosticsPageContractTests.InboxApprovalRows_LabelTheGatewayHostAndShowTheWholeCommand). Layer 3 adds the decision guard.WorkspaceWindowno longer creates a fallbackInboxFeedthat subscribed to the notification service and never unsubscribed.InboxViewno longer unbinds itself onUnloaded; the flyout and page hosts own the binding.Real Behavior Proof
Earlier mounted feed-proof limits
8b20cf4467d450404bcd4159cafd3c40056923a2, tree7a2614c0a26bbc2574167421c7c3ef26adc4178b. The current native fixture suite passed; inspected source-bound captures are embedded above.Historical behavior evidence and its original limits
The shared age-clock pictures belong to layer 1’s identified CI merge. Current feed proof above belongs to this layer. The original author’s historical evidence is retained below without relabelling its source.
Earlier author behavior proof (historical)
win-arm64), isolated fixture profile viascripts\run-gateway-fixture.ps1 -Scenario chat-interactive -Interaction approval. Synthetic Gateway; no provider or command executed.5117ece1build for the flyout plus page run (Gateway host label, full scrollable command, synchronized countdowns, removal at the local deadline). The earlier Open chat navigation and deny-removal runs used the same approval path at4501042cand its predecessor.app.chat.sendto trigger the fixture's top-levelexec.approval.requested; opened the Inbox page (app.navigate notifications) and the bell flyout; expanded the row in both; waited for the approval's deadline. Earlier runs: denied in chat, and clicked Open chat from the page.5117ece1showed the rowCommand approval needed, echo fixture-onlywith no dismiss button,Expires in 0:33in both surfaces, the command inside a scroll area, the host textGateway, andOpen chat.1while the approval waited; Approvals tab count 1; Open chat selected the approval's conversation; after Deny and after the timeout the badge and row cleared (Inbox Help: Nothing waiting).Yes/No/N/A): Yes*.approval.listhydration (the fixture does not implement it), failed/overdue automation rows and model-auth rows (the fixture has no failing cron job ormodels.authStatusdata), and Ask OpenClaw against a live Gateway are covered by unit tests only. No real native/WSL Gateway run.Security Impact
Yes/No): NoYes/No): Yes, display-only redaction uses the shared sanitizer; stored credentials and observed raw approval identity are unchanged.Yes/No): YesYes/No): NoYes/No): NoYes, explain the risk and mitigation: on connect the existing operator connection now also readsexec/plugin/openclaw.approval.list(only with approval or admin scope),cron.list/cron.statusandmodels.authStatus, and re-reads auth status every 5 minutes or at a credential's expiry. These are read-only RPCs the web UI already uses. Approval text and Gateway errors are rendered as plain text, never logged or exported (no telemetry changes). Ask OpenClaw sends a chat message only when the user clicks it.Compatibility and Migration
Yes/No): YesYes/No): YesYes/No): NoOPENCLAW_INBOX_GATEWAY_REQUEST_TIMEOUT_MSoverrides the 15 s Inbox read timeout. Older Gateways that do not advertise these methods are skipped or fail quietly; the newIOperatorGatewayClientevents have default no-op accessors so existing implementers still compile.Review Conversations
Current repair review is separate from the earlier author reviews. Confirmed source findings are addressed with regressions; remaining runtime requests stay open. Fresh ClawSweeper review will be requested after the current native evidence is complete. Existing review checkboxes remain unchecked until verified.