<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otpGarmin/docs/PERFORMANCE.md, 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-27T00:08:30+00:00</updated>
<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>docs: record the settings spike and the Forerunner 70 benchmark</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=e0384274bbeab999279bdc35bdddbd8a3a451aeb'/>
<id>urn:sha1:e0384274bbeab999279bdc35bdddbd8a3a451aeb</id>
<content type='text'>
Spike (2026-10-21, Android): 8000 characters per field and 64,000 in
total arrive; URIs with &amp; save; the mixed special-character string is
refused, so the test strings now split it into one group each plus a
fake Aegis export. Benchmark: SHA-1 TOTP 18 ms, SHA-512 732 ms, PBKDF2
2,000 iterations per second.

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>docs: record M7 (settings forms) results; bump to 0.7.0</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=6039571d70b1f6de1ae384e58e11879869be356c'/>
<id>urn:sha1:6039571d70b1f6de1ae384e58e11879869be356c</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: record M6 (all 12 symbologies) results; bump to 0.6.0</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=25910f3a7a7fb28c4a58367b6e56dd2468b60933'/>
<id>urn:sha1:25910f3a7a7fb28c4a58367b6e56dd2468b60933</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: record M6b (QR) results</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=93d0becabf76aaa568989f295ca9b8a2c387f0cc'/>
<id>urn:sha1:93d0becabf76aaa568989f295ca9b8a2c387f0cc</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: record M5 results; bump to 0.5.0</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=0edb4bb6d76939aa456cbbc8deafeed50fd6182d'/>
<id>urn:sha1:0edb4bb6d76939aa456cbbc8deafeed50fd6182d</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: record M4 results and simulator findings; bump to 0.4.0</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=81a5b903297e59d599dd0d6f580b89597630909d'/>
<id>urn:sha1:81a5b903297e59d599dd0d6f580b89597630909d</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: document the storage format and record M3 results; bump to 0.3.0</title>
<updated>2026-10-19T13:27:37+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-10-19T13:27:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/otpGarmin/commit/?id=97a366e8b7c540b246c7bf9d04625526cbdc88ba'/>
<id>urn:sha1:97a366e8b7c540b246c7bf9d04625526cbdc88ba</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
