From acaae3d0a4bce05791e7612b5203e0330d8cd55b Mon Sep 17 00:00:00 2001 From: Matthew Jackson <1085847+MattJackson@users.noreply.github.com> Date: Tue, 30 Jun 2026 16:13:05 -0700 Subject: [PATCH] =?UTF-8?q?docs:=201.2.0=20changelog=20=E2=80=94=20PassPro?= =?UTF-8?q?gress=20mapfile-free=20contract=20+=20located=20drilldown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69c2074..b791761 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [1.2.0] — 2026-06-29 +## [1.2.0] — 2026-06-30 ### Breaking @@ -19,6 +19,12 @@ adjust: `new(inputs, version)`). - **`disc::read_aacs_inputs` / `read_aacs_inputs_from_drive` return a 3-tuple** `(inf, mkb, version)` instead of `(inf, mkb)`. +- **`PassProgress` is no longer `Copy` and gains a `located: LocatedProgress` + field.** It now carries a `Vec` (the rendered bad-range drilldown), so it's + `Clone` only — still built once per throttled emission and passed by reference + to `Progress::report`. Struct-literal constructors must add the field (empty: + `located: Default::default()`). New public types `LocatedRange` / + `LocatedProgress`. These are source-breaking for external crates.io consumers. Shipped under a minor bump (1.2.0): libfreemkv's surface is not yet frozen and the only known @@ -26,6 +32,17 @@ consumers are the in-tree toolchain crates. ### Added +- **`PassProgress` is the complete, mapfile-free progress contract.** Every + emission now carries the fully-rendered "where is the damage" drilldown + (`located`): the bad ranges annotated with chapter + movie-time offset, the + main-feature at-risk time, the section count and the largest gap — computed by + the library from its in-memory mapfile + title. A client (autorip, a future + GUI/CLI) renders the disc map + at-risk time straight from it and never parses + the mapfile, so a mapfile→mapdb change is invisible to clients. Adds + `disc::locate_ranges`, the one-shot `disc::progress_snapshot_from_mapfile` + (builds a snapshot from a mapfile on disk so a boundary/verdict paint stays + mapfile-free client-side), and `consts::MILLIS_PER_SEC`. + - **Mux loss concealment — a logged gap still produces a decode-clean file.** When a unit genuinely cannot be decrypted on the mux read path (a key the disc never yielded, after the rip's own decrypt-verify already failed loud and