<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otpGarmin/source, branch v1.0.0</title>
<subtitle>OTP Wallet for Garmin Connect IQ: offline one-time passwords and barcodes.</subtitle>
<id>https://git.cirakg.xyz/otpGarmin/atom?h=v1.0.0</id>
<link rel='self' href='https://git.cirakg.xyz/otpGarmin/atom?h=v1.0.0'/>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/'/>
<updated>2026-10-27T23:03:01+00:00</updated>
<entry>
<title>chore(release): 1.0.0, with the Connect IQ Store listing</title>
<updated>2026-10-27T23:03:01+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-27T23:03:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=9e5a85fe01e94489198a64a458f9b09584594f80'/>
<id>urn:sha1:9e5a85fe01e94489198a64a458f9b09584594f80</id>
<content type='text'>
The second real-watch round on the Forerunner 70 passed: codes from
otpauth:// links, the 4-digit PIN, touch scrolling and Aegis JSON import.
Version 1.0.0 ships the fixes of the 0.9.0 review.

- docs/STORE_LISTING.md: title, description and What's New for the
  Garmin developer page, with measured character counts.
- docs/store/: hero (1440x720), cover (500x500) and seven round screen
  images, built by tools/store_assets.py from the fr70 goldens.
- CHANGELOG 1.0.0, README status, TESTING round 2 results, YOUR_STEPS
  marked done, fr70 about.png golden at 1.0.0.

make ci green on fr70.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(import): splitting pasted otpauth:// links runs no character loop</title>
<updated>2026-10-27T00:08:30+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-27T00:08:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=86c11634379ab87238d794f8f9e8bbc991041e4d'/>
<id>urn:sha1:86c11634379ab87238d794f8f9e8bbc991041e4d</id>
<content type='text'>
OtpAuth.splitUris/firstWord looped over every character in one event, so
pasting about 100 links tripped the watchdog (the UI fixture imports Aegis
JSON, so it never ran this path). They now use native searches only. New
make watchdog case uris_100 (13,576 characters, twice per event) trips on
the old code and passes now. fr70: make lint, make test, make watchdog pass.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(pin): the work after a PIN and the change queue run in steps</title>
<updated>2026-10-27T00:01:18+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-27T00:01:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=bc4cc19df5f53519ca1aabd3cf161b6d78ffc16c'/>
<id>urn:sha1:bc4cc19df5f53519ca1aabd3cf161b6d78ffc16c</id>
<content type='text'>
After a correct or new PIN, promoting pending entries and applying waiting
"Require PIN" changes ran in the event of the last PBKDF2 step; 16 waiting
changes tripped the watchdog on the Forerunner 70. ChangeQueue.LockJob now
does it in steps while the PIN screen shows "Checking...", saves what it did
to the results and refreshes the glance after Set PIN too.

The list title decrypted every waiting change at each start. Queue items
are now [action, box] (aad OTPW-Q-2 + action code), so they are counted
without decrypting; 0.9.0 items are still read. A replacement is checked
when it arrives and its material is sealed apart (qm.&lt;n&gt;). Large buffers
are wiped and UTF-8-checked in pieces (Jobs.Wiper, Bytes.utf8Prefix,
SealedBox.openKeep/sealKeep). "Phone changes" reads behind "Reading...",
and Confirm all / Reject all act only on the changes shown. Storage full
no longer stops the app at the PIN.

Found by the review of b8addc8/096b5a4 and a new make watchdog test; the
diff was reviewed again and its findings fixed. fr70: make lint, make test
(176), make watchdog (19 cases at two steps per event), make screenshots
pass; list_locked and list_reset goldens show "Results ready (menu)".

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(pin): START never submits on touch; Change PIN asks once after a legacy PIN</title>
<updated>2026-10-26T14:20:20+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-26T14:20:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=34daecaa25e5bdd995179a2b4b9d922f8bbb3b54'/>
<id>urn:sha1:34daecaa25e5bdd995179a2b4b9d922f8bbb3b54</id>
<content type='text'>
A legacy PIN (0.8.0 or earlier) on a touch screen was still submitted by
START, and a tap that also arrives as START could submit the digits
typed so far as a counted wrong PIN. The OK key is tapped instead.
"Change PIN" while locked with a legacy PIN asked for the new PIN twice:
the forced new PIN after the unlock is now the change.

