Skip to content

feat(ui): sidebar groups, dock editor, worklist rows [no-ticket] - #46

Merged
matthias-scale merged 28 commits into
fork/pr-basefrom
mat125/ui-churn-split-repair
Aug 11, 2026
Merged

feat(ui): sidebar groups, dock editor, worklist rows [no-ticket]#46
matthias-scale merged 28 commits into
fork/pr-basefrom
mat125/ui-churn-split-repair

Conversation

@matthias-scale

@matthias-scale matthias-scale commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Supersedes #38. The original PR head could not be changed through GitHub's pull-request API, so this repaired head is submitted as a replacement.

Summary

  • carries the sidebar grouping and pinning, dock/editor, and compact worklist-row UI commits from the split onto the current fork/pr-base
  • retains the UI slice only; detect and closing-block contract changes already present in the base were removed by the normal rebase
  • repairs current-base API and default-keymap compatibility so the branch is green
  • removes the obsolete v1 demo/ duplicate; canonical payload-v2 closing-block assets remain under src/integration/assets/closing-block/

Rebase

  • base: 4f82ffc18ff3cca4d41381b4eb856b05b53ae1d8
  • source: 725cf298d03b7c353b57e4d1704aed1e22e98010
  • the UI implementation commits and the two original empty provenance commits are preserved
  • detect, contract, and stale demo commits whose patch contents were already upstream became empty during the normal rebase; no non-upstream commit was skipped

Validation

  • just check-parallel passes all six lanes: lint, Rust/nextest, Windows lint, maintenance, integrations, and marketplace
  • focused dock-editor, terminal-attach, multi-client, geometry, reload-config, schema, and live-handoff tests pass
  • validation used disposable XDG config/state/cache and Cargo homes; no daily-driver Herdr state was touched

AC5/AC6 repair evidence

  • AC5 ✓ server::headless::tests::full_app_background_client_does_not_resize_shared_dock_editor_runtime renders two attached full-app clients with different viewports (100x30, dock 24) and (160x45, dock 48), both with the editor dock open. Red-first at the prior head printed before=(2, 10), after=(28, 22), proving the background client resized the shared editor PTY. On the repaired head, the test records exactly one resize, owned by the foreground client.
  • AC5 ✓ dock geometry remains client presentation/layout state: each render uses that client's DockPresentationState and view geometry, while the shared editor PTY is sized only from the foreground client's layout. The six obsolete crate::ui::dock forwarding aliases were removed; server cursor projection remains on the neutral src/server/render_stream.rs surface.
  • AC6 ✓ handle_tab_pin returns structured tab_not_found when tab projection returns None; api_tab_pin_projection_divergence_returns_structured_error exercises that divergent-invariant path. mobile_switcher_target_for_row returns None for section headers instead of unreachable!; mobile_switcher_section_header_is_non_panicking covers it.
  • AC6 ✓ api_tab_pin_toggle_flips_pinned_flag and mobile_switcher focused suites remain green.

Repair commits:

  • 473d45459dec5816467fbe3f542967b4fe29e514 — fix shared dock editor resize ownership for divergent full-app clients
  • 5c67ba2f4206bbd770a443cdd74976f7879bdd28 — AC5 boundary split
  • f6228ccc5a4553882da849104c6647da3b2c7751 — AC6 panic removal
  • df4f6a3f317e3162935f1fd65ae8a89f0f45197b — remove misleading dock-editor forwarding aliases and track AC5 ownership deferral

The Blocked and Pinned groups shipped with header rows that reserved a
line but never drew one, so the groups read as unexplained gaps above
the tree. Paint them with the same chevron a space row uses, and make
that chevron real: clicking a header folds its group away, count kept
so the header still says how much is hidden. The tree earns a Spaces
header -- and a fold of its own -- whenever a group sits above it.
The Blocked and Pinned groups repeated the tree's own row template --
two lines ending in claude or codex -- which answers a question nobody
asks of a gate. A grouped row is now a single line: state dot, thread
title, then the space it belongs to. Cards carry their row index so a
pane listed both in a group and in the tree renders each row in its own
shape instead of twice in the first one's.
The canonical closing-block integration assets live under src/integration/assets/closing-block/. The demo copy is an obsolete v1 duplicate and is no longer referenced by the build or test recipes.
@matthias-scale
matthias-scale merged commit dca7745 into fork/pr-base Aug 11, 2026
6 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