mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-30 07:37:38 +00:00
5.5 KiB
5.5 KiB
v1.16.0: My Fitness, BOLT12 Payments, and a Leaner Core
Highlights:
- Adds My Fitness, a dashboard over everything you have trained.
- Moves BOLT12 offers into the profile payment rail, and zaps over BOLT11 when a wallet refuses one.
- Opens the zapped note from wallet history.
- Fixes Blossom uploads, broken on most servers since 1.15.0.
- Takes ~40 MB off every
amydistribution. - Stops counting a relay that hung up as connected.
- Updates Arti to 2.6.0 for two medium-severity fixes.
New Features
My Fitness
- Adds a training dashboard, reached from the drawer or a pinned bottom-bar slot.
- Builds it from both sources: Health Connect, and the kind 1301 workouts you published. Neither is required.
- Summarises four weeks: this week against last, weekly averages, a breakdown by activity, best efforts, active days and a day streak.
- Shows distance, calories, steps, climb and heart rate only when a workout carries them.
- Offers to share a workout only when it is not already published.
- Prefers the Health Connect copy when the same effort appears in both sources — it carries the heart rate, steps and climb the published event drops.
- Filters the Workouts feed by Mine from the top nav.
- Reads workouts in the POWR dialect, which carry
start/endand noduration.
Payments
- Renders each BOLT12 offer as a chip in the profile payment rail. Offers were already payable, but only through a small button in the profile header.
- Removes both header wallet buttons. The rail lists everything they reached.
- Shows the zap bolt to recipients who publish an offer and no lightning address. The send path already paid them; the picker just never offered it.
- Falls back to a BOLT11 zap when a wallet refuses an offer and the recipient also publishes a lightning address.
- Retries only refusals that mean nothing was attempted. A
PAYMENT_FAILEDcan still settle later, so retrying it could pay twice. - Reports a timeout when a wallet never answers, instead of hanging the zap.
- Opens the zapped note when you tap a zap in wallet history.
Performance
- Stops emptying the media connection pool on every client rebuild. Both HTTP clients share one pool, so the proxy check misread every rebuild as a route change.
- Drops pooled connections once per real Tor route change instead.
- Stops
debugState()walking the whole cache on every backgrounding. Its nine scans were built eagerly and then discarded unread. - Signs one Blossom read-auth token per server, not one per racing caller.
Improvements and Bug fixes
- Sends the Blossom authorization token as standard padded Base64 again. Deployed servers reject 1.15.0's unpadded base64url, so roughly two uploads in three failed.
- Points the Sovbit default Blossom server at
files.sovbit.host. - Answers a relay's WebSocket CLOSE frame, in both the shared and the Android socket. Without it a closed socket looked connected for up to four minutes, silently discarding everything sent.
- Counts connected relays from the pool's connected flow, which the pool now clears itself whenever it drops a relay.
- Renders a GIF with no
imetaas a loading placeholder. It used to collapse the whole note to a gap in the feed until the fetch finished. - Drains the event-sync outbox before closing the client. Events from the final page were reported Done and never delivered.
- Fixes 34 bugs found auditing
commonsandcommonsUI. Among them: AES-GCM initialised with a spec every JDK rejects; anOnion-Locationheader from any host re-pointing Tor traffic for 24 hours; a bundled insert wedged after one exception; a URL validator backtracking exponentially per keystroke. - Uses
httpsin preview data and image-URL placeholders.
Desktop
- Stops a silent account wipe on macOS. One Deny on the Keychain prompt rotated the encryption key and orphaned every saved account.
- Consolidates the keychain into a single
vault-v1item, so a cold boot prompts once. - Allows first-launch key bootstrap on Linux and Windows.
Cli
- Ships ~40 MB lighter, now that
amyno longer drags Compose UI and Skiko behindcommons. - Fails fast when a buzz-agent wrapper cannot be made executable.
Quartz
- Answers a duplicate
EVENTwithOK true, per NIP-01, and a superseded replaceable the same way. Clients used to get raw SQLite text they could not classify, and retried forever. - Gives each socket adapter its own session, removing the pool's locking and identity checks.
Build & Documentation
- Updates Arti 2.3.0 → 2.6.0, the JNI crate to 0.22, the NDK to r30 and Rust to 1.98.1. Picks up TROVE-2026-24 and TROVE-2026-27, both reachable in normal use.
- Splits Compose UI out of
commonsinto a newcommonsUImodule. 236 files moved and no consumer import changed. - Bumps LightCompressor-enhanced to 2.2.3.
- Drops the unused Guardian Project Maven repository.
- Runs relay-backed tests against geode instead of external relays.
- Clears the compiler, Android Lint and Gradle 10 deprecation warnings.
- Bumps
appCodeto 461.
Contributors
- @npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z
- @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef
- @npub1gvv9ahktvavf9qjtrgm62le7gplmmchd5usp5wpfhr85hf79kncqj8xchs
Translations
- Polish by @npub16gjyljum0ksrrm28zzvejydgxwfm7xse98zwc4hlgq8epxeuggushqwyrm
- Hindi by @npub1ww6huwu3xye6r05n3qkjeq62wds5pq0jswhl7uc59lchc0n0ns4sdtw5e6
- Hungarian by @npub1dnvslq0vvrs8d603suykc4harv94yglcxwna9sl2xu8grt2afm3qgfh0tp