Switch the Compose Settings screen from the tightly-spaced legacy
SettingsRow list to the card-based SettingsSection / SettingsControlRow
pattern already used by SecurityFiltersScreen. Adds leading icons,
proper breathing room between items, and full-row tap targets for the
switches.
Replaces internal class names and implementation jargon with
reader-facing descriptions, and drops a few pure-internal lines
(AccountManager migration, SQLite parity matrix, remember-wrapper
removal, ProGuard/R8 keep rules).
https://claude.ai/code/session_01PyGyMpa9XvTHrB4iqZX5oZ
Walks the full v1.08.0..HEAD non-merge history and corrects items that
were absent or under-represented relative to what shipped:
- Fixes inaccuracy: DLNA casting was removed before release; casting is
Chromecast-only on the Play build.
- Promotes Interest Sets (NIP-51) from a fix-line to a feature.
- Adds configurable bottom nav, drawer reorganization, autoplay-videos
setting, lifecycle-aware subscriptions, adaptive video cache, account
settings republish-to-new-relays, Tor clearnet fallback, and more.
- Expands NIP-34 (PRs, Status, Repo State), the custom secp256k1 entry
(Kotlin core + C/JNI accelerated path), Namecoin, and Marmot scope.
https://claude.ai/code/session_01PyGyMpa9XvTHrB4iqZX5oZ
Adds mid-April features the original draft skipped: custom emoji packs
(NIP-30), standalone drawer screens (Articles/Products/Public Chats/
Communities/Live Streams/Follow Packs), richer live stream chat,
media content warnings, the video quality picker, desktop App Drawer
and workspace management, plus PDF reader zoom details.
https://claude.ai/code/session_01PyGyMpa9XvTHrB4iqZX5oZ
Switch the three image NetworkFetcher sites from
ConcurrentRequestStrategy.UNCOORDINATED to DeDupeConcurrentRequestStrategy,
Coil's coordinated default. UNCOORDINATED let every request hit the
network independently, so the same avatar across many visible feed
notes became N parallel downloads competing for the per-host
dispatcher slots and queueing the genuinely distinct images behind
them. The de-duping strategy lets concurrent requests for a URL share
the first download and then read from disk.
https://claude.ai/code/session_01BeWZGTz48kzURQLTYyN5x9
Gives the reactive ObservableEventStore layer its own Quartz bullet
(it is store-agnostic, not SQLite-specific) and lists Pull Notification
(internal Pokey) under What's New.
https://claude.ai/code/session_01PyGyMpa9XvTHrB4iqZX5oZ
pin "Add more…" button to bottom of populated favourites screen
group empty-state icon/headline/steps and add top breathing room
spread empty-state evenly and add numbered step prefixes
replace empty-state subtitle with 2-step instruction including inline star icon
hide explainer when favorite feeds exist and add "Add more…" button
Adds the v1.09.0 "We are going crazy" release notes, including the
last 2-3 weeks of work: Desktop multi-account, scheduled posts, LAN
video casting, thread muting, configurable home tabs, NIP-9A community
rules, the geode relay module, expanded QUIC RFC coverage and
quic-interop-runner results, moq-lite nestsClient, and the May fixes.
https://claude.ai/code/session_01PyGyMpa9XvTHrB4iqZX5oZ
An addressable event whose `a` tags reach itself — directly (self-mention)
or via any cycle of other in-cache events — would recurse unbounded
through `AddressHintProvider` / `EventHintProvider` branches and crash
with StackOverflowError on publish (`signAndComputeBroadcast` →
`computeRelayListToBroadcast`). The crash was reproducible on the device
when publishing a kind-1 note that referenced an article whose own event
carries a self `a` tag (e.g. YakiHonne-authored long-form posts include
their own naddr in their `a` tags).
Adds Czech, German, Brazilian Portuguese, and Swedish translations
for 19 new keys covering auto-create-drafts compose settings,
profile-UI section toggles, security-screen empty states and
section headers, external-resource comment scopes, and nest
host-action failure toasts.
On every re-subscribe (listener reconnect or publisher-cycle), the
moq-lite relay re-serves its cached latest group from the first frame.
The wrapper forwarded it straight into the decoder, so in a fully-muted
room the same old clip looped once per reconnect. Track the highest
group sequence delivered by prior subscriptions and drop any group not
strictly newer, mirroring kixelated/hang's Container.Consumer.#run.
https://claude.ai/code/session_01G9h2dzkEj6Y2F1Yr2kCojp
Move the detectDragGestures pointerInput from the whole button card to
the six-dot drag handle icon so drag-and-drop reordering activates only
when the user grabs the handle.
https://claude.ai/code/session_01Jyu8dLYN7MXVNaVZE3u2M9
Members were sorted to float the current speaker to the top, so a
member jumped to the front when they started talking and slid back
~250ms after they stopped — a constant shuffle in any active room.
The speaking state is already shown in-place via the mic badge and
audio-level ring, so keep members in their stable arrival order.
https://claude.ai/code/session_01GvvNS1FRn6gGvHRC7dgEtP
Convert the per-account `disableClientTag` toggle into a positive
`addClientTag` setting that defaults to enabled, and relocate it from the
Security Filters screen to the Compose Settings page.
https://claude.ai/code/session_01TkmBzzEz3kKnrjpbrKCpsf
The AppImage build inputs (AppRun, .desktop entry, icon, and the
CI-fetched linuxdeploy binary) are consumed only by desktopApp's
createReleaseAppImage task. Co-locating them under
desktopApp/packaging/appimage/ removes the `../` path escape from the
build script and keeps all desktop packaging assets inside the module.
https://claude.ai/code/session_0137ULcfJkASmfmffFBdW8ac
The bottom add-word text field sat behind the phone's navigation
and gesture bars. Apply the union of navigation bar and IME insets
to the bottom bar so it clears the system bars and rises with the
keyboard without a double-counted gap.
https://claude.ai/code/session_01KPkQbS9SYTigkkzYGU97Sz