sync: copy-mode big-word motions (upstream #2270) - #9
sync: copy-mode big-word motions (upstream #2270)#9OnlineChef (ChefGroep) wants to merge 1540 commits into
Conversation
Dismiss ConfirmClose/ReleaseNotes/ProductAnnouncement with the same inside-noop / outside-cancel contract as other overlays. Cache navigator rows on ViewState for render, avoid cloning workspace card hit areas, and apply workspace_scroll in the collapsed sidebar. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Add eight self-contained Node ESM plugin scaffolds under plugins/ with herdr-plugin.toml manifests, fleet_ops.json state-dir writers, and a README covering link/install, TTL contract, and SSOT rules. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Wire CHEF personal context into Settings (Fleet/Plugins tabs), merge plugin fleet_ops.json fragments into the ops bar, and fix collapsed sidebar scroll test helper import from Phase B. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Windows hosts do not reliably provide `sh -lc`, so Pi resume keeps the direct `pi --session` argv there while Unix still syncs Pi-Memory first. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Bring herdr/herdr-ui Cursor agents and skills onto the branch, add chef-fleet for SSOT/plugin contracts, extend herdr-ui with the overlay dismiss contract and Fleet Ops Bar patterns, and document CHEF plugin actions in the root skill plus unreleased plugins docs. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Point operators at plugin action invoke for com.chefgroep.* fleet plugins, and record the unreleased plugins preview section. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
…-only hook Block just build/fmt-check/windows-lint locally and document parallel composer/grok workers for the settings UI rework. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Rework settings render into src/ui/settings/ with shared SettingsLayout for geometry parity between draw and hit-tests. Wide modal (~96 cols) with left nav, search row, scrollable section content, categorized spinner picker with live preview, and section-specific rows for all eight IA tabs. Update input/settings mouse helpers to use SettingsLayout exports. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Add SettingsAction variants and apply_settings_action for high-value config toggles across input, terminal, notifications, updates, and advanced sections. Wire row-based activate_row to config_io save helpers, search/focus/nav keyboard handling, and snapshot-backed config fields. Deduplicate advanced experiment toggles in rows. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
…late hit geometry Point manage_ssh_config at [remote], keep layout toggles above template cards, map terminal choice payloads uniquely, and document the new left-nav settings shell in next docs. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Apply the cargo fmt --check diffs from PR CI without running local cargo. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Drop unused ui re-exports, fix new_cwd Path save return type, and keep section_rows alive across activate_row matching. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Trim re-exports, gate test-only hit helpers, drop stale constants, and keep SpinnerStyle::ALL covered by category tests. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Keep SpinnerStyle::ALL live via spinner_style_count and drop stale ui re-exports that no longer have external callers. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Move hit-test helpers into tests via SettingsLayout and keep SpinnerStyle::ALL linked with a const use. Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
Co-authored-by: OnlineChef <OnlineChef@users.noreply.github.com>
* feat(events): native pi.session.ended event + watcher Add a first-class `pi.session.ended` event so plugins (e.g. chef-pi-eval) can react the moment a Pi coding-agent session JSONL stops growing, instead of waiting for a coarse hourly poll. - api/schema/events.rs: EventKind::PiSessionEnded + EventData variant + Subscription + added to PLUGIN_HOOK_EVENT_KINDS so plugin hooks fire on it - app/api/plugins/context.rs: exhaustive-match arm for the new variant - pi_sessions.rs (new): isolated watcher — scans ~/.pi/agent/sessions/, rate-limited (~60s), emits for files whose mtime is stale (>120s) and not yet announced. In-memory dedup (idempotent ingestion covers restart re-emit) - server/headless.rs: watcher field + poll() in scheduled-tasks loop - app/api.rs: emit_event widened pub(super)->pub(crate) so headless can emit - Cargo.toml: filetime dev-dep for watcher mtime tests Watcher is fully unit-tested (emits-then-dedups, ignores still-growing sessions, parses header + stopReason + line count). No local cargo build done — CI builds this. Part of the chef-pi-eval integration (see OnlineChefGroep/chef-pi-eval). * style: rustfmt (module order, line wrapping) for CI formatting gate * build: add filetime dev-dependency + minimal Cargo.lock update cargo add filetime@0.2 --dev — only filetime v0.2.29 added to the lock (no semver churn). Required by pi_sessions watcher tests for backdating mtimes. Fixes CI --locked check. * fix(compile): EventData variant, Subscription arm, test-ctor field, path deref Address cargo check errors caught by CI: - events.rs: add EventData::PiSessionEnded variant (earlier edit missed the enum) - subscriptions.rs: add PiSessionEnded arm to ActiveSubscription::new (Event sub) - headless.rs: add pi_session_watcher to test ctor - pi_sessions.rs: explicit path.as_ref() deref in poll() * fix(compile): sort_by ref, doc-comment on array elem, Option<String> in context Final fixes for CI cargo check (verified locally: check+fmt+clippy all clean): - pi_sessions.rs: candidates.sort_by closure needs &b.0 (double-ref from slice) - events.rs: PLUGIN_HOOK_EVENT_KINDS array elem can't carry /// doc comment → // - context.rs: workspace_cwd is Option<String>, wrap cwd.clone() in Some(..) * fix: regenerate schema artifact + isolate pi_sessions tests from env - docs/next/api/herdr-api.schema.json: regenerate (+175 lines) so the generated_protocol_schema_artifact_is_current test passes with the new PiSessionEnded EventKind/EventData/Subscription variants (run with HERDR_UPDATE_API_SCHEMA=1). - pi_sessions tests: stop using std::env::set_var(SESSIONS_DIR_ENV), which races under parallel test execution. Add PiSessionWatcher::for_root(root) (pinned root, cfg(test)) and switch the two watcher tests to it. Verified locally: 3/3 pi_sessions tests pass in parallel, schema test ok, fmt clean, clippy 0 warnings. * fix(review): drop cwd filter from PiSessionEnded subscription CodeRabbit (review ce3a7d2): the Subscription::PiSessionEnded variant accepted a cwd filter that ActiveSubscription::new silently discarded — a caller subscribing with cwd would still receive every session-end event. The ActiveEventSubscription path polls the EventHub by kind+sequence and has no per-subscription payload filter; none of the other fleet-lifecycle event subscriptions (WorkspaceCreated/Updated/...) take filter fields either. Drop cwd from the Subscription variant for consistency and honesty. The event payload (EventData::PiSessionEnded) still carries cwd, so subscribers filter client-side. Regenerates herdr-api.schema.json. Schema/pi_sessions tests pass, fmt+clippy clean. --------- Co-authored-by: OnlineChef <280567955+OnlineChef@users.noreply.github.com>
The repo's default branch is main, but update-latest-json checked out and pushed to master — failing every release since the rename (0.7.5's release.yml failed here). Fix both the checkout ref and the push target.
… pkg) setup-node cache:'npm' looked for a lock file in the workspace root, but the npm package lives in npm/ and ships no lock file (it has no deps to install — only publishes). Drop the cache option so publish stops failing on 'Dependencies lock file is not found'.
The release job's 'Create release' step used an exact path (herdr-linux-x86_64/herdr-linux-x86_64) that download-artifact v8's runner layout didn't match — every release since 0.7.4 published with 0 assets, which then blocked publish-distribution's verify-assets gate (npm stayed stuck at 0.7.3). 0.7.6 was unblocked by manually attaching the built binary; switch to a herdr-linux-x86_64/** glob + a debug find step so future releases attach the binary automatically.
…ependencies-076b6e020f chore(deps): bump the cargo-dependencies group across 1 directory with 16 updates
…repaints fix: preserve kitty graphics during host repaints
Bumps the github-actions group with 8 updates: | Package | From | To | | --- | --- | --- | | [actions/checkout](https://github.com/actions/checkout) | `4` | `7` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4` | `7` | | [taiki-e/install-action](https://github.com/taiki-e/install-action) | `2.81.9` | `2.85.4` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `4` | `8` | | [softprops/action-gh-release](https://github.com/softprops/action-gh-release) | `3.0.0` | `3.0.2` | | [cachix/install-nix-action](https://github.com/cachix/install-nix-action) | `31.10.6` | `31.11.0` | | [actions/setup-node](https://github.com/actions/setup-node) | `4` | `7` | | [actions/cache](https://github.com/actions/cache) | `4.3.0` | `6.1.0` | Updates `actions/checkout` from 4 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Commits](actions/checkout@v4...v7) Updates `actions/upload-artifact` from 4 to 7 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v7) Updates `taiki-e/install-action` from 2.81.9 to 2.85.4 - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](taiki-e/install-action@fd2f5e3...065d6a0) Updates `actions/download-artifact` from 4 to 8 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v4...v8) Updates `softprops/action-gh-release` from 3.0.0 to 3.0.2 - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](softprops/action-gh-release@b430933...3d0d988) Updates `cachix/install-nix-action` from 31.10.6 to 31.11.0 - [Release notes](https://github.com/cachix/install-nix-action/releases) - [Changelog](https://github.com/cachix/install-nix-action/blob/master/RELEASE.md) - [Commits](cachix/install-nix-action@8aa0397...630ae54) Updates `actions/setup-node` from 4 to 7 - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@v4...v7) Updates `actions/cache` from 4.3.0 to 6.1.0 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@0057852...55cc834) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: taiki-e/install-action dependency-version: 2.85.4 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: softprops/action-gh-release dependency-version: 3.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: cachix/install-nix-action dependency-version: 31.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/setup-node dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/cache dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Add setup script for interactive testing environments Created a `setup.sh` script to automate the installation of dependencies like Rust, Zig, Just, Cargo Nextest, Bun, and system packages required for compiling GUI/terminal applications. The script intelligently parses project files to determine correct toolchain versions and falls back gracefully. It also configures required environment variables for the libghostty-vt build and runs a pre-emptive cargo build to cache dependencies. Co-authored-by: SheeshChefWanted <229956527+SheeshChefWanted@users.noreply.github.com> * Add setup script for interactive testing environments Created a `setup.sh` script to automate the installation of dependencies like Rust, Zig, Just, Cargo Nextest, Bun, and system packages required for compiling GUI/terminal applications. The script intelligently parses project files to determine correct toolchain versions and falls back gracefully. It also configures required environment variables for the libghostty-vt build and runs a pre-emptive cargo build to cache dependencies. Co-authored-by: SheeshChefWanted <229956527+SheeshChefWanted@users.noreply.github.com> * Add setup script for interactive testing environments Created a `setup.sh` script to automate the installation of dependencies like Rust, Zig, Just, Cargo Nextest, Bun, and system packages required for compiling GUI/terminal applications. The script intelligently parses project files to determine correct toolchain versions and falls back gracefully. It also configures required environment variables for the libghostty-vt build and runs a pre-emptive cargo build to cache dependencies. Also fixed a failing test in src/update.rs that mistakenly expected 1 asset length instead of 4. Co-authored-by: SheeshChefWanted <229956527+SheeshChefWanted@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: SheeshChefWanted <229956527+SheeshChefWanted@users.noreply.github.com>
* chore(cursor): restore cloud env standards and full verify e2e Bring back environment.json + cloud-install (release binary, npm, catalog), Cursor artifact fetch/index hooks, and a quiet verify-herdr e2e covering the full feature map for Cloud Agents. Co-authored-by: navarrocorbi-prog <navarrocorbi-prog@users.noreply.github.com> * feat(verify-herdr): mouse settings drive, CLI extras, sandbox stub Document mouse-first settings/modals and pane splits, add TUI checklist with artifact --verify, extend CLI e2e with config/api snapshot, and stub future HERDR_VERIFY_SANDBOX isolation. Co-authored-by: navarrocorbi-prog <navarrocorbi-prog@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: navarrocorbi-prog <navarrocorbi-prog@users.noreply.github.com>
) * test(ci): cover portable release toolchain wrappers in quality gate Add maintenance coverage for the Linux aarch64-musl Zig wrappers and wire the module into both just maintenance and the CI unittest list. Scope extraction to the Install build tools on Linux step so decoy wrappers elsewhere cannot poison assertions. refs #81 Co-authored-by: navarrocorbi-prog <navarrocorbi-prog@users.noreply.github.com> * fix: replace deprecated ratatui Cell::set_skip with set_diff_option ratatui 0.30 deprecated set_skip in favor of set_diff_option(CellDiffOption::Skip); -D warnings turns this into a hard compile error on the Windows lint and release smoke lanes (pre-existing on main, surfaced by any non-docs CI run). * test(ci): address CodeRabbit findings in wrapper test - bound all subprocess.run calls with a 10s timeout - share wrapper/fake-zig/subprocess setup through _run_wrapper - keep bash resolvable (PATH=/usr/bin:/bin) in the missing-zig test so the wrapper body reaches exec zig's failure path --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: navarrocorbi-prog <navarrocorbi-prog@users.noreply.github.com> Co-authored-by: OnlineChef <280567955+OnlineChef@users.noreply.github.com>
* feat(cursor): add maintain-herdr fork ops project skill Playbook for PR autopilot, rebase/conflict resolution, draft triage, quality-gate handling and fork hygiene on OnlineChefGroep/herdr. refs #87 * docs(cursor): document fork remote setup before rebase playbook refs #87 Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com> --------- Co-authored-by: GroepChef <info@chefgroep.nl> Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
…#1) * chore(releases): cut npm, Homebrew, and manifests to GroepOnline Point product_config, publish-distribution, and packaging at GroepOnline/homebrew-tap with groeponline-herdr formula; rename npm package to groeponline-herdr; retarget pr-gate reusable workflow. * test: align release fixtures with GroepOnline product_config * fix(test): widen agent-hook socket accept window under CI load Cold nextest runs after a long compile often start python3 hook clients after the old 700ms accept deadline, falsely failing session-identity coverage on GroepOnline cutover CI. * fix(test): harden agent-hook session reporting under CI load Wait for the hook child before closing the accept window, retry Unix connects in claude/codex hooks, bump integration versions, and finish npm install hint/README cutover to groeponline-herdr. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: OnlineChef <280567955+OnlineChef@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Document the complete version management approach: version identity, release channels, stable release process, package publishing, manifest files. refs #1
Update all OnlineChefGroep/onlinechefgroep references across docs, CI, skills, agents, and config to GroepOnline to match the canonical org. refs #1
* release: stage v0.7.7 metadata preparation * release: validate and retire v0.7.7 preparation * release: allow registry resolution for lockfile bump * release: separate pending source version from published manifest * release: include pending-manifest invariant in candidate * release: v0.7.7 * fix: restrict semver parsing to ascii digits Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com> --------- Co-authored-by: OnlineChef <chefadmin@chefgroep.online> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
Co-authored-by: Ubuntu <ubuntu@ip-172-31-252-234.ca-west-1.compute.internal> Co-authored-by: Can Celik <ogulcancelik@gmail.com>
PR Summary by QodoCopy mode: add big-word motions (W/B/E) and document behavior
AI Description
Diagram
High-Level Assessment
Files changed (3)
|
| #[cfg(windows)] | ||
| mod windows_recent_fallback; | ||
|
|
There was a problem hiding this comment.
1. #[cfg(windows)] in terminal.rs 📜 Skill insight ⌂ Architecture
src/pane/terminal.rs contains Windows-specific conditional compilation outside src/platform/.
This violates the platform code placement rule and risks further OS-specific logic spreading into
core modules.
Details
Agent Prompt
```
## Issue description
src/pane/terminal.rs includes Windows-specific code gated by `#[cfg(windows)]`, but compliance requires platform-specific code to live under `src/platform/`.
## Issue Context
This file currently declares a Windows-only module (windows_recent_fallback) directly under src/pane/, which violates the platform-code containment requirement.
## Fix Focus Areas
- src/pane/terminal.rs[19-21]
```
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| ## Copy mode | ||
|
|
||
| Press `prefix+[` to enter copy mode for the focused pane. Use `h/j/k/l`, tmux-style `w/b/e`, `{`/`}`, `PageUp`/`PageDown`, `ctrl+b`/`ctrl+f`, and `ctrl+u`/`ctrl+d` to move. Press `/` or `?` for forward or backward literal search, then `n` or `N` to repeat in the same or opposite direction. Search is case-insensitive unless the query contains an uppercase letter. Use `v` or Space to start a selection, `y` or Enter to copy it, and `q` or Esc to leave without copying. Esc clears an active selection or search before exiting. Copy mode does not pause the pane process: output remains live, follows at the bottom, and stays pinned when you navigate into history. The configured prefix keeps its normal meaning in copy mode; with the default prefix, `ctrl+b` enters prefix mode instead of paging up, so use a different prefix if you want `ctrl+b` for copy-mode page-up. Mouse drag-select copies without entering copy mode at all. |
There was a problem hiding this comment.
2. Stable keyboard.mdx added 📜 Skill insight § Compliance
New keyboard documentation (including copy-mode/big-word behavior) was added under the stable docs
tree website/src/content/docs/. Unreleased feature docs must live only under docs/next/ and not
in the stable website docs.
Details
Agent Prompt
```
## Issue description
Documentation describing new/unreleased behavior was added to the stable docs tree (website/src/content/docs/). Unreleased work must be documented only in `docs/next/`.
## Issue Context
This PR already adds the keyboard doc under docs/next/website/...; the stable website/... copy should not be introduced for unreleased changes.
## Fix Focus Areas
- website/src/content/docs/keyboard.mdx[65-67]
```
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| <a href="https://herdr.chefgroep.nl">Website</a> · | ||
| <a href="https://herdr.chefgroep.nl/docs/quick-start/">Quick start</a> · | ||
| <a href="https://herdr.chefgroep.nl/docs/integrations/">Integrations</a> · | ||
| <a href="https://herdr.chefgroep.nl/docs/configuration/">Configuration</a> · |
There was a problem hiding this comment.
3. Readme changed without request 📘 Rule violation § Compliance
README.md is modified in this PR, but normal feature/fix branches must not change root README
unless explicitly requested/declared for the work item. This can create unreviewed docs/metadata
drift unrelated to the feature port.
Details
Agent Prompt
```
## Issue description
This PR modifies README.md, but the compliance rule requires such edits to be explicitly part of the task request.
## Issue Context
If the README update is intentional for this work item, it must be explicitly called out; otherwise it should be reverted/split into a dedicated docs PR.
## Fix Focus Areas
- README.md[8-11]
```
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| # Changelog | ||
|
|
||
| ## Unreleased | ||
|
|
There was a problem hiding this comment.
4. Root changelog modified 📜 Skill insight ⚙ Maintainability
CHANGELOG.md has been modified (cleared) as part of this PR, but unreleased feature work must not
touch the root changelog. Changelog updates for unreleased work should be kept under docs/next/ or
deferred to the release process.
Details
Agent Prompt
```
## Issue description
This PR changes the root CHANGELOG.md, which is disallowed for unreleased feature work.
## Issue Context
Keep unreleased documentation/changelog material under docs/next/ (or omit until release), and avoid altering the stable root changelog in feature PRs.
## Fix Focus Areas
- CHANGELOG.md[1-4]
```
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| let limit = self | ||
| .pane_scroll_metrics(terminal_runtimes, pane_id) | ||
| .map(|metrics| metrics.max_offset_from_bottom + metrics.viewport_rows) | ||
| .unwrap_or(pane_height as usize) | ||
| .clamp(1, 1000); | ||
|
|
||
| for _ in 0..limit { | ||
| let before = self.copy_mode.as_ref().map(|copy_mode| { | ||
| ( | ||
| copy_mode.cursor_row, | ||
| copy_mode.cursor_col, | ||
| copy_mode.selection, | ||
| ) | ||
| }); | ||
| let before_offset = self |
There was a problem hiding this comment.
5. Paragraph motion clamped to 1000-row scan limit 🐞 Bug ≡ Correctness
copy_mode_paragraph() clamps its scan limit to at most 1000 rows via .clamp(1, 1000), so {/}
paragraph motion silently stops before reaching an actual blank-line boundary in panes with more
than 1000 rows of scrollback/viewport. The user gets no feedback that the search was truncated; the
cursor just stops mid-buffer as if a boundary was found.
Agent Prompt
## Issue description
copy_mode_paragraph()'s scan loop limit is clamped to a maximum of 1000 rows regardless of how large the pane's actual scrollback is, so `{`/`}` paragraph motions can silently stop before reaching a real paragraph boundary in large scrollback buffers, with no indication to the user that the search was truncated.
## Issue Context
The limit is computed from `pane_scroll_metrics(...).max_offset_from_bottom + viewport_rows` and then hard-clamped with `.clamp(1, 1000)`. For scrollback buffers larger than ~1000 rows, this cap prevents `copy_mode_paragraph` from scanning the full buffer.
## Fix Focus Areas
- src/app/input/copy_mode.rs[693-707]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
Ports upstream feature copy-mode big-word motions from
ogulcancelik/herdrinto the GroepOnline fork, as part of the incremental upstream-sync campaign (one feature per PR, stacked).fd0e4ff4(feat(copy-mode): add big-word motions (#2270))origin/main(no conflicts).src/app/input/copy_mode.rs,src/pane/terminal.rs,docs/next/website/src/content/docs/keyboard.mdx.Verification: CI (notify-first, no local Rust build on laptop) will confirm build + tests. This is a mechanical port of an upstream feature; no fork-specific behavior change.
Stack: this is PR 1 of N in the upstream v0.8.0 feature sync.