<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otpGarmin/tools, branch v0.7.0</title>
<subtitle>OTP Wallet for Garmin Connect IQ: offline one-time passwords and barcodes.</subtitle>
<id>https://git.cirakg.xyz/otpGarmin/atom?h=v0.7.0</id>
<link rel='self' href='https://git.cirakg.xyz/otpGarmin/atom?h=v0.7.0'/>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/'/>
<updated>2026-10-20T16:36:54+00:00</updated>
<entry>
<title>build(lint): validate resource XML against the SDK schema and cross-check the settings form</title>
<updated>2026-10-20T16:36:54+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-20T16:36:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=f466977249d9ac10fe8b75180c30cb90dbcc22ca'/>
<id>urn:sha1:f466977249d9ac10fe8b75180c30cb90dbcc22ca</id>
<content type='text'>
tools/check_resources.py checks every resource file against the SDK's
resources.xsd and that settings, properties and strings agree. Adds the
pure-Python, MIT-licensed xmlschema to the dev image.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(settings): cover every form, symbology and Manage action; send the forms end to end in the UI flow</title>
<updated>2026-10-20T16:36:54+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-20T16:36:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=479d7ba2e843d5ea93979f2eed68f4d38d146c25'/>
<id>urn:sha1:479d7ba2e843d5ea93979f2eed68f4d38d146c25</id>
<content type='text'>
34 Monkey C tests (154 per device): validation messages, idempotency, the
queue, the About scan, "Encrypt names" and the properties contract. The
UI-test build fills in Add OTP, Add code and Manage like the phone; the flow
checks the new TOTP (309 848 at the frozen time), decodes the Code 128 card
and confirms the queued change to the locked entry with the PIN.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(codes): compare Aztec with aztec_code_generator, decode it and its screenshot</title>
<updated>2026-10-20T10:16:59+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-20T10:16:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=1ebc828f30698c1661055e17483e8d50a139ed45'/>
<id>urn:sha1:1ebc828f30698c1661055e17483e8d50a139ed45</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(codes): compare Data Matrix and PDF417 with references and decode them, also from screenshots</title>
<updated>2026-10-20T09:24:58+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-20T09:24:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=1251aab9f8f9f38aa5bdefd4fed1f58236166cf8'/>
<id>urn:sha1:1251aab9f8f9f38aa5bdefd4fed1f58236166cf8</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(codes): compare QR with segno, decode QR dumps and the QR screenshot</title>
<updated>2026-10-20T04:56:58+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-20T04:56:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=f455246fde086dda0cb61b92c84a5146a831a2bf'/>
<id>urn:sha1:f455246fde086dda0cb61b92c84a5146a831a2bf</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(codes): compare with zxing-cpp reference rows and decode encoder output and screenshots</title>
<updated>2026-10-20T00:43:08+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-20T00:43:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=fa9c695256de1c7fe007ba5d6bb9b28b1deb5a5a'/>
<id>urn:sha1:fa9c695256de1c7fe007ba5d6bb9b28b1deb5a5a</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(import): cover parsers, importer and a seeded fuzz corpus; import 100 entries in the UI flow</title>
<updated>2026-10-19T23:51:05+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-19T23:51:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=42f9331e693f5058fcfcd7aef5a92cabc04c20ee'/>
<id>urn:sha1:42f9331e693f5058fcfcd7aef5a92cabc04c20ee</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(ui): drive the simulator with a scripted flow and check every screen</title>
<updated>2026-10-19T20:28:09+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-19T20:28:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=2373b6f02ef027a423762d5d6349cd9e0f36090e'/>
<id>urn:sha1:2373b6f02ef027a423762d5d6349cd9e0f36090e</id>
<content type='text'>
tools/ui_flow.py clicks buttons and taps from the device files, waits for
DIAG shown lines and compares 10 screens per watch with goldens on four
test and three spot-check devices. Adds the fixture-wrap generator, UI
logic tests and driver tests; the launcher opens apps from their glance.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test: add cross-checked crypto/OTP vectors, unit tests and stricter screenshots</title>
<updated>2026-10-18T21:44:18+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-18T21:44:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=93aa7e3aa291f3328cf34a5a2f86172f41d0affd'/>
<id>urn:sha1:93aa7e3aa291f3328cf34a5a2f86172f41d0affd</id>
<content type='text'>
- gen_vectors.py: RFC/FIPS/NIST vectors recomputed with Python's stdlib
  (openssl for AES) before use, plus seeded cases around SHA padding
  boundaries, 2038 and 2100; generates test/data/Vectors.mc.
- 31 Monkey C tests (hashes, HMAC, PBKDF2, HKDF, AES, sealed records incl.
  every-byte tamper detection, Base32 errors, 100 OTP and 12 Steam
  vectors, clock, jobs) and a benchmark; pass on all four test devices.
- Screenshot tolerance 0.01 %: one changed character no longer passes.
- Golden images updated for version 0.2.0.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(tools): add screenshot, budget and product checks; enforce file headers</title>
<updated>2026-10-18T19:10:37+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-18T19:10:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=2292bf700d28ade39cf2d64b45509e6db21034bc'/>
<id>urn:sha1:2292bf700d28ade39cf2d64b45509e6db21034bc</id>
<content type='text'>
- sim_screenshot.py finds the device drawing in the simulator window,
  crops the screen and compares it with approved golden images.
- check_budgets.py reads key=value DIAG/HARNESS lines (the simulator
  console escapes quotes, so JSON was dropped).
- ciq_test_report.py accepts SDK 9.2.0's real summary line
  `PASSED (passed=N, failed=N, errors=N)`; a captured log is a fixture.
- gen_products.py checks all manifest products are watches with
  API 5.0+ and at least 512 KB for apps.
- lint_project.py rule HDR001: every file carries the Author/Summary
  header (JSON keys, PNG text chunks; generated package-lock exempt).
- make_icon.py --all draws one icon per launcher size in use.
- Golden screenshots for fr255s, venusq2, fr70 and fr965.
- 44 tests, warnings as errors, ruff and mypy --strict clean.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
