docs: audit, status-stamp, and index all module plans

Audited all 143 plan files across the 10 plans/ folders. Each plan now
carries a Status header (shipped | in-progress | queued | abandoned)
backed by codebase evidence, and every folder has a README.md index
grouping plans by status.

Shipped plans were moved into a per-folder plans/archive/ (via git mv,
history preserved) so each plans/ folder surfaces only live work:

  shipped (archived): 122   in-progress: 8   queued: 7   abandoned: 4

docs/plans/ is the frozen legacy folder; its plans were stamped and
indexed in place (48 of 52 archived) but it remains closed to new plans.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016hpUivtmq4pgzqRbY6MYrA
This commit is contained in:
Claude
2026-06-30 15:35:38 +00:00
parent dc47296a5f
commit 6579b5f656
152 changed files with 748 additions and 6 deletions
+3
View File
@@ -1,5 +1,8 @@
# iOS Support for Amethyst
> **Status:** in-progress — `iosArm64`/`iosSimulatorArm64` targets are configured in `quartz` and `commons` (Phase 1), but no `iosApp` module exists yet — later phases not built.
> _Audited 2026-06-30._
**Date:** 2026-05-24
**Status:** Phase 1 complete; Phase 2 in flight
**Owner:** TBD
@@ -1,5 +1,8 @@
# Napplet inter-applet communication (NAP-INC / NAP-INTENT) — design notes
> **Status:** queued — Explicitly deferred; no `MESSAGING` capability exists in `NappletCapability` and the prerequisites (multi-applet hosting, archetype registry) are unbuilt.
> _Audited 2026-06-30._
**Date:** 2026-06-20
**Status:** Deferred — design only. Prereqs not yet built (see below).
**Parent:** `amethyst/plans/2026-06-19-napplet-sandbox-host.md`
+36
View File
@@ -0,0 +1,36 @@
# amethyst plans
_Audited 2026-06-30. 21 plans: 19 shipped (archived), 1 in-progress, 1 queued, 0 abandoned._
## In progress
| Plan | Summary |
| ---- | ------- |
| [2026-05-24-ios-support.md](2026-05-24-ios-support.md) | Incremental KMP-to-iOS port; quartz/commons iOS targets are configured (Phase 1) but no `iosApp` module exists yet. |
## Queued
| Plan | Summary |
| ---- | ------- |
| [2026-06-20-napplet-inter-applet.md](2026-06-20-napplet-inter-applet.md) | NAP-INC / NAP-INTENT inter-applet messaging — deferred; prerequisites (multi-applet hosting, archetype registry, `MESSAGING` capability) not yet built. |
## Archived (shipped)
| Plan | Summary |
| ---- | ------- |
| [archive/2026-05-14-onchain-zaps.md](archive/2026-05-14-onchain-zaps.md) | NIP-BC (kind 8333) onchain Bitcoin zaps — hand-rolled `quartz/nipBCOnchainZaps/` consensus layer plus Android send/receive/display. |
| [archive/2026-05-25-appfunctions-signer-prompts.md](archive/2026-05-25-appfunctions-signer-prompts.md) | How AppFunctions write verbs acquire signatures across the three signer types; write verbs now ship. |
| [archive/2026-05-26-appfunctions-gemini-discovery.md](archive/2026-05-26-appfunctions-gemini-discovery.md) | Verifying Gemini-side discovery of Amethyst's AppFunctions; description-based (`isDescribedByKDoc`) discovery shipped. |
| [archive/2026-05-26-appfunctions-screens-as-verbs.md](archive/2026-05-26-appfunctions-screens-as-verbs.md) | Map every Amethyst screen's feed filter to an AppFunction/MCP verb; 46 verbs now ship. |
| [archive/2026-05-26-avif-implementation-plan.md](archive/2026-05-26-avif-implementation-plan.md) | Task-by-task plan for AVIF support via a `MediaMimeTypes` helper across the upload pipeline. |
| [archive/2026-05-26-avif-support.md](archive/2026-05-26-avif-support.md) | Comprehensive design making AVIF a first-class image format on every Amethyst surface. |
| [archive/2026-05-27-avif-instrumented-tests-design.md](archive/2026-05-27-avif-instrumented-tests-design.md) | Design for on-device AVIF upload-pipeline regression tests with committed fixtures. |
| [archive/2026-05-27-avif-instrumented-tests-plan.md](archive/2026-05-27-avif-instrumented-tests-plan.md) | Implementation plan for the AVIF instrumented + JVM unit tests and their fixtures. |
| [archive/2026-06-01-dm-live-tail-and-history-slices.md](archive/2026-06-01-dm-live-tail-and-history-slices.md) | DM loading split into a fixed live tail plus per-relay backward history paging (`WindowLoadTracker` / `RelayLoadingCursors`). |
| [archive/2026-06-19-napplet-sandbox-host.md](archive/2026-06-19-napplet-sandbox-host.md) | Keyless `:napplet`-process WebView host with brokered, consent-gated capabilities for NIP-5A/5D content. |
| [archive/2026-06-20-napplet-ecosystem-audit.md](archive/2026-06-20-napplet-ecosystem-audit.md) | Audit of our napplet shell against the upstream `@napplet` SDK; wire-compat gaps subsequently closed. |
| [archive/2026-06-21-napplet-code-audit.md](archive/2026-06-21-napplet-code-audit.md) | Code audit of the napplet subsystem recording correctness/perf/refactor fixes and deferred items. |
| [archive/2026-06-21-napplet-sdk-conformance-audit.md](archive/2026-06-21-napplet-sdk-conformance-audit.md) | Feature-by-feature SDK conformance audit; the four conformance breakers were fixed and pinned by tests. |
| [archive/2026-06-22-napplet-nsite-security.md](archive/2026-06-22-napplet-nsite-security.md) | Security review of the nsite/napplet attack surface; launch-token identity and per-applet origins landed. |
| [archive/2026-06-23-napplet-nap-theme-notify-inc.md](archive/2026-06-23-napplet-nap-theme-notify-inc.md) | Add the `theme`, `notify`, and `inc` NAP domains so demo napplets boot; capabilities + `NappletIncBus` shipped. |
| [archive/2026-06-24-napplet-embedded-tabs.md](archive/2026-06-24-napplet-embedded-tabs.md) | Embedded warm bottom-bar napplet/nsite/browser tabs via `SurfaceControlViewHost`, in the new `:nappletHost` module. |
| [archive/2026-06-25-embed-text-selection-native-parity.md](archive/2026-06-25-embed-text-selection-native-parity.md) | Host-drawn text selection (handles, magnifier, toolbar, IME proxy) for embedded sandboxed surfaces. |
| [archive/2026-06-25-web-app-naming.md](archive/2026-06-25-web-app-naming.md) | Naming overhaul for web-app / nApplet / nSite / favorite surfaces (route, screen, controller renames). |
| [archive/2026-06-26-nsite-napplet-favorite-icons.md](archive/2026-06-26-nsite-napplet-favorite-icons.md) | Derive favorited nSite/nApplet bottom-nav icons from verified manifest blobs (`NappletIconPath`). |
@@ -1,5 +1,8 @@
# Onchain Zaps in Amethyst
> **Status:** shipped — Full `quartz/nipBCOnchainZaps/` consensus + builder + verify layer ships with Android model/UI wiring (`OnchainZapResolver`, `OnchainZapEvent` view, `ReusableZapButton`).
> _Audited 2026-06-30._
**Date:** 2026-05-14
**Status:** Active
@@ -1,5 +1,8 @@
# AppFunctions signer prompts — design
> **Status:** shipped — `AmethystAppFunctions.kt` ships 46 `@AppFunction` verbs including write verbs that acquire signatures across signer types.
> _Audited 2026-06-30._
**Date:** 2026-05-25
**Status:** Draft — no code yet
@@ -1,5 +1,8 @@
# Verifying Gemini-side AppFunctions discovery
> **Status:** shipped — Verification doc; verbs ship with `@AppFunction(isDescribedByKDoc = true)` description-based discovery as the doc concludes.
> _Audited 2026-06-30._
**Date:** 2026-05-26
**Status:** Active — answers the open question from
`2026-05-25-appfunctions-signer-prompts.md`
@@ -1,5 +1,8 @@
# All Amethyst screens as AppFunctions / MCP endpoints
> **Status:** shipped — 46 `@AppFunction` verbs ship in `AmethystAppFunctions.kt`, exceeding the screen-to-verb surface this plan proposed.
> _Audited 2026-06-30._
**Date:** 2026-05-26
**Status:** Active — informs the v1 read-verb surface and guides
future MCP work
@@ -1,5 +1,8 @@
# AVIF Support Implementation Plan
> **Status:** shipped — `service/uploads/MediaMimeTypes.kt` and the rest of the AVIF upload pipeline are present in `amethyst/`.
> _Audited 2026-06-30._
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Make AVIF (still and animated) work as a first-class image format in Amethyst across every user-visible surface — uploads (Blossom + NIP-96), feeds, profiles, DMs, emoji packs, reactions, gallery, and caching — with graceful no-crash fallback on Android API < 31.
@@ -1,5 +1,8 @@
# AVIF support — comprehensive design
> **Status:** shipped — AVIF upload/display support landed — `MediaMimeTypes.kt` plus the compressor/stripper/preview changes are in tree.
> _Audited 2026-06-30._
**Issue:** [vitorpamplona/amethyst#837](https://github.com/vitorpamplona/amethyst/issues/837)
**Date:** 2026-05-26
**Branch:** `feat/avif-support` (based on `d1610bf97`, origin/main = upstream/main)
@@ -1,5 +1,8 @@
# Design — AVIF instrumented tests
> **Status:** shipped — The designed test files and AVIF fixtures exist under `amethyst/src/androidTest/` and `src/test/`.
> _Audited 2026-06-30._
**Date:** 2026-05-27
**Status:** Design (pre-implementation)
**Owning module:** `amethyst/`
@@ -1,5 +1,8 @@
# AVIF Instrumented Tests — Implementation Plan
> **Status:** shipped — `AvifUploadPipelineInstrumentedTest.kt`, `MediaMimeTypesTest.kt`, and the three `.avif` fixtures are committed.
> _Audited 2026-06-30._
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Add an Android on-device test layer that catches regressions in the AVIF upload pipeline and the Phase E bugs fixed manually (`C2``C8` plus follow-ups in commits `df84475d4`, `5a760c046`, `b9112550b`, `1db110cdf`).
@@ -1,5 +1,8 @@
# DM loading: live tail + per-relay history paging
> **Status:** shipped — Live-tail + per-relay history layers exist (`WindowLoadTracker`, `RelayLoadingCursors`, `AccountGiftWrapsHistoryEoseManager`); doc marks itself authoritative-as-of-code.
> _Audited 2026-06-30._
> **Status:** authoritative as of 2026-06-05. The "Current architecture"
> section below describes the code as it actually stands. The original
> time-slice design and the round-model history are kept at the bottom under
@@ -1,5 +1,8 @@
# Napplet / nsite sandbox host — design
> **Status:** shipped — Keyless sandbox host shipped: `:nappletHost` module, `NappletBrokerService`, `NappletLaunchRegistry` all present (rendering half superseded by embedded-tabs).
> _Audited 2026-06-30._
**Date:** 2026-06-19
**Status:** Core (commons) implemented + tested; Android host (`:napplet` process, WebView, broker IPC, consent, DataStore) implemented and compiling — needs on-device verification
**Companion:** `quartz/plans/2026-06-19-napplet-nip5a-resolver.md` (the bottom half — manifest parsing + verified Blossom resolution — already landed in `quartz`).
@@ -1,5 +1,8 @@
# Napplet implementation audit vs the upstream SDK / demo runtimes
> **Status:** shipped — Audit doc; the wire-compatibility gaps it identified were subsequently closed (shell handshake, keys, upload now in the broker/codec).
> _Audited 2026-06-30._
**Date:** 2026-06-20
**Sources:** `github.com/napplet/naps` (NAP specs), `github.com/napplet/web`
(`@napplet/shim` SDK), `github.com/kehto/web` + `kehto.github.io/web/playground`
@@ -1,5 +1,8 @@
# Napplet subsystem code audit — bugs, performance, refactor, placement
> **Status:** shipped — Audit recording completed fixes (LiveSub teardown, broker caching, shim extraction); referenced files exist.
> _Audited 2026-06-30._
**Date:** 2026-06-21. Scope: the napplet/nsite subsystem (`amethyst/.../napplet/`,
`commons/.../napplet/`, `quartz/.../nip5aStaticWebsites` + `nip5dNapplets`).
@@ -1,5 +1,8 @@
# Napplet SDK conformance audit — feature by feature
> **Status:** shipped — Conformance audit; the four breakers are marked fixed and pinned by `NappletSdkConformanceTest`.
> _Audited 2026-06-30._
**Date:** 2026-06-21
**Authoritative sources (verified, not from memory):**
`@napplet/nap@0.15.0` (`dist/<domain>/types.d.ts` — the canonical wire message types),
@@ -1,5 +1,8 @@
# Napplet / nsite security review (2026-06-22)
> **Status:** shipped — Security review recording completed hardening; `NappletLaunchRegistry` token model and per-applet origins are in tree.
> _Audited 2026-06-30._
A review of the attack surface for NIP-5A static sites (nsites) and NIP-5D napplets,
the protections in place, and the residual risks — with what was fixed in this pass
and what remains as future work.
@@ -1,5 +1,8 @@
# Napplet NAP domains: theme, notify, inc
> **Status:** shipped — `NappletCapability` has `THEME`/`NOTIFY`/`INC` and `NappletIncBus` is wired into `NappletBrokerService`.
> _Audited 2026-06-30._
Date: 2026-06-23
Status: in progress
@@ -1,5 +1,8 @@
# Embedded napplet / nsite / browser tabs — final architecture
> **Status:** shipped — `EmbeddedTabLayer` and the `:nappletHost` module exist; embedded warm-tab + browser render paths are implemented (PR #3348).
> _Audited 2026-06-30._
**Date:** 2026-06-24
**Status:** Implemented on `claude/webview-menu-custom-url-ikrgbz` (PR #3348); needs on-device verification.
**Supersedes the rendering half of** `amethyst/plans/2026-06-19-napplet-sandbox-host.md`
@@ -1,5 +1,8 @@
# Embedded text selection — native-Android parity
> **Status:** shipped — Doc states core feature-complete; host-drawn selection (handles, magnifier, IME proxy) landed in `EmbeddedTabLayer`/`RemoteImeView`.
> _Audited 2026-06-30._
**Status:** core feature-complete. The working set landed in `fix(embed): IME typing +
host-drawn text selection for embedded surfaces` (commit `e0a2a9ab81`); subsequent
sessions added the magnifier, the `SelectionUiState` refactor, hybrid word+char
@@ -1,5 +1,8 @@
# Web-app naming overhaul (favorites / browser / app surfaces)
> **Status:** shipped — Renames applied — `WebAppScreen`, `NostrAppScreen`, `EmbeddedWebAppController`, `FavoriteAppsScreen` all present.
> _Audited 2026-06-30._
## Problem
The in-app "app" surfaces had colliding, sometimes inaccurate names:
@@ -1,5 +1,8 @@
# nSite / nApplet favorite icons
> **Status:** shipped — `quartz/.../NappletIconPath.kt` and `amethyst/.../favorites/NappletFavoriteIcon.kt` are in tree.
> _Audited 2026-06-30._
**Date:** 2026-06-26
**Status:** implemented (pending on-device verification of the blob image-load path)
+3
View File
@@ -1,5 +1,8 @@
# Cashu (NIP-60 / NIP-61 / NIP-87) in `amy`
> **Status:** in-progress — the full command surface ships under `cli/.../commands/cashu/` (wallet/mint/balance/receive/send/maintenance/mint-rec), but the PR 9 interop harness (`cli/tests/cashu/`) does not exist yet.
> _Audited 2026-06-30._
**Status:** in progress · **Date:** 2026-05-28 · **Roadmap row:** added to
the parity matrix in `cli/ROADMAP.md`.
+17
View File
@@ -0,0 +1,17 @@
# cli plans
_Audited 2026-06-30. 6 plans: 5 shipped (archived), 1 in-progress, 0 queued, 0 abandoned._
## In progress
| Plan | Summary |
| ---- | ------- |
| [2026-05-28-cashu-cli.md](2026-05-28-cashu-cli.md) | NIP-60/61/87 Cashu wallet verbs in amy; full command surface ships, production-mint interop harness still pending. |
## Archived (shipped)
| Plan | Summary |
| ---- | ------- |
| [archive/2026-04-21-cli-distribution.md](archive/2026-04-21-cli-distribution.md) | Native amy distribution via jlink/jpackage with a CI release matrix and Homebrew formula. |
| [archive/2026-04-23-nip17-dm.md](archive/2026-04-23-nip17-dm.md) | NIP-17 DM send/list/await verbs in amy over quartz gift-wrap plumbing. |
| [archive/2026-04-24-file-event-store-nips.md](archive/2026-04-24-file-event-store-nips.md) | Part 3: per-NIP enforcement, slots, tombstones, scrub, and tests for the file-backed event store. |
| [archive/2026-04-24-file-event-store-overview.md](archive/2026-04-24-file-event-store-overview.md) | Part 1: goals and on-disk layout of the filesystem-native IEventStore for amy. |
| [archive/2026-04-24-file-event-store-pipelines.md](archive/2026-04-24-file-event-store-pipelines.md) | Part 2: insert/query/delete/transaction/concurrency pipelines for the file-backed event store. |
@@ -8,6 +8,9 @@ owner: cli
# feat(cli): native distribution
> **Status:** shipped — `cli/build.gradle.kts` wires jlink/jpackage (`amyImage`, `jpackageDeb`, `jpackageRpm`), the release CI matrix publishes amy tarball/.deb/.rpm assets, and `cli/packaging/homebrew/amy.rb` exists; broader package-manager submissions remain explicitly-deferred follow-ups.
> _Audited 2026-06-30._
## Overview
Today `amy` ships only as `./gradlew :cli:run` or a raw `installDist`
@@ -1,5 +1,8 @@
# NIP-17 DMs in `amy`
> **Status:** shipped — `DmCommands.kt` ships send/list/await and `FilterGiftWrapsToPubkey` is extracted to `commons/.../relayClient/nip17Dm/`.
> _Audited 2026-06-30._
**Status:** plan · **Date:** 2026-04-23 · **Roadmap row:**
`cli/ROADMAP.md:55` ("NIP-17 DMs send / list / read") · **Order:**
step 5 in `cli/ROADMAP.md:91`.
@@ -1,5 +1,8 @@
# File-backed event store for `amy` — Part 3: NIPs, Enforcement, Scrub, Testing
> **Status:** shipped — NIP-01/09/40/50/62 enforcement, slots, tombstones, tokenizer, and scrub ship in `quartz/jvmMain/.../store/fs/` (`FsSlots`, `FsTombstones`, `FsSearchTokenizer`) with `FsParityTest` coverage.
> _Audited 2026-06-30._
**Status:** plan · **Date:** 2026-04-24 · **Part 3 of 3**
(see `2026-04-24-file-event-store-overview.md`,
`2026-04-24-file-event-store-pipelines.md`)
@@ -1,5 +1,8 @@
# File-backed event store for `amy` — Part 1: Overview & Layout
> **Status:** shipped — `FsEventStore` and siblings live in `quartz/jvmMain/.../store/fs/` with jvmTest parity tests; `amy store` (stat/scrub/compact/sweep-expired/reindex-fts) wraps it.
> _Audited 2026-06-30._
**Status:** plan · **Date:** 2026-04-24 · **Part 1 of 3**
(see `2026-04-24-file-event-store-pipelines.md`,
`2026-04-24-file-event-store-nips.md`)
@@ -1,5 +1,8 @@
# File-backed event store for `amy` — Part 2: Pipelines
> **Status:** shipped — insert/query/delete/transaction/concurrency are implemented across `FsEventStore`, `FsIndexer`, `FsQueryPlanner`, `FsLockManager`, `FsSlots` in `quartz/jvmMain/.../store/fs/`.
> _Audited 2026-06-30._
**Status:** plan · **Date:** 2026-04-24 · **Part 2 of 3**
(see `2026-04-24-file-event-store-overview.md`,
`2026-04-24-file-event-store-nips.md`)
@@ -9,6 +9,9 @@ consumers: cli, desktopApp, amethyst
# feat(commons): cross-platform event renderer
> **Status:** queued — no `rendering/` subsystem, `RenderedEvent`, or `EventRenderer` exists anywhere in the tree; front-matter status is still "proposed".
> _Audited 2026-06-30._
## Overview
Introduce a `commons/commonMain/.../rendering/` subsystem that turns a
@@ -1,5 +1,8 @@
# Custom Feeds for Amethyst Desktop
> **Status:** in-progress — data model, repository, serializer, builder, search bridge, kind 31890 event, and desktop drawer/dialog/screen all shipped, but Phase 1.5 relay filters (`FeedFilterFactory`/`CustomFilterFeedFilter`/assemblers), the DVM marketplace, kind 10090 sync, and PeopleList/InterestSet resolution are unbuilt ("coming soon").
> _Audited 2026-06-30._
**Date:** 2026-05-04
**Branch:** `feat/desktop-custom-feeds`
**Status:** Planning
@@ -1,5 +1,8 @@
# Extract `NestSubscriptionManager` from `NestViewModel`
> **Status:** in-progress — the stepping-stone `ActiveSubscription.kt` is extracted, but the orchestration class `NestSubscriptionManager` does not exist and `reconcileSubscriptions`/`openSubscription`/`closeSubscription`/`fetchSpeakerCatalog` still live in the 2295-line `NestViewModel`.
> _Audited 2026-06-30._
**Status**: deferred — flagged in the audit pass, not landed yet.
## Why
@@ -1,5 +1,8 @@
# Amethyst → Commons Migration Plan
> **Status:** queued — the keystone Phase A is untouched: no `Account.kt`/`LocalCache.kt` engine in commons, the amethyst monoliths remain (3757 + 4092 LOC), and `commons/model/account` still holds only the pre-existing `AccountInfo/AccountStorage/SignerType` scaffolding the plan's §0 marks as already-present.
> _Audited 2026-06-30._
**Date:** 2026-05-30 · **Owning module:** `commons` · **Status:** plan (no code moved yet)
Goal: move the **shared** parts of the `amethyst` Android app down into `commons`
+21
View File
@@ -0,0 +1,21 @@
# commons plans
_Audited 2026-06-30. 6 plans: 2 shipped (archived), 2 in-progress, 2 queued, 0 abandoned._
## In progress
| Plan | Summary |
| ---- | ------- |
| [2026-05-04-custom-feeds-plan.md](2026-05-04-custom-feeds-plan.md) | Custom feed creation/discovery/management for Desktop; core model + builder + kind 31890 + desktop UI shipped, but relay-filter layer, DVM marketplace, kind 10090 sync, and list resolution still pending. |
| [2026-05-06-nest-subscription-manager-extraction.md](2026-05-06-nest-subscription-manager-extraction.md) | Split the per-speaker subscription state machine out of `NestViewModel`; only the `ActiveSubscription` stepping-stone is extracted so far. |
## Queued
| Plan | Summary |
| ---- | ------- |
| [2026-04-21-event-renderer.md](2026-04-21-event-renderer.md) | Cross-platform UI-agnostic `RenderedEvent` subsystem shared by Amy, Desktop, and Android; not started. |
| [2026-05-30-amethyst-to-commons-migration.md](2026-05-30-amethyst-to-commons-migration.md) | Roadmap to move shared `amethyst` Android code into `commons`; keystone `Account`/`LocalCache` extraction not begun. |
## Archived (shipped)
| Plan | Summary |
| ---- | ------- |
| [archive/2026-05-04-custom-feeds-testing-sheet.md](archive/2026-05-04-custom-feeds-testing-sheet.md) | Test sheet recording the completed custom-feeds phases (unit + manual coverage). |
| [archive/2026-05-05-feed-builder-enhancements-plan.md](archive/2026-05-05-feed-builder-enhancements-plan.md) | Six FeedBuilderDialog enhancements (npub decode, author search, kind filters, edit/delete, save-as-feed, exclude authors) — all landed. |
@@ -1,5 +1,8 @@
# Custom Feeds — Testing Sheet
> **Status:** shipped — records completed test coverage for the custom-feeds phases that landed (data model, serializer, builder, search bridge, kind 31890); the matching `feeds/custom/` code and tests exist.
> _Audited 2026-06-30._
**Branch:** `feat/desktop-custom-feeds`
**Run:** `./gradlew :desktopApp:run`
@@ -1,5 +1,8 @@
# Feed Builder Enhancements
> **Status:** shipped — all 6 enhancements (npub decode, author search, kind checkboxes, edit/delete, "Save as Feed", exclude authors) are present in `FeedBuilderDialog.kt`, `FeedsDrawerTab.kt`, and `SearchScreen.kt`.
> _Audited 2026-06-30._
**Date:** 2026-05-05
**Status:** Implementation
@@ -8,6 +8,9 @@ origin: desktopApp/plans/2026-05-12-wallet-zapping-phase1-2-plan.md
# Desktop Wallet & Zapping Test Coverage
> **Status:** in-progress — Phase 1 (`NwcPaymentHandlerTest`) and Phase 4 (`NwcRpcIntegrationTest`) shipped, but Phase 2 (`WalletColumnStateTest`) and Phase 3 (`ZapDialogLogicTest`) are absent from the codebase.
> _Audited 2026-06-30._
## Enhancement Summary (Deepened 2026-05-12)
**Key implementation insights from deepening research:**
@@ -1,5 +1,8 @@
# Phase 2: Embedded Self-Custodial Wallet — Research Summary
> **Status:** queued — research summary explicitly "parked" pending NWC parity; no embedded-wallet (Breez/ldk-node/lightning-kmp) code exists.
> _Audited 2026-06-30._
**Date:** 2026-05-21
**Status:** Research complete, parked. Return after NWC parity (Phase 1) ships.
@@ -1,5 +1,8 @@
# Desktop napplet / nsite host — implementation plan
> **Status:** in-progress — the three shared extractions are DONE (`NappletRequestRouter`, `NappletWebContract`, `StaticWebsiteCard` in commons), but the desktop edge (KCEF/JCEF engine, scheme handler, transport, gateways, host UI) has no code in `desktopApp/`.
> _Audited 2026-06-30._
**Date:** 2026-06-21. Goal: a desktop NIP-5A (nsite) + NIP-5D (napplet) host that **reuses the
shared core** the Android host already runs on, so the two stay wire- and policy-identical. This
doc is the map: what already works for free, what desktop must build, and the decisions to make.
+28
View File
@@ -0,0 +1,28 @@
# desktopApp plans
_Audited 2026-06-30. 13 plans: 10 shipped (archived), 2 in-progress, 1 queued, 0 abandoned._
## In progress
| Plan | Summary |
| ---- | ------- |
| [2026-05-12-feat-desktop-wallet-zapping-test-coverage-plan.md](2026-05-12-feat-desktop-wallet-zapping-test-coverage-plan.md) | Desktop wallet/zap test coverage; NWC handler + RPC round-trip tests shipped, wallet-column-state and zap-dialog-logic tests still missing. |
| [2026-06-21-napplet-desktop-host.md](2026-06-21-napplet-desktop-host.md) | Desktop NIP-5A/5D host; shared core extractions done, desktop engine/scheme-handler/transport/UI edge not yet built. |
## Queued
| Plan | Summary |
| ---- | ------- |
| [2026-05-21-embedded-wallet-phase2-research.md](2026-05-21-embedded-wallet-phase2-research.md) | Research for an embedded self-custodial Lightning wallet (Breez/ldk-node/lightning-kmp); parked, no code. |
## Archived (shipped)
| Plan | Summary |
| ---- | ------- |
| [archive/2026-05-09-embedded-local-relay-plan.md](archive/2026-05-09-embedded-local-relay-plan.md) | In-process SQLite local relay with write-through + startup hydration + settings UI. |
| [archive/2026-05-11-wallet-zapping-brainstorm.md](archive/2026-05-11-wallet-zapping-brainstorm.md) | Brainstorm map for the desktop wallet & zapping experience (NWC parity shipped). |
| [archive/2026-05-12-wallet-zapping-phase1-2-plan.md](archive/2026-05-12-wallet-zapping-phase1-2-plan.md) | NWC wallet column (connect/balance/send/receive) plus upgraded zapping UX. |
| [archive/2026-05-19-fix-desktop-deb-launch-crash-brainstorm.md](archive/2026-05-19-fix-desktop-deb-launch-crash-brainstorm.md) | Fix .deb launch crash via jlink modules + CI launch smoke test. |
| [archive/2026-05-20-wallet-zapping-manual-testing-sheet.md](archive/2026-05-20-wallet-zapping-manual-testing-sheet.md) | Manual QA sheet for the desktop wallet & zapping feature. |
| [archive/2026-05-23-feat-send-dialog-lnurl-pay-brainstorm.md](archive/2026-05-23-feat-send-dialog-lnurl-pay-brainstorm.md) | Brainstorm for LNURL-pay / lightning-address support in the send dialog. |
| [archive/2026-05-23-feat-send-dialog-lnurl-pay-plan.md](archive/2026-05-23-feat-send-dialog-lnurl-pay-plan.md) | Send dialog accepts LNURL + lightning addresses with auto-detect/resolve flow. |
| [archive/2026-05-23-fix-nsec-session-persistence-brainstorm.md](archive/2026-05-23-fix-nsec-session-persistence-brainstorm.md) | Fix nsec sessions not persisting across restarts (save on App-level scope). |
| [archive/2026-06-08-feat-desktop-image-compression-plan.md](archive/2026-06-08-feat-desktop-image-compression-plan.md) | JPEG re-encode/downscale upload pipeline with EXIF strip + failure dialog, shared with CLI. |
| [archive/2026-06-17-feat-app-launch-optimization-plan.md](archive/2026-06-17-feat-app-launch-optimization-plan.md) | Launch testing/benchmark foundation + targeted launch-path fixes (all in-scope phases landed). |
@@ -1,5 +1,8 @@
# Embedded Local Relay for Amethyst Desktop
> **Status:** shipped — `LocalRelayStore`, `LocalRelayMaintenance`, and `LocalRelaySettingsScreen` all exist in `desktopApp/.../relay/` + `.../ui/settings/`, with `LocalRelayStoreHydrationTest` covering hydration.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-05-09
@@ -1,5 +1,8 @@
# Desktop Wallet & Zapping Experience - Brainstorm Map
> **Status:** shipped — brainstorm map whose Phase 1-2 (NWC wallet column + zapping UX) shipped; later Cashu/nutzap phases are captured in the parked embedded-wallet research doc.
> _Audited 2026-06-30._
**Date:** 2026-05-12
**Status:** Brainstorm v2 — phase map with research findings + decisions
@@ -1,5 +1,8 @@
# Phase 1-2: NWC Wallet Parity + Zapping UX — Implementation Plan
> **Status:** shipped — `WalletColumnScreen` (NWC connect/balance/send/receive), `NwcPaymentHandler`, and the upgraded zap dialog in `NoteActions.kt` all exist; delivered as a desktop wallet column rather than via the proposed `SharedWalletViewModel` extraction.
> _Audited 2026-06-30._
**Date:** 2026-05-12
**Branch:** `feat/desktop-wallet-zapping`
**Status:** Plan — deepened, ready for work
@@ -1,5 +1,8 @@
# Plan: Fix Desktop .deb Launch Crash + CI Smoke Test
> **Status:** shipped — `DesktopLaunchSmokeTest.kt` and `.github/workflows/smoke-test-desktop.yml` both exist, delivering the launch-test coverage the plan called for.
> _Audited 2026-06-30._
**Issue:** [#2819](https://github.com/vitorpamplona/amethyst/issues/2819)
**Branch:** `fix/desktop-deb-launch-crash`
**Date:** 2026-05-19
@@ -1,5 +1,8 @@
# Desktop Wallet & Zapping — Manual Testing Sheet
> **Status:** shipped — manual QA sheet for the shipped desktop wallet column and zapping feature.
> _Audited 2026-06-30._
**Date:** 2026-05-20
**Branch:** `feat/desktop-wallet-zapping`
**Prerequisites:** NWC-compatible wallet (Alby Hub, Coinos, Phoenix, or LNbits)
@@ -1,5 +1,8 @@
# Brainstorm: Send Dialog LNURL-Pay Support
> **Status:** shipped — LNURL / lightning-address support landed in `WalletColumnScreen.kt`'s send dialog (multi-step state machine, ~24 LNURL references).
> _Audited 2026-06-30._
**Date:** 2026-05-23
**Status:** Ready for planning
@@ -9,6 +9,9 @@ deepened: 2026-05-23
# feat: Support LNURL-pay and lightning addresses in send dialog
> **Status:** shipped — `WalletColumnScreen.kt`'s send dialog implements the auto-detect + LNURL-resolve + amount/comment flow described here.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-05-23
@@ -1,5 +1,8 @@
# Fix: nsec Session Not Persisting Across Desktop Restarts
> **Status:** shipped — Fix 2 is applied: `saveCurrentAccount()` now runs in the App-level scope inside `onLoginSuccess` (`Main.kt` ~1023), surviving LoginScreen leaving composition.
> _Audited 2026-06-30._
## Current Persistence Mechanism
Two-layer storage architecture:
@@ -9,6 +9,9 @@ deepened: 2026-06-08
# Desktop Image Compression
> **Status:** shipped — `ImageReencoder` + sniffer + `CompressionException` (commons), `ImageCompressionStore` + `CompressionPreviewDialog` + settings (desktop), wired into `ComposeNoteDialog` and the `amy` CLI.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-06-08
@@ -9,6 +9,9 @@ deepened: 2026-06-17
# App Launch Optimization (Desktop, Foundation-first)
> **Status:** shipped — progress log records all in-scope phases landed (278/278 tests); `LaunchFixture`/`LaunchBenchmark`/`LaunchMarkers`/`IconResources` exist and `desktopApp/benchmarks/` holds the baseline + post-fix snapshots.
> _Audited 2026-06-30._
## Progress Log
| Date | Phase | Outcome | Commit |
@@ -7,6 +7,10 @@ date: 2026-04-23
# feat: DesktopRelayConfig — Single Source of Truth for All Relay Categories
> **Status:** abandoned — Superseded — the proposed single DesktopRelayConfig class was never built; relay state landed as DesktopRelayCategories/LocalRelayCategories instead.
> _Audited 2026-06-30._
## Problem
The current relay wiring is broken. Multiple classes (`DesktopRelayCategories`, `DesktopAccountRelays`, `RelayConnectionManager`) each hold parts of relay state, leading to race conditions, empty initial values, and screens using inconsistent relay sources.
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-04-29-feed-metadata-loading-optimization-brainstor
# perf: Viewport-aware feed metadata loading
> **Status:** in-progress — Base MetadataPreloader/MetadataRateLimiter infra exists, but the viewport-aware (LazyListState/snapshotFlow) selection in the plan is not clearly wired.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-04-29
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-05-18-fix-macos-vlc-bundling-brainstorm.md
# fix: macOS bundled VLC discovery broken by versioned setenv symbol
> **Status:** abandoned — Superseded — VLC/VLCJ was removed entirely (kdroidFilter migration); MacOsVlcDiscoverer no longer exists, so the setenv fix is moot.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-05-18
@@ -44,6 +44,10 @@ origin: docs/brainstorms/2026-06-18-fix-macos-bunker-relogin-brainstorm.md
# 🐛 fix(desktop): macOS forced re-login on cold boot — ProGuard strips java-keyring backend
> **Status:** in-progress — PR 1 defense-in-depth (keychainUnavailable signal + login banner + tests) landed, but the actual cold-boot root cause is still open/unidentified.
> _Audited 2026-06-30._
## Overview
User on macOS using the recent Amethyst Desktop release (official GitHub DMG) is forced to re-log-in with their NIP-46 bunker on **every** cold boot — 100 % reproducible. Investigation determined the bug is **not bunker-specific**: every macOS release-DMG user whose account requires a key stored in the OS keychain loses their session on cold boot (bunker, nsec, NWC). Bunker is the loudest symptom because re-pasting a bunker URI is high-friction; nsec users likely re-paste quickly and never report.
+69
View File
@@ -0,0 +1,69 @@
# docs plans (frozen legacy)
_Audited 2026-06-30. 52 plans: 48 shipped (archived), 2 in-progress, 2 abandoned._
> This is the frozen global plans folder — new plans go in the owning module's `plans/` folder instead.
## In progress
| Plan | Summary |
| ---- | ------- |
| [2026-04-29-perf-viewport-aware-metadata-loading-plan.md](2026-04-29-perf-viewport-aware-metadata-loading-plan.md) | Viewport-aware feed metadata loading — base preloader/rate-limiter infra exists but the LazyListState/snapshotFlow viewport selection isn't clearly wired. |
| [2026-06-18-fix-desktop-macos-bunker-relogin-plan.md](2026-06-18-fix-desktop-macos-bunker-relogin-plan.md) | macOS cold-boot bunker re-login — PR 1 defense-in-depth shipped, but the actual root cause is still open/unidentified. |
## Abandoned
| Plan | Summary |
| ---- | ------- |
| [2026-04-23-feat-desktop-relay-config-single-source-plan.md](2026-04-23-feat-desktop-relay-config-single-source-plan.md) | Single `DesktopRelayConfig` class — never built; relay state landed as `DesktopRelayCategories`/`LocalRelayCategories` instead. |
| [2026-05-18-fix-macos-vlc-bundled-discovery-plan.md](2026-05-18-fix-macos-vlc-bundled-discovery-plan.md) | macOS bundled-VLC `setenv` discovery fix — moot after VLC/VLCJ was removed entirely in the kdroidFilter migration. |
## Archived (shipped)
| Plan | Summary |
| ---- | ------- |
| [archive/2026-03-05-fix-nip46-relay-isolation-and-init-plan.md](archive/2026-03-05-fix-nip46-relay-isolation-and-init-plan.md) | NIP-46 remote signer wired into desktop with dedicated relay isolation and pool-init fixes. |
| [archive/2026-03-05-nip46-bunker-login-deepened.md](archive/2026-03-05-nip46-bunker-login-deepened.md) | Desktop bunker:// / nostrconnect:// login over quartz NostrSignerRemote. |
| [archive/2026-03-05-nip46-improvements-plan.md](archive/2026-03-05-nip46-improvements-plan.md) | Post-MVP NIP-46 items — auth_url handling and connect validation in quartz. |
| [archive/2026-03-05-nip46-tdd-tests-plan.md](archive/2026-03-05-nip46-tdd-tests-plan.md) | TDD tests reproducing the three NIP-46 relay-isolation bugs. |
| [archive/2026-03-10-feat-desktop-advanced-search-plan.md](archive/2026-03-10-feat-desktop-advanced-search-plan.md) | Desktop advanced search with query operators and form UI (AdvancedSearchPanel/SearchQuery). |
| [archive/2026-03-16-desktop-media-manual-testing-plan.md](archive/2026-03-16-desktop-media-manual-testing-plan.md) | Manual-testing sheet for the desktop media stack (all rows PASS). |
| [archive/2026-03-16-feat-desktop-media-full-parity-plan.md](archive/2026-03-16-feat-desktop-media-full-parity-plan.md) | Desktop media full parity — images, upload, gallery, video/audio playback. |
| [archive/2026-03-18-feat-desktop-cache-navigation-persistence-plan.md](archive/2026-03-18-feat-desktop-cache-navigation-persistence-plan.md) | Cache-centric desktop architecture for navigation persistence (DesktopLocalCache). |
| [archive/2026-03-18-feat-desktop-dm-encrypted-media-plan.md](archive/2026-03-18-feat-desktop-dm-encrypted-media-plan.md) | NIP-17 encrypted DM media send/receive in desktop chat. |
| [archive/2026-03-19-feat-deck-messages-stacked-layout-plan.md](archive/2026-03-19-feat-deck-messages-stacked-layout-plan.md) | Stacked messages layout for narrow deck columns. |
| [archive/2026-03-20-feat-remote-signer-loading-error-ux-plan.md](archive/2026-03-20-feat-remote-signer-loading-error-ux-plan.md) | Remote-signer loading/error UX — commons SigningState holder. |
| [archive/2026-03-22-feat-clean-cache-single-source-of-truth-plan.md](archive/2026-03-22-feat-clean-cache-single-source-of-truth-plan.md) | Desktop feeds migrated to cache-centric DesktopFeedViewModel + FeedContentState. |
| [archive/2026-03-24-feat-article-highlights-notes-plan.md](archive/2026-03-24-feat-article-highlights-notes-plan.md) | Desktop article highlights & note-taking (NIP-84) UI + store. |
| [archive/2026-03-24-feat-weakref-cache-state-extraction-plan.md](archive/2026-03-24-feat-weakref-cache-state-extraction-plan.md) | WeakReference cache (LargeSoftCache) + state-class extraction to commons. |
| [archive/2026-03-24-long-form-reads-manual-testing.md](archive/2026-03-24-long-form-reads-manual-testing.md) | Manual-testing sheet for the long-form Reads feature. |
| [archive/2026-03-30-feat-app-drawer-v1a-plan.md](archive/2026-03-30-feat-app-drawer-v1a-plan.md) | Desktop App Drawer with categories and search (AppDrawer.kt). |
| [archive/2026-03-30-feat-desktop-tor-support-plan.md](archive/2026-03-30-feat-desktop-tor-support-plan.md) | Embedded Tor support on desktop (DesktopTorManager + kmp-tor). |
| [archive/2026-04-01-fix-tor-traffic-leaks-plan.md](archive/2026-04-01-fix-tor-traffic-leaks-plan.md) | Fail-closed Tor-aware client in DesktopHttpClient — no direct connections when Tor ON. |
| [archive/2026-04-02-feat-tor-toggle-restart-ux-plan.md](archive/2026-04-02-feat-tor-toggle-restart-ux-plan.md) | Tor toggle restart UX — confirmation dialog + appRestartKey app rebuild. |
| [archive/2026-04-17-feat-customizable-nav-bar-v1b-plan.md](archive/2026-04-17-feat-customizable-nav-bar-v1b-plan.md) | Customizable nav bar — PinnedNavBarState (pin/unpin/reorder). |
| [archive/2026-04-17-feat-workspace-management-ux-plan.md](archive/2026-04-17-feat-workspace-management-ux-plan.md) | Workspace management UX — CRUD via WorkspaceManager + App Drawer tabs. |
| [archive/2026-04-17-feat-workspaces-v1c-plan.md](archive/2026-04-17-feat-workspaces-v1c-plan.md) | Named layout-preset workspaces with layout-mode switching. |
| [archive/2026-04-17-test-desktop-distribution.md](archive/2026-04-17-test-desktop-distribution.md) | Test matrix for multi-platform desktop distribution (DMG/MSI/DEB/RPM/AppImage). |
| [archive/2026-04-20-feat-relay-power-tools-plan.md](archive/2026-04-20-feat-relay-power-tools-plan.md) | Relay dashboard screen + compose relay picker. |
| [archive/2026-04-21-feat-relay-config-parity-plan.md](archive/2026-04-21-feat-relay-config-parity-plan.md) | Relay config parity — NIP-65/DM/Search/Blocked category editors. |
| [archive/2026-04-21-feat-relay-subscription-wiring-plan.md](archive/2026-04-21-feat-relay-subscription-wiring-plan.md) | Wire relay-config categories into desktop subscriptions (superseded by 04-22 deepened version). |
| [archive/2026-04-22-feat-relay-persistence-counts-per-screen-picker-plan.md](archive/2026-04-22-feat-relay-persistence-counts-per-screen-picker-plan.md) | Relay config persistence, correct counts, per-screen relay editors. |
| [archive/2026-04-22-feat-relay-subscription-wiring-plan.md](archive/2026-04-22-feat-relay-subscription-wiring-plan.md) | Relay-category subscription wiring via LocalRelayCategories CompositionLocal. |
| [archive/2026-04-22-nip-audio-rooms-draft.md](archive/2026-04-22-nip-audio-rooms-draft.md) | NIP draft for audio-rooms join (moq-lite Lite-03), implemented in :nestsClient. |
| [archive/2026-04-22-pure-kotlin-quic-webtransport-plan.md](archive/2026-04-22-pure-kotlin-quic-webtransport-plan.md) | Pure-Kotlin QUIC + HTTP/3 + WebTransport — the :quic module. |
| [archive/2026-04-23-feat-desktop-multi-account-support-plan.md](archive/2026-04-23-feat-desktop-multi-account-support-plan.md) | Desktop multi-account support — AccountSwitcherDropdown + encrypted storage. |
| [archive/2026-04-27-fix-deb-libicu-dependency-plan.md](archive/2026-04-27-fix-deb-libicu-dependency-plan.md) | Relax libicu dependency in .deb packages via post-process script + CI wiring. |
| [archive/2026-04-28-multi-account-testing-sheet.md](archive/2026-04-28-multi-account-testing-sheet.md) | Testing sheet for desktop multi-account. |
| [archive/2026-05-04-fix-bunker-timeouts-and-decryption-plan.md](archive/2026-05-04-fix-bunker-timeouts-and-decryption-plan.md) | Fix bunker timeouts + broken decryption (BunkerResponseDecrypt + same-id retry). |
| [archive/2026-05-14-fix-account-security-hardening-plan.md](archive/2026-05-14-fix-account-security-hardening-plan.md) | Desktop account security hardening — encrypted accounts.json.enc, keychain secrets. |
| [archive/2026-05-22-feat-desktop-note-action-bar-ux-plan.md](archive/2026-05-22-feat-desktop-note-action-bar-ux-plan.md) | Note action bar — long-press details + right-click customize. |
| [archive/2026-05-22-fix-desktop-note-action-counters-and-quote-plan.md](archive/2026-05-22-fix-desktop-note-action-counters-and-quote-plan.md) | Fix reactive counters, quote boost, and boost detail popup. |
| [archive/2026-05-26-feat-desktop-profile-editing-plan.md](archive/2026-05-26-feat-desktop-profile-editing-plan.md) | Desktop profile editing full parity (EditProfileScreen + EditProfileFields). |
| [archive/2026-05-28-feat-desktop-search-spotlight-plan.md](archive/2026-05-28-feat-desktop-search-spotlight-plan.md) | Search spotlight overlay (Cmd+F) + unified feed header bar. |
| [archive/2026-05-28-feat-desktop-visual-personality-plan.md](archive/2026-05-28-feat-desktop-visual-personality-plan.md) | Desktop visual personality overhaul (theme, shimmer, hover, shortcuts). |
| [archive/2026-05-28-fix-feed-header-search-ux-plan.md](archive/2026-05-28-fix-feed-header-search-ux-plan.md) | Feed header bar layout + inline search UX fixes. |
| [archive/2026-06-02-feat-new-posts-chip-desktop-feed-plan.md](archive/2026-06-02-feat-new-posts-chip-desktop-feed-plan.md) | "New posts" chip for the desktop feed (commons NewPostsChip + state). |
| [archive/2026-06-02-fix-desktop-feed-review-findings-plan.md](archive/2026-06-02-fix-desktop-feed-review-findings-plan.md) | Resolve 5 review findings on PR #3124 desktop feed UI refresh. |
| [archive/2026-06-05-feat-profile-replies-section-plan.md](archive/2026-06-05-feat-profile-replies-section-plan.md) | Desktop profile Replies tab (DesktopProfileFeedFilter). |
| [archive/2026-06-05-fix-desktop-feed-reply-context-plan.md](archive/2026-06-05-fix-desktop-feed-reply-context-plan.md) | Desktop feed reply-context rendering (commons ReplyContext). |
| [archive/2026-06-10-feat-unhealthy-relay-review-plan.md](archive/2026-06-10-feat-unhealthy-relay-review-plan.md) | Unhealthy relay review banner + sheet (RelayHealthStore + UnhealthyRelayBanner). |
| [archive/2026-06-11-feat-replace-vlcj-with-kdroidfilter-plan.md](archive/2026-06-11-feat-replace-vlcj-with-kdroidfilter-plan.md) | Replace vlcj with kdroidFilter ComposeMediaPlayer + JCodec/Jaffree. |
| [archive/2026-06-11-vlcj-replacement-testing-sheet.md](archive/2026-06-11-vlcj-replacement-testing-sheet.md) | Manual-testing sheet for the vlcj → kdroidFilter migration. |
@@ -8,6 +8,10 @@ deepened: 2026-03-05
# fix: NIP-46 relay isolation, pool init, and stale response bugs
> **Status:** shipped — NIP-46 remote signer wired into desktop with dedicated relay isolation; NostrSignerRemote/RemoteSignerManager in quartz plus desktop AccountManager bunker paths and tests exist.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-05
@@ -1,5 +1,9 @@
# NIP-46 Remote Signer (bunker:// + nostrconnect://) Login for Desktop — Deepened Plan
> **Status:** shipped — Desktop bunker:// / nostrconnect:// login shipped via AccountManager + LoginScreen on top of quartz NostrSignerRemote.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-05 (2 rounds)
@@ -8,6 +8,10 @@ origin: docs/plans/2026-03-05-fix-nip46-relay-isolation-and-init-plan.md
# feat: NIP-46 remote signer improvements (post-MVP)
> **Status:** shipped — Post-MVP NIP-46 items landed — auth_url handling and validation live in quartz BunkerResponse / NostrSignerRemote.
> _Audited 2026-06-30._
Deferred items from the NIP-46 relay isolation fix. All are nice-to-haves discovered during deepening/review — none block the initial fix.
## 1. `auth_url` handling (nsec.app compatibility)
@@ -8,6 +8,10 @@ parent: 2026-03-05-fix-nip46-relay-isolation-and-init-plan.md
# test: TDD tests for NIP-46 relay isolation fix
> **Status:** shipped — NIP-46 isolation tests present — RemoteSignerManagerRetryTest and AccountManagerLoadAccountTest exist.
> _Audited 2026-06-30._
## Overview
Write tests that **reproduce the three NIP-46 bugs** before they're fixed, then verify the fix. Tests should fail against the old shared-client architecture and pass after relay isolation.
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-03-10-advanced-search-brainstorm.md
# Desktop Advanced Search
> **Status:** shipped — Implemented as AdvancedSearchPanel + commons AdvancedSearchBarState/SearchQuery with operator parsing.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-10
@@ -1,5 +1,9 @@
# Manual Testing Plan: Desktop Media Full Parity (`feat/desktop-media`)
> **Status:** shipped — Completed manual-testing sheet (all rows PASS) for the shipped desktop media stack.
> _Audited 2026-06-30._
## Context
Branch has 13 commits implementing Phases 0-9 of desktop media: image display, upload, video/audio playback, lightbox, encrypted DM files, profile gallery, server management, and imeta tags. 49 unit tests cover service logic. This plan covers **integration & UI manual testing** that unit tests can't reach.
@@ -9,6 +9,10 @@ deepened: 2026-03-16
# Desktop Media — Full Parity
> **Status:** shipped — Desktop media (images, upload, gallery, video/audio) shipped; later VLCJ replaced by kdroidFilter.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-16
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-03-17-desktop-cache-architecture-brainstorm.md
# feat: Desktop Cache-Centric Architecture for Navigation Persistence
> **Status:** shipped — Cache-centric desktop architecture shipped — DesktopLocalCache + FeedViewModel feed the screens.
> _Audited 2026-06-30._
## Overview
Migrate Amethyst Desktop from per-screen event state (`EventCollectionState` in `remember {}`) to Android's cache-centric pattern where `DesktopLocalCache` is the single source of truth. Feeds query the cache via `FeedFilter`, `FeedViewModel` subscribes to the cache event stream, and data survives navigation.
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-03-18-desktop-dm-encrypted-media-brainstorm.md
# feat: Desktop DM Encrypted Media (NIP-17)
> **Status:** shipped — Marked completed; NIP-17 encrypted DM media send/receive is in desktop chat.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-18
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-03-19-deck-messages-stacked-layout-brainstorm.md
# feat: Stacked Messages Layout in Deck Columns
> **Status:** shipped — Marked completed; ConversationListPane/DesktopMessagesScreen stacked layout shipped.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-19
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-03-20-remote-signer-ux-brainstorm.md
# feat: Remote Signer Loading & Error UX
> **Status:** shipped — Implemented as commons SigningState holder for NIP-46 signing UX.
> _Audited 2026-06-30._
## Overview
Add proper loading indicators and error handling for all NIP-46 remote signer (bunker) operations. Currently, signing timeouts crash as AWT system popup. Fix with a lightweight `SigningState` holder + catch-all helper, reusing existing UI patterns (inline `CircularProgressIndicator`, snackbar feedback).
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-03-22-clean-cache-architecture-brainstorm.md
# feat: Clean Cache Architecture — Single Source of Truth
> **Status:** shipped — Desktop feeds migrated to cache-centric DesktopFeedViewModel + FeedContentState.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-23
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-03-24-article-highlights-notes-brainstorm.md
# feat: Article Highlights & Note-Taking
> **Status:** shipped — Shipped — desktop highlights UI (ArticleHighlightsPanel, MyHighlightsScreen) + DesktopHighlightStore.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-24
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-03-24-weakref-cache-architecture-brainstorm.md
# feat: WeakReference Cache + State Class Extraction
> **Status:** shipped — LargeSoftCache (WeakReference cache) lives in commons and backs DesktopLocalCache.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-24
@@ -6,6 +6,10 @@ branch: features/long-form-content
# Long-Form Reads — Manual Testing Sheet
> **Status:** shipped — Manual-testing sheet for the shipped long-form Reads feature.
> _Audited 2026-06-30._
**Run:** `cd AmethystMultiplatform-long-form && ./gradlew :desktopApp:run`
## Pre-Test Setup
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-03-30-desktop-navigation-overhaul-brainstorm.md
# App Drawer with Categories and Search (v1a)
> **Status:** shipped — Implemented as desktop AppDrawer.kt with categories + search.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-30
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-03-30-desktop-tor-support-brainstorm.md
# feat: Desktop Tor Support
> **Status:** shipped — Shipped — DesktopTorManager + kmp-tor runtime and granular routing settings.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-03-30
@@ -9,6 +9,10 @@ origin: docs/brainstorms/2026-04-01-fix-tor-traffic-leaks-brainstorm.md
# fix: Desktop Tor traffic leaks
> **Status:** shipped — Fail-closed Tor-aware client landed in DesktopHttpClient (currentClient accessor).
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-04-01
@@ -8,6 +8,10 @@ deepened: 2026-04-02
# feat: Tor toggle restart UX
> **Status:** shipped — appRestartKey rebuild-on-Tor-change implemented in desktop Main.kt.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-04-02
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-03-30-desktop-navigation-overhaul-brainstorm.md
# Customizable Nav Bar (v1b)
> **Status:** shipped — Implemented as PinnedNavBarState with pin/unpin/reorder in the desktop sidebar.
> _Audited 2026-06-30._
## Overview
Make the sidebar nav bar user-customizable. Users pin/unpin screens from the App Drawer, reorder items via drag-to-sort, and persist their layout. Applies to both SinglePaneLayout's NavigationRail and DeckSidebar's quick-launch icons.
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-04-17-workspace-management-ux-brainstorm.md
# Workspace Management UX
> **Status:** shipped — Workspace CRUD shipped via WorkspaceManager + AppDrawer tabs.
> _Audited 2026-06-30._
## Summary
Add full workspace CRUD to the App Drawer: two-tab layout (Screens/Workspaces), unified search, workspace cards with editor dialog, Cmd+S save, and layout mode auto-switching on workspace change.
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-03-30-desktop-navigation-overhaul-brainstorm.md
# Workspaces (v1c)
> **Status:** shipped — Workspaces shipped — WorkspaceManager/Workspace presets with layout-mode switching.
> _Audited 2026-06-30._
## Overview
Named layout presets users can create, switch between, and customize. Each workspace stores a layout mode (Deck/SinglePane) + column configuration. Switching destroys current layout and rebuilds from saved config. Max 9 workspaces (Cmd+K then 1-9).
@@ -1,5 +1,9 @@
# Test Plan: Desktop Multi-Platform Distribution
> **Status:** shipped — Distribution test matrix for the shipped multi-platform desktop packaging.
> _Audited 2026-06-30._
**PR branch:** `feat/desktop-multiplatform-distribution`
**Test date:** 2026-04-17
@@ -9,6 +9,10 @@ deepened: 2026-04-20
# feat: Relay Power Tools — Dashboard Screen + Compose Relay Picker
> **Status:** shipped — Relay Dashboard + compose relay picker shipped (RelayDashboardScreen, RelayMetricsTab, RelayConfigTab).
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-04-20
@@ -8,6 +8,10 @@ parent: docs/plans/2026-04-20-feat-relay-power-tools-plan.md
# feat: Relay Config Parity — All Desktop-Relevant Categories
> **Status:** shipped — All relay categories shipped — NIP-65/DM/Search/Blocked editors in desktop ui/relay/.
> _Audited 2026-06-30._
## Context
Phase 1-2 of Relay Power Tools shipped a dashboard with Monitor tab, a Configure tab with only Connected Relays (NIP-65/DM as placeholders), and a compose relay picker. This plan fills in all relay categories that desktop features actually consume.
@@ -8,6 +8,10 @@ origin: docs/plans/2026-04-21-feat-relay-config-parity-plan.md
# feat: Wire Relay Config Categories into Desktop Subscriptions
> **Status:** shipped — Superseded by the 2026-04-22 deepened version; relay-category wiring (DesktopRelayCategories/LocalRelayCategories) shipped.
> _Audited 2026-06-30._
## Overview
Desktop's relay config UI publishes relay list events (kinds 10002, 10050, 10007, 10006) but the app itself uses hardcoded defaults or all connected relays for every subscription. This plan wires each relay category into the features that consume it.
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-04-22-relay-config-persistence-and-per-screen-edit
# feat: Relay Config Persistence, Correct Counts, Per-Screen Picker
> **Status:** shipped — Per-screen relay editors (SearchRelayEditor, DmRelayEditor, etc.) and category counts shipped in ui/relay/.
> _Audited 2026-06-30._
## Overview
Three fixes to make relay management work end-to-end: persist config across restarts, show correct per-category relay counts, and add inline relay editing per screen.
@@ -9,6 +9,10 @@ deepened: 2026-04-22
# feat: Wire Relay Config Categories into Desktop Subscriptions
> **Status:** shipped — Relay-category subscription wiring shipped — DesktopRelayCategories provided via LocalRelayCategories CompositionLocal.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-04-22
@@ -1,5 +1,9 @@
# NIP-XX — Interactive Audio Rooms Join Protocol
> **Status:** shipped — Audio-rooms join protocol (moq-lite Lite-03) implemented in :nestsClient; draft spec mirrored in nestsClient/specs/.
> _Audited 2026-06-30._
`draft` `optional`
> **Revision 2026-04-26.** Replaces the IETF MoQ-transport / `GET <service>/<room-d-tag>`
@@ -1,5 +1,9 @@
# Pure-Kotlin QUIC + WebTransport plan
> **Status:** shipped — Pure-Kotlin QUIC + HTTP/3 + WebTransport shipped as the :quic module (with interop runner).
> _Audited 2026-06-30._
## Context
The Audio Rooms feature (NIP-53 kind 30312) is wire-incompatible with anything but
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-04-23-desktop-multi-account-brainstorm.md
# feat: Desktop Multi-Account Support
> **Status:** shipped — Multi-account shipped — AccountSwitcherDropdown + encrypted accounts.json.enc storage.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-04-24
@@ -1,5 +1,9 @@
# Fix: Relax libicu dependency in .deb packages
> **Status:** shipped — scripts/relax-deb-libicu.sh added and wired into build/release GitHub workflows.
> _Audited 2026-06-30._
**Date**: 2026-04-27
**Issue**: [#2579](https://github.com/vitorpamplona/amethyst/issues/2579)
**Branch**: `fix/deb-libicu-dependency`
@@ -1,5 +1,9 @@
# Multi-Account Testing Sheet
> **Status:** shipped — Testing sheet for the shipped desktop multi-account feature.
> _Audited 2026-06-30._
**Branch:** `feat/desktop-multi-account`
**Date:** 2026-04-28
**Tester:**
@@ -1,5 +1,9 @@
# Fix: Bunker Timeouts & Broken Decryption
> **Status:** shipped — BunkerResponseDecrypt parsing + same-id retry landed in quartz (RemoteSignerManagerRetryTest).
> _Audited 2026-06-30._
**Branch**: `fix/bunker-timeout-and-decrypt`
**Date**: 2026-05-04
**Deepened**: 2026-05-04
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-05-14-fix-account-security-hardening-brainstorm.md
# Account Security Hardening
> **Status:** shipped — Desktop account hardening shipped — encrypted accounts.json.enc, keychain-backed secrets, corruption signals in AccountManager.
> _Audited 2026-06-30._
## Deepening Insights (2026-05-14)
1. **NWC URI reconstruction**: `Nip47URINorm` has a direct constructor `(pubKeyHex, relayUri, secret, lud16)` — no URI string parsing needed. Store pubKeyHex+relayUri in metadata, secret in keychain, reconstruct via constructor.
@@ -9,6 +9,10 @@ deepened: 2026-05-22
# Desktop Note Action Bar — Long-Press Details + Right-Click Customize
> **Status:** shipped — Long-press/right-click note action gestures shipped in desktop NoteActions.kt.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-05-22
@@ -7,6 +7,10 @@ date: 2026-05-22
# Fix Desktop Note Action Counters, Quote Boost, and Boost Detail Popup
> **Status:** shipped — Reactive counters + kind-1 reply interactions added to DesktopRelaySubscriptionsCoordinator.requestInteractions.
> _Audited 2026-06-30._
## Problems
### 1. Counters show zero for reactions, zaps, replies, reposts
@@ -9,6 +9,10 @@ deepened: 2026-05-26
# Desktop Profile Editing — Full Parity + Desktop Polish
> **Status:** shipped — Full profile editing shipped — EditProfileScreen + commons EditProfileFields.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-05-26
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-05-28-feat-desktop-search-spotlight-brainstorm.md
# feat: Desktop Search Spotlight + Unified Feed Header Bar
> **Status:** shipped — Implemented as SearchSpotlight + SearchPill + feed header bar on desktop.
> _Audited 2026-06-30._
## Overview
Add a global search spotlight overlay (Cmd+F) and a unified feed header bar that combines feed tabs with a search pill. Also fix the bug where "+ Add more" feeds only works from the Home feed by moving it to the sidebar.
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-05-27-desktop-visual-personality-brainstorm.md
# feat: Desktop Visual Personality Overhaul
> **Status:** shipped — Visual overhaul shipped — ShimmerPlaceholder, LocalIsDarkTheme/PlatformTheme, hover and shortcuts.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-05-28
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-05-28-feat-desktop-search-spotlight-brainstorm.md
# fix: Feed Header Bar Layout + Inline Search UX
> **Status:** shipped — Feed header bar + inline search UX fixes landed (SearchPill, FeedScreen FeedTabsHeader).
> _Audited 2026-06-30._
## Overview
Fix 5 issues with the feed header bar and search experience introduced in the visual personality overhaul.
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-06-02-stale-feed-on-launch-new-posts-chip-brainsto
# feat: New posts chip on desktop feed
> **Status:** shipped — Implemented as commons NewPostsChip + NewPostsChipState (with tests), mounted in desktop FeedScreen.
> _Audited 2026-06-30._
## Overview
Add a Twitter/Mastodon-style "New posts" floating pill chip to the Amethyst Desktop home feed. The chip slides down from the top — anchored just below the `FeedTabsHeader` (the search bar / header card) — whenever new events arrive while the user is scrolled away from the top of the list. Tapping the chip smooth-scrolls to position 0 and slides the chip back up off-screen. Scrolling to the top manually dismisses it the same way.
@@ -12,6 +12,10 @@ deepened: 2026-06-02
# Fix 5 review findings on PR #3124
> **Status:** shipped — PR #3124 review findings resolved (consume/broadcast couplet, reply kind handling, formatSats).
> _Audited 2026-06-30._
## Enhancement summary (2026-06-02 deepen-plan)
Eight parallel agents resolved all 5 open questions and surfaced 3 plan revisions:
@@ -7,6 +7,10 @@ date: 2026-06-05
# Desktop Profile — Replies Tab
> **Status:** shipped — Replies tab shipped in desktop UserProfileScreen via DesktopProfileFeedFilter (test present).
> _Audited 2026-06-30._
## Enhancement Summary (deepen-plan, 2026-06-05)
Source-verified facts (carried into the final design):
@@ -8,6 +8,10 @@ origin: docs/brainstorms/2026-06-05-desktop-feed-reply-context-brainstorm.md
# Desktop Feed — Reply Context Rendering
> **Status:** shipped — Reply-context rendering shipped — commons ReplyContext.kt (with tests) used by NoteCard.
> _Audited 2026-06-30._
## Enhancement Summary
**Deepened on:** 2026-06-05

Some files were not shown because too many files have changed in this diff Show More