From b70cde45b67e1f6bb65d598d25c1a5184bdab520 Mon Sep 17 00:00:00 2001 From: cirakg Date: Sun, 18 Oct 2026 21:10:37 +0200 Subject: docs: add developer, testing and performance guides; record M0 results - DEVELOPER_GUIDE: workflow, how the tooling works (verified simulator behaviour), conventions and how to add devices. - TESTING and PERFORMANCE: test layers, M0 results and measured numbers. - FEASIBILITY: what M0 verified (watchdog 120k/240k, 10 MB storage in device profiles, unreliable monkeydo exit code, icon sizes). - README status, new make targets and layout; CHANGELOG 0.1.0. - Author/Summary headers on every document, including the original brief. Co-Authored-By: Claude Opus 5.5 --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index bdfe0ea..e13b71e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ + # OTP Wallet for Connect IQ 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: Phase 1 (plan), waiting for your approval.** Nothing is built yet. This README is the design and the build plan. The Phase 0 research, with sources, is in [docs/FEASIBILITY.md](docs/FEASIBILITY.md). +> **Status: M0 (scaffolding) done.** The plan below was approved on 2026-10-18. The Docker toolchain, the build, test, screenshot, performance and packaging pipeline, and a placeholder app are in place and pass `make ci`. Next: M1, the settings spike (needs your phone and watch), alongside M2, crypto and OTP. 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. @@ -719,6 +723,8 @@ The Garmin SDK and device files are never baked into an image (Garmin's licence) | `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-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 | | `make memtest` | Peak memory on Forerunner 255S, app and glance | no | | `make lint` | Strict type check (`-l 3`) with warnings as errors, project lint rules, settings XML schema check, Python lint for the tools | no | @@ -1019,13 +1025,16 @@ The simulator runs on your PC's CPU, so its timings don't represent a watch. In │ ├── Dockerfile garmin-otp/dev │ ├── docs.Dockerfile garmin-otp/docs │ └── scripts/ SDK setup, headless simulator, test runner, VNC +├── icons.jungle generated: each product's launcher-icon folder ├── source/ │ ├── app/ crypto/ otp/ codes/ storage/ import/ settings/ ui/ util/ ├── test/ Monkey C (:test) modules, mirroring source/ -│ └── data/ generated vectors and fake fixtures +│ ├── data/ generated vectors and fake fixtures +│ └── golden/ approved simulator screenshots ├── resources/ │ ├── settings/ properties.xml, settings.xml │ ├── strings/ drawables/ fonts/ +├── resources-icons/ generated: launcher icon at each size the products need ├── tools/ Python: vector generation, reference encoders, decoding, screenshots, reports, lint ├── docs/ └── .cache/ build/ git-ignored: SDK, device files, keys, outputs -- cgit v1.2.3