- Reveal the selected file again when files arrive or reorder around it,
so a navigation that selects a file before the diff loads still scrolls
the wide pane; a changed filter shows its results from the top.
- Compare quote summaries in draft change detection, so restoring a draft
that only adds or changes a summary updates the snapshot and storage.
- Read the full path and range instead of the short label to assistive
technology; the Web snapshot now records src/<file>.
- Type the stored summary schema against QuoteSummary, test the stored
round trip, and document why revealRow does not use scrollIntoView.
The forge-panel Web snapshot recorded the composer showing the whole
model-facing User Comment reference. The composer now shows the file name,
side and lines, and comment; review-message.expected.md, the text the model
receives, stays unchanged.
A user-rejected approval now records ApprovalError with
APPROVAL_REJECTED on tool/result, so the Auto review e2e asserts that
identity instead of an absent error.
Refs #7869
In unified rows that show both line numbers, the left plus now moves past the right number into the sign column, where the right plus already sits. It paints above that number's padding, the sticky file header stays above it, and a row that shows the labeled plus offers no second hover plus. The labeled plus of a left context line is reachable again, and a deleted line's plus no longer jumps one column.
A drag that starts on a hover plus extends through every row with a line on its starting side, wherever the pointer crosses the row. A press whose range is refused, such as Shift across hunks, keeps the previous selection and no longer opens the editor for it on release.
The README describes the checks mark as the filled head branch end.
Refs #7937
Show a comment plus beside the line number of the hovered diff line. Pressing it selects the line, dragging extends the range on that side, and releasing opens the editor, replacing the separate select and plus clicks for mouse users. Touch and keyboard users keep the existing path through the line number. Two-column code reserves an empty lane for the plus, so the number and the code stay reachable.
Draw the Session row's checks outcome inside the change request glyph as a filled head branch end, smaller and without the ring, so it cannot drift from the glyph's outline.
Refs #7937
The worktree service now records each checkout it creates as a
`plugin:worktree/created` record, folds them in its own `worktree`
projection with fork-aware ownership, and reclaims a clean, unreferenced
checkout when the Session that created it is archived. The Forge panel
reads the service's record and forwards its cleanup state; it no longer
writes a `created` record, owns a retention projection, or gates every
Session's directory access.
Admission registers the attempt inside the Workspace write queue and
returns; inspection runs afterwards, reading cold Sessions through the
projection cache when mounted and from their log otherwise, with subagent
children of an archived ancestor counted as archived. Only a path being
removed holds `working-directory/access`, whose request now carries the
access's `signal`, and listeners withdraw before the drain. Ignored files
no longer retain a checkout, matching Git's non-force removal; processes
and terminals are not consulted.
The Forge bundle mounts one `worktree` service: the `forge-worktree` row
and the `optional-forge-panel` group that isolated a second service are
gone, and `forge-panel` is a top-level row. `canRemove`, `remove`, the
`forgeWorktreeRetention` projection, and `ForgeWorktreeCleanup` are
removed; `WorktreeService.cleanupOf`, `WorktreeCleanup`, and the
`worktree/cleanup` Host event replace them. The upgrade guide moves to
the current version directory and covers the id removals.