docs: fully itemize v1.12.0 changelog for phone reading

Break every multi-clause bullet into short sub-items so each line is one
idea, optimized for mobile reading.

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
This commit is contained in:
Claude
2026-06-13 23:13:39 +00:00
parent b98c226e19
commit 5cdc21a7c0
+109 -67
View File
@@ -2,60 +2,67 @@
Highlights:
- **Cashu wallet** — a new in-app NIP-60 ecash wallet with mint management, top-ups, and NIP-61 nutzaps.
- **CLINK payments** — a new Lightning rail with spending budgets, NIP-05 offer discovery, and a unified Send Payment screen.
- **Private posts & reactions** — post, reply, react, and zap privately, all end-to-end encrypted via NIP-17 gift wraps.
- **Workouts** — record and browse NIP-101e workout records (kind 1301) in a dedicated feed.
- **Math in notes** — write inline and block LaTeX that renders right in the timeline.
- **Audio visualizer** — a live, styleable visualizer that reacts to whatever audio is playing.
- **Activity cards** — likes, zaps, and nutzaps render as rich gradient cards that tap through to the thread.
- **Software Apps** — a browsable NIP-82 app directory, plus editable NIP-89 app recommendations on your profile.
- **Music** — publish and browse music tracks and playlists, with their own feeds.
- **Pinned DMs** — pin important conversations to the top of the chat list, synced across devices.
- **Desktop** — image compression on upload, a new media player, group-DM parity, a Replies tab, and a refreshed feed.
- **Cashu wallet** — a new in-app NIP-60 ecash wallet.
- **CLINK payments** — a new Lightning rail with budgets and a unified Send Payment screen.
- **Private posts & reactions** — post, reply, react, and zap privately via NIP-17.
- **Workouts** — record and browse NIP-101e workouts in a dedicated feed.
- **Math in notes** — write inline and block LaTeX in the timeline.
- **Audio visualizer** — a live, styleable visualizer for whatever audio is playing.
- **Activity cards** — likes, zaps, and nutzaps render as rich gradient cards.
- **Software Apps** — a browsable NIP-82 app directory.
- **Music** — publish and browse music tracks and playlists.
- **Pinned DMs** — pin conversations to the top of the chat list.
- **Desktop** — image compression, a new media player, group DMs, and a refreshed feed.
## New Features
### Payments
- **CLINK — a new Lightning payment rail.** Pay and get paid through CLINK Offers and Debits, an interoperable Lightning-over-Nostr scheme.
- **CLINK — a new Lightning payment rail.**
- Pay and get paid through CLINK Offers and Debits.
- An interoperable Lightning-over-Nostr scheme.
- Profiles can show a tappable CLINK Offer chip.
- You can pay a contact directly from their profile.
- Pay a contact directly from their profile.
- **Spending budgets for CLINK debits.**
- Set one-time or recurring limits.
- A debit connection pulls funds only up to the cap you set.
- **Discover offers by NIP-05.** Resolve a person's payment offer straight from their `name@domain` address.
- **Unified Send Payment screen.** Reach every rail from one place:
- Lightning, CLINK, on-chain Bitcoin, and Cashu/nutzaps.
- **Discover offers by NIP-05.**
- Resolve a person's payment offer from their `name@domain` address.
- **Unified Send Payment screen.**
- Reach Lightning, CLINK, on-chain Bitcoin, and Cashu/nutzaps from one place.
- A "Pay from" selector chooses which wallet the money leaves.
- **On-chain payments.**
- Pay Bitcoin payment targets from the in-app on-chain wallet.
- Pay a contact's on-chain "Bit" recipient directly.
- **Unified payment-rail chips** on the profile header.
- Long-press any chip to copy that destination.
- **Manage multiple wallets.** Add and pick between wallet types from the payment flow.
- **Manage multiple wallets.**
- Add an NWC (Nostr Wallet Connect) wallet.
- Add a CLINK debit wallet.
- Add a Cashu wallet.
- **Cashu ecash wallet (new, NIP-60).** A full in-app ecash wallet, beyond the previous redeem-only support.
- Create and add a Cashu wallet, with a dedicated wallet screen and settings.
- Pick between them from the payment flow.
- **Cashu ecash wallet (new, NIP-60).**
- A full in-app ecash wallet, beyond the previous redeem-only support.
- Create and add a Cashu wallet, with its own screen and settings.
- Browse and pick mints from a mint directory.
- A standalone mint top-up screen.
- Per-mint balances on the wallet.
- Send NIP-61 nutzaps from the wallet, with a send progress bar that matches the Lightning experience.
- Top up a mint from a standalone screen.
- See per-mint balances on the wallet.
- Send NIP-61 nutzaps from the wallet.
- A send progress bar that matches the Lightning experience.
### Posting & Privacy
- **Private posts and replies.**
- Composed and delivered as NIP-17 gift wraps.
- An editable "Notify" block lets you choose exactly who can read a private post.
- An editable "Notify" block picks exactly who can read a private post.
- **Private reactions.**
- React and un-react privately.
- Safeguards prevent private content from leaking publicly.
- **Private zaps.**
- Zaps on private notes are forced private.
- Replies to a private zap route into the sender's DM room.
- **NIP-32 hashtag labels.** Add first-class hashtag labels to posts.
- **NIP-32 hashtag labels.**
- Add first-class hashtag labels to posts.
- Follow-hashtag labels publish through your outbox relays.
- They surface in the hashtag feed.
- **Compose polish.**
@@ -70,17 +77,19 @@ Highlights:
- **Pin DM conversations** to the top of your chat list.
- Pins sync across devices via a NIP-78 app-data event.
- **@-mention search in Marmot (MLS) group chats.** Search and tag users in the group composer.
- **@-mention search in Marmot (MLS) group chats.**
- Search and tag users in the group composer.
- Conversation participants rank first.
- They are marked with an "In this chat" chip.
- **Quoted chat messages** now render inside chat bubbles with the proper chat-reply design.
- The redundant reply row is skipped when the message is already quoted inline.
- **Quoted chat messages in bubbles.**
- Quotes render inside chat bubbles with the proper chat-reply design.
- The redundant reply row is skipped when the quote is already inline.
- **MLS reliability.**
- Unread state now persists across app restarts.
- The kind:445 backlog is no longer refetched on every launch.
- **Share to DM.**
- A new "Share to DM" route sends content straight into a conversation.
- The room screen accepts a shared attachment so the draft opens pre-filled.
- The room screen accepts a shared attachment, so the draft opens pre-filled.
- **Reply to zaps from the notification screen.**
- Reply directly to a zap from Notifications.
- Nutzap chips reply on long-press.
@@ -94,16 +103,20 @@ Highlights:
- Reactions, zaps, likes, and nutzaps render as gradient cards.
- Each card embeds the post it's about.
- A single tap on a like/zap chip opens that event's thread.
- **Workouts feed.** A dedicated feed for NIP-101e workout records (kind 1301).
- **Music (new).** Tracks (kind 36787) and playlists get first-class support.
- **Workouts feed.**
- A dedicated feed for NIP-101e workout records (kind 1301).
- **Music (new).**
- First-class support for tracks (kind 36787) and playlists.
- Browse Music Tracks and Music Playlists feeds.
- Publish a new track and create playlists.
- Add a track to a playlist from a bottom sheet.
- **Software Apps directory (new, NIP-82).** Browse software applications (kind 32267).
- **Software Apps directory (new, NIP-82).**
- Browse software applications (kind 32267).
- Filter by follows, author, hashtag, or global.
- An app detail screen shows screenshots and the author.
- Tap a screenshot to open it fullscreen.
- **App recommendations (NIP-89).** Editable recommendations on your profile.
- **App recommendations (NIP-89).**
- Editable recommendations on your profile.
- Tiered ordering in the recommendations editor.
- Richer app cards with author attribution.
- **New community renderers.**
@@ -111,11 +124,13 @@ Highlights:
- Agora fundraiser campaigns (kind 33863).
- **Cleaner feeds.**
- Reactions and zaps anchor their own thread view.
- Reposts whose boosted kind isn't supported are hidden instead of showing blank cards.
- **Audio visualizer (new).** A live visualizer that reacts to the audio you're playing.
- Reposts of an unsupported kind are hidden instead of showing blank cards.
- **Audio visualizer (new).**
- A live visualizer that reacts to the audio you're playing.
- Real-time FFT spectrum driven from the playback PCM stream.
- Selectable styles: Classic, Static, Aurora, Waves, and Radial.
- A settings screen with live previews; your choice syncs via NIP-78.
- A settings screen with live previews.
- Your choice syncs via NIP-78.
- Fills the height in fullscreen and shows a fixed strip in the feed.
- **Podcasts.**
- Tap a podcast to open a show screen listing all its episodes.
@@ -132,9 +147,12 @@ Highlights:
## Performance
- Pinned-DM state reads are deferred to the row and menu, keeping the chat list smooth.
- Parsed CLINK offers are cached for NIP-05 lookups, using case-insensitive keys.
- The "fix missing spaces" pass indexes URLs by their first character to avoid repeated scans.
- Pinned-DM state reads are deferred to the row and menu.
- The chat list stays smooth.
- Parsed CLINK offers are cached for NIP-05 lookups.
- Uses case-insensitive keys.
- The "fix missing spaces" pass indexes URLs by their first character.
- Avoids repeated scans.
## Improvements and Bug fixes
@@ -150,7 +168,7 @@ Highlights:
- Profile zaps that should be anonymous are no longer encrypted as private zaps.
- Media uploads in anonymous posts use an ephemeral signer.
- **Wallet.**
- The Cashu wallet row now shows the Cashu logo instead of a generic icon.
- The Cashu wallet row shows the Cashu logo instead of a generic icon.
- Own on-chain zaps highlight the bolt and show as pending in the counter.
- Tidied the wallet screen layout.
- **Zap settings.**
@@ -159,39 +177,54 @@ Highlights:
- **Cashu top-up** is now crash-safe on retry.
- Funds are checkpointed the instant they leave the wallet.
- They are never re-moved on a retry.
- **Zap popup.** It now reacts to Lightning-address and Cashu/nutzap info loading, so the payment rails appear live as they resolve.
- **Zap popup.**
- Reacts to Lightning-address and Cashu/nutzap info as it loads.
- The payment rails now appear live as they resolve.
- **Tor.**
- Relay backoff is honored during Tor bootstrap.
- A new "money operations" relay category keeps payment traffic on the right transport.
- Sockets opened on the wrong transport are rebuilt.
- **DM history loading.**
- Per-relay download windows realign when DMs are pruned.
- A slow Tor connect is no longer mislabeled as "stalled".
- The paused-history card shows parked relays, and the sync marker is tappable.
- **Live streams.** Fixed the live-stream chat relay fallback.
- **Polls.** Zap and non-zap polls now share the same option text.
- **Video.** Legacy NIP-71 videos now resolve their address from the real `d` tag.
- **Media server.** The default media server no longer resets on every launch.
- **Accounts.** Deleting an account now clears its cached entry.
- **Metadata.** A non-spec birthday value can no longer drop an entire profile.
- The paused-history card shows parked relays.
- The sync marker is now tappable.
- **Live streams.**
- Fixed the live-stream chat relay fallback.
- **Polls.**
- Zap and non-zap polls now share the same option text.
- **Video.**
- Legacy NIP-71 videos resolve their address from the real `d` tag.
- **Media server.**
- The default media server no longer resets on every launch.
- **Accounts.**
- Deleting an account now clears its cached entry.
- **Metadata.**
- A non-spec birthday value can no longer drop an entire profile.
- **Deletions (NIP-09).**
- Deleting a note now severs child back-references.
- It detaches on-chain-zap, nutzap, and channel sources from the cache.
- **Hardening.**
- Many audit fixes across the private-posts, CLINK, and MLS paths.
- Covers off-main-thread crypto, leak prevention, and hiding share/bookmark on private notes.
- Reduced runtime log noise.
- Fixed several edge-case crashes.
- Covers off-main-thread crypto and leak prevention.
- Hides share/bookmark on private notes.
- **General.**
- Reduced runtime log noise.
- Fixed several edge-case crashes.
## Desktop
- **Image compression on upload.** A new compression pipeline with:
- **Image compression on upload.**
- An Image Compression settings panel.
- Per-post quality presets.
- Batch progress in the composer.
- A preview-then-publish gate.
- A fail-loud dialog if compression fails.
- **New media player.** Replaced vlcj with kdroidFilter's ComposeMediaPlayer (JCodec/FFmpeg backend).
- **Group DM parity with Android.** Desktop now handles group direct messages the same way.
- **New media player.**
- Replaced vlcj with kdroidFilter's ComposeMediaPlayer.
- Uses a JCodec/FFmpeg backend.
- **Group DM parity with Android.**
- Desktop now handles group direct messages the same way.
- **Replies tab** on the user profile.
- Feeds also show reply context (parent embed plus label) inline.
- **Feed refresh.**
@@ -205,8 +238,10 @@ Highlights:
- Amethyst logo on the Tor and account-loading splashes.
- Restored inter-word spacing in rich text with mentions/hashtags.
- Fixed parent-author metadata loading.
- **Unhealthy-relay review.** A banner and popup that flag relays behaving poorly.
- **Namecoin diagnostics** card ported from the Android settings.
- **Unhealthy-relay review.**
- A banner and popup that flag relays behaving poorly.
- **Namecoin diagnostics.**
- The diagnostics card was ported from the Android settings.
## Cli
@@ -219,12 +254,13 @@ Highlights:
## Quartz
- **Relay-server toolkit.** Major work toward running a relay from Quartz:
- **Relay-server toolkit.**
- A `Flow<Event>` REQ-responder SPI with a storage-free dispatch engine.
- NIP-50 search parsing.
- Suspendable auth hooks.
- Split engine/backend/policy packages.
- **NIP-45 approximate COUNT** via HyperLogLog construction, with wire support.
- **NIP-45 approximate COUNT.**
- HyperLogLog construction, with wire support.
- **NIP-11.**
- Added the missing `banner` field.
- Relay limits are now a single source of truth served over NIP-11.
@@ -232,28 +268,35 @@ Highlights:
- Stable per-connection ids.
- A per-connection `RequestContext` threaded into the event source.
- Auth identity moved from policy into connection scope.
- **NIP-46.** Fixed a bunker double-resume and retry id-reuse race.
- Fixed `q` (quote) tags being dropped by an inverted guard.
- Registered `CommunityRulesEvent` and CLINK DTO serializers (including Kotlin/Native targets).
- **NIP-46.**
- Fixed a bunker double-resume and retry id-reuse race.
- **Other.**
- Fixed `q` (quote) tags being dropped by an inverted guard.
- Registered `CommunityRulesEvent` and CLINK DTO serializers (incl. Kotlin/Native).
## Build & Documentation
- **Dependency updates.**
- Bumped Kotlin, Compose Multiplatform 1.11.1, Coil 5, OkHttp 5, Jackson, AndroidX, Firebase, and more.
- The Blossom interceptor test was adapted to OkHttp 5's `Interceptor.Chain`.
- Adapted the Blossom interceptor test to OkHttp 5's `Interceptor.Chain`.
- **iOS CI.**
- `commons` `commonTest` now compiles and runs on iOS targets.
- CI runs the shared `commonTest` on iOS for `:commons`.
- **Amethyst → commons migration (KMP/iOS).** A large effort moving shared, CLI-safe code out of the Android app into `commons` so it works on every front end:
- **Amethyst → commons migration (KMP/iOS).**
- Moves shared, CLI-safe code out of the Android app into `commons`.
- Decryption caches (Mute/People/Community, Hashtag, Favorite-algo, Trust-provider).
- Models: InterestSet, LabeledBookmarkList, NwcWalletEntry, CashuToken, OwnedEmojiPack.
- The link-preview fetcher, relay broadcast tracker, and CLI-safe util extensions.
- `HtmlParser` made KMP (dropped its Java `Charset` dependency).
- A consolidated package taxonomy with a new architecture doc.
- **Licensing.** Replaced the GPLv3 `TarsosDSP` dependency with an in-house pitch shifter for the voice anonymizer, keeping the project MIT-clean.
- Added a monochrome outline Cashu icon to the Material Symbols set.
- Renamed `ReplaceableVideoEvent` to `AddressableVideoEvent` for spec accuracy.
- Split the monolithic CHANGELOG into per-version files under `docs/changelog/`.
- **Licensing.**
- Replaced the GPLv3 `TarsosDSP` dependency with an in-house pitch shifter for the voice anonymizer.
- Keeps the project MIT-clean.
- **Misc.**
- Added a monochrome outline Cashu icon to the Material Symbols set.
- Renamed `ReplaceableVideoEvent` to `AddressableVideoEvent` for spec accuracy.
- Split the monolithic CHANGELOG into per-version files under `docs/changelog/`.
- `versionName` branch detection sets the git cwd, so it works inside git worktrees.
- **SonarQube cleanup (S1871).**
- Merged duplicate `when`/`if` arms across the codebase.
- Migrated `Log` calls to the lambda overload.
@@ -261,7 +304,6 @@ Highlights:
- Documented an Amethyst→commons migration plan and target package hierarchy.
- Refreshed several Claude skills and the Namecoin design doc.
- Added a rule requiring a license check when adding any new dependency.
- `versionName` branch detection now sets the git cwd, so it works inside git worktrees.
## Contributors