Checkpoint: feed profile filter

This commit is contained in:
Avi 2026-08-24 00:14:23 -05:00
commit 3dfd15f9c1

View file

@ -1,4 +1,89 @@
# Checkpoint — Note publish latency trim (2026-08-24) # Checkpoint — Feed "My notes" profile filter (2026-08-24)
A stopping point you can return to if this session is closed. Everything below was
verified green at the moment this file was written.
## Where things are
- Project: `/home/avi/Projects/Nostr_Keynctr`
- Git repo: `master` @ `55a49b4` ("Feed: 'My notes' scope with per-profile
dropdown filter"). Before it: `b001b3c` (note publish latency trim), `8f63761`
(checkpoint), `2ad054e` (NIP-05 checkpoint).
- Working tree is **clean** apart from this checkpoint update, which is committed right after.
## What was completed
1. **Feed "My notes" scope (2026-08-24, `55a49b4`).** The Feed screen now has a
third scope button next to *Everyone* and *My contacts*:
- **My notes** shows only posts published by one of the user's own profiles.
It defaults to the currently selected (active) profile.
- While active, a **dropdown** lists every stored profile (`Label (active)`);
picking one re-fetches the feed filtered to that account's npub.
- Disabled (with tooltip) when no profiles exist; dedicated empty state when
a profile has no recent notes.
2. **Backend support:** new `feed::profile_feed()` (author-filtered variant of
the shared aggregate query); IPC `feed_get` gained an optional `author`
param (npub or hex) that takes precedence over `contacts_only`; author key
parsing happens outside the state lock so slow relays still never block
interactive requests.
3. Earlier today: note-publish latency trim (`b001b3c`) — no global connection
wait, parallel sends, 6 s per-relay cap in `src/publish.rs`.
## Commits added most recently
- `55a49b4` Feed: 'My notes' scope with per-profile dropdown filter
- `b001b3c` Trim note publish latency: skip global connection wait, parallel sends, 6s cap
## Verification commands run (all green)
Rust (repo root):
```
cargo test # 104 passed; 0 failed (2 new profile_feed tests)
cargo clippy --all-targets # only pre-existing warnings in src/profiles.rs
cargo fmt --check # clean
cargo build --release # success
```
Frontend (`frontend/`):
```
npm test # 14 files, 87 tests passed (3 new FeedScreen tests)
npm run typecheck # clean
npm run lint # 0 errors
npm run format:check # clean
npm run build # vite build success
npm run electron:build # tsc electron main success
```
## How to use / reproduce
GUI: `cd ~/Projects/Nostr_Keynctr/frontend && npm start` → **Feed** → click
**My notes** (third segment). The feed reloads showing only the active profile's
notes; switch accounts with the dropdown that appears next to it.
CLI (existing commands unchanged):
```bash
B=~/Projects/Nostr_Keynctr/target/release/keynectr
$B feed [limit] # everyone
$B feed --contacts # contacts of active profile
```
## Notes & next steps
- Possible follow-up: expose `--author <npub>` on the CLI `feed` command for
parity with the GUI scope (IPC already supports it).
- Feed reads are bounded to the last 24 h (LOOKBACK in `src/feed.rs`); "My
notes" therefore hides older posts by design — same rule as Everyone.
- Relay health (checked earlier today): damus.io 503, nostr.band WS handshake
timing out; consider disabling nostr.band until it recovers.
- Pre-existing clippy warnings in `src/profiles.rs` remain (drop of reference,
unused `delete_profile`).
---
# Older checkpoint — Note publish latency trim (2026-08-24)
A stopping point you can return to if this session is closed. Everything below was A stopping point you can return to if this session is closed. Everything below was
verified green at the moment this file was written. verified green at the moment this file was written.