Add to Library was a broken button
Reads were routed to Trakt and Simkl; writes were not. The Library screen shows the Trakt list and nothing else when the library source is Trakt, while the detail screen's Add button wrote to the local store — so a viewer on Trakt pressed Add and watched the title disappear. Saved on the device, read from a list it had never been sent to.
It now reaches the account. The rule is local always, remote in addition: the local copy survives an expired token and a flight-mode launch, and it is the only record left if the remote request fails. The detail screen says when a save reached the device but not the account, because silence is how the original bug hid.
Trakt answers 201 for a title it did not recognise and reports the miss in not_found, so a status code alone can no longer pass a write that changed nothing off as success.
The watched path is deliberately untouched — the player already scrobbles a stop at 100%, which is what marks a title watched on both accounts.
Sign in to TorBox with a code
A debrid API key is forty characters and the only way in was the on-screen keyboard. TorBox hands back a short code, you approve it on a phone, and the key arrives on its own.
TorBox only: Premiumize's device flow needs a client id that really is absent from upstream's public source, and Real-Debrid has no device flow at all. The row is only drawn for a provider that can honour it.
The audit withdrew two items that were not parity
Both endpoints above were ported by reading the Android source rather than guessing, and that reading corrected the audit twice: upstream has no sync/collection call, and Simkl has no list-removal call — removing from a list is removing from history.
Two of the three remaining P2 entries did not survive the same check:
- IMDb rating-visibility settings do not exist upstream. Every preference key containing "rating" or "visib" in 0.8.7-beta is a JSON field name in an API DTO, not a setting. Building the controls would have been inventing a feature and filing it as parity.
- Top Shelf already carries remote progress. Trakt and Simkl resume points are adopted into the same store that publishes the shelf. Nothing to build.
They are struck through rather than deleted. An audit that invents work is a worse failure than one that misses some.
Parity now stands at 18 of 28 areas at the expected level, 8 partial, 2 missing — one of those by decision.
Verification
205 unit tests, 8 UI tests, 0 failures. 17 new contract tests assert the method, path, auth headers and body of every write against a stubbed session — these endpoints mutate a real library, so they must never reach one during development.
Not verified against live Trakt, Simkl or TorBox accounts. That remains an acceptance test, not a claim.
Unsigned IPA — sideload with your usual signer.