# Changelog — Butler

## 0.3.9 — Innertube client fix

### Fixed
- Page bridge now uses INNERTUBE_CLIENT_NAME / INNERTUBE_CLIENT_VERSION (correct for x-youtube-client-* headers)
- Continuation requests include visitor + identity headers when available (x-goog-visitor-id, x-youtube-identity-token, x-goog-authuser)

### Debug
- Debug report now includes “page data” line showing client/header fields

---

## 0.3.8 — Correct continuation token selection

### Fixed
- Continuation token + clickTrackingParams now extracted from the playlist video list continuationItemRenderer (avoids unrelated tokens)
- Title display strips leading item-count prefix like “(50) ”

### Debug
- When a continuation parse yields 0 items, debug now includes any alert messages returned by YouTube

---

## 0.3.7 — Fix

### Fixed
- Fix ReferenceError: continuationTracking is not defined
- Continuation requests now include clickTrackingParams when available

---

## 0.3.6 — Fix

### Fixed
- Fix ReferenceError: pickClickTrackingParams is not defined (function now defined in content script scope)

---

## 0.3.5 — Continuation request fix

### Fixed
- Continuation requests now include clickTrackingParams + Innertube client headers (addresses 200 responses with no continuation contents)

---

## 0.3.4 — Continuation parser fix

### Fixed
- Continuation parsing now unwraps `richItemRenderer.content.playlistVideoRenderer` (addresses “continuation parsed 0 items”)

### Added
- Debug now logs total `playlistVideoRenderer` occurrences in continuation response when 0 items are parsed

---

## 0.3.3 — Debug diagnostics

### Added
- Debug panel now logs continuation fetch/parse steps (pageCount, items, next token)
- Logs import start/end and captures import errors

---

## 0.3.2 — Debug UI fix

### Fixed
- Debug panel now renders in the popup (Refresh / Copy report / Clear)

---

## 0.3.1 — UX

### Changed
- Popup subtitle shows the loaded version (e.g., “The Private Playlist Concierge v0.3.1”)

---

## 0.3.0 — Debug build

### Added
- In-popup Debug panel (Refresh / Copy report / Clear) so troubleshooting does not require DevTools
- Content script emits continuation/token diagnostics into the Debug panel

---

## 0.2.9 — Continuation + Pagination

### Fixed
- Continuation token detection expanded (addresses “stops at 99/100” imports)
- Playlist dropdown de-dupes by playlistId

### Added
- Page size control (25 / 50 / 100)
- Back-to-top appears only when bottom pager is reached

---

## 0.2.8 — UX polish

### Fixed
- Active playlist selection updates immediately after indexing (no “one playlist behind” dropdown)
- Playlist title detection is more reliable (DOM-first + small retry)

### Changed
- “Index This Playlist” renamed to “Index list”
- Action row is responsive (2×2 on XS)
- Added floating “Back to top” button

---

## 0.2.7 — UI + Title + Injection

### Fixed
- Playlist title now prefers the DOM playlist header (more accurate than YouTube JSON fallbacks)
- Content script auto-injects on playlist pages (reduces need for manual reloads)

### Changed
- Action buttons consolidated into one row: Export JSON, Export CSV, Index This Playlist, Force Reindex
- Pager is shown at both top and bottom of the list

---


## 0.2.6 — Fix

### Fixed
- Service worker registration (MV3 module worker; removes invalid dynamic import loader)

---

## 0.2.5 — Icons

### Changed
- Replaced extension icons (16/32/48/128) with the new Playlist Butler brand mark

---
## 0.2.4 — Patch

### Fixed / Debug
- Added service worker loader so “Status code: 10” surfaces the real underlying error in the Service Worker console

---

## 0.2.3 — Patch

### Fixed
- Content script duplicate-guard no longer throws “Illegal return statement” (wrapped in IIFE)

---

## 0.2.2 — Patch

### Fixed
- More reliable startup handshake (ping/pong) so indexing starts without needing refresh
- Increased start retries to handle slow tabs / heavy YouTube pages

---

## 0.2.1 — Patch

### Fixed
- Index works on already-open playlist tabs (auto-injects importer; no manual refresh required)
- More accurate playlist title detection (e.g., “Watch later” instead of account name)
- More robust continuation handling (reduces “only 100 items” imports)

---

Tag format:
- beta_v01_watchlist_butler
- beta_v02_playlist_butler

---

## beta_v02_playlist_butler — Playlist-wide MVP

### Added
- Index the playlist you’re currently viewing (`/playlist?list=...`)
- Indexed playlist selector in the popup
- Per-playlist storage in IndexedDB (`playlists` + `playlistVideos`)
- Export per playlist (CSV/JSON)
- Progress UI (phase + ETA + completion)

### Reliability
- Incremental persistence for large playlists
- Rate limiting + retry/backoff to finish long imports reliably

### Backlog
- Global search across all indexed playlists
- Visual Reports module (private analytics)

---

## beta_v01_watchlist_butler — Watch Later-only baseline

### Added
- Watch Later indexing into a local library
- Cached instant load
- Search + basic filtering
- Export (CSV/JSON)