Found in the review of b8addc8 and 096b5a4. make test and make
screenshots pass on the Forerunner 70.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>test(ui): second UI scenario, and the fixes it found</title>
<updated>2026-10-25T22:51:52+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-25T22:51:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=b8addc87f804789368612bf8e1be31a2bf28efe1'/>
<id>urn:sha1:b8addc87f804789368612bf8e1be31a2bf28efe1</id>
<content type='text'>
A second UI-test build (uitest-extra.jungle) covers the legacy PIN and
the forced new PIN, Change and Reset PIN, a queued Require PIN, UPC-A,
Code 39, the code error screen, the encoding progress, auto-lock on a
barcode, the light theme and the glance without a code; the main flow
adds the Steam and Library details and the menu's text screens.

Fixed from what it found: Entry IDs tripped the watchdog with 110
entries; auto-lock didn't close a locked barcode; a queued Require PIN
showed "Confirm in menu"; locked barcodes lacked the padlock; the PIN
keypad's bottom row, the Reset PIN question, text-screen bottoms, the
glance title and the light-theme warning colour.

Goldens approved on all seven watches; only the Forerunner 70 was
re-verified after the version bump.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(codes): encoding progress follows the work</title>
<updated>2026-10-25T13:17:45+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-25T13:17:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=140a6660f63f88d05ba9aae0bf1c4b401bb6574d'/>
<id>urn:sha1:140a6660f63f88d05ba9aae0bf1c4b401bb6574d</id>
<content type='text'>
The QR percentage counted phases and the display froze at 90 % once
encoding ended, so the first opening sat at 90 % while the slow stages
ran. Each 2D symbology now weights its phases by measured cost,
interpolates inside the long ones, and the display splits encode,
pack and runs; a cached code counts its runs from 0.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix(ui): vertical swipes and drags scroll the list and text screens</title>
<updated>2026-10-25T12:13:39+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-25T12:13:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=404b505a41362f340e79374ee3ad4dbd468da3e4'/>
<id>urn:sha1:404b505a41362f340e79374ee3ad4dbd468da3e4</id>
<content type='text'>
The Forerunner 70 sends no page behaviour for a swipe on a custom view,
so the list and info screens only scrolled with the buttons. Swipes and
drags now scroll them directly; one gesture scrolls once even when the
device also sends the page behaviour, and a drag's release opens no row.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(pin): exactly 4 digits, entered on the 4th digit</title>
<updated>2026-10-25T11:46:42+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-25T11:46:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=096b5a4d17c85fa5f87db3e72364e9c3506d1e64'/>
<id>urn:sha1:096b5a4d17c85fa5f87db3e72364e9c3506d1e64</id>
<content type='text'>
The keypad has no OK key; the 4th digit submits, so a tap that also
arrives as START can no longer submit a partial PIN (the likely cause
of "Wrong PIN" before the code opened). PINs set by earlier versions
still unlock and are then replaced by a 4-digit one. Opening an entry
ignores a second request from the same tap. A Require PIN sent from
the phone while the watch is locked now applies at the next PIN
instead of waiting for Confirm all. The linter skips .claude.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: user guide, known limitations and M8 results; bump to 0.8.0</title>
<updated>2026-10-21T01:55:15+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-21T01:55:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=f439beec17419ccbe0dc7643cc039079f15e04a0'/>
<id>urn:sha1:f439beec17419ccbe0dc7643cc039079f15e04a0</id>
<content type='text'>
0.8.0 is the release candidate: 1.0.0 is tagged after the on-watch
checklist (docs/TESTING.md).

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