TAP version 13 # Subtest: renderChannelVideosFromList decorates videos before storing ok 1 - renderChannelVideosFromList decorates videos before storing --- duration_ms: 350.234012 type: 'test' ... # Subtest: renderChannelVideosFromList applies moderation blur without existing metadata ok 2 - renderChannelVideosFromList applies moderation blur without existing metadata --- duration_ms: 66.626133 type: 'test' ... # Subtest: applyChannelVisualBlur blurs banner and avatar when viewer mutes author ok 3 - applyChannelVisualBlur blurs banner and avatar when viewer mutes author --- duration_ms: 15.821532 type: 'test' ... # Subtest: moderation override clears channel blur via event wiring ok 4 - moderation override clears channel blur via event wiring --- duration_ms: 42.715117 type: 'test' ... # Subtest: channel header moderation badge reflects blur state and override actions ok 5 - channel header moderation badge reflects blur state and override actions --- duration_ms: 57.962342 type: 'test' ... # Subtest: channel video cards update moderation state in place when summary changes ok 6 - channel video cards update moderation state in place when summary changes --- duration_ms: 42.929462 type: 'test' ... # Subtest: createFeedCoordinator - loadForYouVideos # Subtest: loadForYouVideos executes successfully ok 1 - loadForYouVideos executes successfully --- duration_ms: 6.198219 type: 'test' ... 1..1 ok 7 - createFeedCoordinator - loadForYouVideos --- duration_ms: 9.556235 type: 'test' ... # Subtest: handleHashChange defaults to for-you when logged in ok 8 - handleHashChange defaults to for-you when logged in --- duration_ms: 174.48226 type: 'test' ... # Subtest: handleHashChange defaults to most-recent-videos when logged out ok 9 - handleHashChange defaults to most-recent-videos when logged out --- duration_ms: 15.579232 type: 'test' ... # Subtest: handleHashChange respects explicit view regardless of login state ok 10 - handleHashChange respects explicit view regardless of login state --- duration_ms: 14.143491 type: 'test' ... # Subtest: hydrateSidebarNavigation reveals chrome controls for authenticated viewers ok 11 - hydrateSidebarNavigation reveals chrome controls for authenticated viewers --- duration_ms: 148.065341 type: 'test' ... # Subtest: hydrateSidebarNavigation hides chrome controls for logged-out viewers ok 12 - hydrateSidebarNavigation hides chrome controls for logged-out viewers --- duration_ms: 20.369456 type: 'test' ... # Subtest: isUserLoggedIn returns false when no user pubkey is set ok 13 - isUserLoggedIn returns false when no user pubkey is set --- duration_ms: 3.343329 type: 'test' ... # Subtest: isUserLoggedIn treats extension logins as authenticated ok 14 - isUserLoggedIn treats extension logins as authenticated --- duration_ms: 0.664438 type: 'test' ... # Subtest: isUserLoggedIn guards against mismatched nostrClient state ok 15 - isUserLoggedIn guards against mismatched nostrClient state --- duration_ms: 0.55453 type: 'test' ... # Subtest: isUserLoggedIn ignores anonymous session actor mismatches ok 16 - isUserLoggedIn ignores anonymous session actor mismatches --- duration_ms: 0.524823 type: 'test' ... # Subtest: isUserLoggedIn rejects mismatched managed session actors ok 17 - isUserLoggedIn rejects mismatched managed session actors --- duration_ms: 0.574503 type: 'test' ... # Subtest: handleModerationOverride decorates stored and current videos then refreshes UI ok 18 - handleModerationOverride decorates stored and current videos then refreshes UI --- duration_ms: 8.622695 type: 'test' ... # Subtest: handleModerationOverride resumes deferred playback ok 19 - handleModerationOverride resumes deferred playback --- duration_ms: 1.083871 type: 'test' ... # Subtest: handleModerationBlock requests a block, clears overrides, and refreshes hidden state ok 20 - handleModerationBlock requests a block, clears overrides, and refreshes hidden state --- duration_ms: 3.864502 type: 'test' ... # Subtest: handleModerationBlock returns false when viewer is logged out ok 21 - handleModerationBlock returns false when viewer is logged out --- duration_ms: 0.826885 type: 'test' ... # Subtest: handleModerationSettingsChange refreshes feeds with updated thresholds ok 22 - handleModerationSettingsChange refreshes feeds with updated thresholds --- duration_ms: 5.867288 type: 'test' ... # Subtest: orders similar videos by shared tags then timestamp ok 23 - orders similar videos by shared tags then timestamp --- duration_ms: 4.536119 type: 'test' ... # Subtest: returns no matches when the active video lacks tags ok 24 - returns no matches when the active video lacks tags --- duration_ms: 0.522575 type: 'test' ... # Subtest: skips candidates without tag metadata ok 25 - skips candidates without tag metadata --- duration_ms: 0.316687 type: 'test' ... # Subtest: filters NSFW and private videos when NSFW content is disabled ok 26 - filters NSFW and private videos when NSFW content is disabled --- duration_ms: 0.349009 type: 'test' ... # Subtest: createNip07SigningAdapter # Subtest: uses explicit extension if provided ok 1 - uses explicit extension if provided --- duration_ms: 3.140542 type: 'test' ... # Subtest: falls back to window.nostr if no extension provided ok 2 - falls back to window.nostr if no extension provided --- duration_ms: 0.564442 type: 'test' ... # Subtest: throws error if no extension available ok 3 - throws error if no extension available --- duration_ms: 1.364875 type: 'test' ... # Subtest: prioritizes explicit extension over window.nostr ok 4 - prioritizes explicit extension over window.nostr --- duration_ms: 0.723467 type: 'test' ... 1..4 ok 27 - createNip07SigningAdapter --- duration_ms: 7.616196 type: 'suite' ... # Subtest: NIP-04/44 Compliance: Encryption Preference # Subtest: createNip46Cipher prefers nip44.v2 when available ok 1 - createNip46Cipher prefers nip44.v2 when available --- duration_ms: 27.324436 type: 'test' ... # Subtest: createNip46Cipher falls back to nip04 if nip44 is missing ok 2 - createNip46Cipher falls back to nip04 if nip44 is missing --- duration_ms: 11.491127 type: 'test' ... 1..2 ok 28 - NIP-04/44 Compliance: Encryption Preference --- duration_ms: 140.848015 type: 'test' ... # Subtest: NIP-04/44 Compliance: Decryption Fallback # Subtest: decryptNip46PayloadWithKeys handles nip44 (v2) payload ok 1 - decryptNip46PayloadWithKeys handles nip44 (v2) payload --- duration_ms: 37.149315 type: 'test' ... # Subtest: decryptNip46PayloadWithKeys handles nip04 payload ok 2 - decryptNip46PayloadWithKeys handles nip04 payload --- duration_ms: 36.082477 type: 'test' ... 1..2 ok 29 - NIP-04/44 Compliance: Decryption Fallback --- duration_ms: 75.214397 type: 'test' ... # Subtest: NIP-07 Compliance: Retry Logic # Subtest: runNip07WithRetry succeeds on first try ok 1 - runNip07WithRetry succeeds on first try --- duration_ms: 2.676447 type: 'test' ... # Subtest: runNip07WithRetry retries on timeout error ok 2 - runNip07WithRetry retries on timeout error --- duration_ms: 20.803478 type: 'test' ... # Subtest: runNip07WithRetry fails after max retries or if error is not timeout ok 3 - runNip07WithRetry fails after max retries or if error is not timeout --- duration_ms: 1.449836 type: 'test' ... 1..3 ok 30 - NIP-07 Compliance: Retry Logic --- duration_ms: 26.703793 type: 'test' ... # Subtest: NIP-65 Compliance: Relay List Loading # Subtest: loadRelayList requests Kind 10002 ok 1 - loadRelayList requests Kind 10002 --- duration_ms: 8.321214 type: 'test' ... # Subtest: loadRelayList parses r tags correctly ok 2 - loadRelayList parses r tags correctly --- duration_ms: 0.398801 type: 'test' ... 1..2 ok 31 - NIP-65 Compliance: Relay List Loading --- duration_ms: 190.253713 type: 'test' ... # Subtest: Video Note Compliance (Kind 30078 & NIP-71) # Subtest: prepareVideoPublishPayload creates Kind 30078 event ok 1 - prepareVideoPublishPayload creates Kind 30078 event --- duration_ms: 3.753698 type: 'test' ... # Subtest: prepareVideoPublishPayload includes NIP-71 tags when provided ok 2 - prepareVideoPublishPayload includes NIP-71 tags when provided --- duration_ms: 1.391866 type: 'test' ... 1..2 ok 32 - Video Note Compliance (Kind 30078 & NIP-71) --- duration_ms: 61.242396 type: 'test' ... # Subtest: js/designSystem/dynamicStyles.js # Subtest: registerScope # Subtest: should register a scope and return a string ID ok 1 - should register a scope and return a string ID --- duration_ms: 131.748474 type: 'test' ... # Subtest: should create a style element or use adoptedStyleSheets ok 2 - should create a style element or use adoptedStyleSheets --- duration_ms: 15.115636 type: 'test' ... # Subtest: should insert rules with the correct selector ok 3 - should insert rules with the correct selector --- duration_ms: 10.235861 type: 'test' ... # Subtest: should handle "&" in selectors ok 4 - should handle "&" in selectors --- duration_ms: 9.943656 type: 'test' ... 1..4 ok 1 - registerScope --- duration_ms: 168.634587 type: 'suite' ... # Subtest: setVariables # Subtest: should update CSS variables on the scope ok 1 - should update CSS variables on the scope --- duration_ms: 11.475109 type: 'test' ... # Subtest: should handle removing variables ok 2 - should handle removing variables --- duration_ms: 11.315537 type: 'test' ... 1..2 ok 2 - setVariables --- duration_ms: 23.07625 type: 'suite' ... # Subtest: releaseScope # Subtest: should remove rules and clean up ok 1 - should remove rules and clean up --- duration_ms: 9.755405 type: 'test' ... # Subtest: should return false for non-existent scope ok 2 - should return false for non-existent scope --- duration_ms: 17.440161 type: 'test' ... 1..2 ok 3 - releaseScope --- duration_ms: 27.445186 type: 'suite' ... # Subtest: Isolation # Subtest: should manage scopes independently for different documents ok 1 - should manage scopes independently for different documents --- duration_ms: 17.387793 type: 'test' ... 1..1 ok 4 - Isolation --- duration_ms: 17.533373 type: 'suite' ... # Subtest: Edge cases # Subtest: should handle invalid selectors gracefully ok 1 - should handle invalid selectors gracefully --- duration_ms: 9.190086 type: 'test' ... # Subtest: should handle missing document gracefully ok 2 - should handle missing document gracefully --- duration_ms: 6.725556 type: 'test' ... # Subtest: should fallback to