Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions .roadmap/features/f-builtin-terminal.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ the mouse back for a local selection. The copy chord used to fall back to a
cache of the last text copied when no selection was visible, which in a pane
the child owns — never a visible selection — overwrote the child's own copy on
every chord (#316); the cache is gone and the chord asks the terminal whether
it holds a selection, scrolled out of view or not. One contract bug remains on
the surface: the `emitted_lines_never_drift` property has a known failing
scroll sequence whose seed was never committed (#102)
it holds a selection, scrolled out of view or not. The scroll-drift property no
longer carries a known failure. This entry used to call its failing sequence
the one contract bug remaining on the surface (#102). It was f32 noise in the
test's own reference sum, not a scrolling defect, and `b1d8045` had already
fixed it the day after it was filed. The issue closed on 2026-09-24, and its
seed now replays (#328)
11 changes: 11 additions & 0 deletions .wrap.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,3 +362,14 @@ upstream" and moves to the next one. A conflict there is resolved as usual, but
the `--continue` again needs the user's terminal for the signature — plan for
two hand-offs per rebase, not one. Seen rebasing #308 after six merges had
landed under it.

**`markdownlint-cli2`'s summary counts files with findings, not files linted.**
A clean run ends `Summary: 0 issues in 0 files`, which reads as "linted
nothing". Coverage is the line above it, `Linting: N files`. The repo config
adds its own `**/*.md` globs to whatever path you pass, so N is ~100 from the
root or from any worktree. In the #102 pass that line got cut off by a
`tail -1`, the summary was read as a vacuous pass, and a wrong "markdownlint
lints nothing from a worktree" claim went to the user and nearly into this
file. Read the
`Linting:` line, or inject a known violation once. A single long token will not
do, because MD013 skips what cannot wrap: use a long line with spaces.
37 changes: 18 additions & 19 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,36 +298,24 @@ carry is modifiers: the event lost its `modifiers` field in #311 as dead
weight, and it comes back as one type shared with `KeyMods` when a caller
needs it, not before.

**Still open.** Three features and two defects: `F-mcp-agent-loop` (#196 —
below), `F-mcp-attach` (#267 — the bridge is reachable only from a session
termherd spawned, so the launcher itself cannot drive it), the pointer at
termherd's own chrome (#301 — the sidebar, tabs and gutters still have no
mouse), `enter` on the two renames (#246), and a doc editor that discards
unsaved edits when it closes (#248). None of the five blocks another. A third
defect, the copy chord overwriting a mouse-mode program's own clipboard write
with termherd's last copy (#316), is fixed: the shell keeps no copy cache any
more, and asks the terminal whether it holds a selection at all.

`F-mcp-agent-loop` (#196 — the composed prompt→wait→read in one
round trip) is a child of the #90 epic — no longer the last one, since three
siblings joined it. With `screenshot`, the keyboard tools and the terminal
pointer reaching the child, the capability reads as whole in three parts:
drive the UI, see the pixels, read the terminal. #196 *composes* the wait,
which #236 had to fix first — building it on a synchronisation that never
fired would have been building on sand, and that ordering constraint is now
discharged.
**Still open.** Two features and two defects: `F-mcp-attach` (#267 — the bridge
is reachable only from a session termherd spawned, so the launcher itself cannot
drive it), the pointer at termherd's own chrome (#301 — the sidebar, tabs and
gutters still have no mouse), `enter` on the two renames (#246), and a doc editor
that discards unsaved edits when it closes (#248). None of the four blocks another.
The list leaves out the bridge's hardening defects (#284, #293). A third
defect, the copy chord overwriting a mouse-mode program's own clipboard write
with termherd's last copy (#316), is fixed: the shell keeps no copy cache any
more, and asks the terminal whether it holds a selection at all.

**`F-mcp-agent-loop` shipped in #196 (`prompt_in_session`).** It composes
`run_in_session`, `wait_for_status`, and `read_terminal` into a single MCP round
trip, with bounded step-by-step execution and opt-in protection for nested Claude
sessions. `F-mcp-agent-loop` was a child of the #90 epic — with `screenshot`,
the keyboard tools, terminal pointer, and composed agent loop shipped, the live
bridge control surface is complete.
bridge control surface is complete. It could only be built after #236: a
composed wait on a synchronisation that never fired would have settled by
timeout every time.

**Every overlay can now be left from the keyboard** (#237). An open sidebar
session-rename used to swallow every key including `escape`, parking the whole
Expand Down Expand Up @@ -558,6 +546,17 @@ exists). Do not relax them locally.
mid-run (see `.wrap.md`): success and vacuity are indistinguishable from the
outside. Probe with the operation you actually intend to perform, and if that
is destructive, assert on something the operation *must* have changed.
- **A proptest seed file is keyed by the test's source path, so moving the
test orphans it without a word.** proptest's default persistence reads
`proptest-regressions/<path of the .rs file>.txt`, derived from `file!()`.
When the scroll-drift property left `shell/terminal.rs` (for
`shell/terminal/mod.rs`, then `shell/terminal/canvas.rs`), its two committed
seeds stopped replaying from 2026-07-12 to 2026-09-25, and nothing reported
it: an unread seed file gives no signal either way. When a refactor moves a
file holding a `proptest!`, `git mv` its regressions file in the same commit.
The file is test input to CI as well: the `rust` path filter now watches
`proptest-regressions/**`, since the PR that moved it came up green with
`test` and `portable` both skipped.
- **An unfinished check is not a passing check, and reporting it once is not
reading it.** `portable` is the only gate that runs a Windows *behaviour*
before merge, and it takes minutes while every other job takes seconds — so
Expand Down
9 changes: 6 additions & 3 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,9 +259,12 @@ the mouse back for a local selection. The copy chord used to fall back to a
cache of the last text copied when no selection was visible, which in a pane
the child owns — never a visible selection — overwrote the child's own copy on
every chord (#316); the cache is gone and the chord asks the terminal whether
it holds a selection, scrolled out of view or not. One contract bug remains on
the surface: the `emitted_lines_never_drift` property has a known failing
scroll sequence whose seed was never committed (#102)
it holds a selection, scrolled out of view or not. The scroll-drift property no
longer carries a known failure. This entry used to call its failing sequence
the one contract bug remaining on the surface (#102). It was f32 noise in the
test's own reference sum, not a scrolling defect, and `b1d8045` had already
fixed it the day after it was filed. The issue closed on 2026-09-24, and its
seed now replays (#328)

<a id="f-close-confirm-policy"></a>

Expand Down
Loading