Skip to content

sync: copy-mode big-word motions (upstream #2270) - #9

Open
OnlineChef (ChefGroep) wants to merge 1540 commits into
mainfrom
feat/sync-copy-mode-big-word-motions
Open

sync: copy-mode big-word motions (upstream #2270)#9
OnlineChef (ChefGroep) wants to merge 1540 commits into
mainfrom
feat/sync-copy-mode-big-word-motions

Conversation

@ChefGroep

Copy link
Copy Markdown
Contributor

Ports upstream feature copy-mode big-word motions from ogulcancelik/herdr into the GroepOnline fork, as part of the incremental upstream-sync campaign (one feature per PR, stacked).

  • Upstream commit: fd0e4ff4 (feat(copy-mode): add big-word motions (#2270))
  • Cherry-pick applies cleanly on top of origin/main (no conflicts).
  • Files: 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.

Cursor Agent (cursoragent) and others added 30 commits July 22, 2026 18:26
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.
OnlineChef (ChefGroep) and others added 18 commits August 1, 2026 22:42
…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>
@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Copy mode: add big-word motions (W/B/E) and document behavior

✨ Enhancement 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Add tmux-style big-word motions (W/B/E) to copy-mode navigation.
• Extend terminal text scanning to support big-word boundaries across punctuation and rows.
• Document copy-mode movement, search, selection, and copy semantics in keyboard docs.
Diagram

graph TD
  A["App copy-mode input"] --> B["CopyModeState"] --> C["PaneTerminal word scan"] --> D[("Terminal buffer")]
  B --> E["Selection & search"]
  A --> F["Docs: keyboard.mdx"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Implement big-word scanning in copy_mode.rs only
  • ➕ Keeps terminal.rs simpler and limits changes to copy-mode feature code
  • ➕ Avoids expanding terminal-level APIs/enums
  • ➖ Duplicates text-scanning logic already needed for other motions/search
  • ➖ Harder to reuse/keep consistent with terminal text semantics across features
2. Use a Unicode segmentation library for word boundaries
  • ➕ More correct behavior across scripts and edge cases
  • ➕ Potential reuse across search/selection features
  • ➖ Adds dependency and integration complexity
  • ➖ May not match tmux/zellij expectations for 'big word' semantics (whitespace-delimited)

Recommendation: Keep the current approach: define explicit big-word motion variants in the terminal text-scanning layer and invoke them from copy-mode. This centralizes boundary rules, enables consistent behavior across motions/selection, and matches expected tmux-style semantics while remaining dependency-light.

Files changed (3) +112 / -0 · 2 not counted

Enhancement (2)
copy_mode.rsWire copy-mode key handling to support big-word motions not counted

Wire copy-mode key handling to support big-word motions

• Implements/updates copy-mode key dispatch to include big-word navigation commands (W/B/E) alongside existing tmux-style motions and selection/search behaviors. Includes coverage for big-word motion behavior, including punctuation runs and selection extension.

src/app/input/copy_mode.rs

terminal.rsAdd big-word motion support to terminal text navigation not counted

Add big-word motion support to terminal text navigation

• Extends terminal text scanning with explicit big-word motion variants and separator rules to move to next/previous big-word start/end. Ensures motion logic can traverse punctuation and cross row boundaries to support copy-mode navigation and selection extension.

src/pane/terminal.rs

Documentation (1) +112 / -0
keyboard.mdxDocument copy-mode motions, including big-word W/B/E +112/-0

Document copy-mode motions, including big-word W/B/E

• Adds a dedicated keyboard documentation page and describes copy-mode usage, including standard and big-word motions, search behavior, selection/copy keys, and escape semantics. Notes interaction between copy-mode paging and the configured prefix key.

docs/next/website/src/content/docs/keyboard.mdx

Comment thread src/pane/terminal.rs
Comment on lines +19 to +21
#[cfg(windows)]
mod windows_recent_fallback;

@qodo-code-review qodo-code-review Bot Aug 8, 2026

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.

Action required

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

Comment thread website/src/content/docs/keyboard.mdx Outdated
Comment on lines +65 to +67
## 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.

@qodo-code-review qodo-code-review Bot Aug 8, 2026

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.

Remediation recommended

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

Comment thread README.md Outdated
Comment on lines +8 to +11
<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> ·

@qodo-code-review qodo-code-review Bot Aug 8, 2026

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.

Remediation recommended

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

Comment thread CHANGELOG.md
Comment on lines -1 to -4
# Changelog

## Unreleased

@qodo-code-review qodo-code-review Bot Aug 8, 2026

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.

Remediation recommended

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

Comment on lines +693 to +707
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

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.

Informational

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

@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo Fixer

✅ Committed (4) · ☑ Fixed (4)

Grey Divider

Commits pushed directly to this PR — no separate fix PR opened.

Process — 4 fixed
  • ☑ Fixed: #[cfg(windows)] in terminal.rs
  • ☑ Fixed: Stable keyboard.mdx added
  • ☑ Fixed: README changed without request
  • ☑ Fixed: Root CHANGELOG modified

@ChefGroep
OnlineChef (ChefGroep) deleted the feat/sync-copy-mode-big-word-motions branch August 8, 2026 16:07
@MisterWanted
MisterWanted restored the feat/sync-copy-mode-big-word-motions branch September 8, 2026 05:33
@MisterWanted MisterWanted reopened this Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants