The diff viewer learned to talk back. Selecting lines in a file now raises a SelectionCommentPopover, and the comment goes to the right place — diffCommentTarget works out which file and line range the selection actually maps to, which was the part I got wrong first. Sending is gated behind a confirm step with a DiffCommentSnackbar for the result, so a stray selection doesn’t fire a comment at a PR.

Alongside that, the diff picked up a scope for the current branch. defaultBranchRef resolves what to diff against — including the case where origin/HEAD isn’t set, which broke the first version — and branchDiffBase turns that into a base commit, so I can look at a whole branch’s changes rather than just one session’s.

Backlog runs became harness-aware: preparePhaseSession picks the launcher for the configured harness rather than assuming Claude, with assertCodexResumeSupported refusing the combinations Codex can’t do. The Codex hook itself moved to the schema Codex actually supports, which is less exciting but explains why the previous one silently did nothing.

The rest was cleanup that had been nagging. PR comments now cache under ~/.assist instead of next to the repo, ensureStoryBranch resolves through linkedWorktree so a story branch survives a worktree run, the Activity section reveals commits past its display cap instead of quietly truncating, and deleted clones stop appearing in the repo list.