<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinosv3.git/src/features, branch fdroid-v1.8</title>
<subtitle>coinos v3 — bitcoin, Ark, Lightning and nostr wallet (web + Android)</subtitle>
<id>https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.8</id>
<link rel='self' href='https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.8'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/'/>
<updated>2026-09-17T14:54:35Z</updated>
<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>
<entry>
<title>Gift detail links the coin behind the gift, and the claim once claimed.</title>
<updated>2026-09-16T04:56:18Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T04:56:18Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=b58e3dc1eb2a578f1cae441d8bba9503bec94567'/>
<id>urn:sha1:b58e3dc1eb2a578f1cae441d8bba9503bec94567</id>
<content type='text'>
An unclaimed on-chain gift has no transaction of its own yet — its
funding transaction is presigned and only broadcast when someone claims.
The coin it's locked against is on-chain from the start, so the detail
page now links that outpoint's transaction on the block explorer, and
the claim transaction once it exists.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>Coins page: renewal is automatic, and the copy says so first.</title>
<updated>2026-09-16T04:46:24Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T04:46:24Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=f7a6a2bb49ce2d718f1f2ef7b5692be873bb2734'/>
<id>urn:sha1:f7a6a2bb49ce2d718f1f2ef7b5692be873bb2734</id>
<content type='text'>
The renewal card opened with how to renew and mentioned only at the end
that the wallet does it by itself, which read as an invitation to renew
by hand. It now leads with the automatic, free renewal before expiry,
then says renewing early is only for someone who would rather not count
on the coinos server, with the round cadence taken from the server's
own info (two minutes now, not the hour the old text claimed). The
"past its expiry" footnote under the table is gone. Stale translations
of the rewritten strings fall back to English.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z
</content>
</entry>
<entry>
<title>Cached faces warm from the wallet's own namespace, once its keys are in.</title>
<updated>2026-09-16T04:45:11Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T04:45:11Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=3ff00c59bbe350642b23e8b3527b0d07b16bee0e'/>
<id>urn:sha1:3ff00c59bbe350642b23e8b3527b0d07b16bee0e</id>
<content type='text'>
On the phone the profile cache was intact — 150 faces, our own with a
thumbnail — yet an offline boot drew a punk in the header. The header
asks for a face before a silent sign-in has finished resuming, and the
warm-up ran then: it read an empty slot under a keyless namespace and
counted itself done. Online the relays refilled the map and nobody saw
it; offline nothing did. The warm-up now waits for the wallet's keys and
runs again at feature init, from the right namespace.

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