Skip to content

fix: keep Linux widget replies connected and simplify Rust ownership - #139664

Merged
steipete merged 4 commits into
mainfrom
codex/rust-deeper-cleanup
Sep 6, 2026
Merged

steipete merged 4 commits into
mainfrom
codex/rust-deeper-cleanup

Conversation

@steipete

@steipete steipete commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

What Problem This Solves

Fixes Linux replies that say Done while their widgets disappear, Quick Chat becomes Interrupted, or reopening fails with a duplicate window label. It also repairs misplaced native widgets and Dashboard frames that unexpectedly open the system browser.

This follows #139241 with the requested deeper Rust cleanup and dependency audit. The separate unanswered-onboarding shutdown repair landed in #139783.

Why This Change Was Made

The Gateway records bounded, normalized Canvas descriptors where a successful tool result arrives, then carries that fact through progress, completion and explicit cancellation. History and live delivery share normalization and deduplication. Existing run ownership, silent/heartbeat suppression and delivery hooks remain authoritative; retention is capped at 32 descriptors and 64 KiB, evicting oldest entries first.

Quick Chat uses its native window as the owner. Tauri's single-WebView lookup stops matching when child views exist; that lookup caused false disconnects and duplicate-label attempts. The pinned Linux Tauri/Wry path also puts child views in a vertical GtkBox and ignores their requested rectangles. An app-owned GtkOverlay/Fixed surface now positions the isolated child views, while a small content GtkBox subclass preserves the existing 640×92 compact size. Native placement completes before reconciliation commits. Child Escape forwards to WebKit first, preserving IME and widget handlers; an unhandled key uses the existing renderer hide/cleanup path. Linux blur admission also rechecks current toplevel focus so an old queued focus-loss event cannot hide an already refocused window.

Dashboard navigation no longer guesses that every cross-origin frame is an external link. The guarded native new-window handler remains the browser owner. Opener's default injected click handler is disabled because it consumed those links before calling renderer IPC that the app deliberately does not grant.

The Rust cleanup unifies widget state under one lifecycle lock, moves typed decoding into the socket owner, lets the operation queue own its sole worker, removes duplicate identity types and approval clones, and gives Watch RTC one fallible-operation boundary. The removed executor, copied state helpers and target-rewrite script have no parallel replacement paths.

User Impact

Completed widget replies stay connected and interactive. Dashboard widgets remain inside the app, external links open through the native browser handler, and Quick Chat returns to its compact size after hiding. Credential serialization, C ABI, native capabilities, config and persistent schemas remain unchanged.

Rust production is 60 lines smaller. Gateway Canvas production grows 81 lines, making this PR net +21 production lines. Tests/support grow 265 lines; dependency/license/docs/tooling metadata is counted separately. The GTK layout/input ownership and bounded Canvas result delivery require the positive portions; deleted inline tests and pure moves are not credited as production savings.

Dependencies

Audited all 29 direct registry dependencies across both Rust crates and dry-ran both complete Cargo graphs. Applied mdns-sd 0.21.2, crossbeam-channel 0.5.17 and crossbeam-utils 0.8.23; advanced Watch to nightly-2026-09-05 with its exact notices. GTK 0.18.2 is a new direct reference to an already-resolved package, with no additional package version.

Existing holds remain after direct source/probe checks: blocking 1.7.0 retains idle workers, and tauri-plugin-updater 2.11.0 changes Windows installer-failure behavior after cleanup. The remaining older generic-array/toml entries come from upstream constraints. No overrides or vendoring were added; no safe available update remained at audit time.

Dependency contracts personally inspected: Tauri 2.11.5 lib.rs single-WebView lookup; runtime-wry 2.11.4 child creation; Wry 0.55.1 GtkBox packing, bounds and navigation; GTK 3.24.41 preferred-size, focus propagation and input ownership; WebKitGTK 2.52.6 asynchronous key replay; opener 2.5.5 builder and injected click handling. Installed Codex 0.153.4 was checked against its exact release source, including dynamic tool completion and app-server response decoding.

Evidence

