Add mobile Safari (iPadOS) version of the browser feedback extension#785
Open
selfcontained wants to merge 3 commits into
Open
Add mobile Safari (iPadOS) version of the browser feedback extension#785selfcontained wants to merge 3 commits into
selfcontained wants to merge 3 commits into
Conversation
Ports the Dispatch browser feedback extension to Safari Web Extensions with a mobile-first flow: the popup handles connect + arming, and element picking (tap + parent/child refine), the comment card, and Send all happen in a transient in-page overlay that removes itself when done. - Extract shared worker core from the Chrome service worker (behavior unchanged); share element-context, dispatch-url, feedback-form, types - Safari background owns pairing polling (popup dies when the verification tab opens) with a persisted pending record that resumes across worker death - Tap + refine overlay: capture-phase aiming that blocks clicks but keeps scrolling, shadow-DOM comment card with visualViewport keyboard handling, idempotent submission retry via stable clientSubmissionId - Checked-in Xcode project (safari-web-extension-converter shell) that references dist/safari/unpacked; TestFlight steps documented in README - Web settings: Chrome / Safari on iPad install guide toggle - Playwright harness drives the built overlay headlessly with a stubbed extension bridge; unit tests for refine/popup/pairing/viewport/manifests - Fix stale Chrome manifest version (0.28.4 -> 0.29.0) Co-Authored-By: Claude Fable 5 <[email protected]>
Owner
Author
|
Full end-to-end validation on iPad Pro 13" simulator (driven via AXe HID automation):
Remaining human steps are unchanged: TestFlight signing/upload and real-device touch/pinch-zoom feel. |
Sets DEVELOPMENT_TEAM (ML8BQ6D727, same team as the Mac release signing) on all Safari app/extension configs so automatic signing works out of the box, and updates the TestFlight README steps accordingly. Device archive verified headlessly; App Store export still needs an ASC API key or the Xcode GUI to mint distribution profiles. Co-Authored-By: Claude Fable 5 <[email protected]>
Matches the Mac binary signing convention (dev.bradharris.dispatch): app is dev.bradharris.dispatch.feedback, extension appends .extension. Device archive re-verified with automatic signing. Co-Authored-By: Claude Fable 5 <[email protected]>
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
Ports the Dispatch browser feedback extension (#783) to mobile Safari so page feedback can be sent to agents while testing on an iPad. Same server-side pairing/token/submission system — zero server changes — with a mobile-first client flow.
How it works on iPad
Implementation
worker-core.ts(fetch/auth/pairing/submission handling) pulled out of the Chrome service worker, which is now a thin shell — Chrome behavior unchanged.extension-api.ts(browser ?? chrome) is the entire Safari compat layer.src/safari/):pairing-session.ts(persisted, resumable poll; cancel-after-late-approval disconnects),overlay-session.ts(activeTab-based injection with ready-probe retries, tab lifecycle cleanup).src/safari/overlay/): pointer-event tap detection tuned for touch, purerefine.tsparent/child trail, shadow-DOM card,visualViewportmath for pinch-zoom/keyboard, idempotent retry via stableclientSubmissionId.pnpm --filter @dispatch/browser-extension build:safari→dist/safari/unpacked(popup, classic-script background, overlay IIFE, Safari manifest). Chrome zip pipeline untouched.apps/browser-extension/safari/(converter shell, references the dist directly); TestFlight/simulator steps in the README.MARKETING_VERSIONsync is test-enforced.manifest.jsonversion was stale (0.28.4 vs package 0.29.0) — fixed; the sync test now passes again.Testing
e2e/browser-extension-overlay.spec.ts) drives the built overlay bundle headlessly with a touch context and stubbed extension bridge: tap → refine → card → failed send → retried send with the same clientSubmissionId → teardown.pnpm run check,pnpm run test,pnpm run finalize:web,pnpm run test:e2e(184 passed after fixing the pairing-copy assertion)..appex.Needs a human (can't be automated)
permissions.requestprompts for the Dispatch origin on iPadOS — the fallback guidance paths are built in).🤖 Generated with Claude Code