Firefox Browser Add-ons
  • Extensions
  • Themes
    • for Firefox
    • Dictionaries & Language Packs
    • Other Browser Sites
    • Add-ons for Android
Log in
Add-on icon

YT Engagement Verdict version history - 11 versions

YT Engagement Verdict by denali42

There are no ratings yet
0 Stars out of 5
5
0
4
0
3
0
2
0
1
0
YT Engagement Verdict version history - 11 versions
  • Be careful with old versions! These versions are displayed for testing and reference purposes.You should always use the latest version of an add-on.

  • Latest version

    Version 1.2.3

    Released Aug 16, 2026 - 36.56 KB
    Works with firefox 140.0 and later
    v1.2.3

    Bug fixes:

    Fixed likes (and views, comments) from a previous video carrying over to the next video during SPA navigation
    Root cause: the scrape had no concept of stale data — YouTube reuses DOM nodes asynchronously during navigation, so video A's engagement counts could be accepted as video B's during the transition window
    Fix: attempt() now gates on ytd-watch-flexy[video-id="${videoId}"] before accepting any scraped snapshot — the same deterministic mechanism used by Return YouTube Dislike. If the stamp doesn't match the current video, the scrape retries within the existing 40×500ms budget
    Fixed scrapeLikes() returning 0 on failure instead of null — a scrape failure was silently corrupting the verdict by collapsing the like rate to zero, flipping almost any video to View Botted or Hot Garbage
    Removed dead unreachable genuine-0-likes branch from scrapeLikes()
    Removed dead selector from selectors.json (v1.0.4) — ytd-segmented-like-dislike-button-renderer #top-level-buttons ytd-toggle-button-renderer:first-child button matched nothing in either current YouTube DOM structure

    Source code released under MIT License

    Download Firefox and get the extension
    Download file
  • Older versions

    Version 1.2.2

    Released Aug 16, 2026 - 36.41 KB
    Works with firefox 140.0 and later
    v1.2.2

    Bug fix:

    Fixed comments showing zero on cold browser load when comments are enabled and already visible in the viewport
    Root cause: IntersectionObserver was armed with threshold: 0.1 — on elements taller than the viewport (the full comments section), this threshold is unreachable when the element is already on screen, so the observer fired once, reported non-intersecting, and never fired again (W3C Intersection Observer issue #124)
    Fix: changed threshold to 0 — any visible pixel triggers the observer, including on initial delivery when already in view
    Also fixed a silent dead-end where neither #comments #count nor ytd-comments-header-renderer existed at arm time — now falls back to observing #comments itself

    Source code released under MIT License

    Download file
  • Version 1.2.1

    Released Aug 15, 2026 - 36.25 KB
    Works with firefox 140.0 and later
    v1.2.1

    Security

    Replaced hardcoded API key with per-install UUID for telemetry authentication (v1.1.6)
    UUID generated via crypto.randomUUID() on first report, persisted to storage.local
    No secrets in the distributed package — nothing to leak, nothing to rotate
    Worker now validates UUID format only via /^[0-9a-f-]{36}$/i

    Architecture

    Unified Firefox and Chrome under a single MV3 codebase — chrome/ subdirectory eliminated
    background.js now declares both service_worker and scripts for maximum Firefox compatibility — uses service worker when supported, falls back to scripts when extensions.backgroundServiceWorker.enabled is off (Firefox beta/some stable builds)
    Programmatic content script injection via tabs.onUpdated — removed content_scripts from manifest to prevent double injection

    Bug fixes

    Fixed stale comment count carrying over when navigating between videos — lastResult now explicitly cleared on every navigation event
    Fixed const YTVerdict redeclaration error — background script now checks if scripts are already loaded before injecting; fires yt-navigate-finish to trigger a clean reset if they are
    Fixed injection TOCTOU race — injectingTabs Set serializes concurrent tabs.onUpdated events per tab; single .finally() guarantees cleanup on success and failure
    Fixed extension not loading on cold browser start without Ctrl+F5 — tabs.onUpdated approach replaces fragile document_idle timing dependency
    Fixed typeof Reporter !== 'undefined' — missing or broken reporter.js no longer crashes the widget
    Fixed comment count lifecycle — retryTimer, retryCount, and commentObserver all torn down cleanly on navigation; observer callbacks bail if currentVideoId has changed
    Fixed genuine 0-comment videos spinning the full retry budget — retry loop now only retries while comments === null, not comments === 0
    Fixed 4/4 Legit on Fire rendering green — bar color now derived from percentage not absolute data-score; CSS updated to match
    Fixed redundant barColor() in popup — now uses verdict.color from the scoring engine directly
    Fixed insertCSS firing even when script injection failed — CSS now chained after script sequence
    Fixed window.close() leaving users on a blank tab — redirects to YouTube if close is refused
    Fixed stale Chrome-port references in CONTRIBUTING.md — updated to reflect MV3 unification

    Performance

    Eliminated full-page querySelectorAll fallback scans in scrapeViews() and scrapeComments() — return null on selector failure, let retry loop handle it
    Narrowed comment observer — IntersectionObserver scroll trigger replaced 300ms blind interval poll; MutationObserver now watches just the count element with no characterData
    URL poller early returns on unchanged and non-watch URLs — zero DOM work when idle

    Robustness

    safeQuery() wraps every document.querySelector() call — malformed remote selectors log [YTEV] Bad selector and fall through instead of throwing and killing

    Source code released under MIT License

    Download file
  • Version 1.1.6

    Released Aug 15, 2026 - 34.92 KB
    Works with firefox 140.0 and later
    v1.1.6

    Security:

    Replaced hardcoded API key with per-install UUID for telemetry authentication
    UUID generated via crypto.randomUUID() on first report, persisted to storage.local
    No secrets in the distributed package — nothing to leak, nothing to rotate
    Worker now validates UUID format only; old static key path removed entirely

    Source code released under MIT License

    Download file
  • Version 1.1.5

    Released Aug 15, 2026 - 34.8 KB
    Works with firefox 140.0 and later
    v1.1.5

    Bug fixes:

    Fixed stale comment count and verdict carrying over when navigating between videos
    Root cause: tabs.onUpdated was re-injecting all scripts on every navigation, but since the previous scripts were still alive in the page context, the const redeclarations failed silently — leaving run() never called and the old data on screen
    Fix: background script now checks if scripts are already loaded in the tab before injecting. If they are, it fires yt-navigate-finish to trigger a clean navigation reset instead of re-injecting. If they aren't, it does a fresh injection as before
    Applies to both Firefox and Chrome/Edge builds

    Source code released under MIT License

    Download file
  • Version 1.1.4

    Released Aug 15, 2026 - 34.77 KB
    Works with firefox 140.0 and later
    v1.1.4

    Bug fixes:

    Fixed stale comment count carrying over from a previous video when navigating to videos with lazy-loaded comments
    Root cause: lastResult was never cleared on navigation, so if the comment scraper timed out on the new video before comments loaded, the widget could render with data from the previous video
    Fix: lastResult is now explicitly set to null on every navigation event, and the widget is removed immediately — ensuring a clean slate before each new video scores
    Applies to both Firefox and Chrome/Edge builds

    Source code released under MIT License

    Download file
  • Version 1.1.3

    Released Aug 15, 2026 - 34.76 KB
    Works with firefox 140.0 and later
    v1.1.3

    Bug fixes:

    Fixed extension crashing and disappearing from the screen due to a redeclaration of const YTVerdict error
    Root cause: both the manifest's content_scripts declaration and the background script's tabs.onUpdated injection were running simultaneously, causing all scripts to be injected twice
    Fix: removed content_scripts from both Firefox and Chrome manifests — injection is now handled exclusively by the background script, eliminating the conflict
    Applies to both Firefox and Chrome/Edge builds

    Source code released under MIT License

    Download file
  • Version 1.1.2

    Released Aug 15, 2026 - 34.83 KB
    Works with firefox 140.0 and later
    v1.1.2

    Fixed extension not displaying on cold browser load without requiring Ctrl+F5
    Background script now programmatically injects content scripts when a YouTube watch page finishes loading, bypassing content script timing issues on first browser launch

    Source code released under MIT License

    Download file
  • Version 1.1.1

    Released Aug 14, 2026 - 34.23 KB
    Works with firefox 140.0 and later
    v1.1.1

    Bug fixes:

    Fixed extension not displaying on cold browser load — previously required a Ctrl+F5 hard refresh to show the widget on a fresh browser session
    Extension now watches for YouTube's video title element to appear in the DOM before running, ensuring it works correctly on first load without user intervention
    Applies to both Firefox and Chrome/Edge builds
    3-second fallback ensures the extension runs even in edge cases where the title selector doesn't fire

    Source code released under MIT License

    Download file
  • Version 1.1.0

    Released Aug 12, 2026 - 33.95 KB
    Works with firefox 140.0 and later
    v1.1.0

    New features:

    Opt-in anonymous telemetry — verdict data reported to Cloudflare Worker + Neon database for future z-score calibration
    Welcome page on first install with plain-English opt-in disclosure (CSP compliant, external script)
    Background service worker fires onInstalled to open welcome tab on fresh install
    Telemetry toggle in popup — change opt-in preference at any time
    AI content detection — detects YouTube's "Made with AI" disclosure label and displays a purple 🤖 AI badge in the widget header
    is_ai_content flag recorded in both Neon tables for future engagement pattern research
    Comments disabled detection — shows "Off" in stats and excludes comment rate signal when YouTube has disabled comments
    Passive Watch edge case identified — GitHub issue filed for v1.x implementation

    Bug fixes:

    Likes scraper timing — retry on 0 value; was reading before YouTube's aria-label populated
    Comment scraper timing — retry on 0 value; lazy-load timing issue
    Comment scraper in playlist context — added ytd-comments-header-renderer #count selector
    MutationObserver for lazy-loaded comments — updates widget when user scrolls to comments section
    NaN prevention in scoring — comment rate excluded when null, same pattern as sentiment signal
    SPA navigation — added URL polling fallback to catch pushState navigations that don't fire yt-navigate-finish
    Selector fetch branch name — corrected main to master in GitHub raw URL
    innerHTML replaced with createElement throughout — resolves AMO validator warning
    host_permissions removed — not supported in MV2; consolidated into permissions
    strict_min_version bumped to 140 — matches data_collection_permissions support requirement
    .git folder excluded from xpi build
    data_collection_permissions optional value corrected to camelCase technicalAndInteraction
    Welcome page CSP compliance — inline script moved to external welcome.js

    Selector updates (v1.0.1 → v1.0.3):

    Added like-button-view-model button as primary likes selector
    Added ytd-comments-header-renderer #count for playlist context
    Added ytd-structured-description-content-renderer AI label detection
    Bumped selector version and updated timestamps

    Source code released under MIT License

    Download file
  • Version 1.0.1

    Released Aug 9, 2026 - 61.85 KB
    Works with firefox 140.0 and later
    Fixed: .git folder excluded from build — should not have been included in v1.0.0 package
    Fixed: Removed host_permissions key (not supported in Manifest V2 — permissions consolidated into permissions array)
    Fixed: Bumped strict_min_version from 115 to 140 to match data_collection_permissions support requirement
    Fixed: Likes scraper now retries on 0 value — was reading before YouTube's aria-label had populated, resulting in 0 likes on first load
    Fixed: Comments scraper now retries on 0 value — comments section lazy-loads and wasn't ready on initial scrape
    Fixed: Added URL polling fallback for SPA navigation detection — previously stale data could carry over when navigating between videos without a hard refresh
    Fixed: Retry limit increased from 20 to 40 attempts to accommodate slow-loading comments section
    Updated: README installation section reflects AMO submission in progress

    Source code released under MIT License

    Download file
Go to Mozilla's homepage

Add-ons

  • About
  • Firefox Add-ons Blog
  • Extension Workshop
  • Developer Hub
  • Developer Policies
  • Community Blog
  • Forum
  • Report a bug
  • Review Guide

Download

  • Download Firefox
  • Windows
  • macOS
  • iOS
  • Android
  • Linux
  • All

Latest Builds

  • Nightly
  • Beta

Firefox for Business

  • Enterprise

Community

  • Connect
  • Contribute
  • Developer

Follow

  • Instagram
  • YouTube
  • TikTok
  • Bluesky
  • Podcast
  • Privacy
  • Cookies
  • Legal

Except where otherwise noted, content on this site is licensed under the Creative Commons Attribution Share-Alike License v3.0 or any later version.