Skip to content

fix: restore live USB views across monitors and clarify bus roots - #2

Merged
Kb2uka merged 3 commits into
mainfrom
fix/live-multimonitor
Sep 13, 2026
Merged

Kb2uka merged 3 commits into
mainfrom
fix/live-multimonitor

Conversation

@Kb2uka

@Kb2uka Kb2uka commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

Summary

Fixes empty live views when Omarchy loads Dock Doctor widgets on multiple monitors. All widgets share one USB observer, which stops when the last widget is removed. USB root hubs now appear as numbered USB buses with controller icons instead of additional laptops. Bumps the plugin to 1.0.1.

Root cause

Each bar widget started its own observer, but the retained-state lock correctly allowed only one process. A window attached to another widget could show only demo data. Linux also exposes multiple USB root hubs inside one computer; the original laptop pictogram made these look like separate hosts.

Proof

The two-widget native regression failed on 1.0.0 with one view reporting “Observer stopped. Reconnecting…”. It passes with the shared observer. The native gate also verifies continued observations after one widget is removed, fresh observations after it is recreated, shutdown after all widgets are removed, and recovery when both return. Process tracking rejects concurrent observers and verifies every observed process exits. A pidfd-targeted observer crash must disconnect both views and then restore fresh live observations to both.

A separate fail-first regression verifies numbered bus labels, root-hub category, controller icon kind, and preserved reported product metadata.

The following image uses a controlled test fixture to show the corrected root label and icon; it is not a live hardware inventory.

USB bus root presentation

Gates

  • Exact revision d8d1527c995978194f4e8b76dab8b8901f06e99f, isolated OptiPlex worktree: 56 backend tests and 20 Qt results passed.
  • Native single-widget and multiple-widget lifecycle gates passed; compilation, manifest validation, and diff whitespace checks passed.
  • Final timeout-only revision 5eaa3088b9f003a3b4355272aa7a5ea4fb23103e: native lifecycle gates rerun on OptiPlex.
  • Hosted Linux x64/arm64 and Qt checks passed.

Review rounds

Round Seat A Substitute A Seat B Accepted Rejected Needs human
1 missing 5/5 (0) 4/5 (3) 0 3 0
2 missing 2/5 (5) 5/5 (0) 0 5 0
3 missing 5/5 (0) 4/5 (1) 1 0 0
4 missing 5/5 (0) 4/5 (1) 1 0 0
5 missing 5/5 (0) 5/5 (0) 0 0 0

The primary seat remained unavailable after its retry; the permitted substitute supplied the second independent verdict. Missing output is not a pass. Scope findings were resolved against the approved illustrative demo, Linux-only integration, and existing error handling. Accepted findings added observer-crash recovery coverage and an independent recovery timeout. No findings remain.

Needs a human

Marketplace maintainers retain listing approval. The owner has authorized release, installation, and updating the existing submission after checks.

factory: rounds=5 evidence=A,B,D host=optiplex

@Kb2uka
Kb2uka marked this pull request as ready for review September 13, 2026 16:30
@Kb2uka
Kb2uka merged commit 2219904 into main Sep 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant