aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md18
1 files changed, 9 insertions, 9 deletions
diff --git a/README.md b/README.md
index 9c1543d..266919b 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
A Garmin Connect IQ watch app that shows one-time passwords (TOTP, HOTP, and optional Steam Guard codes) and stores barcodes and QR codes (loyalty cards, tickets) to show at a scanner. Everything lives encrypted on the watch. There is no cloud, no backend and no analytics, and the app requests no permissions, so it cannot use the network.
-> **Status: M3 (storage, keys and PIN logic) done; M1 (settings spike) ready for your phone test.** The plan below was approved on 2026-10-18. M0 built the Docker toolchain and pipeline. M2 added the crypto and OTP core (SHA-512, HMAC, PBKDF2, HKDF, AES-256 records, Base32, HOTP, TOTP, Steam), verified against official test vectors. M3 added the encrypted vault: records, device and PIN keys, wrong-PIN lockout, session auto-lock, pending entries and migrations ([docs/SECURITY.md](docs/SECURITY.md)). Next is M4, the first real screens. The settings spike (`make spike`, [docs/SETTINGS_SPIKE.md](docs/SETTINGS_SPIKE.md)) waits for your test. The Phase 0 research, with sources, is in [docs/FEASIBILITY.md](docs/FEASIBILITY.md); the daily workflow is in [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
+> **Status: M4 (UI core) done; M1 (settings spike) ready for your phone test.** The plan below was approved on 2026-10-18. M0 built the Docker toolchain and pipeline. M2 added the crypto and OTP core, verified against official test vectors. M3 added the encrypted vault ([docs/SECURITY.md](docs/SECURITY.md)). M4 added the screens: the list with live codes, OTP detail with countdown ring, PIN entry (keypad or button selector) with lockout, menu, info screens and the glance, tested by a scripted UI flow with screenshots on seven simulated watches. Next is M5, import. The settings spike (`make spike`, [docs/SETTINGS_SPIKE.md](docs/SETTINGS_SPIKE.md)) waits for your test. The Phase 0 research, with sources, is in [docs/FEASIBILITY.md](docs/FEASIBILITY.md); the daily workflow is in [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md).
"OTP Wallet" is a working title.
@@ -597,7 +597,7 @@ A symbology counts as implemented only when checks 1 to 3 pass. Otherwise it's l
### 13.1 Screens
-- **List (home)**: entries in your order, with group headers if enabled.
+- **List (home)**: entries in your order. With "Show groups" on, each row shows its group in front of the account ("Work ยท alice"). Separate group header lines were planned, but they need every entry's header at start-up, and M3 measured that as too slow for long lists.
- Unlocked TOTP and HOTP entries show their current code and a small countdown.
- Locked entries show a lock icon and their name (unless names are encrypted), and no code.
- Codes show a barcode or QR icon and their name.
@@ -661,12 +661,12 @@ stateDiagram-v2
| Action | Touch | Buttons |
| --- | --- | --- |
| Scroll the list | Swipe up and down | UP and DOWN |
-| Open an entry | Tap it | START |
+| Open an entry | Tap it (START opens the focused row on watches that also have buttons) | START |
| Back | Swipe right, or BACK | BACK |
| Next HOTP code | Tap the code | START |
-| Menu | Long-press the screen, or MENU | MENU (hold UP on most watches) |
-| Enter a PIN digit | Tap the keypad | UP/DOWN change the digit, START confirms it, BACK deletes |
-| Confirm the PIN | OK | Hold START, or START after the last digit |
+| Menu | Long-press the list, or MENU | MENU (hold UP on most watches) |
+| Enter a PIN digit | Tap the keypad; the delete key deletes | UP/DOWN choose a digit, START adds it, BACK deletes |
+| Confirm the PIN | OK on the keypad, or START | UP/DOWN to "OK", then START |
## 14. Target devices and API levels
@@ -724,7 +724,7 @@ The Garmin SDK and device files are never baked into an image (Garmin's licence)
| `make build` | Debug build for `DEVICE` (default `fr255s`) | no |
| `make test` | Unit tests in the headless simulator on the 3 test devices | no |
| `make sim` | Run the app in the simulator; view it at http://127.0.0.1:6080/vnc.html | localhost only |
-| `make screenshots` | UI screenshot tests and barcode decoding from screenshots | no |
+| `make screenshots` | Scripted UI flow with a screenshot of every screen on `TEST_DEVICES` and `SPOT_DEVICES` (barcode decoding from M6) | no |
| `make screenshots-approve` | Save the current screens as the approved images, after you've reviewed them | no |
| `make icons` | Regenerate the per-size launcher icons after the product list changes | no |
| `make perf` | Performance measurements against the budgets | no |
@@ -922,8 +922,8 @@ Tests are written alongside the code, never after.
### 17.4 Simulator UI tests
-- **Setup**: a debug build with a fake fixture vault and a fixed clock, driven by scripted input through xdotool.
-- **Screenshots** of every screen on the 3 test devices and the spot-check devices are compared with approved goldens, with a pixel tolerance.
+- **Setup**: the UI-test build (`uitest.jungle`, `source/util/TestMode.mc`) starts with fake entries, the PIN 123456 and a frozen clock. `tools/ui_flow.py` drives it through xdotool: it clicks the buttons from the device files, and taps and swipes on touch screens. It waits for each screen's `DIAG shown` line instead of sleeping.
+- **Screenshots** of every screen on the 4 test devices and the 3 spot-check devices are compared with approved goldens in `test/golden/<device>/`. At most 0.01 % of pixels may differ.
- **Barcode screens** must decode with zxing-cpp.
- **TOTP screens** are checked against the expected codes, from the debug build's view-model log and the golden image.