<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otpGarmin/docker/scripts, branch v0.8.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.8.0</id>
<link rel='self' href='https://git.cirakg.xyz/otpGarmin/atom?h=v0.8.0'/>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/'/>
<updated>2026-10-21T01:55:10+00:00</updated>
<entry>
<title>test(build): add make watchdog, the glance memory budget and the glance screenshot</title>
<updated>2026-10-21T01:55:10+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-21T01:55:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=56e0c351bb95cfdf63aa76ab8c5d725a694bad63'/>
<id>urn:sha1:56e0c351bb95cfdf63aa76ab8c5d725a694bad63</id>
<content type='text'>
- make watchdog (in make ci): a stress build encodes, packs, turns into
  runs and draws the largest code of every 2D symbology at two steps per
  event on the Forerunner 255S and 70; it fails on a watchdog trip, and
  the last code left on the screen must decode (bitmap path on the 70).
- make memtest checks the glance (DIAG glance, budget 70 % of 64 KB).
- screenshots.sh launches the app again after the flow and compares the
  glance with the favourite's code (glance_code.png on 7 watches); the
  About goldens show 0.8.0.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<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(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(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>feat(spike): add the M1 settings spike app and make targets</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=ac60fb060414261935ac5e158b26b34e211e1e06'/>
<id>urn:sha1:ac60fb060414261935ac5e158b26b34e211e1e06</id>
<content type='text'>
A separate throwaway app (own app ID, no permissions) that shows what the
Garmin Connect app delivers per settings field and writes values back, to
measure the undocumented settings limits on the real phone and watch.
Includes length-marked test strings, `make spike` / `make spike-sim`,
`make vectors`, and step-by-step instructions in docs/SETTINGS_SPIKE.md.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>build: complete the Docker pipeline for build, test, screenshots and packaging</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=85f1ecabd7f58f306b2a042376209ac8cf49ab9b'/>
<id>urn:sha1:85f1ecabd7f58f306b2a042376209ac8cf49ab9b</id>
<content type='text'>
- Container scripts now run from the mounted project (no image rebuild
  per script change): build-app.sh (strict -l 3, warnings fail),
  run-unit-tests.sh, screenshots.sh, app-diag.sh (perf/memory),
  lint.sh, package.sh and sim-vnc.sh (noVNC on 127.0.0.1:6080).
- Headless simulator helpers: wait for port 1234, remove the stale
  single-instance lock (~/Sim-dev) that made later starts hang, show
  the simulator log on failure.
- New targets: screenshots-approve, icons; `make lock` re-adds the
  requirements header; pytest treats warnings as errors.
- Author/Summary headers on every build file.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>build: add Docker-only Makefile, SDK setup and product manifest</title>
<updated>2026-10-18T18:28:09+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-18T18:28:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=a9b1dc8bd9354973eabd72f56d82b2eab6f48d56'/>
<id>urn:sha1:a9b1dc8bd9354973eabd72f56d82b2eab6f48d56</id>
<content type='text'>
- Makefile: every target runs in a container as your UID/GID, with no
  capabilities, a read-only root filesystem, only the project folder
  mounted and no network except for image builds and `make sdk`.
  Serial even under `make -j`. `make nuke` removes containers, images,
  the dedicated buildx builder and .cache/ after confirmation.
- sdk-setup.sh: agreement acceptance pinned to the hash you read,
  password login (never stored), SDK 9.2.0 and device download, and
  the login token deleted afterwards.
- gen-key.sh: RSA-4096 developer key into .cache/keys, never
  overwritten, with backup instructions.
- manifest.xml: watch-app, minApiLevel 5.0.0, no permissions, and the
  72 watches with API 5.0+ and at least 512 KB for apps.
- .gitignore, lint configs and CHANGELOG.

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