chore: update feat/code-review-menus#90
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Claude plan markdown files (~/.claude/plans/*.md) are planning scaffolding, not real project edits, but were showing up in the thread changes list on both desktop and mobile. Add a shared PlanLogic.isPlanFilePath(_:) predicate (reused by the existing isPlanFileWrite) and filter these out at the two display consumers: threadFileEdits(in:) for the desktop "This Thread" view and handleMobileThreadChangesRequest for the mobile "View Changes" sheet. Filtering at the consumers rather than fetchFileEdits avoids orphaning rows in the rename/delete migration paths that also use that fetch. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render user message bubbles through the markdown renderer (new rxCodeChatUser style tuned for the accent bubble), rewriting [ImageN] chips into rxcode-image:// links so taps still open the image preview, and preserving long-message collapse via height clipping. Also parse table cell contents as inline markdown so bold/code/links/italics render instead of showing literal syntax. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… settle A tall card (Edit diff, Bash output) that lays out in one frame grows the content height while the throttled/async scroll-to-bottom is still pending, leaving distanceFromBottom huge. A non-user-driven stable geometry frame in that window would recompute isNearBottom to false even though the user never scrolled, causing the pending auto-scroll to bail and stranding the view above the bottom. Gate the un-stick recompute in MessageListScrollAnchor.apply on a new isUserDriven flag so only a genuine user scroll releases the anchor; layout settles keep it sticky. Preserves the "only follow the bottom while at the bottom" semantics. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
saveSession rebuilt the ChatSession without carrying over parentThreadId, threadLabel, and skipHooks. When a [Code Review] child thread finished streaming, the re-save overwrote both the in-memory summary and the persisted row with linkage-less values, un-nesting the review from its parent. With zero children, the sidebar disclosure control returned nil and disappeared (and stayed gone across reloads since the store row was overwritten too). Carry the linkage fields through in saveSession so a finished review keeps its parent link and the collapse control remains. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ect, and thread
Add a manual "Code Review" action that spawns a [Code Review] thread, mirroring
the built-in Code Review hook but user-triggered. Two host functions in
AppState+CodeReview: branch-level review grounds the reviewer in the branch
briefing + thread summaries; thread-level review nests under a thread and reviews
its changed files.
Surfaces:
- macOS: briefing card menu, project sidebar menu ("Code Review for Current
Branch"), and per-thread row context menu.
- iOS/Android: briefing detail + project menus (branch) and per-thread menus.
Mobile relays via two new desktop-mediated autopilot ops
(projectCreateCodeReview / threadCreateCodeReview) with AutopilotThreadBody and
AutopilotCodeReviewResult; the Mac runs the review and returns the new thread id
so the phone can navigate to it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render a small status dot on each briefing thread row reflecting the latest code-review verdict for the session: green (statusSuccess) when passed, red (statusError) when issues were found, none when not reviewed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Surface the per-thread Code Review action inside the open conversation on mobile, not just the thread list: - iOS: new "Code Review" item in the chat thread-actions menu; spawns a [Code Review] thread for the current thread and deep-links to it once synced. - Android: matching "Code Review" item in the ChatScreen overflow menu; creates the review thread and navigates to it via selectSession. Also refine the macOS thread-row item label to "Code Review for this thread". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the floating chevron+count badge that sat in the left margin and
knocked parent cards out of alignment with an attached, full-width
disclosure bar beneath the parent ("N Code Reviews" + rotating chevron).
All top-level cards now share the same leading edge, and expanded reviews
get a connecting vertical rail tying them to their parent.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Code-review threads were appearing as briefing threads on macOS, iOS, and Android. Exclude them at the root so all surfaces stay clean: - Skip writing thread/title summaries for [Code Review] threads in storeThreadSummaryTitle and updateStoredThreadSummary, so review threads never enter the briefing dataset or branch-briefing text. - Add ThreadStore.codeReviewThreadIds(label:) to identify review threads by their persisted threadLabel, filtering in memory to avoid SwiftData optional #Predicate pitfalls. - Filter already-persisted review summaries out of BriefingView and the mobile snapshot (mobileThreadSummaries), which feeds iOS/Android. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Code Review hook re-prompted the original thread on both an explicit reviewer FAIL and an "unknown" verdict (a reply with no REVIEW_RESULT: marker). A manually cancelled review thread produces exactly that markerless reply, so it was mistaken for "reviewer wants changes" and kicked off an unwanted auto-retry fix turn. Split the cases: only an explicit FAIL re-prompts (bounded by maxReviewRounds). An unknown verdict now records not-passed and finishes the card without re-prompting, so a cancelled or interrupted review never auto-retries. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- the Commit & Push hook injects a synthetic commit prompt as a user message, which leaked into thread summaries and extracted memories - capture the commitPush setup-session marker before the after-stop dispatch consumes it, and skip summary/memory updates for that turn Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
b314854 to
149ff70
Compare
c466199 made the scroll anchor stay sticky through non-user layout settles, so isNearBottom no longer flips false→true during a pinned turn. The pinned-turn integration test asserted that obsolete flicker and broke CI. Rewrite it to assert the new intended behavior: once the streaming turn fills the reserved space, the list keeps following the bottom (the pin releases without stranding the view). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes