Files
amethyst/commons/plans
Claude 33c87b4935 refactor: promote 16 Tier-2 files to commonMain with a concurrency review
Instead of blindly porting synchronized blocks, each lock was judged:

Removed (guarded nothing, or a lock-free design exists):
- RelayAuthPromptBus: mutableMap+synchronized -> ConcurrentMap.getOrPut
  with identity-check ownership; lock-free, cold path
- NappletLaunchRegistry: its JVM-only access-ordered LinkedHashMap +
  @Synchronized trio became androidx.collection.LruCache (internally
  synchronized, access-ordered cap - identical touch-on-resolve/evict
  semantics); SecureRandom -> quartz RandomInstance

Kept as KmpLock (real multi-field invariants; uncontended lock beats
copy-per-write CAS on GC):
- ChatDeliveryTracker (hot OK path already lock-free via volatile
  immutable maps; the lock coordinates three structures + eviction)
- NWCPaymentFilterAssembler (debounce set + job swap atomicity)
- NappletNotificationStore (per-coordinate insertion-ordered buckets)
- DeferredDeleteFileSystem (pending-set membership decides deletion)

Mechanical replacements throughout: java.util.concurrent atomics ->
kotlin.concurrent.atomics; ConcurrentHashMap -> quartz ConcurrentMap
(extended with putIfAbsent/remove(key,value)/clear across expect, JVM,
and native CoW actuals); System.currentTimeMillis -> TimeUtils.nowMillis;
java.io.IOException -> okio; TimeUnit TTL -> plain ms. speedLogger's
kotlin.concurrent.timer became a coroutine tick RelaySpeedLogger cancels
in destroy() - the old daemon timer ran forever.

Also promoted: BlossomAuth (quartz-only imports, unblocks the token
provider). Reclassified to blocked: NappletIdentityWatch (needs
NappletProtocolJson, pinned by java.util.Base64) and NamecoinNameService
(quartz ElectrumXClient is jvmAndroid).

Verified: verifyKmpPurity, JVM, iosArm64 compile + test-compile,
Android, desktop, and the quartz/commons/cli test suites.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011S1vbFWVVAMFDT8PTgdibV
2026-08-31 22:04:07 +00:00
..

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 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 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 Cross-platform UI-agnostic RenderedEvent subsystem shared by Amy, Desktop, and Android; not started.
2026-05-30-amethyst-to-commons-migration.md Roadmap to move shared amethyst Android code into commons; keystone Account/LocalCache extraction not begun.
2026-08-03-poll-results-page.md Extended NIP-88 poll results page (per-option counts + who voted for what) for Android and Desktop; also specifies four tally-correctness fixes and the missing poll-relay subscription. Proposed, not started.

Archived (shipped)

Plan Summary
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 Six FeedBuilderDialog enhancements (npub decode, author search, kind filters, edit/delete, save-as-feed, exclude authors) — all landed.