From 954546434a92802a5897da8f16fff1aef375b630 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Sat, 22 Aug 2026 22:23:20 +0200 Subject: [PATCH] docs(specs): record what shipped, and where the design bent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DR-242 … DR-247 are in. The spec now says so rather than reading as a proposal for work that already exists. One deviation is recorded rather than quietly absorbed: DR-246 called for the engines to own seek strategy outright, and they cannot — re-negotiating a stream needs the repository, which sits above them. The engine declares the ability and the caller acts on it. `determine_video_seek_strategy` therefore survives, correctly typed over a declared capability instead of over a guess, because the defect was its input rather than its existence. --- docs/specs/media-player-controller.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/specs/media-player-controller.md b/docs/specs/media-player-controller.md index 67f78487..956a8218 100644 --- a/docs/specs/media-player-controller.md +++ b/docs/specs/media-player-controller.md @@ -1,6 +1,11 @@ # Spec: MediaPlayer — one controller API, three interchangeable engines -**Status:** Proposed +**Status:** **Partially implemented.** DR-242 … DR-247 have shipped: the +contract, `FakePlayer` and the conformance suite, `MpvPlayer`, the standalone +runner, `LegacyPlayer`, the controller port, the capability-driven seek +strategy, and ExoPlayer conformance on a device. What is left is DR-248 (the +webview as an engine) and DR-249 (deleting `PlayerBackend` and the frontend +playback-state flags). **Requirements:** UR-081 (new) → DR-242 … DR-249 (new); IR-034. Re-check `requirements.md` before allocating — ids moved several times while this was written. @@ -226,6 +231,15 @@ Strangler, not a rewrite. Each step ships independently and leaves the app worki behind an adapter so the other engines keep working. 5. **DR-246** Move seek strategy and reload orchestration out of `commands/player/mod.rs` into the engines; delete `seek.rs`'s truth table. + + **Shipped with a deviation.** The engine cannot own this outright: + re-negotiating a stream needs the repository, which sits *above* the engine. + So the engine *declares* `seeks_transcoded_in_place` and the caller acts on + it. That removes the defect — nobody guesses on another component's behalf, + and adding an engine no longer means editing a shared table — without + pretending an engine can reach upward. `determine_video_seek_strategy` + survives as a correctly-typed decision over declared abilities rather than + being deleted; the defect was its *input*, not its existence. 6. **DR-247** `ExoPlayerPlayer`; conformance on device. 7. **DR-248** `WebviewPlayer`; retire the adapter shim. 8. **DR-249** Delete `PlayerBackend` and the frontend playback-state flags.