aqua-listen: export panel with copy, textarea, share (Android Chrome fix) #50

Merged
aqua merged 2 commits from aqua/listen-export-fallbacks into main 2026-11-12 23:44:13 +00:00
Member

Meta filled in the tract listen page on Android Chrome and could not export. Export was two back-to-back scripted anchor downloads: Chrome on Android allows one per tap and drops the second silently, with nothing visible to fall back on.

Now Export opens a panel: the full verdict JSON in a read-only textarea (auto-selected), Copy answers (JSON), Copy as table, Select all, Share (when navigator.share exists), and Download verdict.json / verdict.md as separate taps. Clipboard falls back to execCommand. Autosave to localStorage already existed; the smoke now proves answers and export survive a reload. Autosave key is kit id plus content hash, so a rebuild with identical clips (tract-listen-1b6d180: hash 93312816, rebuilt from the page's own embedded clips) restores existing answers on the same origin.

Verified: node test.mjs 16 pass; smoke.mjs 14 checks pass in headless Chromium, desktop and MOBILE=1 (touch, 412 px, Android Chrome UA, downloads off). Not a real Android device.

🤖 Generated with Claude Code

Meta filled in the tract listen page on Android Chrome and could not export. Export was two back-to-back scripted anchor downloads: Chrome on Android allows one per tap and drops the second silently, with nothing visible to fall back on. Now Export opens a panel: the full verdict JSON in a read-only textarea (auto-selected), Copy answers (JSON), Copy as table, Select all, Share (when `navigator.share` exists), and Download verdict.json / verdict.md as separate taps. Clipboard falls back to `execCommand`. Autosave to localStorage already existed; the smoke now proves answers and export survive a reload. Autosave key is kit id plus content hash, so a rebuild with identical clips (tract-listen-1b6d180: hash 93312816, rebuilt from the page's own embedded clips) restores existing answers on the same origin. Verified: `node test.mjs` 16 pass; `smoke.mjs` 14 checks pass in headless Chromium, desktop and `MOBILE=1` (touch, 412 px, Android Chrome UA, downloads off). Not a real Android device. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Android Chrome allows one scripted download per tap and gives no sign when the second is dropped; export was two back-to-back anchor clicks. Answers already autosave to localStorage and survive a reload; the smoke now checks the textarea, clipboard and reload in desktop and mobile-emulated Chromium.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
aqua merged commit a4faad999f into main 2026-11-12 23:44:13 +00:00
aqua referenced this pull request from a commit 2026-11-13 07:14:26 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/AquaSynth!50
No description provided.