Repository navigation
Conversation
Expose Giphy and verified GIF embeds atomically with frontend playback, reduced motion and manual retries. Codex-Thread: 01a15b08-d4ad-7e72-8725-b3ea1fde71ce
Keep each layer based on the updated predecessor without rewriting history. Codex-Thread: 01a15b08-d4ad-7e72-8725-b3ea1fde71ce
Keep the layer based on its updated predecessor without rewriting history. Codex-Thread: 01a15b08-d4ad-7e72-8725-b3ea1fde71ce
This was referenced Oct 26, 2026
Codex-Thread: 01a15b08-d4ad-7e72-8725-b3ea1fde71ce
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.
Summary
Renders Giphy share links and verified external GIF URLs inline from their hosts. GIFs autoplay while visible, unload offscreen, respect reduced motion, and allow two manual retries after failures.
Stack 3/6, split from closed #891. Depends on
feat/external-gif-verification. This PR is in the fork to keep the review diff limited to this layer; open it upstream after its dependency lands.Changes
Diff against this PR's base: 24 files, +1,510/-7. 59% of changed lines are tests, fixtures, or test support.
Visual explanation
flowchart TD E["Server-authorized GIF embed"] --> G{"Visible and safe HTTPS source?"} G -- No --> S["Animation unloaded; card size retained"] G -- Yes --> M{"Reduced motion?"} M -- Yes --> P["Press Play"] M -- No --> A["Load and play animation"] P --> A A -- Stop or offscreen --> S A -- Load failure --> R["Up to two user-initiated retries"] R -- Retry --> A R -- Limit reached --> F["Failure state retained"]Stack and merge order
Layers 2–6 target their immediate predecessor in the fork. Submit them upstream in order after their dependency lands; each review diff contains only its layer.
Validation
PreviewLinknow lives underApp\Contracts\Services(namespace-only follow-up, head861687968f7b4909830b5113313092844cf238c8). Focused fetching/verification suites and the final stack’s required checks passed after the move; the earlier per-layer results and implementation review below remain the baseline.Container checks passed on PHP 8.5.12: 4,601 PHP tests / 25,282 assertions, 100% PHP coverage and type coverage, 223 Node tests, and 631 component tests across 50 files. PHPStan, TypeScript, lint, and production build pass (19 lint warnings, no errors).
Lint: Pint, Rector
--dry-run --debug(same rules, serial execution), and Bun lint. Other commands:composer test:types,composer test:type-coverage, full parallel Pest CI coverage at exactly 100%,bun run test:unit, andbun run build.Visual evidence
Desktop Chrome, dark theme, cropped to the relevant card/composer. Captured from the reassembled stack; no post was published and the existing draft was preserved.
Screen.Recording.2026-10-21.at.12.38.12.mp4
The existing desktop recording shows Giphy/direct-GIF autoplay and Stop/restart.
Device verification
Desktop Chrome smoke only. No hardware/simulator mobile verification or renewed full viewport/theme/CLS matrix is claimed.
Independent review
Independent code review: PASS, base
9a4b22f473e3d73e6fd1e5180a38e892afa212ed, headb8d3f368a56be51feb0d414d0b6a821565b5d34a. Full visual/device review remains incomplete.Limitations
Hosted CI has not been verified for this new PR. The existing visual/device evidence gaps remain disclosed above.
Codex-Thread: 01a15b08-d4ad-7e72-8725-b3ea1fde71ce