Skip to content

Release 0.11.2 - #219

Merged
huhamhire merged 15 commits into
masterfrom
dev
Jul 28, 2026
Merged

Release 0.11.2#219
huhamhire merged 15 commits into
masterfrom
dev

Conversation

@huhamhire

Copy link
Copy Markdown
Owner

Release 0.11.2.

Rolls up everything merged into dev since v0.11.1:

  • feat: stale-review commit divider in the run timeline (persistent boundary, hover shows the commit message)
  • feat: commit-aware planning context for the review agent
  • feat: single-PR refresh (F5 / header button / "Refresh PR" command); auto review moved to Ctrl+F5
  • fix: inline-comment/draft editing no longer interrupted by a refresh
  • fix: inline comment positioning + old-side anchor jump when a narrow diff auto-degrades to unified
  • fix(mac): no more unexpected Apple Music / media-library permission prompt
  • docs(assets): assets README rewritten in English

Version set to 0.11.2; CHANGELOG (EN + ZH) updated. Tagging v0.11.2 on master after merge triggers the release build.

huhamhire and others added 15 commits July 14, 2026 14:40
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The prior fix (6be1c60) gave the inline comment zones a reconcile-in-place
controller, but two gaps remained that still interrupted an open inline
editor on every poll:

1. useDiffComments called setComments() unconditionally, so an unchanged
   poll still produced a fresh comments array. That churned the
   mentionCandidates memo, whose identity change re-ran useDraftZones. Bail
   on structural equality (reuse sameCommentList, now extracted to a shared
   commentEquality module) so an unchanged poll keeps the old reference and
   downstream memos stay stable — mirroring what the activity view already
   does.

2. useDraftZones used the one-shot mountInlineZones, so a real drafts/
   comments change tore down and rebuilt every DraftZone root, dropping an
   open draft editor's edit mode / focus / caret. Give it the same split
   structural/content effect + persistent createInlineZones controller as
   useCommentZones, reconciling draft zones by (side, line) key. A surviving
   draft re-renders in place (DraftZoneList keys by draft id); only a removed
   draft (deleted / published / file switch) unmounts and runs its cancel
   cleanup.

The now-unused one-shot mountInlineZones wrapper is removed. The activity
timeline already bailed via sameCommentList and needs no change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…o-degrade

`renderSideBySide` threaded through the diff view is the toolbar *intent*,
not the mode Monaco actually renders. When the pane is too narrow Monaco
auto-degrades side-by-side → inline (useInlineViewWhenSpaceIsLimited) while
the intent stays true, so old-side (base) items get routed to the original
editor Monaco has hidden. A published old-side inline comment then had no
visible position, and its glyph dot / overview tick vanished too.

Introduce a single source of truth for the *actual* mode
(useActualRenderSideBySide, reading Monaco's `.monaco-diff-editor.side-by-side`
class reactively, the pattern useDiffOverviewMarks already used) and feed it
to every consumer that positions by editor side:

- DiffView passes the actual mode to useCommentZones / useDraftZones /
  useLineCommentAdder / useSelectionCapture (was the raw intent).
- useCommentZones remaps old-side glyph/overview decorations onto the
  modified editor when actually inline (mirroring the zone-body routing in
  computeDesired) — this also fixes old-side markers in explicitly-chosen
  unified, a latent bug.
- useDiffOverviewMarks reuses the shared isActualSideBySide helper.

Also fix old-side anchor reveal, which was broken independently: the nav
anchor dropped `side` (App/PrPanel/PublishReviewModal/notification) and
useDiffNav hardcoded side:'new' with no old→new remap. Thread `side` through
the anchor (incl. the notification:activate IPC event) and, at reveal time,
read the live actual mode: an old-side target reveals on the original editor
only when it is genuinely visible, otherwise remaps the old line onto the
modified editor. The cross-file search jump reuses the same path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…prompt

On macOS the app popped a "would like to access Apple Music, your music and
video activity, and your media library" prompt on launch. It's not from
packaging — no music entitlement and no NSAppleMusicUsageDescription are
declared. It's runtime: Chromium's macOS "Now Playing" / media-session
integration queries the MediaPlayer framework, which triggers the media
library permission. The app plays no media and exposes no now-playing
controls, so the permission is unexpected.

Disable the MediaSessionService and HardwareMediaKeyHandling features (mac
startup, before app.whenReady()) so Chromium never touches the media library.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix: inline comment continuity, unified-mode comment positioning, and macOS media prompt
… advances

When the PR's head commit moves past the commit the most recent agent run
reviewed, the run timeline now shows a sawtooth "commit divider" at the bottom
labelled with the new head's short SHA — signalling that the reviews above are
based on stale code. It appears as soon as the code changes, whether or not a
new run has been started against it, and is suppressed while a run is active
(that run is already processing the current head).