Crabbox run 34014138751, provider blacksmith-testbox, lease tbx_01m1tk40syn8mwrdr3k0v0am0p. Native Linux Tauri/WebKitGTK, Openbox, real Gateway and model providers; synthetic user state. The independently checked runtime uses base 883d4d65bad1791755c203a8dfd854e14b4f6e33 plus this PR and #139783; changed-file manifests and dependency hashes are verified before each build.

  • Real Codex (openai/gpt-5.6-sol, Codex harness) returned two working widgets. Text input, button state, Alpha/Beta tabs and ten fresh-composer hide/reopen cycles passed; cycles took 269–472 ms and typing still worked afterward. Widget window 640×440; compact window 640×92.
  • Native Learn more opened and activated the system browser in about 403 ms. Returning to the Dashboard and typing in the native app passed.
  • Real local model (ollama/qwen3:4b-instruct-2507-q4_K_M, OpenClaw harness) activated in 11.578 seconds, then completed three continuous native chat turns: 224.779 seconds cold, 5.074 and 5.883 seconds warm. The first CPU-only turn spent 220.338 seconds prefilling 10,430 tokens; warm turns reused the prompt cache. These are observed cold/warm limits, not a claim of instant cold inference.
  • Native Stop with an unanswered setup prompt passed in 1.241 seconds; Start recovered in 4.128 seconds. See fix: stop Gateway shutdown waiting on abandoned setup prompts #139783 for the lifecycle repair and receipts.
  • Gateway final post-rebase regression/sibling run: 327 tests passed across five files. Coverage includes widget-only final delivery, suppression, abort ordering, run replacement, timing, deduplication and count/byte-pressure eviction. Setup sibling replay: 131 tests across seven files.
  • Desktop Rust: 135 tests on macOS and 146 Linux test executions, including the explicit logind integration test; the final uninstrumented Linux build and all 146 test executions passed. Watch: 13 tests on old/new pins and optimized Release, all four architectures, and C linkage with all 13 exports.
  • Every command in the changed-file validation plan passed: types, lint, dead exports, macOS fixture lanes and the remaining ownership/schema/import guards. Unrelated cold host fixture timeouts passed on unchanged original-order replay; no assertions or product/test timeouts were relaxed. Independent review through P2 is clean after replacing the first allocation adapter and correcting IME event ordering.

Final uninstrumented native A/B proof passed on the replacement lease tbx_01m1tsjy758bvhjb4rpbs9g2pv (provider blacksmith-testbox): real GTK Unicode composition cancellation retained the widget and window; primary-popover Escape stayed local; ordinary widget Escape dismissed the reply. The exact original sequence then passed 100 rapid hide/reopen cycles at 277–501 ms, with the same mapping predicates and five-second phase bounds. A physical outside click still hid Quick Chat in 291 ms, and reopening accepted input. The preceding uninstrumented candidate failed at cycle 2 on two leases; diagnostic logging alone made it pass and was not counted as product proof. Final candidate contains no diagnostics.

The child-alive parent reload also passed on that uninstrumented candidate. With two real child WebViews present, the test runner validated the owned PID/UID/executable and invoked WebKit's existing webkit_web_view_reload on the actual Quick Chat parent through the GTK widget tree. Both old children retired; the parent reopened at 640×92 and accepted AFTER_PARENT_RELOAD. This exercised native renderer replacement without moving focus, adding production IPC or changing test-user permissions. Inspector captures remain private; normal app screenshots contain only synthetic task data. Final Crabbox run 34019002348.

After rebasing onto 45213bbddbe8ec95326981367c10ba7eb4c68240, all native Rust files remain byte-identical to the live-tested candidate. The Gateway integration retained main's retry/status projection changes; its final exact-head standalone replay passed 327 tests across five files. Exact-head CI completed successfully: 153 passed, 33 skipped, including openclaw/ci-gate (run 34021971776).

CI exposed a pre-existing browser-hash fixture depending on a shared /tmp/workspace. Existing skill directories changed runtime hashing while the fixture expected no skill mounts. Our exact red reproduction had 26 passing cases and one failure; the isolated fixture repair plus hash siblings passed 40 tests and independent P2 review. Meanwhile #139894 landed suite-wide owned-workspace isolation in main. The rebase keeps that canonical fix and drops our duplicate test commit; production hashing and assertions remain unchanged. Existing filesystem data was preserved.

Native before and after

Baseline: the completed reply loses its widget descriptors.

Before: Done without widgets

Candidate: both widgets are present inside Quick Chat.

After: working native widget reply

Compact composer remains usable after ten hide/reopen cycles.

Compact Quick Chat after ten cycles

Three continuous local-model replies in the native Dashboard.

Cold and warm local model replies

Review follow-through

The earlier ClawSweeper interaction, layout and dependency-proof requests are addressed by the owner-source audit and live input/tab/toggle/link/local/service results above. Final child-input Escape, real IME cancellation and 100-cycle uninstrumented stress proof are complete; child-alive renderer reload is complete on the same uninstrumented candidate. The previously reported merge conflict was resolved while preserving main's text-projection changes and both shrinking assertion baselines. The first GTK allocation adapter and direct Escape interception were rejected and removed.

Follow-up: CPU-only cold local inference remains expensive because of prompt prefill; warm behavior is measured above. A fixture-only service failure also exposed raw CLI JSON in native error text; this is recorded for a separate presentation cleanup and is not a regression introduced here.

The native source audit also identified a separate Tao queued-show/focus caveat. No distinct failing presentation case was isolated after the blur repair, so a shared native presentation change is recorded as follow-up rather than adding a second window-control path here.

Final lifecycle proof and cleanup

Uninstrumented input after 100 rapid cycles:

Working compact composer after 100 cycles

Input after native parent reload with live children:

Working composer after parent reload

Final cleanup completed before explicit lease stop: managed Gateway stopped, task authentication/state removed, QA user removed and port 18789 closed. Blacksmith confirmed the sixth lease completed at 2026-09-06 08:47:13 UTC. Earlier leases that ended through provider teardown are not claimed to have had manual home cleanup.

Presentation follow-up: an unstyled transparent synthetic widget exposes underlying content after repaint. Existing frames do not distinguish expected fixture transparency from a GTK paint issue, so no product-regression or repair claim is made for that observation.

Final local validation used a standalone checkout at the rebased head with its own frozen install. This resolved package-local dependency links missing from the review worktree. The app-lint step then used the already installed, verified SwiftLint 0.65.1; all remaining planned checks passed. No production change, assertion relaxation or timeout increase was used to repair the environment.

@clawsweeper

clawsweeper Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@openclaw-barnacle openclaw-barnacle Bot added app: ios App: ios gateway Gateway runtime app: linux size: XL maintainer Maintainer-authored PR labels Sep 6, 2026
@steipete
steipete marked this pull request as ready for review September 6, 2026 03:12
@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 6, 2026
@clawsweeper

clawsweeper Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed September 6, 2026, 4:43 AM ET / 08:43 UTC.

ClawSweeper review

What this changes

Preserves live widget replies, repairs Linux Quick Chat window placement and lifecycle handling, restores embedded Dashboard navigation, consolidates Rust ownership, and updates selected dependencies and Watch tooling.

Merge readiness

✅ Ready for maintainer review

This PR remains useful: current main still lacks the central repairs, and no blocking introduced defect was found. The updated native reload evidence addresses the previous review’s remaining request.

Priority: P2
Reviewed head: d6661eb07105929991e7ea1cc1d386956fda7cc6

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A coherent owner-level repair with strong native observations, meaningful regression coverage, and no actionable introduced findings.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (live_output): Captured native Linux Tauri/WebKitGTK observations exercise real widget completion, interaction, Escape/IME handling, 100 hide/reopen cycles, and parent reload with live children followed by successful composer input. This covers the changed lifecycle owner and resolves the previous proof request; linked artifacts could not be independently retrieved in this review.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (live_output): Captured native Linux Tauri/WebKitGTK observations exercise real widget completion, interaction, Escape/IME handling, 100 hide/reopen cycles, and parent reload with live children followed by successful composer input. This covers the changed lifecycle owner and resolves the previous proof request; linked artifacts could not be independently retrieved in this review.
Evidence reviewed 11 items Reviewed introduction boundary: Reviewed the merge-base-to-head changes, including the complete local patches omitted from the supplied display. Raw commit records confirm the original head’s parent and the test merge’s ordered base/head parents; unrelated base-only changes were excluded.
Current main still needs the repair: Fetched main still uses get_webview_window for Quick Chat ownership and constructs text-only live chat snapshots. The supplied merged related PRs address tray shutdown, abandoned setup prompts, and test isolation rather than these remaining widget failures. Latest-release source inspection was unavailable, so no shipped-fix claim is made.
Native lifecycle and layout ownership: Widget synchronization, visibility changes, and renderer replacement share one lifecycle lock. Renderer replacement hides the parent before retiring children; native placement finishes before reconciliation commits. Child navigation restrictions, isolated views, and strict JavaScript disabling remain intact.
Findings None None.
Security None None.

