github DavidNgugi/peregrine v1.0.0-rc.3

pre-release2 hours ago

[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)

Don't miss a new peregrine release

NewReleases is sending notifications on new releases.