diff --git a/CHECKPOINT-encryption.md b/CHECKPOINT-encryption.md index f957c83..2271d5c 100644 --- a/CHECKPOINT-encryption.md +++ b/CHECKPOINT-encryption.md @@ -1,80 +1,3 @@ -# Checkpoint — stdin EAGAIN fix, accent theme, identity backfill (2026-09-28 evening) - -## Where things are -- Project: `/home/avi/Projects/Keynctr`, branch `master` @ **`fac4ba3`** - ("feat(desktop): launch from the applications list (folio-style)"). - Previous: `d792a72` (Archipelago uses the reference artwork as canvas), - `4d0df31` (Archipelago theme tokens, first pass). `5b60ae3` (persistent identity backfill for generic pairing - labels), `a6182e3` (iOS blue accent for Workshop Dark + custom accent - setting), `9770f46` (stdin blocking-thread reader — EAGAIN crash fix), - `6bff188` (docs), `dcc701f` (no-restart self-update). -- Working tree: clean for tracked files. Untracked intentionally NOT - committed: `COSMIC_THEME.md`, `KeynectrAppIconPossibility02.jpeg`, - `deferred/SignerConnectionPanel.tsx.wip/`. -- Release binary rebuilt 2026-09-28 ~12:40 (from the 4d0df31 tree). -- origin/master is at `a6182e3`; local is 1 commit ahead — push still blocked - (no Forgejo token stored for this session; HTTPS asks for credentials). - -## Pairing problem status — RESOLVED (live evidence) -- `~/.local/share/keynectr/profiles_vault.json` now carries **3 persisted - `nip46_connections`** rows with matching `signer_mode: nip46_client` profile - rows (created Sep 25, Sep 27, and **Sep 28 10:23**). The Sep 28 pairing - happened on the current build: Amber's connect event parses, the handshake - completes, and the profile row persists — the original - "Amber says connected but no row appears" failure no longer reproduces. -- The Sep 28 row is the **active profile**. Its label is still the generic - "Amber" because the paired account has not published kind-0 yet; `5b60ae3` - backfill re-checks every ~2-5 min while the backend runs and will rename it - when metadata appears. No further parse-side work outstanding. - -## What was completed (this checkpoint's commits) -1. **`9770f46` stdin EAGAIN crash fix** — `keynectr serve` treated a transient - EAGAIN on the Electron pipe as fatal ("Rust backend exited unexpectedly - code 1"). Dedicated blocking-thread reader + mpsc; verified live with a - 200-line request stream. -2. **`a6182e3` custom accent color** — iOS blue accent for Workshop Dark plus - a user-settable accent color. -3. **`5b60ae3` persistent identity backfill** — slow-cadence loop in `serve()` - re-fetches kind-0 for Nip46Client rows still wearing generic - "Amber"/"Remote Signer" placeholders; user renames never overwritten; - locked vaults skipped; network off-lock, 90 s budget per identity. -4. **`4d0df31` Archipelago theme** — new `archipelago` theme from the user's - synthwave reference art: teal-navy dusk canvas, coral (#f0685c) scanline - sun glow + pink cloud banks + faint horizontal scanlines on `.main` - (fixed attachment), glassmorphic blur on cards/sidebar, white logo filter. - Settings -> Appearance -> "Archipelago - Sunset Sea". -5. **`d792a72` Archipelago artwork canvas (v2)** — first pass was abstract - washes and did not match the reference; replaced with the actual - illustration (`frontend/public/archipelago-bg.jpg`) cover/fixed under a - dark scrim on `.main`, translucent blur-glass cards + sidebar, light - hairline borders, coral accent. This is what the reference mock shows. -6. **`fac4ba3` applications-list launcher** — `launch-keynctr.sh` + - `~/.local/share/applications/keynctr.desktop` (validated); GPU env set - for Hyprland; single-instance lock focuses the existing window. - Verified by gtk-launch twice: one window, correct WM class. - -## Verification (2026-09-28 evening cron pass) -- `cargo test` → 221 unit + 6 e2e passed, 0 failed. -- `cargo clippy --all-targets` → 0 warnings. `cargo fmt --check` → clean. -- `frontend`: `npm test` → 139 passed (19 files); `typecheck`, `lint`, - `format:check` all clean. - -## How to resume -- GUI: `cd ~/Projects/Keynctr/frontend && npx vite --port 5173` then - `NOSTR_GUI_DEV_URL=http://localhost:5173 KEYNCTR_ENABLE_GPU=1 npx electron .` -- CLI backend: `target/release/keynectr serve` (spawned by Electron). -- Push pending commit when credentials are available: `git push origin master`. - -## Outstanding / next steps -- Live confirmation of the backfill rename: pair/keep a fresh Amber account - with no kind-0, publish kind-0 from Amber, confirm the Keynctr row renames - itself within ~5 min without restarting the app. -- Step 4 permissions UI follow-ups, Step 5 KDF, Step 7 rename/hygiene - (unchanged from previous checkpoint). -- `package.json` `homepage` still points at github.com/avi/Keynctr (Step 7). - ---- - # Checkpoint — permissions UI + updater fix + Workshop theme (2026-09-27 night) ## Where things are diff --git a/frontend/electron/main.ts b/frontend/electron/main.ts index 589dc87..9af5e94 100644 --- a/frontend/electron/main.ts +++ b/frontend/electron/main.ts @@ -1002,24 +1002,6 @@ if (process.platform === 'linux') { app.setDesktopName('keynectr.desktop'); } -// Launched from the applications list a second time? Focus the existing -// window instead of starting a duplicate app (two Electron shells would -// each spawn their own backend and fight over the vault file). -const gotInstanceLock = app.requestSingleInstanceLock(); -if (!gotInstanceLock) { - // Hard exit: app.quit() is async and would let the rest of this module - // (whenReady → backend spawn) run in the doomed second instance. - app.exit(0); -} else { - app.on('second-instance', () => { - const [window] = BrowserWindow.getAllWindows(); - if (window) { - if (window.isMinimized()) window.restore(); - window.focus(); - } - }); -} - app.whenReady().then(() => { protocol.handle('app', (request) => { const { pathname } = new URL(request.url); diff --git a/frontend/public/archipelago-bg.jpg b/frontend/public/archipelago-bg.jpg deleted file mode 100644 index 6051daf..0000000 Binary files a/frontend/public/archipelago-bg.jpg and /dev/null differ diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 9d71707..1b2db24 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -7,8 +7,7 @@ export type Theme = | 'impeccable-dark' | 'cosmic' | 'workshop' - | 'workshop-dark' - | 'archipelago'; + | 'workshop-dark'; /** Active signer mode. */ export type SignerMode = 'embedded' | 'nip46_bunker' | 'nip46_client'; diff --git a/frontend/src/screens/SettingsScreen.tsx b/frontend/src/screens/SettingsScreen.tsx index 428c2ee..fdfd396 100644 --- a/frontend/src/screens/SettingsScreen.tsx +++ b/frontend/src/screens/SettingsScreen.tsx @@ -148,7 +148,6 @@ export function SettingsScreen() { -