fix(website): bind app art failures to url generations - #6964
Conversation
f4315cb to
87b81a0
Compare
GPT 5.6 Review — ✅ no blocking findingsGPT 5.6 completed its review of This comment is updated in place on each push. Review detailsNo findings. False positive or not applicable? A repository writer can comment: |
UX Review (Fable 5) — ✅ PASSUX-level review of No user-facing surface changes here — the diff is purely internal image-failure latch bookkeeping in UX-Verdict: PASS Invisible-chrome fix: failed app art now hides reliably and retries on return, with no new copy, controls, or layout to misread. [UX-REVIEWED] fd77794 |
Design Review (Fable 5) — ✅ PASSDesign-level review of Design-Verdict: PASS Render-time re-arm with generation-tokened failures is React's documented fix for exactly this effect-order race; scoped, root-cause, and regression-tested against the unpatched components. Suggestions
[DESIGN-REVIEWED] fd77794 |
First Principles Review (Fable 5) — 🟡 CONCERNSPremise-level review of All evidence gathered. The change is a state-sequencing fix in two image-failure latches, and the repo carries three more sites with the identical effect-reset pattern the PR's own comments call the bug. Producing the review now. First-Principles-Verdict: CONCERNS The fix is real and correctly aimed, but the effect-reset pattern it calls a bug survives verbatim in three sibling art latches this change leaves unfixed. What this change shipsIntent: a failed app image should keep its real failure (swap/hide) instead of being re-shown at a dead URL after a race between the error and the reset effect — a FIX.
Watch
Subtractions
[FIRST-PRINCIPLES-REVIEWED] fd77794 |
Opus 4.8 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
A passive reset can run after a newly rendered image reports an error, clearing the latch and showing the dead URL again. Associate gallery and hero failures with the exact current URL generation so prop changes re-arm without a later reset. Add deterministic effect-order coverage for both surfaces.
87b81a0 to
fd77794
Compare
chenmingwei23
left a comment
There was a problem hiding this comment.
Tier 1 auto-approve: fix (2 files): bind AppDetail screenshot failure latches to the URL generation that rendered them; clear root cause. Criteria: no conflict, no requested changes, security path denylist clean, design-doc gate clean, SAST (Semgrep + CodeQL) annotations/alerts clean, security checklist all-NO, AI reviewers green.
iamwhatever
left a comment
There was a problem hiding this comment.
Tier 1 auto-approve: fix (2 files). Criteria: no conflict, no requested changes, security path denylist clean, design-doc gate clean, SAST annotations clean, security checklist all-NO, AI reviewers green. Category: single root cause -- the screenshot failure latches were reset in a passive useEffect, so an image that failed before the effect ran had its real failure erased and the dead URL re-shown; the latches are now re-armed during render and keyed to the URL generation that produced them.
Summary
onErroris dropped instead of resurrecting a cleared setDeterminism evidence
A→B→Aregressions (light art fails → dark theme → back to light) also fail 2/2 against the pre-fix components, and pass afterValidation
AppDetailArtLocalFallback.test.tsx: 27 passedAppDetailPage*test files: 96 passedtsc -b: passedWhy no screenshot: this is a state-sequencing fix inside two existing image-error latches. It introduces no new markup, styling, copy or layout — every rendered state (image shown, swapped to the local fallback, hidden) already existed and is pixel-identical. What changes is which of those pre-existing states is reached after a specific effect-order / theme-flip sequence, which a still frame cannot show; the four regression tests above assert it directly.
Overlap audit
This is the independent owner fix for the full-suite failure observed on #5248; #5248 itself is intentionally unchanged.