- Stamp the PR head SHA (pr.sourceRef.sha) onto each run at start (ReviewRun.
  headSha, threaded through StartReviewRunInput / startReviewRun / the executor)
  as the baseline to compare the live head against. Runs predating this field
  have no headSha and are not used as a baseline.
- ChatPane derives staleHeadSha (live head vs the latest completed run's
  headSha) and renders a single CommitDivider below the run list.
- CommitDivider is a masked-SVG zigzag rule flanking a commit-id chip (reusing
  the scope-badge chip vocabulary + CommitIcon); theme-aware via a token color.
- i18n: chatPane.commitDividerTitle in all four locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The planning/orchestration agent replays the whole prior conversation into
each turn, which can reference code from before a new commit landed. Give it
soft awareness of that boundary without dropping any history: stamp the PR
head SHA (pr.sourceRef.sha) onto each recorded conversation message, and in
buildConversationContext interleave a "PR code updated to commit X" marker
wherever the head differs between consecutive kept messages, plus a trailing
marker when the current turn's head has advanced past the newest message.

Mirrors the head SHA already stamped on runs (same pr.sourceRef.sha basis as
the UI commit divider), so seeing the divider in the UI corresponds to the
marker in the agent's context. Marker is an internal prompt artifact (English,
no i18n) and, like the rest of the conversation history, is never passed
through to pr-agent tools. Messages predating the field have no headSha and
produce no marker.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(agent): commit divider for stale reviews + commit-aware planning context
Bare F5 used to kick off an auto review, which was easy to trigger by
accident. Rework the PR refresh + shortcuts around a single-PR refresh:

- F5 now refreshes the currently selected PR; Ctrl+F5 runs auto review
  (literal Ctrl on every platform — ⌘F5 collides with macOS VoiceOver;
  formatChord gains a `ctrl` flag so the palette hint shows ⌃ on mac).
- Add a neutral (non-accent) icon refresh button to the right of the PR
  header's "open in browser" button; align-self:stretch matches its height.
- Add a "Refresh PR" command palette entry (shown only when a PR is
  selected), bound to bare F5.

Refresh targets a SINGLE PR, not a whole-poller tick: new prs:refreshOne IPC
+ refreshOnePr controller re-fetch just this PR via getSinglePullRequest,
recompute localStatus from the current user's reviewer status (same rule as
the poll), persist its meta, and invalidateCommentsCache (comments:changed →
comments/inline-diff refetch); if the head sha advanced, best-effort sync the
mirror for the diff. The one network call is this PR's fetch — usePullRequests
.refreshPr then reloads the list locally (no poll of other PRs). The header
button, F5, and the command all wire to it. i18n in all four locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(pr): F5 refreshes the current PR; move auto review to Ctrl+F5
…n hover

Two polish fixes for the run-timeline commit divider:

- The chip's commit icon and short sha were flush and vertically misaligned
  (the chip mixin sets no gap). Add a small gap and make the svg a block so it
  aligns to the sha's line box.
- The hover tooltip showed a generic "code changed" string. Show the new head
  commit's actual message instead (resolved via diff:listCommits — the head is
  the PR's newest introduced commit; main-cached), falling back to the short
  sha. This is more meaningful and removes the chatPane.commitDividerTitle i18n
  key from all four locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The bottom "stale head" divider vanished once a run was executed against the
new commit (head then equalled the last run's headSha, so nothing was
"stale"). Mark every point where the reviewed commit changes instead:

- a divider before a run whose headSha differs from the previous run's — a
  durable boundary between the old-commit runs above and the new-commit runs
  below (so it no longer disappears after reviewing the new code);
- a trailing bottom divider only while the head has advanced past the last
  run and no run against it exists yet (new commit not reviewed, incl. while a
  run is in flight).

Drops the "suppress while a run is active" rule so it never flickers away.
Tooltip messages come from a single sha→message map built from
diff:listCommits, so all dividers resolve their own commit message.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(chat): commit divider polish + persistent boundary
Align assets/README.md with the other developer-facing READMEs (cli / website
/ docs), which are English single-language per the docs conventions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Set the app version to 0.11.2 and record the 0.11.2 changelog (English +
Chinese): the stale-review commit divider, commit-aware planning context,
single-PR refresh (F5 / header button / command) with auto review moved to
Ctrl+F5, plus fixes for inline-comment editing continuity, unified-degrade
comment positioning, and the macOS media-library prompt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@huhamhire
huhamhire merged commit 6f65389 into master Jul 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant