From ec8b515d05b1f1df7dc4e59885c10a54a147c7b1 Mon Sep 17 00:00:00 2001 From: Avi Date: Wed, 30 Sep 2026 14:19:54 -0500 Subject: [PATCH] docs(checkpoint): profile-relay queries @ aef47dd --- CHECKPOINT-encryption.md | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/CHECKPOINT-encryption.md b/CHECKPOINT-encryption.md index 633fa80..9d4c858 100644 --- a/CHECKPOINT-encryption.md +++ b/CHECKPOINT-encryption.md @@ -1,3 +1,70 @@ +# Checkpoint — profile-relay queries for contacts + metadata backfill (2026-09-30) + +## Where things are +- Project: `/home/avi/Projects/Keynctr`, branch `master` @ **`aef47dd`** + ("fix(feed): query profile relays for kind-3 follow lists and kind-0 + metadata"). Previous: `eea6f0e` (white monochrome launcher icon), + `abc2781` (one-click update script), `7891ccc` (Step 7 rename/hygiene, + checkpoint `33ab4fe`). +- Working tree: clean for tracked files. Untracked intentionally NOT + committed: `COSMIC_THEME.md`, `KeynectrAppIconPossibility02.jpeg`, + `deferred/SignerConnectionPanel.tsx.wip/`. +- Release binary rebuilt at `aef47dd` 2026-09-30 14:18 (verified by mtime + after `touch`ing the changed sources — not a cache hit). + +## What was completed +**Profile-relay lookup for profile-scoped data** (finishes the empty +"My contacts" diagnosis on the network side): kind-3 follow lists and +kind-0 metadata usually live on profile/outbox relays — purplepag.es +aggregates them network-wide — not on the user's note read relays. Now: +1. `feed.rs`: `PROFILE_RELAYS = ["wss://purplepag.es"]` plus + `profile_lookup_relays(settings)` = enabled relays + profile relays, + de-duplicated with trailing-slash normalising (a user entry + `wss://purplepag.es/` no longer doubles the always-on entry — the WIP + version of this failed its own test; rewritten via a HashSet seen-set). + `contact_pubkeys` (kind-3 fetch) now queries that set; notes queries + deliberately keep using only enabled relays. +2. `ipc.rs` backfill loop: kind-0 fetch also uses `profile_lookup_relays`, + and the candidate filter dropped the `SignerMode::Nip46Client` + restriction — any row still wearing a placeholder gets a real name, + local keys included. +3. `profiles.rs`: `GENERIC_PAIRING_LABELS` now includes "My Profile" + (`normalise_label`'s empty-input default), so locally created + placeholder rows are backfilled too. Test updated: user renames still + never overwritten. + +## Commits added this session (newest first) +- `aef47dd` fix(feed): query profile relays for kind-3 follow lists and + kind-0 metadata (includes the fmt fix + dedupe rewrite of the WIP) +- (this checkpoint commit) + +## Verification +- `cargo test` -> 225 unit + 6 e2e passed, 0 failed. +- `cargo clippy --all-targets` -> 0 warnings. `cargo fmt --check` -> clean. +- `cargo build --release` -> rebuilt at aef47dd (binary mtime 14:18). +- No frontend files touched -> frontend gates not applicable. + +## How to resume / reproduce +- CLI ground truth for the contacts fix: + `target/release/keynectr feed --contacts 20` with the active key that + has a follow list published anywhere on the network — rows should now + appear even when purplepag.es is not in the user's read relays. +- GUI: `cd ~/Projects/Keynctr/frontend && npx vite --port 5173` then + `NOSTR_GUI_DEV_URL=http://localhost:5173 KEYNCTR_ENABLE_GPU=1 npx electron .` + (running windows need a relaunch/rebuild to pick up the new backend). +- Backfill trace: `grep -a 'auto-name' ~/Tools/keynctr-debug/pairing-trace.log`. + +## Outstanding / next steps +- Live pass: reopen "My contacts" in the GUI with the rebuilt backend and + confirm the feed populates for the account that has follow lists on + profile relays. +- Step 4 permissions UI follow-ups (interactive grant editing in the + approval modal) — the only buildable step left from the plan. +- Live pass: KDF migration on a real unlock + second-Amber account + switching. + +--- + # Checkpoint — stdin EAGAIN fix, accent theme, identity backfill (2026-09-28 evening) ## Where things are