From fbf29fa40a480380541640dd77b632a4864c3a34 Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Sun, 9 Aug 2026 23:44:53 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A3=BC=EA=B8=B0=20SSE=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=ED=95=98=EB=84=A4=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/e2e/periodic-learner-real-closed-loop.spec.ts | 9 ++++++++- scripts/run-periodic-learner-e2e.py | 3 +++ scripts/test_run_periodic_learner_e2e.py | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/web/e2e/periodic-learner-real-closed-loop.spec.ts b/apps/web/e2e/periodic-learner-real-closed-loop.spec.ts index 4a2b93f..9b640eb 100644 --- a/apps/web/e2e/periodic-learner-real-closed-loop.spec.ts +++ b/apps/web/e2e/periodic-learner-real-closed-loop.spec.ts @@ -95,7 +95,14 @@ function loadFixture(): ReturnedPracticeFixture { } async function expectOk(response: APIResponse) { - expect(response.ok(), await response.text()).toBeTruthy(); + if (response.ok()) return; + let detail = `HTTP ${response.status()}`; + try { + detail = await response.text(); + } catch { + // Streaming responses may not expose a replayable body through CDP. + } + expect(response.ok(), detail).toBeTruthy(); } async function signInExistingFixture( diff --git a/scripts/run-periodic-learner-e2e.py b/scripts/run-periodic-learner-e2e.py index 27efd9c..381026d 100644 --- a/scripts/run-periodic-learner-e2e.py +++ b/scripts/run-periodic-learner-e2e.py @@ -44,6 +44,7 @@ FIXTURE_SCRIPT = ( PERIODIC_SPEC = "e2e/periodic-learner-real-closed-loop.spec.ts" RETURNED_SPEC = "e2e/returned-practice-db-closed-loop.spec.ts" SCHEMA_VERSION = "vignette.periodic-learner-e2e-receipt.v1" +PLAYWRIGHT_RETRIES = 0 FORBIDDEN_PORTS = frozenset({8001, 55432, 9099}) FORBIDDEN_MARKERS = ( "vignette.chanpaca.net", @@ -1243,6 +1244,7 @@ class PeriodicRunner: PERIODIC_SPEC, "--project=chromium-single-run", "--workers=1", + f"--retries={PLAYWRIGHT_RETRIES}", "--reporter=line", ], cwd=web_dir, @@ -1265,6 +1267,7 @@ class PeriodicRunner: "--project=chromium-desktop", "--project=chromium-mobile", "--workers=1", + f"--retries={PLAYWRIGHT_RETRIES}", "--reporter=line", ], cwd=web_dir, diff --git a/scripts/test_run_periodic_learner_e2e.py b/scripts/test_run_periodic_learner_e2e.py index ddc2eff..f5e705e 100644 --- a/scripts/test_run_periodic_learner_e2e.py +++ b/scripts/test_run_periodic_learner_e2e.py @@ -26,6 +26,11 @@ def load_module() -> ModuleType: runner = load_module() +class PeriodicRunnerStaticContractTests(unittest.TestCase): + def test_browser_failures_are_not_retried_automatically(self) -> None: + self.assertEqual(runner.PLAYWRIGHT_RETRIES, 0) + + class FakeController: def __init__(self, *, tracked_status: str = "") -> None: self.tracked_status = tracked_status