[1.0.0-rc.3] - 2026-10-18
๐ Features
- (shell) Remove the idle Now Playing bar
๐ Bug Fixes
- (playback) Hand mpv the selected episode and refresh after a download
- (release) Merge downloaded artifacts under dist before publishing
๐งช Testing
- (playback) Pass the episode argument at the external-play call sites
โ๏ธ Miscellaneous Tasks
- (release) 1.0.0-rc.3
[1.0.0-rc.2] - 2026-10-18
๐ Bug Fixes
- (stream) Allow Range over CORS for a cross-origin video
- (title) Show each episode's own download state and progress
- (release) Build NSIS for a pre-release version on Windows
โ๏ธ Miscellaneous Tasks
- (release) 1.0.0-rc.2
[1.0.0-rc.1] - 2026-10-18
๐ Features
- (profiles) An avatar editor with DiceBear and uploads
- (profiles) Sixteen avatar styles and a shuffle
- (downloads) Say downloading and show progress on the tile
- (playback) Play the episode you choose
- (watch) Per-episode progress, bars, and next up
- (watch) Resume the episode the rail names
- (watch) A viewing history in Settings
- (downloads) Name the episode on a queued row
- (downloads) Schedule a release for the date it arrives
- (watchlist) Save a title from its page and see "My list" on Discover
- (library) Surface scanned titles on Discover and match their metadata
- (library) Match scanned titles automatically
- (title) Fetch and draw TMDB cast with cached portraits
- (person) Open a cast member's local filmography
- (person) Show the provider's filmography beside the local one
- (discover) Order My library by arrival and drop Recent Downloads
- (tiles) Mark watchlisted titles with a bookmark
- (cast) Add the device, capability, discovery, and session model
- (library) Index external subtitle sidecars during a scan
- (release) Add the unsigned release-candidate gate and publish path
- (playback) Serve and render external subtitle sidecars
๐ Bug Fixes
- (release) Put minisign somewhere that exists
- (title) A downloaded episode stops offering Download
- (acquire) Link a download job to its episode row
- (title) Offer no download before release
- (profiles) Circular toolbar avatar at the toolbar's size
- (watchlist) Actually pass the list into the screens
- (discover) Give library tiles their metadata and contain rail scrollbars
- (recommendations) Never include the title being viewed
- (tiles) Carry the watchlist mark to every rail and grid
- (title) Keep the opened title out of More like this
- (library) Read the score from tmdb_rating, not vote_average
- (library) Drop items whose files are all gone
- (a11y) Announce async state, trap profile focus, and honour reduced motion
- (player) Return after an external launch and keep Continue Watching whole
๐ Documentation
- Catch the tree up with the last day of features
- The watchlist exists; monitoring is what is missing
- (storage) Document the deletion methods after the cleanup split
- Reconcile the v1.0 backlog and record the recent work
๐งช Testing
- (title) Cover the TMDB cast answer and the cast rail
- (title) Cover the feed self-filter and library tile metadata
โ๏ธ Miscellaneous Tasks
- Cap the test step so a hung test fails visibly
- Add a command that clears build output without downloads
- (release) 1.0.0-rc.1
[0.1.0] - 2026-10-17
๐ Features
- (repo) Add the Cargo workspace, architecture allowlist, and repository gates
- (ci) Three-platform CI, supply-chain policy, and local pre-commit hooks
- (ipc) Add the structured AppError contract and its stable code taxonomy
- (xtask) Add the dead-dependency gate with its own negative fixture
- (domain) Add ExternalId, the release-name parser, and the clock/id ports
- (frontend) Add the pnpm workspace and the strict TypeScript and lint stack
- (storage,shell) Add the SQLite foundation and the Tauri shell member
- Add homelab deployment roadmap and ADR
- (domain) Add PathGuard and the quality-profile model
- (ipc,observability) Add the specta export pipeline, gen-ipc, and the logging foundation
- (xtask) Add check-theme, the contrast gate the documents promised
- (storage) Complete the Phase 0 schema with migrations 0002 through 0007
- (sync) Add the Phase 0 job scheduler with cancellation and proven token release
- (notify) Add the notification policy, redaction scanner and centre service
- (storage) Add the job journal
- (app) Add the event bus, the hello job and the Phase 0 runtime
- (ipc) Serve the runtime over a job-scoped command surface
- (desktop) Start the runtime and add the diagnostics screen
- (ipc) Guard every response against the payload budget
- (xtask) Add check-commands, the gate for the command line budget
- (storage) Make keyset pagination the only list shape
- (storage) Add the catalogue's identity repository
- (domain) Make the account scope a parameter of content reads
- (xtask) Make third-party attribution a checked artefact (PG-E0-18)
- (xtask) Gate both workspaces on unused dependencies (PG-E0-15)
- (domain) Model catalogue and library entities (PG-E4-01)
- (storage) Back up before migrating and recover from corruption (PG-E3-13, PG-E3-14)
- (platform) Resolve and verify sidecar binaries (PG-E26-01)
- (xtask) List the bundled frontend packages in the attribution artefact (PG-E0-18)
- (domain) Rank releases against a quality profile (PG-E4-06)
- (domain) Inspect torrent descriptions for hostile entries (PG-E4-07)
- (domain) Decide resume, watched, and next-up from a watch policy (PG-E4-09)
- (domain) Download job state machine with guarded transitions (PG-E4-11)
- (domain) Subtitle timing math and SRT/VTT/ASS writers (PG-E4-14, PG-E4-15)
- (domain) Parse library file and folder names (PG-E4-04)
- (domain) Refuse a preference order that names one value twice (PG-E4-05)
- (domain) Derive media availability from items, jobs, and files (PG-E4-12)
- (domain) Player session state machine with guarded transitions (PG-E4-13)
- (ipc) Guard the one response that bypassed the budget check (PG-E2-10)
- (domain) Order a series per scheme over the canonical numbers (PG-E4-10)
- (shell) Platform window chrome, persisted geometry, drag regions, scaling
- (domain) Declare the event vocabulary and seal the writer to it (PG-E4-16)
- (notify) Persist the notification centre and wire the delivery policy (PG-E1-19)
- (storage) Index the catalogue in an FTS5 table that rebuilds identically (PG-E3-12)
- (shell) Single instance, application menu, and native pickers (PG-E1-04/07/12)
- (storage) Library and watch-state repositories with scoped reads (PG-E3-10)
- (storage) Retention policy as data and per-tier disk accounting (PG-E3-15, PG-E3-17)
- (shell) Deep links, a state-aware tray, a login item, and a shortcut registry (PG-E1-08/09/11/13)
- (storage) The maintenance job, VACUUM, ANALYZE and FTS optimize under a playback gate (PG-E3-16)
- (shell) A typed asset protocol scoped to the image cache (PG-E2-08)
- (shell) Native notification delivery with click routing (PG-E1-14)
- (notify) Consent as core state, with a typed permission probe (PG-E1-20)
- (shell) The sidebar, the shell layout, and the first of the kit (PG-E7-01)
- (settings) The Settings screen on the kit, and the merge defect it found (PG-E7-03, PG-E21-19)
- (diagnostics) The Diagnostics screen on the kit, and the two lies it was telling (PG-E7-03, PG-E21-18)
- (discover) The last hand-styled screen, and the size its empty state needed (PG-E7-03)
- (providers) The MetadataProvider port, its declaration, and its conformance suite (PG-E5-01)
- (providers) Response hygiene, and the cap that has no default (PG-E5-05)
- (providers) Per-host token buckets from the declared rate policy (PG-E5-03)
- (ui) The component gallery, built by the app's own build (PG-E21-15)
- (sync) The content-addressed image cache, and the crash it cannot leave behind (PG-E6-09)
- (library) Root management, and the deletion that deletes one row (PG-E14-01)
- (library) The scan policy, and the walk that applies it (PG-E14-02)
- (library) The incremental rule, proven against a real filesystem (PG-E14-03)
- (library) Missing-file reconciliation, which deletes nothing (PG-E14-13)
- (library) Roots over IPC, and the screen that reaches them (PG-E14-01)
- (library) The scan job, and the walk it must finish (PG-E14-04)
- (library) Scan now, from the settings screen (PG-E14-04)
- (storage) The image_cache rows, and the two halves they sit between (PG-E6-09)
- (library) The indexer, and the scope decision it needed (PG-E14-05)
- (library) The library screen, and the scope it reads under (PG-E14-17)
- (library) Scan from the library screen, and follow it (PG-E14-17)
- (library) Place the unambiguous episodes (PG-E14-07)
- (library) The unmatched queue, and answering it (PG-E14-08)
- (app) Typed routes, and the path that follows them (PG-E7-02)
- (library) Remember a correction as a pattern (PG-E14-09, PG-E14-08)
- (library) Show the remembered rules, and let one be withdrawn (PG-E14-09)
- (library) Offer the title a parked name looks like (PG-E14-08, PG-E14-09)
- (title) A title's own page, and the route that opens it (PG-E7-11, PG-E7-02)
- (storage) Evict the image cache to its cap, never what is in use (PG-E6-10)
- (ui) A dialog, the rule that decides which one closes, and its first confirmation (PG-E21-03)
- (library) Let a person choose the title (PG-E14-08, PG-E21-03)
- (ui) A link, so a title stops being a button that navigates (PG-E21-03)
- (providers) The HTTP client stack, and the fetch that was blocking it (PG-E5-02)
- (providers) The TMDB adapter's search (PG-E5-06)
- (domain) The title matching rule and its corpus (PG-E5-13)
- (sync) Write a provider's answers into the catalogue (PG-E6-04, PG-E5-13)
- (providers) Read a title's details and fill a stub (PG-E5-07)
- (secrets) The keyring behind a port (PG-E24-05)
- (app) The provider manifest and the credential lookup (PG-E5-12)
- (discover) Search the providers from the screen (PG-E7-08, PG-E5-12)
- (providers) Read an image and cache it (PG-E5-15, PG-E6-09)
- (app) Refresh a title and its poster as a job (PG-E6-09, PG-E5-15)
- (title) Put the poster on the title screen (PG-E2-08, PG-E6-09, PG-E7-11)
- (ui) A poster tile that holds its geometry (PG-E7-04)
- (ui) A rail that is one tab stop (PG-E7-07)
- (ui) A virtualized grid of fixed-geometry tiles (PG-E7-06)
- (providers) Ask a provider whether its key works (PG-E5-20)
- (app) Resolve and build a provider credential before storing it (PG-E5-20)
- (app) A credential job that stores a key only once it works (PG-E5-20)
- (settings) Enter, test and remove a provider key (PG-E5-20)
- (discover) Rails from the provider, a hero, and a cache-first read (PG-E5-06, PG-E7-08)
- (discover) Fill the rails without a manual refresh (PG-E7-08)
- (providers) Carry the artwork and the score a list answer already gives (PG-E5-06, PG-E7-08)
- (ui) The poster card's hover expansion (PG-E7-05)
- (discover) A hero that cross-fades, and a tile that actually lifts (PG-E7-05, PG-E7-08)
- The acquisition, playback and browse slices
- (acquisition) Index, download, stream while downloading, and continue watching
- (settings) Configure Prowlarr from the app
- (indexers) A managed Prowlarr component pack (ADR 0024)
- (settings) Install and run a managed Prowlarr from the app
- (settings) Show install and start progress for managed Prowlarr
- (ui) One button variant per intent, and confirm every stop or cancel
- (settings) Manage Prowlarr indexers without leaving the app
- (prowlarr) Start the managed Prowlarr with the app when it is installed
- (settings) Say when the indexer catalog is loading
- (quality) Default to 1080p and let the user choose higher
- (downloads) Clear finished entries out of the queue
- (acquire) Name the qualities available when the preference finds nothing
- (acquire) Keep the qualities a search found, and let the user choose one
- (title) Offer the qualities a search found instead of a dead end
- (notify) Catalogue an event for available release alternatives
- (notify) Compose the service and surface the centre
- (notifications) Open the subject title from a centre row
- (notify) Mark centre rows read and dismiss them
- (events) Publish the topics the surface actually subscribes to
- (shell) Back navigation and download status across the browse surface
- (downloads) Finish, import, and delete a completed download
- (discover) Recent downloads, and hoist completed titles in browse
- (downloads) Show a poster thumbnail beside each queue title
- (playback) Play containers the webview cannot demux in mpv
- (secrets) Keep dev-build secrets in a file so rebuilds stop prompting
- (playback) Resume and record mpv position over its IPC socket
- Browse tile search, download hoist, and season sync
- (providers) Fall back to a build-time TMDB token
- (acquire) Download a single episode
- (setup) Five-step first-run wizard
- (packaging) Record the verified sidecar pins
- (packaging) Bundle mpv and prefer it over PATH
- (packaging) Build the macOS ffprobe in CI
- (profiles) Reach the switcher from the sidebar and Discover
- (profiles) Netflix-style selector with a rolling poster wall
- (profiles) One full-bleed backdrop and a bleeding avatar rail
- (profiles) Add, rename, and rotate the backdrop
๐ Bug Fixes
- (theme) Make every shipped theme pass the contrast gate, and stop the runtime drifting from it
- (hooks,docs) Unblock the hook on ignored files, and close two documented inconsistencies
- (backlog) Adjust task estimate thresholds for PG-E35 and PG-E36
- (ipc) Give the two provider codes the copy they each describe
- (storage) Settle the three recorded schema defects
- (desktop) Resolve the bundled notice paths from the manifest directory
- (ipc) Repair the clippy warnings my platform test introduced
- (sync) Put the clock and id generator behind their ports (PG-E4-17)
- (domain) A name property was flaky, and it was green on four runs (PG-E4-04)
- (domain) Recognize the tag spellings that were hiding the release group (PG-E4-03)
- (domain) Two SubjectKinds collided and the merge could not see it
- (platform) An installed sidecar can only land inside the managed directory (PG-E26-01)
- (ui) The switch thumb disappeared on the light theme
- (runtime) A job's row is the authority on whether it is still live (PG-E0-19)
- (domain) Measure the ranker property against what the scorer sees (PG-E4-06)
- (storage) A root with indexed files can be removed (PG-E14-01)
- (ui) A button label never wraps mid-phrase (PG-E21-03)
- (hooks) Name the missing tool instead of blaming formatting (PG-E0-10)
- (ui) Keep a rail's edge affordances on screen (PG-E7-07)
- (domain) Improve cannot claim a swap a group spelling already made (PG-E4-06)
- (indexers) The managed Prowlarr must use -data= and bind loopback
- (indexers) A managed Prowlarr start must read the key and never orphan the child
- (indexers) Read Prowlarr's key instead of blanking it on whitespace
- (indexers) Keep the catalog under the IPC budget and surface Prowlarr's reason
- (indexers) Name an app profile on add, and follow the auto-start
- (indexers) Fill the Base Url a getUrls select needs, and seed public defaults
- (indexers) Address each definition by its own file, and adopt a running Prowlarr
- (settings) Show the seeded indexers without reopening the screen
- (acquisition) Give a fresh install a default quality profile, and report the acquire job
- (title) Scope the acquire control to its own title
- (acquisition) Fetch the torrent behind Prowlarr's proxy URL, and record the failure
- (prowlarr) Survive a keyring that refuses the managed key
- (acquire) A Prowlarr proxy redirect to a magnet is the source
- (acquire) A colon is legal off Windows, and a blocked acquire is visible
- (acquire) Fit the release to the volume before letting it win
- (acquisition) Let admission report a full volume, not the size cap
- (acquisition) Read free space on the nearest existing ancestor
- (downloads) Keep reading an idle queue so a new transfer appears
- (downloads) Poll the engine so progress and the queue actually move
- (discover) Honour the Films / TV shows filter on the owned rails
- (playback) Stop mpv from taking the media keys and the Now Playing centre
- (playback) Start every mpv child unmuted at full volume
- (player) Start the external reader from the direct player route
- Make the backlog gate pass and the torrent tests build
- (prowlarr) Allow the non-macOS bundle stub's unnecessary wrap
- (supply-chain) Update rustls and record the ringbuf advisory
- (playback) Allow the unused socket field on Windows
- (ci) Format the sidecar files and record the zbus advisories
- (build) Run the sidecar fetch from the workspace root
- (packaging) Windows extraction and the Linux static probe
- (packaging) Find mpv.app as a directory
- (packaging) Extract Windows caches with ZipFile
- (tests) Compare Windows paths as paths
- (tests) Normalise scan paths to forward slashes
๐ Documentation
- Add the TASKS State column and correct stale dependency and time facts
- (tasks) Record verified Phase 0 domain and IPC task states
- (tasks) Record verified E0 frontend states
- (deps) Record the two-generation TypeScript pin and the dev-only tooling
- (tasks) Record verified E3 storage states
- (domain) Record why ReleaseName derives Serialize but not Deserialize
- (xtask) Record the up-only scope of the migration gate
- Bring the README status and build sections up to date
- Correct the TypeScript and Vite versions in the stack rationale
- (tasks) Mark the theme tasks as in progress, not done
- Correct the "quality profile" term a global rename corrupted
- (tasks) Mark PathGuard and the quality-profile model done
- (tasks) Record the IPC, codegen and observability states
- (plan) Align the Phase 0 Domain deliverable with the backlog
- (tasks) Record the two logging gaps PG-E25-01 named rather than hid
- Close PG-E2-01 on its evidence, and correct the generator's documented path
- (tasks) Record what makes the supply-chain gate red on the real graph
- (tasks) Mark the Phase 0 storage schema complete
- (tasks) Record the three schema findings the migrations surfaced
- (tasks) Mark PG-E6-01 done
- (tasks) Mark PG-E1-19 in progress and name what remains
- Record what is implemented, what is verified, and what is not
- Record the connected runtime, and what is still unverified
- (tasks) Keep the verification paragraph current
- (tasks) Refresh the test count after the schema change
- (tasks) Turn the backlog into a checklist
- (adr) Decide how a component pack is verified before it runs (PG-E26-01)
- (tasks) Reconcile the attribution and sidecar records after integrating
- (dependencies) Record cargo-machete in the tooling table
- (tasks) Bring the implementation status back in line with the tree
- Describe the release path the repository actually has
- (tasks) Record the catalogue and library entities in the status
- Separate the watched policy from the storage floor it must satisfy
- (tasks) Record what the CI rust job does locally
- (tasks) File the watched-threshold defect against PG-E4-09
- (tasks) Carry the integrity-check cost and the new test count
- (tasks) The storage duplication is gone, not pending
- Make the attribution claims true, and ship the artefact
- File the findings the domain and sidecar packages reported
- (tasks) Name the six Phase 0 tasks that Phase 0 cannot finish
- (tasks) PG-E2-12 is blocked two phases deep, not one
- (tasks) Refresh the test count and file the manual-override findings
- (flows) A queued download must be cancellable, and the gate has no warn level
- (flows) A retry after failure is a new job, not an arrow on this one
- (agents) A proptest regression seed is committed, not ignored
- (tasks) Close PG-E4-02 and PG-E4-08 on verified acceptance
- (tasks) Retract a group-extraction defect I filed without testing it
- (tasks) The clock rule does not hold, and the grep it needs is wider
- (domain) Fix the three broken intra-doc links, and record the doc-gate state
- (tasks) The suite is 734 tests after the domain wave
- (data-model) Audit which invariants are actually enforced
- (data-model) Correct the audit โ I5 and I8 are not gaps
- (tasks) E4-18 needs a toolchain decision before it can be written
- (domain) Name the invariants the scoped and notification suites enforce (PG-E4-20)
- (data-model) Number the declared-event rule as I38 (PG-E4-16, PG-E4-20)
- (tasks) Run the gate that had never run, and stop claiming it (PG-E3-18)
- (tasks) Verify the release workflow's action refs resolve (PG-E0-16)
- (agents) Mark the two commands the contract lists but does not ship
- (tasks) Clear five markers that claimed work nobody was doing
- (tasks) Every Phase 0 task states an acceptance, and the suite is 788
- (tasks) Mark the four tasks that have an agent on them
- (plan) Say which Definition-of-Done items Phase 0 cannot meet
- (tasks) Design the install containment check, and say why it is not done
- (tasks) The cross-phase table says ten, and the sentence above it agrees
- (tasks) The suite is 915 Rust tests and 103 frontend tests
- (tasks) PG-E26-01's note said the install control was owed, and it is done
- (tasks) Mark the six tasks that have an agent on them
- (tasks) Clear the stale marker PG-E3-10 was still carrying
- (tasks) File the two findings the shell package reported but could not fix
- (tasks) Restore eleven tasks a patch of mine deleted (PG-E4-07โฆPG-E4-17)
- (agents) The gates run in the dev profile, once per change (PG-E0-20)
- (tasks) Record what the rails slice left open (PG-E7-08, PG-E6-09)
- (agents) An output contract for agent replies
- (agents) A fast iteration mode for making the app run
- (adr) Record the managed Prowlarr default indexer seed
- (research) Tear down Prowlarr, Sonarr and Radarr as acquisition references
- (research) Record the qBittorrent WebUI contract and its sentinels
- Rewrite the README around the shipped app and add a screenshot
- State what works and what the backlog still owes
- Replace the borrowing shorthand in the reference notes
- Correct the README scope paragraph
- Extend the roadmap to the server and the client apps
- Call the seeded indexers examples, and state the user's responsibility
- Spell out what parental gating means
- Say why Peregrine is different, and where it is not yet
- (adr) Accept prebuilt sidecars and LGPL-3 ffmpeg
- (deps) Correct sidecar licences and payload sizes
โก Performance
- (build) One tauri feature set for every invocation (PG-E0-20)
- (build) Keep the shell out of the default build shape (PG-E0-20)
๐ Refactor
- (sync) Let a shared scheduler be shut down through a borrow
- (storage) Re-export the domain's stored enums and test them against the schema
๐จ Styling
- Apply prettier to the frontend
- (packaging) Format the fetcher
๐งช Testing
- (ipc) Add the propagation call site for the generated ErrorCode union
- (ipc) Measure every command against the blocking budget
- (domain) Stop the enum test claiming a check it cannot make
- (ipc) Make the no-path-in-payload check cover the platforms we ship
- (ipc) Contract cases generated from the command registry (PG-E2-10)
- (testkit) Shared fakes and the conformance suite both implementations pass (PG-E4-19)
- (domain) Keep the ranker's monotonicity counterexample (PG-E4-06)
- (library) The scan job's summary reports what the indexing wrote (PG-E14-05)
- (library) A placement table for the ambiguous names (PG-E14-07)
- (ipc) Cover every registered command's failure path
- Make three environment-sensitive tests portable
- (sidecar) Import std::env only where the unix helper uses it
- (scan) Gate the corpus directory helper to the unix test that uses it
โ๏ธ Miscellaneous Tasks
- Gate frontend formatting, which was the one ungated style check
- (lint) Satisfy clippy's assert_is_empty on the current toolchain
- (supply-chain) Make the gate green on the real graph and provable (PG-E0-13, PG-E0-14)
- (repo) Make the review and dependency-update process mechanical
- (release) Add bundling, SBOM, a signed manifest, and a changelog (PG-E0-16)
- Redact the build machine's identity from the research notes
- Clear the clippy backlog and add the acquire contract case
- Regenerate the IPC bindings
- Install pnpm through its v11-capable action
- Refresh the attribution artefact for rustls 0.23.46
๐ผ Other
- Supply-chain gate and CI matrix (PG-E0-13, PG-E0-14)
- Review and dependency-update process (PG-E0-11, PG-E0-12, PG-E0-17)
- Release workflow with bundling, SBOM, signed manifest, changelog (PG-E0-16)
- Component-pack verification decision (ADR 0022, PG-E26-01)
- Third-party attribution gate and artefact (PG-E0-18)
- Dead-dependency gates for both workspaces (PG-E0-15)
- Catalogue and library domain entities (PG-E4-01)
- Pre-migration backup and corruption recovery (PG-E3-13, PG-E3-14)
- Sidecar resolution and verification (PG-E26-01 slice)
- Frontend runtime inventory for the attribution artefact (PG-E0-18)
- E4-06-ranker
- E4-07-inspector
- Watch policy and the threshold layering fix (PG-E4-09)
- Download job state machine with I4 as a type (PG-E4-11)
- Subtitle timing and SRT/VTT/ASS writers (PG-E4-14, PG-E4-15)
- Library name parser with a 200-name corpus (PG-E4-04)
- Media availability derivation (PG-E4-12)
- Player session state machine (PG-E4-13)
- IPC contract tests generated from the registry (PG-E2-10)
- Per-scheme episode ordering (PG-E4-10)
- Clock and id generator behind their ports, with the determinism gate (PG-E4-17)
- Window chrome, window state, drag regions and scaling (PG-E1-01/02/03/18)
- Declared event vocabulary sealing the writer (PG-E4-16)
- Shared port fakes and the conformance suite (PG-E4-19)
- Notification service over an authoritative centre (PG-E1-19)
- FTS5 search index with rebuild identity (PG-E3-12)
- Application menu, single instance, native pickers (PG-E1-04/07/12)
- Library and watch-state repositories with scoped reads (PG-E3-10)
- Library and watch-state repositories with scoped reads (PG-E3-10)
- Retention policy as data and per-tier disk accounting (PG-E3-15, PG-E3-17)
- Deep links, state-aware tray, login item, shortcut registry (PG-E1-08/09/11/13)
- Maintenance job that yields to playback (PG-E3-16)
- Asset protocol, native notifications, consent as core state (PG-E2-08, PG-E1-14, PG-E1-20)