Files
nrobi144 3f56d177d8 feat(desktop): note scheduling + NIP-37 opt-in draft sync
Adds note scheduling and NIP-37 opt-in encrypted draft sync to Amethyst
Desktop, and extracts the existing Android scheduled-post code into
`commons` so both platforms (and PowJobRestorer) share one implementation.

- Compose → clock icon → date/time picker (presets + exact-minute); the
  note is pre-signed and stored locally, then published at its time.
- Publishes while the app is open (45s in-app tick + launch catch-up) AND
  while fully closed: an OS job (launchd / schtasks / systemd, registered
  only while the queue is non-empty) relaunches the binary in a headless,
  key-free `--publish-scheduled` mode that opens a websocket and pushes the
  pre-signed bytes.
- A "Scheduled" deck destination (tabs Scheduled / Drafts / Articles):
  status, cancel, publish-now, edit (cancel + reopen prefilled).
- Drafts: save-as-draft with a default-OFF "Sync across devices
  (encrypted)" toggle publishing a NIP-37 DraftWrapEvent (kind 31234,
  NIP-44 to self); drafts sync down on a fresh device.

Extraction / de-dup: ScheduledPost → commons/commonMain; ScheduledPostStore
+ ScheduledPostPublisher → commons/jvmAndroid (Jackson/java.io.File are
gate-forbidden in commonMain). The commons store is a strict superset of
upstream's parallel Android store (account-scoped claim, CLAIM_TTL crash
recovery, PUBLISHING-only status guards, reload-before-claim); upstream's
new ScheduledPostWorkGate gating is adopted to drive it. Single-writer file
lock + reload-before-claim so the in-app timer and headless process never
double-publish. Store file 0600, dir 0700.

macOS verified on the packaged app-image (compose+schedule, in-app publish,
app-closed launchd firing, Scheduled screen, NIP-37 draft round-trip).
Windows/Linux OS-integration authored but untested; headless has no Tor
routing yet — both documented in the PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 11:26:12 +03:00
..

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 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 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 Single DesktopRelayConfig class — never built; relay state landed as DesktopRelayCategories/LocalRelayCategories instead.
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 NIP-46 remote signer wired into desktop with dedicated relay isolation and pool-init fixes.
archive/2026-03-05-nip46-bunker-login-deepened.md Desktop bunker:// / nostrconnect:// login over quartz NostrSignerRemote.
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 TDD tests reproducing the three NIP-46 relay-isolation bugs.
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 Manual-testing sheet for the desktop media stack (all rows PASS).
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 Cache-centric desktop architecture for navigation persistence (DesktopLocalCache).
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 Stacked messages layout for narrow deck columns.
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 Desktop feeds migrated to cache-centric DesktopFeedViewModel + FeedContentState.
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 WeakReference cache (LargeSoftCache) + state-class extraction to commons.
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 Desktop App Drawer with categories and search (AppDrawer.kt).
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 Fail-closed Tor-aware client in DesktopHttpClient — no direct connections when Tor ON.
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 Customizable nav bar — PinnedNavBarState (pin/unpin/reorder).
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 Named layout-preset workspaces with layout-mode switching.
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 Relay dashboard screen + compose relay picker.
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 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 Relay config persistence, correct counts, per-screen relay editors.
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 NIP draft for audio-rooms join (moq-lite Lite-03), implemented in :nestsClient.
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 Desktop multi-account support — AccountSwitcherDropdown + encrypted storage.
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 Testing sheet for desktop multi-account.
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 Desktop account security hardening — encrypted accounts.json.enc, keychain secrets.
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 Fix reactive counters, quote boost, and boost detail popup.
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 Search spotlight overlay (Cmd+F) + unified feed header bar.
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 Feed header bar layout + inline search UX fixes.
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 Resolve 5 review findings on PR #3124 desktop feed UI refresh.
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 Desktop feed reply-context rendering (commons ReplyContext).
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 Replace vlcj with kdroidFilter ComposeMediaPlayer + JCodec/Jaffree.
archive/2026-06-11-vlcj-replacement-testing-sheet.md Manual-testing sheet for the vlcj → kdroidFilter migration.