Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 7 additions & 3 deletions docs/decisions/ADR-0137-the-phone-keeps-a-copy-of-its-library.md
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
Loading