Skip to content

feat(ui): motion, shell layout and unified sidebar foundation - #79

Draft
freebuff-web[bot] wants to merge 110 commits into
mainfrom
freebuff/changes-fx8b6gcy
Draft

feat(ui): motion, shell layout and unified sidebar foundation#79
freebuff-web[bot] wants to merge 110 commits into
mainfrom
freebuff/changes-fx8b6gcy

Conversation

@freebuff-web

@freebuff-web freebuff-web Bot commented Jul 25, 2026

Copy link
Copy Markdown

Draft: additive new-shell foundation

This branch now contains only the experimental Herdr TUI shell foundation:

  • time-based motion primitives
  • responsive shell geometry
  • unified Workspaces / Agents / Attention sidebar models
  • compact tabs, Fleet Ops, launcher and settings modules
  • shell-focused unit and integration test sources

The active Herdr runtime, AppState, renderer, configuration and mouse/input paths are unchanged from main. The new modules are intentionally not wired into production yet.

Scope cleanup completed

Removed from this branch:

  • incomplete runtime/render/input integration
  • Cursor agents and skills
  • CI and CI-heavy workflow policy
  • quality-CI documentation
  • CI path classification
  • downstream/maintainer CI policy text
  • standalone tarpaulin configuration
  • temporary CI trigger and unrelated update-manifest drift

Required before integration

  • use one authoritative ShellLayout for render and hit testing
  • distinguish handled-without-action from unhandled mouse input
  • replace the incomplete layout hash/dirty flag with explicit invalidation
  • start/retarget transitions only on target changes
  • connect animation wakeups to the event loop with a deterministic clock in tests
  • retain the real terminal renderer during integration
  • allocate and test all tab/new-tab/scroll hit regions
  • render all launcher rows
  • define reachable responsive breakpoints
  • resolve applicable blocking review threads when integration resumes

This PR remains draft while CI validates the isolated foundation.

Greptile Summary

This change adds an experimental terminal shell foundation with responsive layout, shared navigation models, Fleet Ops, launcher, settings, motion primitives, and expanded update-manifest coverage. It also changes terminal mouse and URL-click input handling.

A modified URL click can leave a mouse-reporting terminal pane with an unmatched drag or button-release event: the host consumes the Ctrl-click press but does not suppress the rest of that gesture.

T-Rex validation blocked

  • Missing tool: zig. The focused Rust tests could not compile because build.rs:77 invokes zig build and the zig executable is unavailable. No assertions ran. Configure VMs

Confidence Score: 3/5

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex identified the pre-change test source pending-url-click-01-before.rs as the prior test that consumed a handled URL click's matching release.
  • T-Rex identified the after-change test source pending-url-click-02-after.rs as the test that exercises the reported drag-and-release failure path.
  • T-Rex recorded the execution blocker where both Cargo outputs report 'failed to execute zig build' with 'No such file or directory', preventing any test assertions from running.

View all artifacts

T-Rex Ran code and verified through T-Rex

Fix All in Cursor Fix All in Codex Fix All in Claude Code Fix All in Conductor

Prompt To Fix All With AI
### Issue 1
src/app/mod.rs:129
**URL gesture release leaks to pane**

When a user Ctrl-clicks a URL in a mouse-reporting terminal, the host consumes only the initial left-button down event because `pending_url_click` is never set or consumed. The matching drag or release event then reaches the pane without a preceding down event, breaking the terminal application's mouse-button state.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (2): Last reviewed commit: "chore(ui): remove temporary runtime inte..." | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

Context used:

  • Context used - Focking gretig zijn en niet stoppen tot perfectie.... (source)

OnlineChef and others added 15 commits July 25, 2026 23:13
Additive foundation modules for the TUI shell rewrite:

- src/ui/motion.rs: time-based transitions, easing, scheduler

- src/ui/shell/mod.rs: responsive LayoutMode and ShellLayout

