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.