From 21a7b43e80c5434fc727a008cc5575d0111053c6 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 14:39:37 +0000 Subject: [PATCH] chore(deps): bump esbuild to v0.27.3 - Upgraded esbuild from 0.27.2 to 0.27.3 - Added scripts/agent/analyze_deps.py - Added artifacts/deps-report.md, npm-audit.json, npm-outdated.json - Verified with npm run build, lint, and test:unit Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- TEST_LOG.md | 10280 +++++++++++++++++++++++++++++++- artifacts/deps-report.md | 34 + artifacts/npm-audit.json | 6 +- artifacts/npm-outdated.json | 21 +- package-lock.json | 216 +- package.json | 2 +- scripts/agent/analyze_deps.py | 119 + 7 files changed, 10548 insertions(+), 130 deletions(-) create mode 100644 artifacts/deps-report.md create mode 100644 scripts/agent/analyze_deps.py diff --git a/TEST_LOG.md b/TEST_LOG.md index 7d10d0fb..a2be4053 100644 --- a/TEST_LOG.md +++ b/TEST_LOG.md @@ -1,5 +1,10277 @@ -# Test Log +Node: v22.22.0 +NPM: 11.7.0 -## Run 1 (Performance & Docs) -- **Baseline:** Found unbounded `Promise.all` in `js/nostr/commentEvents.js`. -- **Verification:** (Pending) +added 424 packages, and audited 425 packages in 13s + +108 packages are looking for funding + run `npm fund` for details + +found 0 vulnerabilities +npm notice +npm notice New minor version of npm available! 11.7.0 -> 11.10.0 +npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.10.0 +npm notice To update run: npm install -g npm@11.10.0 +npm notice + +changed 2 packages, and audited 425 packages in 3s + +108 packages are looking for funding + run `npm fund` for details + +found 0 vulnerabilities +Running build... + +> bitvid@1.0.0 build +> node scripts/build-dist.mjs && npm run verify:dist:deploy-artifact + +Validating service worker compatibility guard... + +> bitvid@1.0.0 lint:sw-compat +> node scripts/check-sw-compat.mjs + +[sw-compat] Skipping check: unable to determine HEAD^ or git history unavailable. +[sw-compat] No commit delta found; skipping compatibility check. +Cleaning dist... +Running build:css... + +> bitvid@1.0.0 build:css +> postcss css/tailwind.source.css -o css/tailwind.generated.css + +Copying files... +Copying directories... +Generating hashed asset manifest... +Rewriting HTML entry points with hashed assets... +Injecting version hash and date... +Injected version: 6bb2d251 • 2026-02-12 +Build complete. + +> bitvid@1.0.0 verify:dist:deploy-artifact +> node scripts/verify-dist-deploy-artifact.mjs + +Deployment artifact verification passed: version markup and hashed asset references are present in dist/index.html. +Build exit code: 0 +Running lint... + +> bitvid@1.0.0 lint +> npm run lint:css && npm run lint:hex && npm run lint:inline-styles && npm run lint:tokens && npm run lint:tailwind-brackets && npm run lint:tailwind-colors && npm run lint:file-size && npm run lint:innerhtml && npm run lint:assets && npm run lint:sw-compat + + +> bitvid@1.0.0 lint:css +> stylelint css/tailwind.source.css css/tokens.css css/docs.css + + +> bitvid@1.0.0 lint:hex +> node scripts/check-hex.js + + +> bitvid@1.0.0 lint:inline-styles +> node scripts/check-inline-styles.mjs + +No inline style usage found. + +> bitvid@1.0.0 lint:tokens +> node scripts/check-design-tokens.mjs --check=tokens + + +> bitvid@1.0.0 lint:tailwind-brackets +> node scripts/check-design-tokens.mjs --check=brackets + + +> bitvid@1.0.0 lint:tailwind-colors +> node scripts/check-tailwind-colors.mjs + + +> bitvid@1.0.0 lint:file-size +> node scripts/check-file-size.mjs + + +> bitvid@1.0.0 lint:innerhtml +> node scripts/check-innerhtml.mjs + + +> bitvid@1.0.0 lint:assets +> node scripts/check-asset-references.mjs + +Asset reference lint passed: all local CSS/JS references are hashed or allowlisted, and no ?v= query cache-busting remains. + +> bitvid@1.0.0 lint:sw-compat +> node scripts/check-sw-compat.mjs + +[sw-compat] Skipping check: unable to determine HEAD^ or git history unavailable. +[sw-compat] No commit delta found; skipping compatibility check. +Lint exit code: 0 +Running unit tests... + +> bitvid@1.0.0 test:unit +> node scripts/run-unit-tests.mjs + + +→ Running tests/app-batch-fetch-profiles.test.mjs +TAP version 13 +# Subtest: batchFetchProfiles handles fast and failing relays +ok 1 - batchFetchProfiles handles fast and failing relays + --- + duration_ms: 13.99331 + type: 'test' + ... +# Subtest: batchFetchProfiles respects forceRefresh +ok 2 - batchFetchProfiles respects forceRefresh + --- + duration_ms: 302.053628 + type: 'test' + ... +1..2 +# tests 2 +# suites 0 +# pass 2 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 365.991806 + +→ Running tests/app-state.test.mjs +TAP version 13 +# Subtest: AppState + # Subtest: Initial state is clean + ok 1 - Initial state is clean + --- + duration_ms: 2.312659 + type: 'test' + ... + # Subtest: setPubkey() updates state and notifies subscribers + ok 2 - setPubkey() updates state and notifies subscribers + --- + duration_ms: 0.944413 + type: 'test' + ... + # Subtest: setCurrentUserNpub() updates state + ok 3 - setCurrentUserNpub() updates state + --- + duration_ms: 0.396352 + type: 'test' + ... + # Subtest: setCurrentVideo() updates state + ok 4 - setCurrentVideo() updates state + --- + duration_ms: 0.571016 + type: 'test' + ... + # Subtest: setVideosMap() updates state + ok 5 - setVideosMap() updates state + --- + duration_ms: 0.585743 + type: 'test' + ... + # Subtest: setVideoSubscription() updates state + ok 6 - setVideoSubscription() updates state + --- + duration_ms: 0.330109 + type: 'test' + ... + # Subtest: setModalState() updates state and notifies modal subscribers + ok 7 - setModalState() updates state and notifies modal subscribers + --- + duration_ms: 0.894319 + type: 'test' + ... + # Subtest: Global subscriber receives updates + ok 8 - Global subscriber receives updates + --- + duration_ms: 0.626902 + type: 'test' + ... + # Subtest: resetAppState() clears all state and notifies + ok 9 - resetAppState() clears all state and notifies + --- + duration_ms: 0.838283 + type: 'test' + ... + 1..9 +ok 1 - AppState + --- + duration_ms: 9.802838 + type: 'suite' + ... +1..1 +# tests 9 +# suites 1 +# pass 9 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 31.18024 + +→ Running tests/app/channel-profile-moderation.test.mjs +TAP version 13 +# Subtest: renderChannelVideosFromList decorates videos before storing +ok 1 - renderChannelVideosFromList decorates videos before storing + --- + duration_ms: 185.777956 + type: 'test' + ... +# Subtest: renderChannelVideosFromList applies moderation blur without existing metadata +ok 2 - renderChannelVideosFromList applies moderation blur without existing metadata + --- + duration_ms: 58.613302 + 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.849535 + type: 'test' + ... +# Subtest: moderation override clears channel blur via event wiring +ok 4 - moderation override clears channel blur via event wiring + --- + duration_ms: 36.515733 + 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: 47.930491 + 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: 48.058873 + type: 'test' + ... +1..6 +# tests 6 +# suites 0 +# pass 6 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 413.300296 + +→ Running tests/app/feedCoordinator.test.mjs +TAP version 13 +# Subtest: createFeedCoordinator - loadForYouVideos + # Subtest: loadForYouVideos executes successfully + ok 1 - loadForYouVideos executes successfully + --- + duration_ms: 2.465866 + type: 'test' + ... + 1..1 +ok 1 - createFeedCoordinator - loadForYouVideos + --- + duration_ms: 4.55921 + type: 'test' + ... +1..1 +# tests 2 +# suites 0 +# pass 2 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 15.21591 + +→ Running tests/app/hash-change-handler.test.mjs +TAP version 13 +# Subtest: handleHashChange defaults to for-you when logged in +ok 1 - handleHashChange defaults to for-you when logged in + --- + duration_ms: 240.819883 + type: 'test' + ... +# Subtest: handleHashChange defaults to most-recent-videos when logged out +ok 2 - handleHashChange defaults to most-recent-videos when logged out + --- + duration_ms: 20.042627 + type: 'test' + ... +# Subtest: handleHashChange respects explicit view regardless of login state +ok 3 - handleHashChange respects explicit view regardless of login state + --- + duration_ms: 12.440924 + type: 'test' + ... +1..3 +# tests 3 +# suites 0 +# pass 3 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 286.861711 + +→ Running tests/app/hydrate-sidebar-navigation.test.mjs +TAP version 13 +# Subtest: hydrateSidebarNavigation reveals chrome controls for authenticated viewers +ok 1 - hydrateSidebarNavigation reveals chrome controls for authenticated viewers + --- + duration_ms: 107.904014 + type: 'test' + ... +# Subtest: hydrateSidebarNavigation hides chrome controls for logged-out viewers +ok 2 - hydrateSidebarNavigation hides chrome controls for logged-out viewers + --- + duration_ms: 14.819112 + type: 'test' + ... +1..2 +# tests 2 +# suites 0 +# pass 2 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 135.542735 + +→ Running tests/app/is-user-logged-in.test.mjs +TAP version 13 +# Subtest: isUserLoggedIn returns false when no user pubkey is set +ok 1 - isUserLoggedIn returns false when no user pubkey is set + --- + duration_ms: 1.40207 + type: 'test' + ... +# Subtest: isUserLoggedIn treats extension logins as authenticated +ok 2 - isUserLoggedIn treats extension logins as authenticated + --- + duration_ms: 0.332666 + type: 'test' + ... +# Subtest: isUserLoggedIn guards against mismatched nostrClient state +ok 3 - isUserLoggedIn guards against mismatched nostrClient state + --- + duration_ms: 0.222126 + type: 'test' + ... +# Subtest: isUserLoggedIn ignores anonymous session actor mismatches +ok 4 - isUserLoggedIn ignores anonymous session actor mismatches + --- + duration_ms: 0.300322 + type: 'test' + ... +# Subtest: isUserLoggedIn rejects mismatched managed session actors +ok 5 - isUserLoggedIn rejects mismatched managed session actors + --- + duration_ms: 0.330816 + type: 'test' + ... +1..5 +# tests 5 +# suites 0 +# pass 5 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 32.161274 + +→ Running tests/app/moderation-overrides.test.mjs +TAP version 13 +# Subtest: handleModerationOverride decorates stored and current videos then refreshes UI +ok 1 - handleModerationOverride decorates stored and current videos then refreshes UI + --- + duration_ms: 5.979729 + type: 'test' + ... +# Subtest: handleModerationOverride resumes deferred playback +ok 2 - handleModerationOverride resumes deferred playback + --- + duration_ms: 1.337565 + type: 'test' + ... +# Subtest: handleModerationBlock requests a block, clears overrides, and refreshes hidden state +ok 3 - handleModerationBlock requests a block, clears overrides, and refreshes hidden state + --- + duration_ms: 4.307154 + type: 'test' + ... +# Subtest: handleModerationBlock returns false when viewer is logged out +ok 4 - handleModerationBlock returns false when viewer is logged out + --- + duration_ms: 1.098202 + type: 'test' + ... +1..4 +# tests 4 +# suites 0 +# pass 4 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 28.643321 + +→ Running tests/app/moderation-settings-refresh.test.mjs +TAP version 13 +# Subtest: handleModerationSettingsChange refreshes feeds with updated thresholds +ok 1 - handleModerationSettingsChange refreshes feeds with updated thresholds + --- + duration_ms: 5.049885 + type: 'test' + ... +1..1 +# tests 1 +# suites 0 +# pass 1 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 16.905125 + +→ Running tests/app/similar-content.test.mjs +TAP version 13 +# Subtest: orders similar videos by shared tags then timestamp +ok 1 - orders similar videos by shared tags then timestamp + --- + duration_ms: 3.272602 + type: 'test' + ... +# Subtest: returns no matches when the active video lacks tags +ok 2 - returns no matches when the active video lacks tags + --- + duration_ms: 0.456058 + type: 'test' + ... +# Subtest: skips candidates without tag metadata +ok 3 - skips candidates without tag metadata + --- + duration_ms: 0.408095 + type: 'test' + ... +# Subtest: filters NSFW and private videos when NSFW content is disabled +ok 4 - filters NSFW and private videos when NSFW content is disabled + --- + duration_ms: 0.535901 + type: 'test' + ... +1..4 +# tests 4 +# suites 0 +# pass 4 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 17.522938 + +→ Running tests/auth/signingAdapter.test.mjs +TAP version 13 +# Subtest: createNip07SigningAdapter + # Subtest: uses explicit extension if provided + ok 1 - uses explicit extension if provided + --- + duration_ms: 3.540537 + 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.588977 + type: 'test' + ... + # Subtest: throws error if no extension available + ok 3 - throws error if no extension available + --- + duration_ms: 1.377312 + type: 'test' + ... + # Subtest: prioritizes explicit extension over window.nostr + ok 4 - prioritizes explicit extension over window.nostr + --- + duration_ms: 0.857442 + type: 'test' + ... + 1..4 +ok 1 - createNip07SigningAdapter + --- + duration_ms: 7.997828 + type: 'suite' + ... +1..1 +# tests 4 +# suites 1 +# pass 4 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 21.053227 + +→ Running tests/comment-event-builder.test.mjs +TAP version 13 +# Subtest: buildCommentEvent emits NIP-22 root metadata while keeping legacy fallbacks +ok 1 - buildCommentEvent emits NIP-22 root metadata while keeping legacy fallbacks + --- + duration_ms: 2.793912 + type: 'test' + ... +# Subtest: buildCommentEvent includes parent pointers, kinds, and authors for replies +ok 2 - buildCommentEvent includes parent pointers, kinds, and authors for replies + --- + duration_ms: 0.594595 + type: 'test' + ... +# Subtest: buildCommentEvent normalizes relays and preserves explicit overrides +ok 3 - buildCommentEvent normalizes relays and preserves explicit overrides + --- + duration_ms: 0.820781 + type: 'test' + ... +# Subtest: buildCommentEvent falls back to event pointers when no address is supplied +ok 4 - buildCommentEvent falls back to event pointers when no address is supplied + --- + duration_ms: 0.289549 + type: 'test' + ... +# Subtest: buildCommentEvent accepts partial metadata for parent overrides +ok 5 - buildCommentEvent accepts partial metadata for parent overrides + --- + duration_ms: 0.365041 + type: 'test' + ... +# Subtest: buildCommentEvent sanitizes additional tags before signing +ok 6 - buildCommentEvent sanitizes additional tags before signing + --- + duration_ms: 0.873079 + type: 'test' + ... +1..6 +# tests 6 +# suites 0 +# pass 6 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 19.584239 + +→ Running tests/comment-thread-service.test.mjs +TAP version 13 +# Subtest: CommentThreadService caches mixed-case video ids consistently +ok 1 - CommentThreadService caches mixed-case video ids consistently + --- + duration_ms: 3.501828 + type: 'test' + ... +# Subtest: CommentThreadService surfaces cache read failures +ok 2 - CommentThreadService surfaces cache read failures + --- + duration_ms: 0.878062 + type: 'test' + ... +# Subtest: CommentThreadService surfaces cache write failures +ok 3 - CommentThreadService surfaces cache write failures + --- + duration_ms: 0.540859 + type: 'test' + ... +# Subtest: CommentThreadService persists caches safely during teardown failures +ok 4 - CommentThreadService persists caches safely during teardown failures + --- + duration_ms: 2.005017 + type: 'test' + ... +# Subtest: CommentThreadService logs cache usage and fallback decisions +ok 5 - CommentThreadService logs cache usage and fallback decisions + --- + duration_ms: 1.21468 + type: 'test' + ... +# Subtest: CommentThreadService normalizes mixed-case event ids in thread state +ok 6 - CommentThreadService normalizes mixed-case event ids in thread state + --- + duration_ms: 2.198276 + type: 'test' + ... +# Subtest: CommentThreadService normalizes mixed-case pubkeys during hydration +ok 7 - CommentThreadService normalizes mixed-case pubkeys during hydration + --- + duration_ms: 1.038858 + type: 'test' + ... +# Subtest: CommentThreadService deduplicates mixed-case event ids and pubkeys +ok 8 - CommentThreadService deduplicates mixed-case event ids and pubkeys + --- + duration_ms: 0.927499 + type: 'test' + ... +# Subtest: CommentThreadService retries profile hydration before succeeding +ok 9 - CommentThreadService retries profile hydration before succeeding + --- + duration_ms: 76.060413 + type: 'test' + ... +# Subtest: CommentThreadService surfaces profile hydration failures after retries +ok 10 - CommentThreadService surfaces profile hydration failures after retries + --- + duration_ms: 201.425935 + type: 'test' + ... +# Subtest: listVideoComments accepts builder events without parent ids and filters replies +ok 11 - listVideoComments accepts builder events without parent ids and filters replies + --- + duration_ms: 6.1484 + type: 'test' + ... +# Subtest: CommentThreadService hydrates, subscribes, and dedupes incoming comment events +ok 12 - CommentThreadService hydrates, subscribes, and dedupes incoming comment events + --- + duration_ms: 34.199346 + type: 'test' + ... +# Subtest: CommentThreadService loadThread falls back to event id when address is missing +ok 13 - CommentThreadService loadThread falls back to event id when address is missing + --- + duration_ms: 0.966091 + type: 'test' + ... +# Subtest: CommentThreadService requests and snapshots comments by root identifier +ok 14 - CommentThreadService requests and snapshots comments by root identifier + --- + duration_ms: 0.803819 + type: 'test' + ... +# Subtest: CommentThreadService falls back to pointerIdentifiers root id +ok 15 - CommentThreadService falls back to pointerIdentifiers root id + --- + duration_ms: 0.784538 + type: 'test' + ... +# Subtest: CommentThreadService preserves raw video author pubkeys during hydration fetches +ok 16 - CommentThreadService preserves raw video author pubkeys during hydration fetches + --- + duration_ms: 5.31487 + type: 'test' + ... +# Subtest: CommentThreadService teardown cancels hydration timers +ok 17 - CommentThreadService teardown cancels hydration timers + --- + duration_ms: 81.386057 + type: 'test' + ... +1..17 +# tests 17 +# suites 0 +# pass 17 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 428.967471 + +→ Running tests/compliance/nip04_44_compliance.test.mjs +TAP version 13 +# Subtest: NIP-04/44 Compliance: Encryption Preference + # Subtest: createNip46Cipher prefers nip44.v2 when available + ok 1 - createNip46Cipher prefers nip44.v2 when available + --- + duration_ms: 21.960504 + 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: 9.44152 + type: 'test' + ... + 1..2 +ok 1 - NIP-04/44 Compliance: Encryption Preference + --- + duration_ms: 105.292078 + type: 'test' + ... +# Subtest: NIP-04/44 Compliance: Decryption Fallback + # Subtest: decryptNip46PayloadWithKeys handles nip44 (v2) payload + ok 1 - decryptNip46PayloadWithKeys handles nip44 (v2) payload + --- + duration_ms: 24.872325 + type: 'test' + ... + # Subtest: decryptNip46PayloadWithKeys handles nip04 payload + ok 2 - decryptNip46PayloadWithKeys handles nip04 payload + --- + duration_ms: 29.550968 + type: 'test' + ... + 1..2 +ok 2 - NIP-04/44 Compliance: Decryption Fallback + --- + duration_ms: 56.656775 + type: 'test' + ... +1..2 +# tests 6 +# suites 0 +# pass 6 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 178.623688 + +→ Running tests/compliance/nip07_compliance.test.mjs +TAP version 13 +# Subtest: NIP-07 Compliance: Retry Logic + # Subtest: runNip07WithRetry succeeds on first try + ok 1 - runNip07WithRetry succeeds on first try + --- + duration_ms: 2.056754 + type: 'test' + ... + # Subtest: runNip07WithRetry retries on timeout error + ok 2 - runNip07WithRetry retries on timeout error + --- + duration_ms: 21.14576 + 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.443995 + type: 'test' + ... + 1..3 +ok 1 - NIP-07 Compliance: Retry Logic + --- + duration_ms: 26.423272 + type: 'test' + ... +1..1 +# tests 4 +# suites 0 +# pass 4 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 60.90597 + +→ Running tests/compliance/nip65_compliance.test.mjs +TAP version 13 +# Subtest: NIP-65 Compliance: Relay List Loading + # Subtest: loadRelayList requests Kind 10002 + ok 1 - loadRelayList requests Kind 10002 + --- + duration_ms: 4.689822 + type: 'test' + ... + # Subtest: loadRelayList parses r tags correctly + ok 2 - loadRelayList parses r tags correctly + --- + duration_ms: 0.42635 + type: 'test' + ... + 1..2 +ok 1 - NIP-65 Compliance: Relay List Loading + --- + duration_ms: 153.095055 + type: 'test' + ... +1..1 +# tests 3 +# suites 0 +# pass 3 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 167.16601 + +→ Running tests/compliance/video_note_compliance.test.mjs +TAP version 13 +# Subtest: Video Note Compliance (Kind 30078 & NIP-71) + # Subtest: prepareVideoPublishPayload creates Kind 30078 event + ok 1 - prepareVideoPublishPayload creates Kind 30078 event + --- + duration_ms: 2.510144 + type: 'test' + ... + # Subtest: prepareVideoPublishPayload includes NIP-71 tags when provided + ok 2 - prepareVideoPublishPayload includes NIP-71 tags when provided + --- + duration_ms: 1.061775 + type: 'test' + ... + 1..2 +ok 1 - Video Note Compliance (Kind 30078 & NIP-71) + --- + duration_ms: 36.920137 + type: 'test' + ... +1..1 +# tests 3 +# suites 0 +# pass 3 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 48.6723 + +→ Running tests/design-system-metrics.test.mjs +TAP version 13 +# Subtest: metric probe falls back to numeric parsing when measurement fails +ok 1 - metric probe falls back to numeric parsing when measurement fails + --- + duration_ms: 262.474863 + type: 'test' + ... +1..1 +# tests 1 +# suites 0 +# pass 1 +# fail 0 +# cancelled 0 +# skipped 0 +# todo 0 +# duration_ms 273.524634 + +→ Running tests/designSystem/dynamicStyles.test.mjs +TAP version 13 +# 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: 94.693189 + type: 'test' + ... + # Subtest: should create a style element or use adoptedStyleSheets + ok 2 - should create a style element or use adoptedStyleSheets + --- + duration_ms: 14.939194 + type: 'test' + ... + # Subtest: should insert rules with the correct selector + ok 3 - should insert rules with the correct selector + --- + duration_ms: 13.524579 + type: 'test' + ... + # Subtest: should handle "&" in selectors + ok 4 - should handle "&" in selectors + --- + duration_ms: 11.046488 + type: 'test' + ... + 1..4 + ok 1 - registerScope + --- + duration_ms: 135.426176 + type: 'suite' + ... + # Subtest: setVariables + # Subtest: should update CSS variables on the scope + ok 1 - should update CSS variables on the scope + --- + duration_ms: 12.693568 + type: 'test' + ... + # Subtest: should handle removing variables + ok 2 - should handle removing variables + --- + duration_ms: 9.815112 + type: 'test' + ... + 1..2 + ok 2 - setVariables + --- + duration_ms: 22.885703 + type: 'suite' + ... + # Subtest: releaseScope + # Subtest: should remove rules and clean up + ok 1 - should remove rules and clean up + --- + duration_ms: 10.257187 + type: 'test' + ... + # Subtest: should return false for non-existent scope + ok 2 - should return false for non-existent scope + --- + duration_ms: 13.536061 + type: 'test' + ... + 1..2 + ok 3 - releaseScope + --- + duration_ms: 24.195856 + type: 'suite' + ... + # Subtest: Isolation + # Subtest: should manage scopes independently for different documents + ok 1 - should manage scopes independently for different documents + --- + duration_ms: 27.669183 + type: 'test' + ... + 1..1 + ok 4 - Isolation + --- + duration_ms: 27.795493 + type: 'suite' + ... + # Subtest: Edge cases + # Subtest: should handle invalid selectors gracefully + ok 1 - should handle invalid selectors gracefully + --- + duration_ms: 9.567256 + type: 'test' + ... + # Subtest: should handle missing document gracefully + ok 2 - should handle missing document gracefully + --- + duration_ms: 6.555677 + type: 'test' + ... + # Subtest: should fallback to