Repository navigation
fix(web): keep earlier PR selections and findings in the composer - #25136
juliusmarminge wants to merge 5 commits into
Conversation
…one (#24960) Each pull request handoff into an existing composer replaced the last handoff's text and chips. Handoffs now append their text and chips, dedupe chips by id so the PR reference appears once, and skip only an ask that is already in the composer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Appending every handoff kept an Ask or Explain chip's "do not change any code" instructions under a later Fix, dropped Explain's instructions after a selection (same chip id), and dropped a second repository's PR #42 because context ids named only the number. Selection and finding handoffs now mark themselves as appending and extend the previous handoff only when it appended too; any other handoff replaces the previous handoff's text and chips, as before. The replaced text is tracked as the tail the store actually wrote, chip references included. Context, selection and finding ids include the pull request URL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#24960) After a reload the composer forgets what the last handoff wrote, so adding another selection dropped the earlier chip. Infer from the persisted chips whether the last handoff piled up. A finding handed again now carries the host's latest comments, and fixing the same findings twice no longer repeats their instructions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Really would like to see this get merged, would make reviewing stacked PRs possible! |
Squash of upstream pingdotgg#25136 at bd24a99, unmerged and a draft when taken. It fixes upstream issue 24960. Drop this commit when rebasing onto an upstream that contains pingdotgg#25136 or an equivalent fix. If the PR changes first, squash it again from its new head. One change beyond the PR: export FixFindingsHandoff. The PR's test imports it, and upstream removed the export in 67661cf after the PR branched. Co-authored-by: Julius Marminge <julius0216@outlook.com>
|
Note Generated by claude-opus-5-5 This can be closed: it's already fixed on The attached script runs a focused test for each behavior this PR describes (stacked selections and findings, two repos with the same PR number, a draft restored after reload, re-fixing a finding with new replies, a second request on one selection) against current To reproduce, run
Result |
Problem
Adding a second PR code selection or review finding to an existing composer removed the first attachment. An untouched handoff could also lose its request text, and repeated additions duplicated the PR reference.
Change
Accumulate selection and finding handoffs in the existing draft, including restored drafts. Scope attachment IDs to the PR URL, refresh repeated findings with their latest content, and keep repeated requests and PR references single. Both PR entry points use the same composer-store write; Ask, Explain and other replacing actions retain their existing behavior.
Scope and approval
Fixes #24960
GitCafe: #24960
Triaged bug via the automated issue flow.
Verification
vp run check:changed: format, lint, affected-package typecheck, web knip and focused tests pass. The scripts knip phase reports the unrelated main-branch dependencyagent-deviceinscripts/package.json; left untouched.Evidence gate remains pending: the recordings demonstrate the bug and earlier fix, but the full matrix has not been recaptured at the final head. Both final code reviews returned MERGE. Proof audit pass 2 returned INSUFFICIENT for final-head I1–I10 and I12, including post-reload addition, repeat suppression, refreshed finding payload, reverse states and settled captures. This draft is not ready for the bugfix gate.
Evidence index · Coverage report · Fixture matrix
Real web app in T3 preview, desktop UA; requested CSS 1440×900 / 390×844, DPR 2. Audit found desktop exports at 1280×800, default font scaling, light/dark. Sanitized findings enter the existing activity query atom; real panel controls and composer handle every action. The host PR was read-only. Driver, fixture, state transcript and diff generator are uploaded in the index; none is committed.
The following are diagnostic captures, not a clean visual regression proof. Baseline is
e3592efe7f; desktop after is the earlier058d0be387; narrow light after is finalbd24a99a27; narrow dark was captured during integration and its exact dirty snapshot is unavailable.e3592efe7f)Recordings: start with the user sentinel, add A25, then B26; for findings, Fix T1 then T2, and mix a selection with a finding. Each recording contains the corresponding sequence. Desktop pairs below use baseline
e3592efe7fand earlier after058d0be387.Final narrow B retry: after390lightBVideo.mp4; final reload readback: afterReloadVideo.mp4.
What else changed in captures: live PR metadata/diff changed, baseline precedes the main merge, and narrow frames contain notification/reconnect transients. Full-frame pixel diffs therefore cannot establish that unrelated rendering stayed unchanged. Narrow stills fail the clean settled-frame requirement.
Unverified: final-head repeats and edited-finding payload; remove/re-add interaction; complete fresh-draft and global PR routes; optional guide flow; final narrow findings in both themes; exact-final-head desktop matrix. Reload readback preserved both chips, but adding a new selection after reload was proven by the regression test rather than a final recording. No provider turn was sent. CI and the evidence gate are returned to the dispatcher; no
bugfixlabel was added.Models: GPT-6.1-sol (Codex harness) and Claude Opus 5.5 (Claude Code harness), orchestrated through T3 Code.