# Release: Time's Up v2.2.9

**Release Date:** 2026-04-11
**Status:** Approved
**Manifest Version:** 3

## Release Summary

v2.2.9 overhauls time tracking so passive viewing and background audible playback are credited minute-for-minute. Before this release, the extension undercounted the most common ways people actually consume distracting media — quietly watching long YouTube videos, lectures, or having music playing from a background tab while working.

## Bug Fixes

### Passive and Background Media Are Undercounted (BUG-006)
**Requirement doc:** [requirements/bugs/BUG-006-idle-background-tracking.md](../bugs/BUG-006-idle-background-tracking.md)

Time tracking previously depended on `chrome.idle` signals, which marked users as "idle" after 30 seconds of no keyboard/mouse input. A user watching a 20-minute video with no mouse movement would be credited 30 seconds. Background audible tabs (music playing while on a different tab) were not credited at all.

- **Fix:** Replaced the idle-gated model with a per-tick domain set computed from `collectActiveDomains()` — active tab plus audible/unmuted tabs. Each domain in the set receives wall-clock credit up to a 5-minute cap per tick. No `chrome.idle` dependency.
- **Fix:** Added a coalesce-on-wait guard (`onTickInFlight`) so bursts of `tabs.onActivated` / `windows.onFocusChanged` / `tabs.onUpdated` events no longer run three near-identical ticks.
- **Impact:** Time limits now fire on realistic consumption patterns for video, music, podcasts, and long-form reading. Category budgets behave correctly when multiple tabs in the same category are open and audible.

## Test Coverage Added

- New `tests/unit/background/collectActiveDomains.test.js` (12 tests) for the active-domain set logic.
- New `tests/unit/background/creditElapsed.test.js` (9 tests) for the per-tick crediting with the 5-minute cap.
- New `tests/e2e/tracking.spec.js` scenarios validating foreground-passive and background-audible tracking (skipped on CI because they require real Chrome focus/audio).
