Commit Graph
15048 Commits
Author SHA1 Message Date
Claude 5fa1d615bf docs: correct v1.12.0 descriptions against PR bodies + verify kinds/NIPs
Verified every event kind and NIP number against quartz code. Read the
feature PR descriptions and fixed inaccuracies:
- Audio visualizer styles (Classic/Spectrum Bars/Color Waves/Radial Ring/
  Aurora Glow/Static/Off; audio-only notes; FFT from decoded audio)
- Podcasts elevated to a new NIP-F4 feature (feeds, favorites, inline player)
- Workouts: create/publish + feed filters (RUNSTR dialect)
- NIP-14 group DMs: subjects + multi-recipient creation + read/mute tracking
- Share to DM reframed as the Android 'Send as DM' share-sheet target
- Cashu wallet: mint-from/melt-to Lightning, send/receive tokens
- CLINK acronym expanded

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-14 00:25:47 +00:00
Claude 344749c007 docs: reconcile v1.12.0 changelog against merged PRs
Reviewed all merged PRs since the v1.11.0 release. Fixed the misleading
'new money operations' Tor line (the toggle already existed; what changed
is relay sockets now honor it). Added gaps the PR titles surfaced: NIP-14
group DM subjects (#3163), removal of wallet reordering drag-and-drop
(#3114), and diagnosable relay failure logs (#3197).

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 23:22:09 +00:00
Claude 5cdc21a7c0 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
2026-06-13 23:13:39 +00:00
Claude b98c226e19 docs: complete v1.12.0 changelog after full commit-by-commit audit
Read all 352 non-merge commits since v1.11.0 and added the remaining
gaps: GPLv3 TarsosDSP -> in-house pitch shifter (licensing/voice
anonymizer), live-stream chat relay fallback, DM history-loading fixes,
legacy NIP-71 video d-tag, media-server reset, account cache cleanup,
poll option text, and the Material Symbols Cashu icon.

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 23:06:42 +00:00
Claude a6868a1083 docs: add Cashu wallet, Music, Software Apps, audio visualizer to v1.12.0
A file-level audit (not just commit subjects) surfaced major features hidden
under misleading commit messages: the new NIP-60 Cashu ecash wallet, music
tracks/playlists, the NIP-82 Software Apps directory, the live audio
visualizer, and multi-wallet management (NWC/CLINK-debit/Cashu).

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 23:02:44 +00:00
Claude 4be9cfc687 docs: add missing features to v1.12.0 changelog
Adds Hidden Words unblock, Share to DM, reply-to-zaps from notifications,
the Selected/Global notification split, the podcasts subsystem, desktop
unhealthy-relay review, the live zap-popup rails, and the commons KMP
migration scope.

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 22:57:03 +00:00
Claude 26eea1d183 docs: split remaining multi-sentence items into sub-lists in v1.12.0 changelog
https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 22:54:43 +00:00
Claude eb4524ec58 docs: use template Translations section (Crowdin credits) in v1.12.0 changelog
https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 22:51:28 +00:00
Claude 7695fe6ee9 docs: shorten sentences and add sub-lists in v1.12.0 changelog
https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 22:45:50 +00:00
Claude a2f331eb65 docs: add v1.12.0 changelog covering work since v1.11.0
Summarizes the 506 commits / 131 PRs merged since the v1.11.0 release:
CLINK payments, private posts/reactions via NIP-17, NIP-101e workouts,
LaTeX math rendering, NIP-89 app recommendations, pinned DMs, activity
cards, desktop image compression + new media player, and the Quartz
relay-server toolkit. User-facing sections are written for end users;
build/quartz/cli sections keep developer-level language.

https://claude.ai/code/session_01Y8cDkDRV48GYdQd3CR4kuV
2026-06-13 22:40:03 +00:00
Vitor Pamplona c7e25c5a9e Merge branch 'main' of https://github.com/vitorpamplona/amethyst 2026-06-13 18:18:35 -04:00
Vitor PamplonaandClaude Opus 4.8 a75b60135a fix: adapt Blossom interceptor test to OkHttp 5 Interceptor.Chain
OkHttp 5.4.0 expanded Interceptor.Chain from ~10 to ~40 members, breaking
the test's hand-rolled `object : Interceptor.Chain` fake. Replace it with a
java.lang.reflect.Proxy that implements only request()/proceed() and throws
for the rest, so it survives future interface growth without dozens of empty
stubs. A real OkHttpClient can't be used here because Platform init fails
outside Robolectric (android.util.Log.isLoggable is unavailable).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 18:17:42 -04:00
Vitor Pamplona ece7194456 Updates all dependencies 2026-06-13 18:10:13 -04:00
Vitor PamplonaandGitHub 8dc24d6574 Merge pull request #3211 from mstrofnone/feat/desktop-namecoin-diagnostics
desktop(namecoin): port DiagnosticCard from Android settings
2026-06-13 18:08:46 -04:00
mstrofnone 96943fb0d1 desktop(namecoin): port DiagnosticCard from Android settings
Adds the Namecoin diagnostics card that Android renders below the
per-server test results to the desktop settings panel, so support
requests carry the same information on both platforms.

- last test timestamp + pass/fail tally
- host OS (name/version/arch) — desktop equivalent of Android's
  Build.MANUFACTURER/MODEL row
- JVM name + version — desktop equivalent of Android's API level row
- distinct TLS versions observed during the test run

Also adds a 'Testing next server...' inline progress row matching the
Android section's behaviour when the test loop is mid-run.

Pure UI addition; no model, preference, or callback changes.
2026-06-14 08:01:59 +10:00
Vitor Pamplona f2a48f87ca Finish up the template 2026-06-13 17:50:51 -04:00
Vitor PamplonaandGitHub a47f952f6e Merge pull request #3210 from vitorpamplona/claude/exciting-pascal-1yw9mv
Reorganize changelog into versioned files
2026-06-13 15:39:17 -04:00
Claude 81128ba74a docs: split CHANGELOG into per-version files under docs/changelog
The single CHANGELOG.md had grown to ~7.9k lines. Move it to
docs/changelog/ with one file per release, named with zero-padded
minor/patch versions (e.g. v1.11.00.md) so plain file browsers sort
them correctly. Add a README.md index (newest first) and a TEMPLATE.md
for cutting new releases. The root CHANGELOG.md now points to the new
location.
2026-06-13 18:24:10 +00:00
Vitor PamplonaandGitHub 48a9ad8897 Merge pull request #3209 from davotoula/fix/media-server-default-reset
Stop media-server default from resetting on every launch
2026-06-13 14:10:56 -04:00
Vitor PamplonaandGitHub 60d9917bd3 Merge pull request #3208 from davotoula/fix/relaystat-deadcode-3186
Remove write-only RelayStat liveness fields
2026-06-13 14:09:19 -04:00
davotoula 5551f990a5 fix(quartz): remove write-only RelayStat liveness fields
The RelayStat.lastConnectAt / lastIncomingAt fields added in #3186 were
written on every connect and every incoming relay message (a TimeUtils.now()
call plus a volatile store on the Android hot path) but never read.
2026-06-13 19:43:02 +02:00
davotoula 0f1b4c9597 fix: stop media-server default from resetting on every launch 2026-06-13 19:20:08 +02:00
Vitor PamplonaandGitHub 92249b1481 Merge pull request #3207 from vitorpamplona/claude/blissful-feynman-spfyyx
Migrate notification filter from Global to Selected on first load
2026-06-13 12:05:26 -04:00
Claude cdb56f63e2 fix(notifications): migrate legacy Global filter to Curated once
The notifications "Global" mode was split into a raw Global (every event
that p-tags the user) and a curated Selected mode. Existing users who had
selected the old curated-Global kept a persisted value that now
deserializes to the much-more-permissive raw Global, so they suddenly saw
everything.

Add a one-shot, per-account migration: on load, if the account hasn't been
stamped yet and its notification filter is Global, rewrite it to Selected
and stamp the account. saveToEncryptedStorage always stamps the account as
migrated, so brand-new accounts (and any deliberate raw-Global choice made
after the split) are never reverted.

Only the notifications key is touched; Global keeps its original meaning
for every other feed.
2026-06-13 15:49:35 +00:00
Vitor PamplonaandGitHub 72af326936 Merge pull request #3206 from vitorpamplona/claude/modest-meitner-nejynq
Fix test name grammar in LnZapRequestAnonTagTest
2026-06-13 11:47:51 -04:00
Claude 1f8ab1387a fix: remove comma from Kotlin Native test name in LnZapRequestAnonTagTest
Kotlin/Native (iOS) disallows commas in backtick-quoted function names,
which broke the iosSimulatorArm64MainKlibrary task.
2026-06-13 15:44:52 +00:00
Vitor PamplonaandGitHub 5738c25c79 Merge pull request #3205 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-13 11:44:12 -04:00
Crowdin Bot 6be32b4719 New Crowdin translations by GitHub Action 2026-06-13 15:30:23 +00:00
Vitor PamplonaandGitHub 956d5d6fb5 Merge pull request #3199 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-13 11:28:48 -04:00
Vitor PamplonaandGitHub fcb4b7a9ad Merge pull request #3202 from vitorpamplona/claude/sweet-shannon-smjotq
Redesign activity cards (reactions, zaps, nutzaps) with unified UI
2026-06-13 11:28:38 -04:00
Crowdin Bot 891b0b4f57 New Crowdin translations by GitHub Action 2026-06-13 15:10:25 +00:00
Vitor PamplonaandGitHub cdb0c47b39 Merge pull request #3204 from vitorpamplona/claude/trusting-heisenberg-4iu49o
Add show button to hidden words list
2026-06-13 11:08:53 -04:00
Vitor PamplonaandGitHub c2b9391239 Merge pull request #3203 from vitorpamplona/claude/modernize-post-notify-tags-ogz2h1
Refactor notification chips UI with Material 3 components
2026-06-13 11:07:58 -04:00
Claude 72ecb98749 fix: add spacing before the notify add-user search field
The search field shown after tapping Add sat flush against the notify
chips row. Add a standard vertical spacer so it gets a consistent gap.
2026-06-13 15:00:05 +00:00
Claude 1709d5a30a fix: replies to likes/zaps no longer pull in the liked post's thread
Reactions and zaps keep the post they target in Note.replyTo so the card
can embed it, but that edge bridges into a different conversation. The
anchorsItsOwnThread guard only covered clicking the like/zap itself, not
clicking a kind-1111 reply to one — so opening such a reply's thread had
searchRoot/loadUp climb reply -> like -> liked post -> ... -> root of the
liked post's thread, dropping the reply into the wrong conversation, and
replyLevel buried it several indents deep.

Treat reactions/zaps as thread boundaries everywhere reposts already are:
- ThreadAssembler.searchRoot stops at a reaction/zap node.
- ThreadAssembler.loadUp adds the node but does not climb its replyTo.
- ThreadLevelCalculator (replyLevel + replyLevelSignature) treats them as
  level-0 roots.

The boundary predicate is promoted to a shared Event?.anchorsItsOwnThread().
The data layer (replyTo/replies/computeReplyTo) is unchanged — card
rendering and the notification relevance filter still rely on the link;
only thread traversal stops crossing it.

https://claude.ai/code/session_01LM3KTECMMAdNBHZfs1dANa
2026-06-13 14:57:46 +00:00
Claude 6fcbecb293 fix: make notify chip row spacing match horizontal spacing
Chips render through a selectable Surface that enforces a 48dp minimum
touch target, inflating each chip's measured height above its visible 32dp
pill. That invisible padding dominated the gap between wrapped rows, so the
previous verticalArrangement bump was imperceptible. Disable the minimum
interactive size around the chips so they measure at their visible height
and the row spacing matches the 6dp horizontal spacing.
2026-06-13 14:48:50 +00:00
Claude 6a2033fbb4 feat: show per-row unblock button on Hidden Words screen
Each hidden word now displays an inline unblock button when not in
selection mode, mirroring the Blocked Users screen. Long-press to
multi-select still works for batch unblocking.
2026-06-13 14:46:30 +00:00
Claude 45ce6f2815 fix: render notify chip avatar via leadingIcon to avoid circle clip
InputChip clips its avatar slot to a circle, which cut off the following
badge that BaseUserPicture draws slightly outside the picture's circle.
Pass the picture through the leadingIcon slot instead, which is not clipped.
2026-06-13 14:38:40 +00:00
Claude 82daed3c55 fix: match vertical chip spacing to horizontal in notify row 2026-06-13 14:36:26 +00:00
Claude d7a552770f feat: modernize notify-tag chips in new post screens
Replace the plain solid-color buttons used for Notify: mentions with
Material3 InputChips that show each user's avatar and display name plus a
remove (X) trailing icon, matching the modern contact-chip pattern. The
add-user action now uses an AssistChip with a PersonAdd icon.

Since the Notifying composable is shared, this updates the look across all
new post screens (short notes, comments/replies, and polls).
2026-06-13 03:38:32 +00:00
Vitor PamplonaandGitHub eff826f3d5 Merge pull request #3201 from vitorpamplona/claude/beautiful-ride-n6y3s2
Support private notes: gift-wrap kind-1 replies and posts to p-tagged users
2026-06-12 21:17:55 -04:00
Claude 953f1fe66c feat: add design-time previews for the activity cards
Five previews covering the gradient cards: like (+ heart), custom emoji
reaction, lightning zap, cashu nutzap, and onchain zap — each rendered in
the light/dark ThemeComparisonColumn with a hand-built target note so the
embedded makeItShort post shows. RenderLnZap splits into a thin resolver
plus a stateless RenderLnZapCard so the preview can feed the decrypted
sender/amount/comment directly instead of waiting on async decryption.

https://claude.ai/code/session_01LM3KTECMMAdNBHZfs1dANa
2026-06-12 23:37:43 +00:00
Claude 5e75fd1aae feat: render likes, zaps, and nutzaps as gradient activity cards like onchain zaps
Extends the onchain zap card's visual language to the other interaction
kinds. A shared ActivityCardFrame draws the rounded gradient wash, with
a circular kind badge, sender → recipient avatars, and a kind pill on
the first line; the makeItShort target post embeds between that line and
the amount, exactly as in the onchain card, followed by the comment.

- Lightning zaps: bitcoin orange, bolt badge, LIGHTNING pill, big sats
  amount, decrypted sender avatar.
- Cashu nutzaps: bitcoin orange, cashu badge, CASHU pill.
- Reactions: tinted with the Liked heart rose, heart badge (or the
  emoji itself for custom reactions), REACTION pill, no amount row.
- Onchain zaps keep their card; the embedded target post moves inside
  it, between the header row and the amount.

The body TransferCard and the trailing reaction emoji are replaced by
the cards; TransferCard stays for its preview.

https://claude.ai/code/session_01LM3KTECMMAdNBHZfs1dANa
2026-06-12 23:00:42 +00:00
Claude 74d394a7f7 Merge remote-tracking branch 'origin/main' into claude/beautiful-ride-n6y3s2
# Conflicts:
#	amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt
2026-06-12 22:52:57 +00:00
Claude 0b5f926dd8 docs: TODO for gift-wrap deletion requests (recipient-authored kind 5)
Captures the verified current behavior (author-keyed DeletionIndex, no
wrap→rumor cascade, accidental seal-id blocking) and the agreed design:
recipient special case in hasBeenDeleted, recipient field on HostStub,
and the reverse-lookup live cascade in LocalCache.

https://claude.ai/code/session_01B39MQmrT3dz137nfpXABvo
2026-06-12 22:52:15 +00:00
Claude cb9580941c Revert "feat: modernize reaction and zap cards into activity cards"
This reverts commit 11b991ef50.
2026-06-12 22:16:42 +00:00
Claude 11b991ef50 feat: modernize reaction and zap cards into activity cards
Reaction, lightning-zap, and nutzap cards used to render as a note frame
inside a note frame: two identical author headers with the action demoted
to a trailing emoji or a transfer row. They now read as activity cards:

- The action renders as a chip in the author header, next to the actor's
  name: the reaction emoji (custom emoji included) or amount-to-recipient
  (bolt/cashu icon + sats + recipient avatar). New ActivityActionChip,
  wired into FirstUserInfoRow and the thread master header.
- The target post renders as a quoted, bordered, compact embed
  (RenderActionTarget, formerly RenderZappedPost) — the only
  note-looking frame in the card.
- The zap comment, when present, becomes the card's own text between
  header and quote, like a quote-post. The body TransferCard and the
  floating reaction emoji are gone.

Onchain zaps keep their gradient tx-status card (already visually
distinct) and only inherit the quoted target styling.

https://claude.ai/code/session_01LM3KTECMMAdNBHZfs1dANa
2026-06-12 21:56:14 +00:00
Claude d271c3fe4b fix: replies to likes and zaps now reach the Curated notification feed
The Curated (Selected) notification mode gates events through
tagsAnEventByUser, which only recognized a reply by its parent note's
author in the local cache. That made replies to the user's reactions
disappear whenever the reaction event wasn't cached (nothing re-fetches
old kind 7s after a restart), and replies to the user's zaps never
matched at all because zap receipts are authored by the lightning
provider. Detect both from the kind 1111 event itself: reaction parents
via the NIP-22 root/reply author tags, zap parents via the k tag plus
the reply's explicit p tag on the user. Covered by
NotificationTagsAnEventByUserTest.

Also renders the embedded target note inside zap and reaction cards with
makeItShort, keeping the inner preview compact.

https://claude.ai/code/session_01LM3KTECMMAdNBHZfs1dANa
2026-06-12 21:23:33 +00:00
Claude 46b2147598 Merge remote-tracking branch 'origin/main' into claude/sweet-shannon-smjotq 2026-06-12 19:52:34 +00:00
Claude 0948c0d467 feat: reactions and zaps anchor their own thread; drop chip long-press
Opening the thread screen on a reaction, lightning zap, nutzap, or onchain
zap now shows that event as the root with only its reply subtree below it —
the post it targets stays visible through the card's embedded preview, but
the target's conversation no longer loads around it. Replies and comments
(kind 1 / 1111) keep the existing behavior: the full parent thread loads
and the screen lands on the clicked note. Covered by ThreadAssemblerTest.

The long-press reply shortcut on notification zap chips is removed: the
thread view's reply button is now the single reply entry point (and still
routes private zaps to the sender's DM room via routeReplyTo).

https://claude.ai/code/session_01LM3KTECMMAdNBHZfs1dANa
2026-06-12 19:44:09 +00:00