How this fits together

The Gateway converts successful tool results into chat content consumed by Linux Quick Chat and the Dashboard. The native app hosts interactive widgets in isolated child views and sends external new-window links to the system browser.

flowchart LR
  A[Successful tool result] --> B[Bounded Gateway widget descriptors]
  B --> C[Chat progress and completion]
  C --> D[Quick Chat native window]
  D --> E[Isolated widget views]
  F[Dashboard new-window link] --> G[Guarded system browser opening]
Loading

Before merge

None.

Agent review details

Security

None.

PR surface

Source +81, Tests +305, Docs +2, Other -80. Total +308 across 26 files.

View PR surface stats
Area Files Added Removed Net
Source 5 141 60 +81
Tests 3 392 87 +305
Docs 2 4 2 +2
Config 0 0 0 0
Generated 0 0 0 0
Other 16 668 748 -80
Total 26 1205 897 +308

Review metrics

Metric Value Why it matters
Live widget retention 32 descriptors; 64 KiB per run Explicit count and byte limits bound the new live projection state, with coverage for eviction and duplicates.

Technical review

Best possible solution:

Keep widget descriptors in the existing Gateway projection and native children under one lifecycle owner while preserving isolation, suppression, and stored credential compatibility.

Do we have a high-confidence way to reproduce the issue?

Yes: current main’s text-only final projection and single-WebView ownership lookup match the supplied native before/after failure scenario. This review inspected source without executing the application.

Is this the best way to solve the issue?

Yes: the patch repairs the existing projection and native lifecycle owners, reuses Canvas normalization, and preserves the established security and persistence contracts.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 8bcffa7fdefa.

Labels

Label justifications:

  • P2: Repairs concrete Linux widget and chat lifecycle failures with a limited desktop-facing blast radius.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): Captured native Linux Tauri/WebKitGTK observations exercise real widget completion, interaction, Escape/IME handling, 100 hide/reopen cycles, and parent reload with live children followed by successful composer input. This covers the changed lifecycle owner and resolves the previous proof request; linked artifacts could not be independently retrieved in this review.
  • proof: sufficient: Contributor real behavior proof is sufficient. Captured native Linux Tauri/WebKitGTK observations exercise real widget completion, interaction, Escape/IME handling, 100 hide/reopen cycles, and parent reload with live children followed by successful composer input. This covers the changed lifecycle owner and resolves the previous proof request; linked artifacts could not be independently retrieved in this review.

Evidence

What I checked:

  • Reviewed introduction boundary: Reviewed the merge-base-to-head changes, including the complete local patches omitted from the supplied display. Raw commit records confirm the original head’s parent and the test merge’s ordered base/head parents; unrelated base-only changes were excluded. (778f2b7c2a12)
  • Current main still needs the repair: Fetched main still uses get_webview_window for Quick Chat ownership and constructs text-only live chat snapshots. The supplied merged related PRs address tray shutdown, abandoned setup prompts, and test isolation rather than these remaining widget failures. Latest-release source inspection was unavailable, so no shipped-fix claim is made. (apps/linux/src-tauri/src/quickchat.rs, 8bcffa7fdefa)
  • Native lifecycle and layout ownership: Widget synchronization, visibility changes, and renderer replacement share one lifecycle lock. Renderer replacement hides the parent before retiring children; native placement finishes before reconciliation commits. Child navigation restrictions, isolated views, and strict JavaScript disabling remain intact. (apps/linux/src-tauri/src/quickchat_widgets.rs:303, d6661eb07105)
  • Gateway projection and retirement: Successful assistant-message widget results use the existing Canvas normalizer, retain at most 32 descriptors within 64 KiB, and carry the current run-owner predicate. Existing owner rejection and run cleanup surround the new projection; finalization preserves delivery authorization and post-hook suppression. (src/gateway/server-chat.ts:1727, d6661eb07105)
  • Regression coverage: Inspected introduced cases covering widget-only completion, duplicate and oversized descriptors, silent and heartbeat suppression, retry retirement, reused run ownership, synchronous abort cleanup, and ACP post-hook suppression. The captured body reports 323 Gateway tests and 146 Linux test executions; no tests were executed during this read-only review. (src/gateway/server-chat.agent-events.test.ts:300, d6661eb07105)
  • Previous proof request addressed: The captured body at sourceRevision 8a30439272de65ee3f92531b41404b9f61ba0419b5b213c9e9f28fd54a0f5100 records an uninstrumented native parent reload with two live child views: both children retired, the composer returned at 640×92, and AFTER_PARENT_RELOAD input succeeded. It also records real IME cancellation, local popover Escape, ordinary Escape dismissal, 100 hide/reopen cycles, and outside-click dismissal. These observations directly cover the prior retained rank-up request. Linked run: https://github.com/openclaw/openclaw/actions/runs/34019002348.

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (5 earlier review cycles)
  • reviewed 2026-09-06T03:19:28.995Z sha a5f9c92 :: blocked before merge. :: none
  • reviewed 2026-09-06T05:41:04.910Z sha ca841bb9e1bdb6da51015bb1cd6b4f7c256affd9 :: blocked before merge. :: none
  • reviewed 2026-09-06T06:21:06.349Z sha ec766f0 :: blocked before merge. :: none
  • reviewed 2026-09-06T07:08:01.801Z sha 5e8104f :: blocked before merge. :: none
  • reviewed 2026-09-06T08:22:48.231Z sha d98a8bea077ce19597535890c52b250a492c437b :: blocked before merge. :: none

