diff --git a/CLAUDE.md b/CLAUDE.md index 6c8c000a..ed4d9107 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -307,7 +307,8 @@ four first-party visualizers really are byte-identical in six files (one md5 eac and the fifteen Apple tests that read Swift as text do so through two helpers, `AppSource.swift` and `EngineSource.swift`, so they are found by searching for those rather than for the file paths. -**`ADR-0131`–`ADR-0138` make the server its own app** (`0131`–`0136` and `0138` accepted and built — `0134` in #345 and familiar-apple #198, `0136`/`0138` in #346–#350, `0135`'s notarized `.dmg` on 2026-09-30 — `0137` accepted 2026-10-04, being built in `familiar-apple`). `0131` frames it: +**`ADR-0131`–`ADR-0138` make the server its own app** (`0131`–`0136` and `0138` accepted and built — `0134` in #345 and familiar-apple #198, `0136`/`0138` in #346–#350, `0135`'s notarized `.dmg` on 2026-09-30 — `0137` accepted 2026-10-04 and built in `familiar-apple` #210–#221, with its point 5 superseded +by `0150`, 8 GB per server and profile). `0131` frames it: Familiar is a server and the clients that play from it, installed and paired separately. The server comes as **Familiar Server** (a Developer ID menu-bar Mac app, source at `desktop/macos/` in this repo) or as Docker on Linux/NAS, and both are first-class. The Mac player stays in the App Store and carries diff --git a/docs/decisions/ADR-0137-the-phone-keeps-a-copy-of-its-library.md b/docs/decisions/ADR-0137-the-phone-keeps-a-copy-of-its-library.md index e3bf92de..8d7cbf11 100644 --- a/docs/decisions/ADR-0137-the-phone-keeps-a-copy-of-its-library.md +++ b/docs/decisions/ADR-0137-the-phone-keeps-a-copy-of-its-library.md @@ -33,9 +33,13 @@ Implementation: auto-download. **A sync that cannot read every rule releases nothing**, so a network blip is never why music leaves the phone. Un-favouriting a kept favourite now releases it, which it did not before. -- **Follow-up:** point 3's opportunistic background refresh is not built. It needs a - `BGTaskScheduler` identifier and background modes in `familiar-apple`'s Info.plist. Foreground - and the server's return cover the cases the point names. +- **All merged 2026-10-05** (`familiar-apple` #210–#219, `main` at `411319f`, CI green). +- **Point 3's background refresh built** in #220. `BackgroundRefresh` is a `BGAppRefreshTask`, + registered at every launch and scheduled each time the app leaves the foreground. A run checks + the server first and stops if it is away (point 7), sends queued listening, runs `KeptSync` + (moved out of `LibraryView` so a process with no scene can use it), then refreshes the catalogue. + A text test keeps the plist identifier, the `fetch` mode and the registration in step, because a + mismatch only shows up on a device, as a crash at launch. Extends [ADR-0131](ADR-0131-the-server-is-its-own-app.md), [ADR-0009](ADR-0009-offline-downloads-are-background-transfers.md), diff --git a/docs/decisions/ADR-0150-each-server-and-listener-gets-8-gb-on-a-device.md b/docs/decisions/ADR-0150-each-server-and-listener-gets-8-gb-on-a-device.md index b9f75de3..c2c49362 100644 --- a/docs/decisions/ADR-0150-each-server-and-listener-gets-8-gb-on-a-device.md +++ b/docs/decisions/ADR-0150-each-server-and-listener-gets-8-gb-on-a-device.md @@ -20,8 +20,11 @@ Implementation: queues only what the room left by kept tracks can hold**, which this ADR did not spell out: without it, the budget releases a favourite and the next launch fetches it straight back. - #216: points 4 and 5. `ServerConfiguration.storageNotice`, and "Storage on this device" in - Settings → Downloads. Offering to remove files at the moment a server is forgotten is not - built: forgotten pairs stay listed there instead. + Settings → Downloads. + - #221: the rest of point 5. Forgetting a server offers to remove what it kept, with Keep as the + default, since a server forgotten by mistake should not cost its music. +- **#213–#216 merged 2026-10-05.** The move of an existing install's downloads (point 6) had still + not been run on a device when this was written. Supersedes point 5 of [ADR-0137](ADR-0137-the-phone-keeps-a-copy-of-its-library.md). Extends [ADR-0010](ADR-0010-played-bytes-are-cached-downloads-are-pinned.md).