From 8022942464fdb66f3235501e80a00eea7358225b Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:23:17 -0400 Subject: [PATCH] docs: record nip-07 list-decrypt + post-login freeze resolution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README "Login with Nostr": recommend a well-maintained NIP-07 signer (nos2x/Alby) and add a troubleshooting note for the locked/asleep-signer case (unlock/reload + refresh), since a flaky extension was the root cause of the encrypted-list load failures. - KNOWN_BUGS #0: mark RESOLVED (2026-06-16) — confirmed in real env after the user switched to nos2x; DMs/watch-history/lists decrypt in ms with no timeouts. Documented the DM decrypt-resilience + receiver fixes and the post-login profile-panel freeze fix (defer panel rendering to selectPane). Recorded the remaining low-priority follow-ups (liveness-ranked relays, opt-in queue concurrency, optional DM double-decrypt routing). - Retitle the section "## Open" → "## Tracked" so resolved entries (#0/#1/#2) aren't mislabeled as open; status is now per-entry. Co-Authored-By: Claude Opus 4.8 --- README.md | 4 +++- docs/KNOWN_BUGS.md | 42 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 659ab279..e7d5b2e3 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,9 @@ 1. **Visit the Site**: Navigate to the live instance of **bitvid** (e.g., `[https://bitvid.network](https://bitvid.network)`). 2. **Login with Nostr**: - - Use a compatible Nostr browser extension or manually input your public key. + - Use a compatible NIP-07 browser extension or manually input your public key. + - For the most reliable experience we recommend a well-maintained signer such as [nos2x](https://github.com/fiatjaf/nos2x) or [Alby](https://getalby.com/). Encrypted features (DMs, hashtag preferences, watch history, block/subscription lists) require the extension to respond to decryption requests. + - **Troubleshooting:** if those encrypted lists never finish loading after login, bitvid will surface a notice — your extension's signer is likely locked or its background worker went to sleep. Unlock/reload the extension and refresh the page. (bitvid caps relay fan-out and fast-fails an unresponsive signer so the tab no longer pins the CPU while waiting.) ### Upload a video diff --git a/docs/KNOWN_BUGS.md b/docs/KNOWN_BUGS.md index 0fd252ba..7f2da87c 100644 --- a/docs/KNOWN_BUGS.md +++ b/docs/KNOWN_BUGS.md @@ -9,9 +9,12 @@ refactor work in that doc — these are defects. --- -## Open +## Tracked -### 0. Encrypted lists (hashtags, DMs, blocks) fail to DECRYPT on login *(top priority)* +> Status is per-entry (RESOLVED / FIXED / Open). Items #3 and #4 below remain +> open; #0, #1, and #2 are resolved and kept here for provenance. + +### 0. Encrypted lists (hashtags, DMs, blocks) fail to DECRYPT on login — RESOLVED (2026-06-16) - **Severity:** high — the user's recurring "hashtags/DMs/watch-history don't load in the profile modal." - **Diagnosed from real-env console (2026-06-14):** the lists are *fetched* (e.g. @@ -87,10 +90,37 @@ refactor work in that doc — these are defects. proves the client now loads all lists for signers answering up to the decrypt budget; lists only fail once per-call latency exceeds the budget (i.e. the signer is the wall, not the client). -- **Still open:** liveness-ranked relay health (see #4); DM decrypt resilience - (don't hard-fail DMs on a transient permission miss — retry); optional nip-07 - queue concurrency bump for slow signers (risks channel drops on some - providers — opt-in). +- **DM decrypt resilience (SHIPPED):** `buildDmDecryptContext` now gates on + method existence (`typeof activeSigner.nip44Decrypt === "function"`) rather than + a possibly-stale `extensionPermissionResult`/capability snapshot, so DMs no + longer hard-fail with "DM decryption helpers are unavailable" on a transient + permission miss. Also fixed the Controller→Actions wrong-receiver bugs that made + opening a conversation throw "… is not a function" + (`ProfileDirectMessageController`/`ProfileDirectMessageActions`). Tests: + `tests/dm-decrypt-context.test.mjs`, `tests/dm-conversation-select.test.mjs`. +- **Post-login UI freeze (SHIPPED, 2026-06-16):** once a responsive signer (nos2x) + made decryption instant, `profileModalController.handleAuthLogin` rendered EVERY + profile panel at login (friends list + per-contact avatars, subscriptions, + blocks, relays, wallet, hashtags, storage) into a CLOSED modal — one main-thread + burst that froze the tab for ~10-15s and stopped the profile panel from opening. + Fixed by deferring panel rendering to `selectPane()` (lazy per-pane on open; + added the missing `friends` case) and gating the block/subscription/contacts + "change" re-renders on `isProfileModalOpen()`. DM-identity setup stays eager. +- **CONFIRMED RESOLVED in real env (2026-06-16):** after the user switched from + KeysBand (dead MV3 worker) to **nos2x**, real-browser logs show DMs (NIP-04 + + NIP-44), watch history (kind 30078), and contact/subscription lists all + decrypting in milliseconds with no timeouts, no `signerStatus: missing`, no + channel-death, and no forever-retry. The whole resilience stack + (relay cap → DM defer → circuit breaker → transient-retry → decrypt budget → + signer-health notice → DM receiver fixes → post-login freeze fix) is validated + against the user's real vault. Moving #0 to resolved. +- **Still open (follow-ups, lower priority):** liveness-ranked relay health + (see #4); optional nip-07 queue concurrency bump for slow signers (risks + channel drops on some providers — opt-in); optional DM decrypt efficiency — + bitvid currently tries BOTH `nip44.decrypt` and `nip04.decrypt` per message + (half log expected `invalid base64`/`invalid payload length` errors), which + could be halved by routing on the `?iv=` (NIP-04) ciphertext marker. Benign; + only worth doing if large-mailbox DM load feels slow. ### 1. Logged-out: video grid stays empty until a manual refresh — FIXED (2026-06-16) - **Severity:** medium (first-load UX, logged-out).