From 6ccac481769c1b96713636e4a04914d629103cf3 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 13 Oct 2026 11:46:35 -0700 Subject: [PATCH 1/3] quest(m0): claim ts-duration-fidelity Co-Authored-By: Claude Opus 5.5 From dfa395eba3151ac4aa577d76453910c1056fa4c0 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 13 Oct 2026 11:55:40 -0700 Subject: [PATCH 2/3] quest(m0): complete ts-duration-fidelity, fixed by #5292 The short captures were a publisher ingest running ~20% slower than real time on CI (64-byte blocking stdin reads), which the fixed-delay export (#4645) drops as late. #5292 fixed the reads; duration-fidelity has passed on every Interop run since. Correct the duration-fidelity docstring for the lead the catalog hold (#5287) now costs. Co-Authored-By: Claude Opus 5.5 --- quest/m0/README.md | 5 ++--- quest/m0/ts-duration-fidelity.md | 29 --------------------------- quest/m1/ts-reliability/validation.md | 1 - quest/m1/ts-same-instance-resume.md | 3 +-- test/ts/compliance.py | 8 +++++--- 5 files changed, 8 insertions(+), 38 deletions(-) delete mode 100644 quest/m0/ts-duration-fidelity.md diff --git a/quest/m0/README.md b/quest/m0/README.md index f287d691579..d8660254d05 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -59,8 +59,8 @@ Interop on main (2026-10-13): the cross-client matrix fails with `unroutable` whenever WebSocket wins the connect race: since #5294, #4180's upgrade retires epochless handles before its held `Restart` reaches anyone. The released wire-compat step aborts on planned breaks the last release made -stale. Both stay in m0 (maintainer, 2026-10-13) and rank with TS duration -fidelity: a red Interop hides real regressions. +stale. Both stay in m0 (maintainer, 2026-10-13): a red Interop hides real +regressions. Crashes (2026-10-13, #5407): a publisher on a host whose wall clock reads before 2020 panics, and `panic = "abort"` turns any library panic into a @@ -78,7 +78,6 @@ have fixes on `main`: macOS tests (#5335), drill-sensitivity (#5338), loom ## Required - [Draft-22 media on 0.17](/quest/m0/release-22/README.md) - a 0.17.x with the LOCATION_FILTER and FIRST_OBJECT fixes and moq-noq 1.3.5, then draft-20+ FETCH -- [TS duration fidelity](/quest/m0/ts-duration-fidelity.md) - Interop's TS compliance captures the whole round-tripped stream again, fixing a regression that turns Interop red on main - [Upgrade restarts epochless broadcasts](/quest/m0/upgrade-unroutable.md) - a WebSocket-to-QUIC upgrade retires epochless handles only once their `Restart` is delivered, and first-party consumers follow it, fixing Interop's `unroutable` rounds - [Unset host clock](/quest/m0/wall-clock-omit.md) - a publisher whose wall clock reads before 2020 publishes without a catalog clock instead of panicking - [Panic isolation](/quest/m0/panic-isolation.md) - unwind, ignore lock poison, and supervise every task, so a panic closes only its connection or exits on a long-lived task diff --git a/quest/m0/ts-duration-fidelity.md b/quest/m0/ts-duration-fidelity.md deleted file mode 100644 index c4288eec9c3..00000000000 --- a/quest/m0/ts-duration-fidelity.md +++ /dev/null @@ -1,29 +0,0 @@ -# [S] TS compliance duration-fidelity captures the whole source - -## Goal - -Interop's TS-compliance `duration-fidelity` check (`test/ts/run.sh`) captures -the whole round-tripped stream, not a fraction of it, fixed at its cause. - -## Plan - -Moved to m0 on 2026-10-10: it now fails on every Interop run, main -included (`c0c0bb33`, 3.2 s of 20.1 s, and each head of #5099), so it reads -as a regression, not a flake. A red Interop on main hides real regressions -in every PR. Start by finding the last green Interop run on main and the -first red one, and bisect between them. #5217's isolated local run captured -the whole source (20.47 s of 20.06 s), so look at what differs on the CI -runner. - -First seen 2026-10-10 on #5158's second Interop run: the export captured 3.3 s of a -20.1 s source, and the check failed; it also failed once on #5140 and passed -on rerun. Find whether the export ends early (an announce `End`, linger, or -a catalog finish arriving before the media), starts late, or the capture is -cut off by the harness. Fix that at its source, with a regression that fails -without it. No longer timeout and no lower duration threshold. - -#5147 (export ts follows announcements, merged 2026-10-10) changed how an -export ends, so check it first. Never raise a timeout or add a retry (the -test-flakes-2 rules still apply). - -Public API: none expected. Wire: none expected. diff --git a/quest/m1/ts-reliability/validation.md b/quest/m1/ts-reliability/validation.md index df4d35633ce..eaa1cd96b1d 100644 --- a/quest/m1/ts-reliability/validation.md +++ b/quest/m1/ts-reliability/validation.md @@ -65,7 +65,6 @@ controls have CI invocations too. ## Related -- [TS duration fidelity](/quest/m0/ts-duration-fidelity.md) - fixes the base capture regression without weakening the duration assertion - [T-STD controls](/quest/m2/tstd-controls.md) - MB and AAC positive/negative coverage - [PSI system buffer](/quest/m1/tstd/psi-runs.md) - system-buffer proof belongs with the PSI fix - [Open-GOP leading pictures](/quest/m1/open-gop-leading-pictures.md) - acquisition trims change the decoder oracle diff --git a/quest/m1/ts-same-instance-resume.md b/quest/m1/ts-same-instance-resume.md index eb454055c42..ba53559a6df 100644 --- a/quest/m1/ts-same-instance-resume.md +++ b/quest/m1/ts-same-instance-resume.md @@ -61,5 +61,4 @@ required behavior or API change returns to the maintainer for a decision. - [Live clock validation](/quest/m1/ts-live-clock.md) - independent local live failure - [Replacement catalog linger #5305](https://github.com/moq-dev/moq/pull/5305) - owns the bound on a mid-stream switch's first catalog - [Same-epoch importers](/quest/m1/hop-aligned-import.md) - shared catalogs, tracks and source-derived group identity -- [Closed fallback #5284](https://github.com/moq-dev/moq/pull/5284) - early WebSocket closure and its transport-test fix -- [TS duration fidelity](/quest/m0/ts-duration-fidelity.md) - diagnose a shared end-of-stream cause only if reproduced +- [Closed fallback #5284](https://github.com/moq-dev/moq/pull/5284) - early WebSocket closure and its transport-test fix \ No newline at end of file diff --git a/test/ts/compliance.py b/test/ts/compliance.py index 0f37a6248fc..1a5651c94bd 100755 --- a/test/ts/compliance.py +++ b/test/ts/compliance.py @@ -1242,9 +1242,11 @@ def check_duration_fidelity(captured_s: float, reference_s: float) -> Check: Every timing check above reads the stream's own PCR, so a PCR emitted on the wrong clock rate stays internally consistent and passes them all. Comparing the exported PCR span against the source's independent duration is the one - check that pins the absolute rate. Keyframe alignment drops up to a GOP of - lead, so the captured span runs a shade short, never materially long; the - band is wide enough to ignore that yet catch a gross scale error. + check that pins the absolute rate. The exporter joins at the live edge once + the catalog appears, and import holds the catalog for its two-second mux-rate + window, so the captured span runs up to that window plus a GOP short, never + materially long; the band is wide enough to ignore that yet catch a gross + scale error. """ metrics = {"captured_s": round(captured_s, 2), "reference_s": round(reference_s, 2)} if reference_s <= 0: From b24c3adb68ec814d1b798ac5b9f1b10368fb5d5e Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 13 Oct 2026 11:59:22 -0700 Subject: [PATCH 3/3] quest: restore trailing newline in ts-same-instance-resume Co-Authored-By: Claude Opus 5.5 --- quest/m1/ts-same-instance-resume.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quest/m1/ts-same-instance-resume.md b/quest/m1/ts-same-instance-resume.md index ba53559a6df..fdade49da6a 100644 --- a/quest/m1/ts-same-instance-resume.md +++ b/quest/m1/ts-same-instance-resume.md @@ -61,4 +61,4 @@ required behavior or API change returns to the maintainer for a decision. - [Live clock validation](/quest/m1/ts-live-clock.md) - independent local live failure - [Replacement catalog linger #5305](https://github.com/moq-dev/moq/pull/5305) - owns the bound on a mid-stream switch's first catalog - [Same-epoch importers](/quest/m1/hop-aligned-import.md) - shared catalogs, tracks and source-derived group identity -- [Closed fallback #5284](https://github.com/moq-dev/moq/pull/5284) - early WebSocket closure and its transport-test fix \ No newline at end of file +- [Closed fallback #5284](https://github.com/moq-dev/moq/pull/5284) - early WebSocket closure and its transport-test fix