<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinosv3.git, branch fdroid-v1.7</title>
<subtitle>coinos v3 — bitcoin, Ark, Lightning and nostr wallet (web + Android)</subtitle>
<id>https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.7</id>
<link rel='self' href='https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.7'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/'/>
<updated>2026-09-17T21:33:40Z</updated>
<entry>
<title>F-Droid: fastlane metadata in-repo, text lockfile, version 1.7 (code 8).</title>
<updated>2026-09-17T21:33:40Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-17T21:33:40Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=d4f1df179810c58c825b37afe01034a40d287c76'/>
<id>urn:sha1:d4f1df179810c58c825b37afe01034a40d287c76</id>
<content type='text'>
From the fdroiddata review and its pipeline: store text (summary,
description, icon, changelogs) belongs in fastlane/ here rather than in
the recipe; the category is "Wallet"; the scanner strips committed APKs
by itself, so the two scandelete entries go; and bun.lockb is a binary
the scanner flags — replaced by Bun's text lockfile (bun.lock, same
pinned versions). A new tag is needed for the new tree, so 1.7.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>Android: a reproducible F-Droid flavor with the web app bundled inside.</title>
<updated>2026-09-17T15:19:41Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-17T15:19:41Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=1bd3e2613641a8d2bc63c262a58cad126632459f'/>
<id>urn:sha1:1bd3e2613641a8d2bc63c262a58cad126632459f</id>
<content type='text'>
The Android builds so far were shells around the live site: a verified
APK proved nothing about the code that ran. The new `fdroid` flavor
(io.coinos.fdroid) shares the WebView shell and carries the built web
app in its assets. The page still lives at the v3.coinos.io origin — same
storage, links and gift URLs — but every file under it is answered from
the APK (Assets.java); only the site's live API paths reach the network,
and the bundled page registers no service worker (HAL_NO_SW=1).

Two clean unsigned builds give the same APK. COINOS_UNSIGNED=1 builds
without the keystore; Bun is pinned via packageManager; the Gradle wrapper
properties pin 8.12. fdroid/io.coinos.fdroid.yml is the fdroiddata recipe
(checksum-pinned Bun in sudo, prebuild web build, scandelete, our signing
key allowed for the Binaries match) and docs/REPRODUCIBLE.md the how-to.
Verified on a phone: the bundled build cold-starts in airplane mode.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>The reply row's paperclip and preview buttons stay their size as the box grows.</title>
<updated>2026-09-17T14:57:39Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-17T14:57:39Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=16c77b192e27ab08c7aa8ee821f2b1cc41013ac9'/>
<id>urn:sha1:16c77b192e27ab08c7aa8ee821f2b1cc41013ac9</id>
<content type='text'>
Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>A thread reply is a growing textarea: Enter sends, Shift+Enter breaks the line.</title>
<updated>2026-09-17T14:54:35Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-17T14:54:35Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=8d66d66eaa10041cce1655b7932f694fb7696586'/>
<id>urn:sha1:8d66d66eaa10041cce1655b7932f694fb7696586</id>
<content type='text'>
Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>Pay from a profile opens the Send form, not a lingering payment detail.</title>
<updated>2026-09-17T04:27:00Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-17T04:27:00Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=9360ca6806332a9c7e3a2e11f0b973511493c192'/>
<id>urn:sha1:9360ca6806332a9c7e3a2e11f0b973511493c192</id>
<content type='text'>
A tapped history row claims the whole tab area whichever tab is picked,
so jumping to ui.tab = 'send' from a profile's Pay button (or a zap's
form fallback) with a renewal's detail still open showed that detail
instead of the form. showSend() closes any open detail first; the three
feature paths that jump to Send use it.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>A note that wasn't found is asked for again, with the reactor's relay hint.</title>
<updated>2026-09-16T18:25:47Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T18:25:47Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=5484c5effa273e96bca69396ead175515aa06352'/>
<id>urn:sha1:5484c5effa273e96bca69396ead175515aa06352</id>
<content type='text'>
A reaction's target was fetched once from our relays, and a miss was
final for the session — so with our own relay down for an evening, a
reply that sat on four relays showed as "no longer on your relays" until
a reload. A missing note is now retried when next wanted (half a minute
on), the reaction's e-tag relay hint rides along, and tapping the row
asks again instead of doing nothing.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>Feed: what arrives waits behind the pill; the count bumps; no auto-flush.</title>
<updated>2026-09-16T18:23:54Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T18:23:54Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=49caed082a67851fcd5479d1c462b95f1a5d4a7c'/>
<id>urn:sha1:49caed082a67851fcd5479d1c462b95f1a5d4a7c</id>
<content type='text'>
Posts a refresh found slid in a beat after the cached page painted,
moving what you had begun reading, and reaching the top of the page let
waiting posts in with a re-render under a finger on its way to the pill —
the tap landed on the post beneath. Now everything that arrives after the
first paint, the boot catch-up included, waits behind the pill wherever
you are; the pill is a keyed node whose count bumps on each change; and a
tap scrolls to the top before painting so the new posts open under your
eyes. A rebuilt follow list still rebuilds the feed in place.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>A bare @npub in a message resolves to the person's name.</title>
<updated>2026-09-16T05:47:26Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T05:47:26Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=398bb77165e3ff454f1401b3c114a976aae5216c'/>
<id>urn:sha1:398bb77165e3ff454f1401b3c114a976aae5216c</id>
<content type='text'>
Vector writes a mention as @npub1… with no nostr: prefix; ours only
resolved the prefixed form, so the raw key sat in the bubble. Bare npubs
and nprofiles, with or without the @, now render as @name and open the
profile, like the prefixed ones. Keys inside URLs are left alone.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>A changed reaction stays changed: the fold keeps the newest, not the last to arrive.</title>
<updated>2026-09-16T05:39:05Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T05:39:05Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=3d706acd1edccb5c4eb0f781b52b3d302bdafa2b'/>
<id>urn:sha1:3d706acd1edccb5c4eb0f781b52b3d302bdafa2b</id>
<content type='text'>
One reaction per author was folded as "last one in wins". A reload's
backfill hands reactions back in relay order, so a flame swapped for
confetti came back as the flame. Rooms, DMs and the public page now keep
the newest by the rumor's own clock, and an optimistic send stamps its
time so an older one arriving afterwards stays out.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>Community reactions carry the target author's p tag, as Concord specifies.</title>
<updated>2026-09-16T05:19:58Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T05:19:58Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=12e069fc62bff8715de189aedc777b69d1e56377'/>
<id>urn:sha1:12e069fc62bff8715de189aedc777b69d1e56377</id>
<content type='text'>
A reaction sent from v3 never showed in Vector: its parser requires the
NIP-25 p tag naming the reacted-to message's author (CORD examples §2.3
has e, p and k), and ours sent only e and k. Added.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
</feed>
