Merge pull request #4099 from vitorpamplona/chore/release-1.15.2

chore(release): bump to 1.15.2
This commit is contained in:
Vitor Pamplona
2026-09-12 10:34:37 -04:00
committed by GitHub
9 changed files with 68 additions and 22 deletions
+3 -3
View File
@@ -7,7 +7,7 @@ description: Integration guide for using the Quartz Nostr KMP library in externa
Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr KMP projects. Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr KMP projects.
**Published artifact**: `com.vitorpamplona.quartz:quartz:1.15.1` (Maven Central) **Published artifact**: `com.vitorpamplona.quartz:quartz:1.15.2` (Maven Central)
**Targets**: JVM 21+, Android (minSdk 21+), iOS (XCFramework `quartz-kmpKit`) **Targets**: JVM 21+, Android (minSdk 21+), iOS (XCFramework `quartz-kmpKit`)
**License**: MIT **License**: MIT
@@ -19,7 +19,7 @@ Reference for integrating `com.vitorpamplona.quartz:quartz` into external Nostr
```toml ```toml
[versions] [versions]
quartz = "1.15.1" quartz = "1.15.2"
[libraries] [libraries]
quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" } quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" }
@@ -41,7 +41,7 @@ kotlin {
```kotlin ```kotlin
dependencies { dependencies {
implementation("com.vitorpamplona.quartz:quartz:1.15.1") implementation("com.vitorpamplona.quartz:quartz:1.15.2")
} }
``` ```
@@ -3,7 +3,7 @@
## Current version ## Current version
``` ```
com.vitorpamplona.quartz:quartz:1.15.1 com.vitorpamplona.quartz:quartz:1.15.2
``` ```
Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/quartz Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/quartz
@@ -16,7 +16,7 @@ Check latest: https://central.sonatype.com/artifact/com.vitorpamplona.quartz/qua
```toml ```toml
[versions] [versions]
quartz = "1.15.1" quartz = "1.15.2"
[libraries] [libraries]
quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" } quartz = { module = "com.vitorpamplona.quartz:quartz", version.ref = "quartz" }
@@ -55,7 +55,7 @@ kotlin {
```kotlin ```kotlin
// build.gradle.kts (app module) // build.gradle.kts (app module)
dependencies { dependencies {
implementation("com.vitorpamplona.quartz:quartz:1.15.1") implementation("com.vitorpamplona.quartz:quartz:1.15.2")
} }
``` ```
@@ -70,7 +70,7 @@ plugins {
} }
dependencies { dependencies {
implementation("com.vitorpamplona.quartz:quartz:1.15.1") implementation("com.vitorpamplona.quartz:quartz:1.15.2")
// JNA needed for libsodium (NIP-44) on JVM // JNA needed for libsodium (NIP-44) on JVM
implementation("net.java.dev.jna:jna:5.18.1") implementation("net.java.dev.jna:jna:5.18.1")
} }
+3 -3
View File
@@ -533,7 +533,7 @@ reads an optional per-release changelog from
## Bootstrap runbook (one-time) ## Bootstrap runbook (one-time)
> **Status as of v1.15.1:** both Homebrew packages are now live upstream — the > **Status as of v1.15.2:** both Homebrew packages are now live upstream — the
> `amethyst-nostr` cask (`Homebrew/homebrew-cask`, at 1.14.0) and the `amy` > `amethyst-nostr` cask (`Homebrew/homebrew-cask`, at 1.14.0) and the `amy`
> formula (`Homebrew/homebrew-core`) both answer 200 on `formulae.brew.sh`, so > formula (`Homebrew/homebrew-core`) both answer 200 on `formulae.brew.sh`, so
> `bump-homebrew.yml` finally has something to bump. **Winget is still not > `bump-homebrew.yml` finally has something to bump. **Winget is still not
@@ -587,7 +587,7 @@ The token then lives only in that maintainer's shell:
```bash ```bash
export HOMEBREW_GITHUB_API_TOKEN=ghp_... # classic PAT, `repo` scope export HOMEBREW_GITHUB_API_TOKEN=ghp_... # classic PAT, `repo` scope
scripts/bump-homebrew-cask.sh v1.15.1 scripts/bump-homebrew-cask.sh v1.15.2
``` ```
Create one at Create one at
@@ -603,7 +603,7 @@ Same split, and it needs **no token at all**. `scripts/bump-winget.sh` drives
runs fine from macOS or Linux: runs fine from macOS or Linux:
```bash ```bash
scripts/bump-winget.sh v1.15.1 scripts/bump-winget.sh v1.15.2
``` ```
CI (`bump-winget.yml`, `GITHUB_TOKEN` only) does the bookkeeping: downloads the CI (`bump-winget.yml`, `GITHUB_TOKEN` only) does the bookkeeping: downloads the
+5 -5
View File
@@ -328,16 +328,16 @@ repositories {
Add the following line to your `commonMain` dependencies: Add the following line to your `commonMain` dependencies:
```gradle ```gradle
implementation('com.vitorpamplona.quartz:quartz:1.15.1') implementation('com.vitorpamplona.quartz:quartz:1.15.2')
``` ```
Variations to each platform are also available: Variations to each platform are also available:
```gradle ```gradle
implementation('com.vitorpamplona.quartz:quartz-android:1.15.1') implementation('com.vitorpamplona.quartz:quartz-android:1.15.2')
implementation('com.vitorpamplona.quartz:quartz-jvm:1.15.1') implementation('com.vitorpamplona.quartz:quartz-jvm:1.15.2')
implementation('com.vitorpamplona.quartz:quartz-iosarm64:1.15.1') implementation('com.vitorpamplona.quartz:quartz-iosarm64:1.15.2')
implementation('com.vitorpamplona.quartz:quartz-iossimulatorarm64:1.15.1') implementation('com.vitorpamplona.quartz:quartz-iossimulatorarm64:1.15.2')
``` ```
Check versions on [MavenCentral](https://central.sonatype.com/search?q=com.vitorpamplona.quartz) Check versions on [MavenCentral](https://central.sonatype.com/search?q=com.vitorpamplona.quartz)
+2 -2
View File
@@ -240,9 +240,9 @@ readable by anyone with push access here), so a maintainer runs the last step:
```bash ```bash
# after merging the sync PRs # after merging the sync PRs
export HOMEBREW_GITHUB_API_TOKEN=ghp_... # classic PAT, `repo` scope export HOMEBREW_GITHUB_API_TOKEN=ghp_... # classic PAT, `repo` scope
scripts/bump-homebrew-cask.sh v1.15.1 scripts/bump-homebrew-cask.sh v1.15.2
scripts/bump-winget.sh v1.15.1 # no token — uses your `gh` auth scripts/bump-winget.sh v1.15.2 # no token — uses your `gh` auth
``` ```
Both scripts re-verify the published artifact's sha256 before submitting, and Both scripts re-verify the published artifact's sha256 before submitting, and
+1
View File
@@ -2,6 +2,7 @@
Release notes for Amethyst, one file per version. Files are named with zero-padded version numbers so they sort correctly in any file browser. Use [`TEMPLATE.md`](TEMPLATE.md) as the starting point for the next release. Release notes for Amethyst, one file per version. Files are named with zero-padded version numbers so they sort correctly in any file browser. Use [`TEMPLATE.md`](TEMPLATE.md) as the starting point for the next release.
- [v1.15.2 — Media Previews, Nested Replies, and Health Connect](v1.15.02.md)
- [v1.15.1 — Release Build Fix](v1.15.01.md) - [v1.15.1 — Release Build Fix](v1.15.01.md)
- [v1.15.0 — Marmot Updates, a Advanced Search Box, and Books, DVM Updates](v1.15.00.md) - [v1.15.0 — Marmot Updates, a Advanced Search Box, and Books, DVM Updates](v1.15.00.md)
- [v1.14.0 — Highlights, Relay Login, and a Much Faster Start](v1.14.00.md) - [v1.14.0 — Highlights, Relay Login, and a Much Faster Start](v1.14.00.md)
+45
View File
@@ -0,0 +1,45 @@
# v1.15.2: Media Previews, Nested Replies, and Health Connect
## Improvements and Bug fixes
- Plays the track a media player page is *about*, instead of trying to play the
page. A link to `e.nostr.build/a_<id>_mp3` rendered a permanently-buffering
player: that URL answers `text/html` — it is the HTML player page, and the
file it is about is named in its `og:audio`. Two separate defects produced it,
and both are fixed. File-extension matching now requires a real dot, so a path
ending in the *letters* of an extension (`_mp3`, or a prose slug like
`/my-thoughts-on-mp3`) is no longer handed to the video player; and the
preview pipeline reads `og:audio` / `og:video` and plays that file, with the
page's `og:image` as poster.
Reading a declaration is not trusting it: YouTube declares an `og:video` whose
type is `text/html` — an embed page, not a video — so it is refused and keeps
its link card.
- Loads nested NIP-22 replies in the feed, not only after a thread is opened.
NIP-22 puts the direct parent in lowercase `e`/`a` and the conversation root in
uppercase `E`/`A`, and a comment two or more levels deep carries only the root.
The engagement subscriptions asked for the lowercase tags alone, so everything
below the first level was invisible until `ThreadScreen` opened a subscription
of its own. Each relay now gets a second, root-scoped filter.
Kind 1619 (NIP-34 PR updates) moves with it: the spec gives it only
`["E", <pull-request-id>]` and no lowercase `e` at all, so it had been sitting
in a filter it could never match.
## Health Connect
- Adds a rationale screen explaining what Amethyst reads from Health Connect and
why — the data types, their purposes, the seven-day and composer-only limits,
and what it never does (no writes, no route or location). It opens from the
workout composer, from Health Connect's own permission screen, and stands alone
without an account, which is what Google Play requires of it.
- Stops blocking the UI thread on Health Connect reads, and memoizes source app
names rather than asking `PackageManager` again for each record.
- Replaces the whole form when a second workout suggestion is picked, so the
distance and calories of the first no longer leak into the second.
- Documents the integration for Play Console review, and in `PRIVACY.md`.
## Build
- Bumps `appCode` to 460.
+3 -3
View File
@@ -32,7 +32,7 @@ docker run -d --name geode -p 7447:7447 \
``` ```
with `in_memory = false` and `file = "/var/lib/geode/events.db"` in your with `in_memory = false` and `file = "/var/lib/geode/events.db"` in your
`geode.toml`. Pin a version (`:1.15.1`) instead of `:latest` for reproducible `geode.toml`. Pin a version (`:1.15.2`) instead of `:latest` for reproducible
deploys. To build the image yourself, from the repo root: deploys. To build the image yourself, from the repo root:
```bash ```bash
@@ -47,7 +47,7 @@ it — a minimal JRE is bundled, so no system Java is required. It installs to
`/opt/geode/` with the launcher at `/opt/geode/bin/geode`. `/opt/geode/` with the launcher at `/opt/geode/bin/geode`.
```bash ```bash
sudo dpkg -i geode-1.15.1-linux-x64.deb # or: sudo rpm -i geode-1.15.1-linux-x64.rpm sudo dpkg -i geode-1.15.2-linux-x64.deb # or: sudo rpm -i geode-1.15.2-linux-x64.rpm
``` ```
To run it as a managed service, wire up the shipped systemd unit To run it as a managed service, wire up the shipped systemd unit
@@ -69,7 +69,7 @@ formula: [`packaging/homebrew/geode-relay.rb`](packaging/homebrew/geode-relay.rb
Download `geode-<version>-<os>-<arch>.tar.gz`, unpack, and run: Download `geode-<version>-<os>-<arch>.tar.gz`, unpack, and run:
```bash ```bash
tar xzf geode-1.15.1-linux-x64.tar.gz tar xzf geode-1.15.2-linux-x64.tar.gz
./geode/bin/geode --config geode/share/geode/config.example.toml ./geode/bin/geode --config geode/share/geode/config.example.toml
``` ```
+2 -2
View File
@@ -2,8 +2,8 @@
# Amethyst app version — single source of truth consumed by both Android (amethyst/) # Amethyst app version — single source of truth consumed by both Android (amethyst/)
# and Desktop (desktopApp/). `appCode` is the Android versionCode: a monotonic # and Desktop (desktopApp/). `appCode` is the Android versionCode: a monotonic
# integer that must increment on every release, even when `app` is unchanged. # integer that must increment on every release, even when `app` is unchanged.
app = "1.15.1" app = "1.15.2"
appCode = "459" appCode = "460"
accompanistAdaptive = "0.37.3" accompanistAdaptive = "0.37.3"
# Pinned: 0.3.0 turns CacheMap.entries/keys/values into DeprecationLevel.ERROR (and # Pinned: 0.3.0 turns CacheMap.entries/keys/values into DeprecationLevel.ERROR (and
# throws UnsupportedOperationException at runtime), which breaks quartz's appleMain # throws UnsupportedOperationException at runtime), which breaks quartz's appleMain