Appearance
The result now contains its add controls immediately. Quantity defaults to one, condition to Near Mint; grading reveals the existing company/grade controls. Purchase price is optional under collapsed More options. Keep swipable candidate art, captured-photo comparison, detail access and a pinned submit action. The first Add click writes the holding instead of opening another form. Duplicate taps are guarded synchronously; paging and dismissal are disabled while saving.
A virtualized newest-first strip below the camera frame keeps each capture distinct, including repeated cards, for the current scan session. Its fade honors reduced motion. Tapping a thumbnail restores the exact proposals without uploading or consuming another scan. Failed recognition can retain the capture as unidentified. Checks are tied to the selected printing and acknowledged quantity, not merely a successful identification; failed/partial bulk writes remain unmarked. Directly filing a queued capture removes only that pending bulk row. Other pending rows remain queued.
An Undo action for the latest acknowledged addition reduces only its new copies, including when the holding stacked onto pre-existing copies. A failed undo keeps the saved state. Session data stays in memory, survives card-detail round trips, and clears when leaving the scan tab, explicitly ending, signing out or switching accounts. Ending with pending bulk entries requires confirmation. Permanent scan history and collection data are not erased; email-account enforcement remains.
Validation: ESLint and TypeScript passed; Jest 3,042 passed, 11 skipped. Coverage includes first-click defaults, double-click prevention, grading and price expansion, quota refusal, repeated captures, exact-result reopening, alternate printing checks, partial bulk saves, undo success/failure and account isolation. Observed Red/Green evidence is documented in the app PR; additional regression tests added after implementation are not presented as test-first evidence.
The result-return Maestro scenario is adapted to the single result/form and a session-strip scenario is added. Neither was run: Maestro is unavailable locally. Local Android verification used the actual result/form and thumbnail components with an isolated simulated ledger and real catalogue art. The first Add click changed four fictitious copies to five and displayed the check; Undo restored four and removed the check. Thumbnail reopening, the One Piece alternate pager, optional-price expansion, visible submission with the keyboard and session clearing were checked. Android Back initially also closed the result; a failing regression test preceded the keyboard-dismiss-first fix, which was then rebuilt and checked locally. The complete app bundle was subsequently verified to exclude the fixture and installed in-place, retaining the original application identity and install date. The isolated test package was removed. No real account or collection write was performed. Full camera/backend recognition and iOS runtime behavior were not tested in this visual exercise. The standalone email-account prompt now uses the existing safe-area Screen to center its message and action above the tab bar. Collection-sheet prompts retain their compact layout. Local Android screenshot/UI geometry was verified after replacement installation; focused guard regressions and TypeScript/lint pass. The user approved the targeted 16-file app exception to retain tests/docs.
Delivery: app PR #860 targets staging and remains open. No merge, backend change, dependency update, native source change, migration or deployment.