Repository navigation
[3339 by GPT-6.1 Sol] Visual evidence Fit frame ignores the image's aspect ratio - #3345
Conversation
…image's aspe Implemented by ProPR AI using gpt-6.1-sol model. Implementation completed successfully.
|
/ultrafix |
|
🔄 Ultrafix loop started (goal: 8/10, max cycles: 10) First action:
|
|
✅ AI Code Review Complete requested by @integry Posted 1 review: |
🔍 AI Code Review — claude:claude-opus-5-5Overall EvaluationThe PR resolves issue #3339. In Fit mode the stage now shrink-wraps the image: One regression needs fixing first. The intrinsic sizing is applied before the image has any size, so the loading and failed states lose their visible frame. Needs minor changes. ✅ Frame follows the capture — ✅ Fixed stage kept where it matters — 100% mode and videos still use ✅ One image tree across zoom modes — Only class names change between Fit and 100%, so toggling zoom still restyles the loaded image instead of fetching it again. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F1: 🔴 Loading and unavailable states collapse in Fit mode
SuggestionsThese are optional follow-ups and are not sent to S1: 🟢 Reduce layout shift below the frameThe removed comment documented an invariant: "one fixed height so switching captures never moves the trace below". The Fit frame now changes height per capture and on every load, so the trace and log header below move. This trade-off follows from the issue, but reserving space would soften it. Once dimensions are known, an S2: 🟢 Small captures stay smallCaptures smaller than the pane (for example a 200×120 dialog crop) now render as a tiny frame at natural size, with no upscaling and no minimum. That is arguably correct for evidence fidelity, but a short note or a deliberate minimum frame width would make the behaviour explicit. Optional design choice. S3: 🟢 Cover the Inbox caller
ScoreThe core fix is correct and well tested for loaded images. However, the intrinsic Fit frame collapses the loading skeleton and the unavailable placeholder, which is a reachable regression for private media; a localized fix is needed. Score: 6/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |
|
✅ Applied the requested follow-up changes in commit 82a7611
Summary of ChangesAddressed F1 only. Fit loading and unavailable placeholders now retain a visible 128×64 minimum frame; loaded images keep their intrinsic aspect ratio. Validation passed: 25 unit tests, 19 browser tests, and focused lint checks. Added regressions for pending fetches, 403/404 responses, network failures, and image-decoding failures. Captured mobile and desktop preview evidence. Visual previewTask mobile collapsed header 390Original unavailable: managed storage is unavailable or the upload has expired. Task mobile collapsed header menu 390Original unavailable: managed storage is unavailable or the upload has expired. Task mobile collapsed long title 390Original unavailable: managed storage is unavailable or the upload has expired. Task visual preview lightbox 1440Original unavailable: managed storage is unavailable or the upload has expired. Task visual preview lightbox 390Original unavailable: managed storage is unavailable or the upload has expired. Task visual preview lightbox zoomed 1440Original unavailable: managed storage is unavailable or the upload has expired. Task visual preview lightbox zoomed 390Original unavailable: managed storage is unavailable or the upload has expired. Task visual previews 1440Original unavailable: managed storage is unavailable or the upload has expired. 🤖 Implementation Details
💡 ProPR Slash Commands
🤖 Generated by ProPR |
… now retain a visible 128×64 minimum frame; loaded images keep their intrinsic aspect ratio. Addressed F1 only. Fit loading and unavailable placeholders now retain a visible 128×64 minimum frame; loaded images keep their intrinsic aspect ratio. Validation passed: 25 unit tests, 19 browser tests, and focused lint checks. Added regressions for pending fetches, 403/404 responses, network failures, and image-decoding failures. Captured mobile and desktop preview evidence. PR: #3345 Comment by: @propr-ultrafix (ID: 0) Model: GPT-6.1 Sol
|
✅ AI Code Review Complete requested by @propr-ultrafix Posted 1 review: |
🔍 AI Code Review — claude:claude-opus-5-5Overall EvaluationThe PR fixes issue #3339. In Fit mode the Visual Evidence stage now sizes to the image instead of using a fixed
The e2e coverage is strong. However, the new layout makes the image fully cover its trigger button, which hides the button's inset keyboard focus ring in Fit mode. That needs a small fix before merge. ✅ Aspect-ratio frame matches the objective — The stage follows the image, and the new e2e cases check frame and image boxes to within 1px. They also check the aspect ratio for 2560×600 and 390×1800 captures in a 372px pane, plus the height and width caps. ✅ Placeholders don't collapse — Spans get minimum sizes from the button rather than the image class, so a loaded image is not forced to 128×64. The 403/404/network/decode × 390/1440 matrix checks the pending and failed states. ✅ 100%/video stage preserved — The fixed-height stage stays for actual-size images and videos, and the e2e now asserts the 440/320 height directly rather than comparing it to the Fit box. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F2: 🔴 Fit-mode trigger loses its visible focus indicator
SuggestionsThese are optional follow-ups and are not sent to S4: 🟢 Negated multi-class assertions are weakIn S5: 🟢 Switching captures now shifts the trace belowThe old fixed stage height was deliberately chosen so that switching captures never moved the content below. Now a loading placeholder (64px tall) grows to as much as 440px when the image loads. The stage also resizes between a wide image, a tall image and a fixed-height video. This follows from the objective, but it may be worth reserving height while an image is loading to reduce layout shift. S6: 🟢 Very small or lazy images before decodeBefore load, a Fit image with ScoreThe objective is implemented well and the new layout tests are thorough. One localized accessibility regression (the hidden Fit-mode focus ring) should be fixed, and Shard 4 and Validate Changes are still pending. Score: 6/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |
|
✅ Applied the requested follow-up changes in commit 23a06d4
Summary of ChangesAddressed F2 only: Fit mode now uses an outset focus ring that stays visible around opaque images. Added keyboard-focus regressions for wide and tall captures; confirmed they failed before the fix and pass afterward. Validation: 19 browser tests and 8 component tests passed. Captured and inspected both focused-state previews. Visual previewFit keyboard focus: wide captureKeyboard focus draws a visible blue outset ring around an opaque 2560×600 capture in a narrow task pane. Original unavailable: managed storage is unavailable or the upload has expired. Fit keyboard focus: tall captureKeyboard focus remains visible around a tall 390×1800 capture in Fit mode. Original unavailable: managed storage is unavailable or the upload has expired. 🤖 Implementation Details
💡 ProPR Slash Commands
🤖 Generated by ProPR |
…hat stays visible around opaque images. Addressed F2 only: Fit mode now uses an outset focus ring that stays visible around opaque images. Added keyboard-focus regressions for wide and tall captures; confirmed they failed before the fix and pass afterward. Validation: 19 browser tests and 8 component tests passed. Captured and inspected both focused-state previews. PR: #3345 Comment by: @propr-ultrafix (ID: 0) Model: GPT-6.1 Sol
|
✅ AI Code Review Complete requested by @propr-ultrafix Posted 1 review: |
🔍 AI Code Review — claude:claude-opus-5-5Overall EvaluationThis PR fixes issue #3339. In Fit mode for images, the viewer now sizes the frame from the image's own dimensions instead of a fixed
The change is small and stays in scope. The browser tests check the issue's exact repro (2560×600 and a tall 390×1800 capture in a 372px pane) as well as the earlier width sweep. All current-head checks pass. I found no blockers; the PR is ready to merge, with a few optional follow-ups below. ✅ Issue repro is asserted geometrically — The new e2e tests in
✅ Placeholder regressions were anticipated — Once the image's own min-size classes were removed, the ✅ Zoom toggling preserves one tree — The stage div, the trigger button and the keyed Merge blockersNo merge blockers. SuggestionsThese are optional follow-ups and are not sent to S7: 🟢 Frame collapses while direct-URL images loadGitHub attachment URLs resolve to S8: 🟢 Negated multi-class assertions are weakIn S9: 🟢 Verify intrinsic sizing in WebKitThe S10: 🟢 Trace now shifts when switching capturesThe old comment promised that switching captures "never moves the trace below." Now each image (and every image↔video switch) changes the section's height. That follows directly from the issue's request, so it is acceptable. If the jump feels disruptive in the task pane, a fixed outer container with the ratio-fitted frame centred inside it would keep both behaviours. ScoreThe change is focused and correctly implements an aspect-ratio-following Fit frame. It has strong geometric e2e coverage of the reported repro and of the placeholder states, and all current-head checks pass. Remaining items are optional polish. Score: 8/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |










AI Implementation Summary
Closes #3339
Branch:
3339/gpt-6.1-sol-visual-evidence-fit-frame-20261024-2038-rtdCommits: ✅ Changes committed (009f76b)
AI Processing Completed
Execution Details:
Summary:
Implemented Fit frames that follow each image’s aspect ratio within the existing size limits. Checkerboard now shows through transparent pixels only.
Verified with 8 component tests, 11 browser tests, TypeScript, and lint. Captured focused previews for wide and tall images.
Detailed Logs:
01a16fa9-c599-7201-8437-ed70c3c44916Log files stored at:
/usr/src/app/logs/executions/issue-3339-2026-10-24T20-48-59-308Z-conversation.json/usr/src/app/logs/executions/issue-3339-2026-10-24T20-48-59-308Z-output.txtLatest Conversation Messages
This PR was created automatically by ProPR after processing issue #3339.
💡 Need changes?
Comment on this PR to request refinements — the AI agent monitors comments and will update the implementation based on your feedback. Keep iterating until you're satisfied!
Visual preview
Task mobile collapsed header 390
Original unavailable: managed storage is unavailable or the upload has expired.
Task mobile collapsed header menu 390
Original unavailable: managed storage is unavailable or the upload has expired.
Task mobile collapsed long title 390
Original unavailable: managed storage is unavailable or the upload has expired.
Task visual preview lightbox 1440
Original unavailable: managed storage is unavailable or the upload has expired.
Task visual preview lightbox 390
Original unavailable: managed storage is unavailable or the upload has expired.
Task visual preview lightbox zoomed 1440
Original unavailable: managed storage is unavailable or the upload has expired.
Task visual preview lightbox zoomed 390
Original unavailable: managed storage is unavailable or the upload has expired.
Task visual previews 1440
Original unavailable: managed storage is unavailable or the upload has expired.