@openclaw-barnacle openclaw-barnacle Bot closed this Sep 6, 2026
@openclaw-barnacle openclaw-barnacle Bot reopened this Sep 6, 2026
@steipete
steipete force-pushed the codex/rust-deeper-cleanup branch from a5f9c92 to ca841bb Compare September 6, 2026 05:36
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. label Sep 6, 2026
@steipete
steipete force-pushed the codex/rust-deeper-cleanup branch from ca841bb to ec766f0 Compare September 6, 2026 06:14
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Sep 6, 2026
@steipete
steipete requested a review from a team as a code owner September 6, 2026 08:13
@openclaw-barnacle openclaw-barnacle Bot added the agents Agent runtime and tooling label Sep 6, 2026
Carry bounded Canvas descriptors through live Gateway delivery, finalization
and cancellation. Keep Quick Chat attached to its native window and let
GTK own primary and widget geometry. Preserve external browser links while
allowing Dashboard widget frames to load in the app.

Consolidate Rust widget, queue, identity and RTC ownership; update safe
dependencies and the pinned Watch compiler. Remove 141 production Rust
lines while preserving credential serialization and the Watch C ABI.

Validation: reviewed through P2; 135 desktop tests on macOS, 146 Linux
test executions and native build; Gateway owner regressions and changed
gates; Watch debug/release tests and four-architecture C linkage.
@steipete
steipete force-pushed the codex/rust-deeper-cleanup branch from d98a8be to d6661eb Compare September 6, 2026 08:28
@openclaw-barnacle openclaw-barnacle Bot removed the agents Agent runtime and tooling label Sep 6, 2026
@clawsweeper clawsweeper Bot removed the merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. label Sep 6, 2026
@steipete
steipete merged commit c405f36 into main Sep 6, 2026
202 checks passed
@steipete
steipete deleted the codex/rust-deeper-cleanup branch September 6, 2026 09:35
@steipete

steipete commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Sep 7, 2026
…penclaw#139664)

* fix(linux): keep widget replies connected and correctly placed

Carry bounded Canvas descriptors through live Gateway delivery, finalization
and cancellation. Keep Quick Chat attached to its native window and let
GTK own primary and widget geometry. Preserve external browser links while
allowing Dashboard widget frames to load in the app.

Consolidate Rust widget, queue, identity and RTC ownership; update safe
dependencies and the pinned Watch compiler. Remove 141 production Rust
lines while preserving credential serialization and the Watch C ABI.

Validation: reviewed through P2; 135 desktop tests on macOS, 146 Linux
test executions and native build; Gateway owner regressions and changed
gates; Watch debug/release tests and four-architecture C linkage.

* fix(linux): preserve compact sizing and native browser links

* fix(linux): dismiss widget replies after unhandled Escape

* fix(linux): ignore stale Quick Chat blur events
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: ios App: ios app: linux gateway Gateway runtime maintainer Maintainer-authored PR P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant