diff --git a/docs/port/BLOCKED.md b/docs/port/BLOCKED.md index a3e76941..c2809ef1 100644 --- a/docs/port/BLOCKED.md +++ b/docs/port/BLOCKED.md @@ -151,7 +151,7 @@ HANDOFF. | Milestone | Needs | HANDOFF | State | |---|---|---|---| -| P4/P7 β€” transcode fidelity | ~~nothing from anybody~~ **the WAVEFORM half is still open** | `0159527` | 🟑 **PARTLY ANSWERED, by changing the kind of quantity.** Band energies need no alignment, and both transcodes match their sources to **0.66 dB worst-case across four bands** while an unrelated movie lands at **19–20 dB** β€” two populations an order of magnitude apart, so the 1.5 dB tolerance sits between measured values. Asserting in `check-all`, with the known negative on every run. ⚠️ **This is weaker than P4 wanted**: band agreement cannot distinguish a faithful transcode from one that kept the spectrum and mangled the waveform. The difference-signal half stays report-only and asserts nothing β€” and the band result now **proves** its failure is my alignment, since matching spectra mean same content at same level. Earlier text: πŸ”΄ **THE GATE HAS NEVER CARRIED A FIDELITY CLAIM, and now it says so.** `AUDIO-VERIFICATION.md` Β§1 calls this the question P4 actually raised; nothing implemented it, and `verify-video-audio` explicitly declines it. `tools/port/verify-transcode-fidelity` exists and is **report-only**: best alignment is corr 0.763 on `S00A` and 0.075 on `ADV`, and both still report the difference *louder* than the source, which is impossible for two aligned signals at equal level β€” so the fault is on my side of the instrument, not necessarily in the transcodes. Four traps reproduced on the way, three of which Β§1 names and one (**`-ss` before `-i` returning 4.6 s for a 4.0 s request**) it does not. ⚠️ A tool printing "not faithful" in this state would put a **false defect on the exporter**. | +| P4/P7 β€” transcode fidelity | ~~nothing from anybody~~ **the WAVEFORM half is open WITH A DISQUALIFIED INSTRUMENT** | `0159527` | 🟑 **PARTLY ANSWERED β€” and the other half got worse, 2026-08-31.** The difference path is **disqualified, not inconclusive**: identity (source vs a second decode of itself) subtracts to **βˆ’inf** so the pipeline is exact, but a **lossless flac of the identical fold reaches only 14.2 dB down** searched exhaustively at stride 1, where it must reach ~90. An instrument that cannot verify an encode known to preserve every sample says nothing about a lossy one, so every difference number in this thread was an artefact of the lag search. Ruled out and recorded so nobody re-runs them: **drift** (offset stable at β‰ˆβˆ’2465 across t=2/10/20 s), **container start time** (`start_time` is 0), **the codec being perceptual** (the lossless control fails identically), **level or content** (bands agree to 0.66 dB). Acceptance test now in the code: **lossless-vs-source β‰₯ 60 dB down before believing this path**. Earlier text: 🟑 **PARTLY ANSWERED, by changing the kind of quantity.** Band energies need no alignment, and both transcodes match their sources to **0.66 dB worst-case across four bands** while an unrelated movie lands at **19–20 dB** β€” two populations an order of magnitude apart, so the 1.5 dB tolerance sits between measured values. Asserting in `check-all`, with the known negative on every run. ⚠️ **This is weaker than P4 wanted**: band agreement cannot distinguish a faithful transcode from one that kept the spectrum and mangled the waveform. The difference-signal half stays report-only and asserts nothing β€” and the band result now **proves** its failure is my alignment, since matching spectra mean same content at same level. Earlier text: πŸ”΄ **THE GATE HAS NEVER CARRIED A FIDELITY CLAIM, and now it says so.** `AUDIO-VERIFICATION.md` Β§1 calls this the question P4 actually raised; nothing implemented it, and `verify-video-audio` explicitly declines it. `tools/port/verify-transcode-fidelity` exists and is **report-only**: best alignment is corr 0.763 on `S00A` and 0.075 on `ADV`, and both still report the difference *louder* than the source, which is impossible for two aligned signals at equal level β€” so the fault is on my side of the instrument, not necessarily in the transcodes. Four traps reproduced on the way, three of which Β§1 names and one (**`-ss` before `-i` returning 4.6 s for a 4.0 s request**) it does not. ⚠️ A tool printing "not faithful" in this state would put a **false defect on the exporter**. | | P4/P7 β€” a `Β§1` addition for the HUMAN | **add the imprecise-seek trap to `AUDIO-VERIFICATION.md` Β§1?** | `0159527` | 🟑 **proposed, not done β€” and NARROWED 2026-08-30 before it was written up.** The Decoder reproduced it independently (4.597 s on `ADV`, 4.256 s on `S00A` for a 4.0 s request, correlations βˆ’0.03 and βˆ’0.34 at zero shift: different content, not a shift) and established that the **VIDEO** container-seek on this disc is **exact** β€” byte-identical frames at 20 s. So the trap belongs to the **audio stream**, not to `-ss` placement, and the phrasing matters in the direction that bites: a check looking only at video would clear a path still unsafe for audio. Original: 🟑 **proposed, not done.** Β§1 lists three ways the measurement lies; a fourth is now reproduced β€” a container-level seek returns a different span than requested, so the two windows cover different audio and no shift can align them (best corr 0.172). It is **indistinguishable from the alignment trap Β§1 already names**. Β§1 is the human's document, so this is a proposal rather than an edit. | ## Not blocking, recorded so nobody re-investigates β€” 2026-08-30, HANDOFF `91ada14` diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 9b40f2fa..455c3bc9 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -260 sections. Search this before re-deriving anything. +261 sections. Search this before re-deriving anything. * [P0 β€” the exporter, 2026-08-28](#p0--the-exporter-2026-08-28) * [P1 β€” Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28) @@ -271,6 +271,7 @@ dies, which is what this file is for. * [Changing the KIND of quantity answered it on the first attempt](#changing-the-kind-of-quantity-answered-it-on-the-first-attempt) * [πŸ”΄ My seek trap was over-general β€” the Decoder narrowed it](#my-seek-trap-was-over-general--the-decoder-narrowed-it) * [A capital letter hid a refuted claim in the file whose job is to say what is open](#a-capital-letter-hid-a-refuted-claim-in-the-file-whose-job-is-to-say-what-is-open) +* [The difference path cannot verify a lossless encode β€” so nothing it says counts](#the-difference-path-cannot-verify-a-lossless-encode--so-nothing-it-says-counts) ## P0 β€” the exporter, 2026-08-28 @@ -13397,3 +13398,45 @@ negative about the METHOD written as a negative about the SUBJECT.** *"`Static.s resists static scanning"* became *"SE audio is not extractable"* β€” and the wrong one was the heading. Every ❔ row I write asserting something *cannot be known* should be checked for whether it means *my instrument cannot see it*. + +## The difference path cannot verify a lossless encode β€” so nothing it says counts + +Three measurements, each cheap, and together they locate the fault exactly: + +| test | result | what it proves | +|---|---|---| +| **identity** β€” source vs a second decode of itself, lag 0 | **βˆ’inf dB difference** | decode-and-subtract is **exact**; the pipeline is not the problem | +| **lossless** β€” flac of the *identical* fold, exhaustive stride-1 search over 300 lags | **14.2 dB down** at lag βˆ’2596 | it **cannot verify an encode known to preserve every sample** | +| the shipped `S00A.ogv` | 8.73 dB down | meaningless, given the row above | + +πŸ“Œ **A lossless encode must return β‰ˆ90 dB down. It returns 14.2.** So the whole +difference path is disqualified β€” not "inconclusive", *disqualified* β€” and every +number it has produced in this thread, including the ones I reported as +"difference louder than source", was an artefact of the lag search rather than +evidence about a transcode. + +βœ… **The identity test is what made this diagnosable**, and it costs one decode and +no encoder. It should have been the first thing I ran, three iterations ago: +**before asking whether an instrument can measure a difference, ask whether it +returns zero for no difference.** + +### Hypotheses ruled out along the way, so nobody re-runs them + +* **Drift** β€” the offset is stable at β‰ˆβˆ’2465 samples across t=2, 10 and 20 s. + Not a clock mismatch. +* **The container start time** β€” `start_time` is exactly 0 on `S00A.wmv`, so the + ~51 ms offset is not a container timeline shift. +* **The codec being perceptual** β€” I suspected Vorbis q5 simply cannot reach Β§1's + 40 dB. Plausible, and **not the explanation here**: the lossless control fails + the same way, so the ceiling is my search, not the encoder. +* **Level or content mismatch** β€” already excluded by the band check (0.66 dB + across four bands). + +⚠️ **The tool now refuses on this path**, and carries the acceptance test in the +code rather than leaving it to be rediscovered: **make lossless-vs-source return +β‰₯ 60 dB down before believing anything the difference path says.** The band check +is unaffected and still asserts. + +πŸ“Œ What this changes about the milestone: **P4's waveform question is not merely +open, it is open with a disqualified instrument.** That is worse than it looked +yesterday and better than believing 8.73 dB meant something.