The exact-bounds rewrite matched reverted PR #5812; the ±context expansion
(1 leading + 3 trailing line) around explicit selectors is intended behavior
so edit anchors at range boundaries stay fresh.
- tools.test.ts still asserted the pre-#5812 ±context expansion for offset/
limit and archive-entry reads; updated to the exact-bounds contract.
- selector-controller-logout.test.ts mocked the old modelRegistry.refresh;
#5786 switched logout to a provider-scoped refreshProvider(id, 'online'),
so the mock never resolved and the test timed out.
- Shift+Enter on a tree entry forks with a branch summary directly, skipping
the summary prompt and ignoring the branchSummary.enabled gate.
- Plain Enter keeps existing behavior: direct switch, with the summary prompt
only for users who enabled branchSummary.enabled.
- Updated the selector help line and added controller-level regression tests.
Fixes#5152
Rebased the committed-row seam when multiplexer reflow exposes native scrollback inside an enlarged viewport.
Added production transcript coverage for a finalized prefix above a live response and verified no ED3 is emitted.
Fixes#6011
Main renamed/refactored #tryShakeRescueForDeadEnd + #emitShakeRescueNotice into
the tiered #rescueCompactionDeadEnd (elide, then image drop, notices emitted
internally), so a textually-clean merge of this branch left calls to undefined
private methods. Re-express the !preparation rescue through the new API:
progress = prepareCompaction succeeding on the rewritten branch, skipElide when
falling through from a shake pass (the image tier still gets a chance), and
historyRewritten flagged whenever a tier freed content even without progress.
Restore the baseline dead-end remedy text (image drop is automated now, so the
manual /shake images suggestion is stale) and align the rescue-refit regression
test with main's continuation gating (auto-continue after compaction now
requires an active goal or queued work).
The v10 model cache never persists request headers (#5780). The registry's
startup cache readers (#loadCachedStandardProviderModels /
#loadCachedDiscoverableModels) read cache.models directly, so cached rows
replaced bundled models (github-copilot, kimi-code, nanogpt) with header-less
copies for the cache TTL after every restart. Restore bundled static headers,
drop unrestorable rows so bundled fallbacks win the merge, and mark
discoverable providers stale when header-bearing models were excluded.
refreshProvider's #reloadStaticModels could also evict models discovered by
other runtime providers; re-merge them from cache with online-if-uncached.
SettingsSelector dispatches schema settings by full path (terminal.showImages),
so the showImages case never fired from the /settings flow. Add the full-path
case label and cover both ids in the side-effect test.
When the active js-debug child exits or terminates while other tree
sessions remain alive, #activeSessionId pointed at the dead child and
every subsequent tool action failed. Reassign to a live tree session
(preferring stopped, then non-root) on exited/terminated/proc-exit.
Regression test proves threads route to the surviving session.
rev-parse --git-common-dir resolves symlinks while ensureIsolation derives
sourceCommonDir lexically from the session cwd (resolveRepository walks
path.resolve'd components). On any symlinked repo path (macOS /tmp,
symlinked project dirs) the lexical comparison missed, detachGitDir
returned "independent", and the parent-mutation leak silently survived.
Realpath both sides before comparing; regression test drives the gate
through a symlink alias.
- Match the rcopy worktree-add registration via realpath: git canonicalizes
the admin gitdir back-reference (macOS /var -> /private/var), so the
lexical comparison missed it and left a stale registration in the source
repo's worktree list.
- Carry core.fileMode so an explicit filemode=false source does not read as
mode-changed files in the detached isolation.
- Carry core.splitIndex and the sharedindex.* files referenced by a split
source index; restoring the raw index without them broke every git read.
- Carry the source shallow boundary file so history traversal over the
borrowed object DB stops at the boundary instead of failing.
- Regression test covering all three carries.