- src/ui/sidebar_new/: Workspaces/Agents/Attention view model, layout, render

- expose state_dot/state_label_color as pub(crate) for reuse
- src/ui/tabs_new/: compact tab bar model, layout, and renderer

- src/workspace/aggregate.rs: add Tab::aggregate_state for per-tab agent status

- register tabs_new module in src/ui.rs
- src/ui/fleet_ops_new/: compact model, layout, and renderer

- register fleet_ops_new in src/ui.rs
- src/ui/launcher_new/: model, layout, and renderer

- register launcher_new in src/ui.rs
- src/ui/settings_new/: model, layout, and renderer

- register settings_new in src/ui.rs
Adds a `new_shell` boolean to `[ui]` config (default: false) and wires it
through AppState so the render path can branch between the existing UI and
the new shell prototype without breaking the old path.

Merge-path: freebuff/changes-fx8b6gcy
@github-actions github-actions Bot added the quality-remediation CI failure needs agent remediation label Jul 26, 2026
@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Quality remediation resolved

CI is green again for PR #79 at 214948a89978. This sticky brief is kept for history; the quality-remediation label was removed.

OnlineChef and others added 13 commits July 26, 2026 09:51
Repair fleet ops, tabs, sidebar, and launcher view models against current
workspace APIs; drop unused re-exports; add ui.new_shell config default and
reference docs. Remove Windows lint and musl smoke from PR ci.yml so Quality
gate is Linux-only; heavy lanes stay in CI heavy. Add fix-ci and find-skills
agent skills.

Co-authored-by: Cursor <cursoragent@cursor.com>
pane_ids() already yields owned PaneId values; Option::copied applies to
references only.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add ~100 tests across 14 new-shell source files:
- tabs_new: layout overflow/sliding, render colors/status icons, model edge cases
- fleet_ops_new: layout expanded/collapsed modes, render with data/empty contexts
- launcher_new: layout centering/clamping, render with selection, model building
- settings_new: layout geometry, render with title/footer, category model
- shell/mod: all LayoutMode breakpoints, collapsed/narrow/mobile/tiny modes,
  scroll clamping, sidebar-mode labels
- sidebar_new/model: attention prioritization, empty state, caching, SidebarItemId

All previously zero-test modules (tabs_new/layout, tabs_new/render,
fleet_ops_new/*, launcher_new/*, settings_new/*) now have test coverage.
@github-actions github-actions Bot removed the quality-remediation CI failure needs agent remediation label Jul 31, 2026
@OnlineChef
OnlineChef marked this pull request as ready for review August 1, 2026 21:42
@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing

@OnlineChef
OnlineChef marked this pull request as draft August 1, 2026 21:43
Comment thread src/app/mod.rs
pub(crate) last_pane_click: Option<PaneClickState>,
/// Set when a modified URL click was handled so the matching left-button
/// drag/up is not forwarded to mouse-reporting panes.
pub(crate) pending_url_click: bool,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 URL gesture release leaks to pane

When a user Ctrl-clicks a URL in a mouse-reporting terminal, the host consumes only the initial left-button down event because pending_url_click is never set or consumed. The matching drag or release event then reaches the pane without a preceding down event, breaking the terminal application's mouse-button state.

Context Used: Focking gretig zijn en niet stoppen tot perfectie.... (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/app/mod.rs
Line: 129

Comment:
**URL gesture release leaks to pane**

When a user Ctrl-clicks a URL in a mouse-reporting terminal, the host consumes only the initial left-button down event because `pending_url_click` is never set or consumed. The matching drag or release event then reaches the pane without a preceding down event, breaking the terminal application's mouse-button state.

**Context Used:** Focking gretig zijn en niet stoppen tot perfectie.... ([source](https://app.greptile.com/review/custom-context?memory=instruction-0))

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Cursor Fix in Codex Fix in Claude Code Fix in Conductor

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.

2 participants