Keep image review downloads and external opens distinct - #144
Conversation
|
🤖 Pushed fixture correction ca3c911. The prior hosted failures were the same messages media-review journey in Chromium/WebKit after the synthetic SVG fixture stopped going through the local media proxy; ca3c911 keeps the SVG in-memory but serves it from the existing local proxy middleware, with no remote fetches, real conversation captures, downloaded artifacts, or assertion weakening. Local push hook passed; fresh CI is pending on the new head. PR remains draft. |
Signed-off-by: Zach Marley <zmarley@squareup.com>
Signed-off-by: Zach Marley <zmarley@squareup.com>
ca3c911 to
4ee7c25
Compare
|
🤖 Ready for human review at head |
wesbillman
left a comment
There was a problem hiding this comment.
Pinky here, reviewing on Wes’s behalf.
No blocking findings at 4ee7c25; one non-blocking fixture caller omission noted inline. The shared helpers retain their existing behavior, and the viewer preserves proxy downloads versus HTTPS host/fallback opens.
Hosted CI passed: 2,223 Vitest tests and all Chromium/WebKit journey shards, including all four messages.spec.mjs cases in both engines. CI merge 9222c57 has the same tree as the reviewed head. No local suites or native launches performed. Packaged-native saving/opening remains unvalidated; the PR’s reported dev-desktop check is not package acceptance.
Approval and merge remain with the human reviewers.
| messageId: string; | ||
| initialTime: number; | ||
| restoreFocus?: RefObject<HTMLElement | null>; | ||
| onOpenLink(url: string): boolean; |
There was a problem hiding this comment.
Pinky here, reviewing on Wes’s behalf.
P3 — update the remaining fixture caller. tests/fixtures/dialog-gallery/Scene.tsx:67–76 still mounts MediaReviewViewer without this newly required prop. That fixture is outside tsconfig.json’s include set, so the green typecheck does not cover this omission. Its data-URL source currently hides the external-open action, making this non-blocking rather than a current click failure. Please pass onOpenLink={() => false} there too, keeping the existing caller consistent with the component contract.
wesbillman
left a comment
There was a problem hiding this comment.
Carl, an automated reviewer, commenting via Wes’s GitHub account.
Review clear: no actionable production blocker found. Reviewed head 4ee7c254b33db48bf3a672fb4bc703d374757f82 against base 60ed428b016ea67cfadbff03c56b812990e170a9, including independent image-viewer interaction review.
The shared attachment policy retains proxied downloads and separates direct HTTPS host-opener/browser fallback actions. Checked production wiring, source producers, file/audio helper consumers, gallery selection, unavailable sources and modified-click behavior. The unchanged exact-session surface does not gain a viewer entry point here; expanding that feature is outside this narrow fix.
Validation: read-only source review on Blox; no PR code or tests executed. Exact-head hosted CI passed JavaScript, Rust/tool integration, browser measurements and all four Chromium/WebKit journey shards. Windows native validation was skipped. Direct-HTTPS fallback is asserted at the component layer, not exercised by the image browser fixture. Add a representative browser case as follow-up coverage; no concrete broken interaction was established, and real mounted-component tests already exercise the anchor/handler composition. Packaged-native saving/opening remains unvalidated. The author-reported dev-desktop check is not independent package acceptance.
Non-blocking: the dialog-gallery fixture caller still omits the new required onOpenLink prop, already noted in the existing review. Update that fixture alongside the component contract; this does not block the production wiring.
COMMENTED, not approval. Human/required maintainer approval remains before merge.
…o-player-polish * origin/main: (38 commits) Fix diff content fallback, keyboard scrolling and edit selection (#205) Standardize form controls and field feedback across Buzz (#174) Keep image review downloads and external opens distinct (#144) Verify media review comments (#166) Follow system appearance (#210) Add rich composer formatting and spoiler rendering (#203) feat: show roster-backed channels and managed instances in profiles (#188) Add new direct message flow (#156) Remove Home, start in Messages, and keep Channels enabled (#194) fix: restore avatar presence controls and active-input sensing (#198) Add legacy diff messages with inline and expanded viewing (#202) Edit the latest own message with Up in the existing composer (#192) Add complete reaction toggles to the message menu (#185) feat: add persistent community navigation rail (#191) test: add margin to warm-switch performance gate (#195) Add composer attachments and compatible media preparation (#183) Add reply and copying to the shared message menu (#182) fix: avoid idle workspace re-renders from activity and label churn (#186) feat: add devtools trace capture to web profiling (#180) Add optional channel templates, teams and personal group defaults (#181) ... Signed-off-by: Zach Marley <zmarley@squareup.com>
…-content-compat * origin/main: (38 commits) Fix diff content fallback, keyboard scrolling and edit selection (#205) Standardize form controls and field feedback across Buzz (#174) Keep image review downloads and external opens distinct (#144) Verify media review comments (#166) Follow system appearance (#210) Add rich composer formatting and spoiler rendering (#203) feat: show roster-backed channels and managed instances in profiles (#188) Add new direct message flow (#156) Remove Home, start in Messages, and keep Channels enabled (#194) fix: restore avatar presence controls and active-input sensing (#198) Add legacy diff messages with inline and expanded viewing (#202) Edit the latest own message with Up in the existing composer (#192) Add complete reaction toggles to the message menu (#185) feat: add persistent community navigation rail (#191) test: add margin to warm-switch performance gate (#195) Add composer attachments and compatible media preparation (#183) Add reply and copying to the shared message menu (#182) fix: avoid idle workspace re-renders from activity and label churn (#186) feat: add devtools trace capture to web profiling (#180) Add optional channel templates, teams and personal group defaults (#181) ... Signed-off-by: Zach Marley <zmarley@squareup.com> # Conflicts: # docs/channels.md
…rs-support * origin/main: Add Messages design gallery and tighten message layout (#158) Fix diff content fallback, keyboard scrolling and edit selection (#205) Standardize form controls and field feedback across Buzz (#174) Keep image review downloads and external opens distinct (#144) Verify media review comments (#166) Follow system appearance (#210) Add rich composer formatting and spoiler rendering (#203) feat: show roster-backed channels and managed instances in profiles (#188) Add new direct message flow (#156) Signed-off-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz>
Summary
onOpenLinkplumbing and labels them Open image in browser instead of presenting them as downloads.Linear: https://linear.app/squareup/issue/BOT-1930/view-images-and-galleries
Source-derived risk
Download imagefor relay proxy media and externalOpen image in browserintentionally remain distinct shared-policy cases.ChannelsPage.openLinkcan returnfalsefor ordinary HTTPS by design, so this PR does not claim verified native system-browser external opener behavior. The_blankfallback attributes are established; real browser/package navigation remains pending.Design notes
~/goose artifacts/buzz-design-system-pack/AGENTS.md,DESIGN.md, andcomponents/registry.json;IconButtonis listed with statusproposed.IconButtonand the Phosphor gateway export for the existingArrowSquareOutIcon.tests/fixtures/messages.tsxchanged only as code fixture data.CI root cause and fixture fix
76bd45afailed only inBrowser journeys (chromium, 1/2)andBrowser journeys (webkit, 1/2)fortests/browser/messages.spec.mjs:8.ca3c911keeps the fixture synthetic SVG data in memory and serves it from the existing browser-test local media proxy middleware, preserving the app path under test without fetching remote media or weakening assertions.Tests
bin/pnpm typecheckbin/pnpm exec biome check --error-on-warnings src/bundled/channels/ChannelsPage.tsx src/features/messages/FileAttachment.tsx src/features/messages/ImageReviewStage.tsx src/features/messages/MediaReviewViewer.tsx src/features/messages/attachment-source.ts src/features/messages/MediaReviewViewer.test.tsx src/features/messages/icon-labels.test.tsx tests/fixtures/messages.tsxbin/pnpm exec vitest run src/features/messages/MediaReviewViewer.test.tsx src/features/messages/icon-labels.test.tsx— 2 files, 10 testsbin/pnpm design:checkca3c911: TypeScript plus related Vitest selection — 17 files, 220 tests; design-system guards passed2026-09-23 final verification at head
4ee7c254ee7c254b33db48bf3a672fb4bc703d374757f82: requiredCI requiredpassed, all non-skipped hosted checks passed, and both Chromium/WebKit browser journey shards passed.Windows native validationwas skipped as expected.just scanwas run.2026-09-23 main integration
origin/main60ed428picked up the upstream audio attachment work andFileAttachmenthelper export.attachment-sourcehelper as the single owner, leftFileAttachmentimporting it directly, and changedMessageRowto importisProxySourcefromattachment-sourcewhile preserving the component import fromFileAttachment.2026-09-23 rebase validation
bin/pnpm typecheckbin/pnpm exec biome check --error-on-warnings src/features/messages/FileAttachment.tsx src/features/messages/MessageRow.tsx src/features/messages/attachment-source.ts src/features/messages/ImageReviewStage.tsx src/features/messages/MediaReviewViewer.tsx src/features/messages/MediaReviewViewer.test.tsx src/features/messages/icon-labels.test.tsx src/features/messages/AudioAttachment.tsx tests/fixtures/messages.tsxbin/pnpm exec vitest run src/features/messages/MediaReviewViewer.test.tsx src/features/messages/icon-labels.test.tsx src/features/messages/MessageRow.test.tsx src/features/messages/AudioAttachment.test.tsx— 4 files, 73 testsbin/pnpm design:check4ee7c25: TypeScript plus related Vitest selection — 17 files, 223 tests; design-system guards passed2026-09-23 final review
origin/main/PR Play audio and voice-note attachments #133 helper integration.