From f15fce83ff9b1e57b25d1e3ca70eba761892dd0b Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 4 Nov 2026 22:33:40 -0800 Subject: [PATCH 1/6] chore(quest): claim quest/m0/test-flakes-2/reload-close-drain.md Quest-Claim: 1ab09187349042a2 From 71ee6646034f9620fd7721cfe4a2e85a93d33485 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 4 Nov 2026 22:43:35 -0800 Subject: [PATCH 2/6] docs: record reload drain reproduction attempts Co-Authored-By: GPT-6.1 Sol --- quest/m0/test-flakes-2/reload-close-drain.md | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/quest/m0/test-flakes-2/reload-close-drain.md b/quest/m0/test-flakes-2/reload-close-drain.md index 5c9ba445584..9f1ab625b4d 100644 --- a/quest/m0/test-flakes-2/reload-close-drain.md +++ b/quest/m0/test-flakes-2/reload-close-drain.md @@ -28,3 +28,28 @@ reproduce in a reasonable number of runs, report that and the runs tried rather than changing the test blind. Public API: none. Wire: none. + +### Reproduction attempts + +2026-11-04: no reproduction on the unchanged claim based on `origin/main`. + +- `quest gate bun test --cwd js/net --rerun-each 20 --only-failures` + ran all 20 reload-file rounds without a drain-case failure. The package + batch also exposes unrelated rerun failures in the benchmark import test + and connection fallback tests; it is not a clean package validation. +- A four-file batch (`connection/reload`, `connection/pool`, `connection/close`, + and `lite/connection`) filtered to `closing the loop|teardown by|a URL change` + with `--rerun-each 5` passed 40 tests, zero failures. A scratch preload + stubbed `performance.now()` to advance 5 ms on each budget clock read, + forcing the shared stream budgets to yield at each clock check. +- The earlier lite fixture fix suggests checking setup-group completion, + but neither run supports changing this fixture yet. No test or production + code changed, per the reproduce-first requirement. + +## Waiting + +- moq-dev/moq: retain failure output or a reproducer for a reload drain case. + The original one-off failure had no saved output, and the repeated runs + above did not reproduce it. Recommended: keep this quest and capture the + next failure before choosing a fix; alternatively abandon it if the + failure no longer warrants investigation. From c9c1fcdee8f743b114db6de4b14e0bf6c625e683 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 4 Nov 2026 22:45:49 -0800 Subject: [PATCH 3/6] docs: include completed reproduction totals Co-Authored-By: GPT-6.1 Sol --- quest/m0/test-flakes-2/reload-close-drain.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/quest/m0/test-flakes-2/reload-close-drain.md b/quest/m0/test-flakes-2/reload-close-drain.md index 9f1ab625b4d..eec14754205 100644 --- a/quest/m0/test-flakes-2/reload-close-drain.md +++ b/quest/m0/test-flakes-2/reload-close-drain.md @@ -34,7 +34,8 @@ Public API: none. Wire: none. 2026-11-04: no reproduction on the unchanged claim based on `origin/main`. - `quest gate bun test --cwd js/net --rerun-each 20 --only-failures` - ran all 20 reload-file rounds without a drain-case failure. The package + finished with 58,645 passes, 40 skips, and 95 failures across 121 files + (476.88 seconds). All 20 reload-file rounds passed. The package batch also exposes unrelated rerun failures in the benchmark import test and connection fallback tests; it is not a clean package validation. - A four-file batch (`connection/reload`, `connection/pool`, `connection/close`, From 4861cfe4bc3974a2da4705a39758fbbe3ba08573 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 08:50:54 -0800 Subject: [PATCH 4/6] docs: retain reload close-drain investigation pending failure logs Co-Authored-By: GPT-6.1 Sol --- quest/m0/test-flakes-2/reload-close-drain.md | 25 +++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/quest/m0/test-flakes-2/reload-close-drain.md b/quest/m0/test-flakes-2/reload-close-drain.md index eec14754205..698152f9150 100644 --- a/quest/m0/test-flakes-2/reload-close-drain.md +++ b/quest/m0/test-flakes-2/reload-close-drain.md @@ -27,11 +27,23 @@ CPU contention and `--rerun-each`, as the epic's earlier JS fixes did reproduce in a reasonable number of runs, report that and the runs tried rather than changing the test blind. +Decided 2026-11-05 (maintainer, /quest-plan): keep this quest and investigate +the next captured failure with logs. Abandoning it was rejected: the agent on +[moq-dev/moq#7764](https://github.com/moq-dev/moq/pull/7764) saw +`closing the loop keeps the tokens until the session drains` fail once in a +full-suite run on 2026-11-05. It reported `expect(fin.closed).toBe(false)` +failing after a 999 ms clock advance, then three passing isolated runs. +This sighting shows the flake still occurs despite the passing reruns below; +it does not establish the cause. Keep this wait in the quest so the +evidence-only [moq-dev/moq#7933](https://github.com/moq-dev/moq/pull/7933) +can land without a speculative test or production change. + Public API: none. Wire: none. ### Reproduction attempts -2026-11-04: no reproduction on the unchanged claim based on `origin/main`. +2026-11-04, recorded in [moq-dev/moq#7933](https://github.com/moq-dev/moq/pull/7933): +no reproduction on the unchanged claim based on `origin/main`. - `quest gate bun test --cwd js/net --rerun-each 20 --only-failures` finished with 58,645 passes, 40 skips, and 95 failures across 121 files @@ -49,8 +61,9 @@ Public API: none. Wire: none. ## Waiting -- moq-dev/moq: retain failure output or a reproducer for a reload drain case. - The original one-off failure had no saved output, and the repeated runs - above did not reproduce it. Recommended: keep this quest and capture the - next failure before choosing a fix; alternatively abandon it if the - failure no longer warrants investigation. +- moq-dev/moq: capture the next reload drain failure with logs before choosing + a fix. Check full-suite and merge-queue failure reports for the test names + above; retain the full command, commit, assertion/stack output, and surrounding + session logs in the report. Once captured, link that report here, remove this + waiting item, and reproduce the failure under multi-file load to investigate + its cause. Passing isolated reruns alone do not clear this condition. From 2d3d613897ac0f134e5c185f9bedbd82f724e98b Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 09:02:41 -0800 Subject: [PATCH 5/6] docs: clarify reload fixture hypothesis and capture requirements Co-Authored-By: GPT-6.1 Sol --- quest/m0/test-flakes-2/reload-close-drain.md | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/quest/m0/test-flakes-2/reload-close-drain.md b/quest/m0/test-flakes-2/reload-close-drain.md index 698152f9150..5ec94036d28 100644 --- a/quest/m0/test-flakes-2/reload-close-drain.md +++ b/quest/m0/test-flakes-2/reload-close-drain.md @@ -38,6 +38,13 @@ it does not establish the cause. Keep this wait in the quest so the evidence-only [moq-dev/moq#7933](https://github.com/moq-dev/moq/pull/7933) can land without a speculative test or production change. +On the next captured failure, check the dial count and which client closed +first. The fixture overwrites shared `fin.hold` on every dial and lets any +client's close set shared `fin.closed`, but reads the track from `dials[0]`. +An extra dial could therefore hold FINs on another client or report another +client's close. This is an unverified hypothesis, not an established cause; +check it alongside setup-group completion before choosing a fix. + Public API: none. Wire: none. ### Reproduction attempts @@ -54,7 +61,10 @@ no reproduction on the unchanged claim based on `origin/main`. and `lite/connection`) filtered to `closing the loop|teardown by|a URL change` with `--rerun-each 5` passed 40 tests, zero failures. A scratch preload stubbed `performance.now()` to advance 5 ms on each budget clock read, - forcing the shared stream budgets to yield at each clock check. + forcing the shared stream budgets to yield at each clock check. This + stresses budget scheduling only: it neither advances the test's manual + clock nor forces an extra dial or another client's early close, so it + does not rule out those paths. - The earlier lite fixture fix suggests checking setup-group completion, but neither run supports changing this fixture yet. No test or production code changed, per the reproduce-first requirement. @@ -63,7 +73,10 @@ no reproduction on the unchanged claim based on `origin/main`. - moq-dev/moq: capture the next reload drain failure with logs before choosing a fix. Check full-suite and merge-queue failure reports for the test names - above; retain the full command, commit, assertion/stack output, and surrounding - session logs in the report. Once captured, link that report here, remove this - waiting item, and reproduce the failure under multi-file load to investigate - its cause. Passing isolated reruns alone do not clear this condition. + above; retain the full command, commit, and assertion/stack output in the + report, plus any available session logs. The fixture currently emits no + dial/close diagnostics; those logs are not required to resume investigation. + Once captured, link that report here, remove this waiting item, and reproduce + the failure under multi-file load, capturing dial count and per-client close + state to test the hypothesis above. Passing isolated reruns alone do not + clear this condition. From 386f2974e37663fe4f8bafe5b063558d08cae23f Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 10:06:19 -0800 Subject: [PATCH 6/6] quest: record #7764's skip and scope the dial hypothesis to closing the loop Co-Authored-By: Claude Opus 5.5 --- quest/m0/test-flakes-2/reload-close-drain.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/quest/m0/test-flakes-2/reload-close-drain.md b/quest/m0/test-flakes-2/reload-close-drain.md index 5ec94036d28..2c31824b64e 100644 --- a/quest/m0/test-flakes-2/reload-close-drain.md +++ b/quest/m0/test-flakes-2/reload-close-drain.md @@ -38,11 +38,22 @@ it does not establish the cause. Keep this wait in the quest so the evidence-only [moq-dev/moq#7933](https://github.com/moq-dev/moq/pull/7933) can land without a speculative test or production change. +[moq-dev/moq#7764](https://github.com/moq-dev/moq/pull/7764) also disables +the test (`test.skip`, "load-sensitive fin.closed assertion; investigate drain +scheduling before restoring") under the repo's disable-a-flaky-test policy, and +says no follow-up quest was created; this quest is that follow-up. Once that +skip lands, restoring the test is part of this quest: a skipped test cannot +meet the Goal or Done condition, and failures can only be captured by +re-enabling it (for example, with per-dial diagnostics) in a multi-file run. + On the next captured failure, check the dial count and which client closed -first. The fixture overwrites shared `fin.hold` on every dial and lets any +first. In `closing the loop keeps the tokens until the session drains`, the +fixture overwrites shared `fin.hold` on every dial and lets any client's close set shared `fin.closed`, but reads the track from `dials[0]`. An extra dial could therefore hold FINs on another client or report another -client's close. This is an unverified hypothesis, not an established cause; +client's close. The `teardown by …` fixture does not share this hazard: it +sets `fin.hold` and `fin.closed` only on the first dial +(`if (dials.length === 0)`). This is an unverified hypothesis, not an established cause; check it alongside setup-group completion before choosing a fix. Public API: none. Wire: none. @@ -72,7 +83,8 @@ no reproduction on the unchanged claim based on `origin/main`. ## Waiting - moq-dev/moq: capture the next reload drain failure with logs before choosing - a fix. Check full-suite and merge-queue failure reports for the test names + a fix. If #7764's skip has landed, no full-suite failure can occur; restore + the test with per-dial diagnostics and reproduce under multi-file load instead. Check full-suite and merge-queue failure reports for the test names above; retain the full command, commit, and assertion/stack output in the report, plus any available session logs. The fixture currently emits no dial/close diagnostics; those logs are not required to resume investigation.