diff --git a/docs/requirements.md b/docs/requirements.md index 7cca3b7..f8c1663 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -240,6 +240,22 @@ end-to-end mechanism. | JR-045 | Emit and honour the signature's own `v1:` prefix, so a DSP change is detectable rather than silently non-matching | SR-003 | Low | **Done** (UT-047…049) — `AudioSignatureMatcher.TryParseFrames` refuses any prefix but `v1:`, and refuses malformed or structurally invalid payloads, so a future producer's `v2:` drops the item to the runtime tier instead of scoring as if it were understood | | JR-047 | **A fetched manifest is aligned against the local file before its windows are stored**, and the alignment is recorded beside the truth data | SR-003 | High | **Done** (UT-053…057) — `ManifestAligner` runs on the fetch path. A local alignment supersedes the server's offset, since the server has never seen this file; every unavailable path degrades to the server's offset rather than refusing, and a genuine signature disagreement is recorded and surfaced as a caveat without failing the fetch | +> **Outstanding: §3's score gained ±1 frame of tolerance and this matcher has +> not.** `AudioSignatureMatcher` implements the exact-frame rule §3 carried +> until `JRay-public-server` UR-009 landed. The change was +> `scene-actor-extraction` VR-014's measurement: over 40 correctly recovered +> offsets on real film audio the exact rule scored 27 of them below 0.85 and +> demoted them to `loose`, because the two windows are cut on their own file's +> frame grid and those grids do not coincide. With ±1 frame all 40 reach +> `audio` and the strongest false match is unmoved at 0.16. +> +> **Nothing is misaligned by the divergence** — the offset the matcher recovers +> is unaffected, and JR-047 makes the local answer supersede the server's — but +> the plugin will label as `loose` alignments the server calls `audio`, which is +> a caveat shown to a user for a match that is not in doubt. JR-044's matcher +> and [`audio-alignment.md`](audio-alignment.md)'s scoring table both need the +> revised rule. Until then this repo implements a superseded version of §3. + ## Human-in-the-loop association (JR-046) | ID | Requirement | Traces to | Priority | Status |