v0.12.7 — senior-engineer refactor pass
No new modules — bug hunt + hardening + UX consistency pass across the v0.10–v0.12 modules shipped during the autonomous-loop sprint.
Highlights
- New
lib/utils/buttonStatus.js— sharedflashStatushelper with WeakMap timer dedup. Consolidates 7 modules' inline setTimeout label-flips (cobaltDownloader,galleryZip,localCompanion,savedBackup,voteHistory,mediaArchiveManifest,commentTreeExport). - Lazy
rateLimiterrefill — interval now starts on firstschedule()and stops when bucket is full + queue/active empty. Closes a per-page background-tick leak. - Granular
arcticShiftfailures — distinguishesrate-limited/network/server-error/bad archive response/not in archiveinstead of folding into a flat "not in archive" label. dragResizepointercancel + window-blur teardown — drag cleanup no longer leaks listeners when the tab loses focus or the OS steals the pointer.userTaggerEsc-close + single active popover — only one popover open at a time; Esc dismisses; deferred outside-click handler guards against teardown races.botCollapsereveal-button now drives label off the live.collapsedclass — stays in sync with reddit's native[-]/[+]toggle.filterRulescollapse-for-posts degrades todim(posts have no native collapse on old.reddit).data-rsm-filter-hitis now space-separated and dedupes IDs.redgifsLayoutFixper-Thing scoped observers — replaces the previous body-wide MutationObserver. Dramatically less work on busy listings.- IDB-promise reset on failure —
voteHistory+mediaArchiveManifestno longer break permanently on a transient IndexedDB hiccup. cobaltDownloaderhost merge —eligibleHosts()now merges defaults + custom list (was replacing).res.json()wrapped in try/catch.galleryZipjszip retry — cached promise resets on rejection so a transient CDN failure doesn't permanently break the button.commentTreeExport— deadincludeAllChildren: falseoption branch removed.
Fixture hygiene
- Privacy outbound-URL snapshot regenerated; regen helper at
scripts/regen-privacy-snapshot.mjsfor future use. expectedHostCountbumped 86 → 88 (mastodon + threads from v0.11.11).threadshost permissions added to both chrome + firefox manifests.
Verification
- 358/358 tests green.
- Chrome + Firefox production builds clean.
Install
- Chrome / Brave / Edge: Load unpacked from
dist/chrome/(recommended — Chromium 75+ rejects self-signed CRX withCRX_REQUIRED_PROOF_MISSINGregardless). The.crxis provided for completeness and works in enterprise-policy installs. - Firefox: Load
res-slim-firefox-v0.12.7.zipviaabout:debugging→ "Load Temporary Add-on".
SHA-256 sums in SHA256SUMS-v0.12.7.txt.