Phone verification — UI/OCR refresh, 2026-10-07

Verified on the connected Pixel 9 Pro, Android 17 / API 37, 960×2142 portrait. The final updated app is installed and launches normally. No app-data clear or uninstall was performed. No QA receipt was saved to the receipt database.

Result

The same ten repository receipts took 33.441s before and 23.665s after through the actual Accurate-mode UI workflow: 29.23% less batch time. Every returned date, amount and merchant was identical between builds. Both runs matched 9/10 expected dates and 10/10 expected amounts. The existing Triple O’s missing date remains; this change does not claim to fix it.

These are single cold-launch batches in the same fixture order on one phone, not a multi-run thermal or low-memory benchmark. OCR ran through real ML Kit, including decode, fallbacks, parsing and application of results. A temporary QA harness selected known repository fixtures into unsaved drafts and observed completion. It suppressed preference writes, but did not replace the OCR provider or change the recognition policy. Final editor-only fixes did not change the benchmarked OCR source. Raw fixture results and provenance.

The Clock continued ticking during scans (286 baseline / 187 updated ticks). The largest observed tick interval was 475ms baseline / 524ms updated, so this is evidence of responsiveness, not a claim of consistently smooth frame times. Device logs confirmed max_workers=2 and overlapping recognition worker threads.

UI and interaction checks

Check Result / evidence
Home, summary, recent rows, shared palette Populated in-memory preview; normal empty Home also checked
Large spending total Fits inside the summary
Library cards and thumbnails Two synthetic rows rendered; no database inserts
Search, no matches, keyboard and Back Actual touch/typing check
Insights, date-range controls and totals Normal app navigation
Empty capture and shortened action labels Phone capture screen
Import action Opened native Android picker; backed out without selecting/importing a file
Scan progress Completed count visible during real parallel OCR
Date/amount/merchant review Unsaved fixture details
Numeric keypad Actual touch entry of 12.34
Manual edits during rescan Real single-receipt OCR preserved manually edited 12.34 and its manual flag
Navigation cancellation Leaving capture returned to Home, cleared loading and discarded stale callbacks
Settings and mode descriptions Accurate active; no duplicate Batch accurate option
Shared receipt editor Found excessive blank space, fixed and rechecked on final APK
Batch-review component Rendered with unsaved fixture values; opened by QA harness

The editor fix sizes the popup to its form, caps it to the available window, uses scrolling when necessary, and gives inputs/buttons 48dp targets. It also unbinds its window resize callback when dismissed.

12 OCR/concurrency regression tests passed inside the phone’s Python runtime, including worker overlap, ordering, cancellation, per-receipt failure handling, stale progress, identical desktop resize pixels, recognizer lifetime, and mode configuration. 129 tests passed locally after the editor fix.

Not covered by this verification: fresh camera capture, TalkBack, low-memory stress, repeated statistical timing trials, and desktop Tesseract execution on Android (Android uses ML Kit). Saves, exports and deletions were not repeated; this refresh did not change their data paths. The phone’s installed build was checked in portrait; desktop narrow/landscape checks are recorded separately.

Data preservation and final artifact

Database and settings SHA-256 hashes matched before installation, after upgrade, and after QA cleanup. Private file contents stayed on-device. Automatic approval review initially rejected copying the private database/settings, so preservation was checked by hashes instead. Screenshots were captured after explicit user approval.

The app used temporary test fixtures and in-memory rows only. QA source, bytecode, fixtures, commands, and test modules were removed afterward. The original packaged entrypoint was restored and its hash matched the APK’s main.pyc: 1d1ca5653d134cd08086bab3aa902e08549619ad6fb4692c820591d7334c4990. The final APK contains no QA harness.

Installed artifact: PaperNest debug APK, arm64-v8a, version 1.0.0. SHA-256: d129b84b7e877fe693de4a44849516f51cd4a905fa9f6d6e73dde12bf35da0ae.

The APK uses the existing cached Android toolchain. This is a locally verified debug build, not a store release. Runtime source-file hashes are included with the benchmark evidence. ECC memory records the phone results and remaining limits.