From 326e09bc21472de2c43cb3ac544967c180cdd2cf Mon Sep 17 00:00:00 2001 From: leaf-agent <318509791+leaf-agent@users.noreply.github.com> Date: Sat, 29 Aug 2026 21:50:04 +0000 Subject: [PATCH 1/2] Give the broken-export probe test the gate's own patience --- tests/test_render_gate.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/test_render_gate.py b/tests/test_render_gate.py index 743691ed2..c5d90708c 100644 --- a/tests/test_render_gate.py +++ b/tests/test_render_gate.py @@ -97,7 +97,19 @@ def wait_for_event(self, *_args, **_kwargs): def test_a_broken_probe_module_is_a_gate_finding(browser, serve): - """A missing public export names the browser boundary instead of raising a traceback.""" + """A missing public export names the browser boundary instead of raising a traceback. + + The gate's own patience, because the deadline is the other test's subject and this + one races it. Two findings can carry the "browser probe module failed" prefix: the + module's rejection, which names the export, and `_load_probes`'s own timeout, which + names only the route and the bound. Capped at 500ms this test asked a loaded runner + to reject a module faster than its own clock, and the runner lost on + [33272123196](https://github.com/max-sixty/leaf/actions/runs/33272123196) and + [33273079113](https://github.com/max-sixty/leaf/actions/runs/33273079113) — where + the prefix assertion below passed and the export assertion failed, which is the one + shape a beaten deadline can produce. Uncapped, only the arrangement can answer, and + a module that never rejects at all still fails rather than passing as this one. + """ def break_probe(page): page.route( @@ -110,7 +122,7 @@ def break_probe(page): ) failures = render_gate_model.render_version( - primed(browser, break_probe), serve(LONG_PAGE), served_timeout_ms=500 + primed(browser, break_probe), serve(LONG_PAGE) ) assert failures From e67fd9faa9a7bf3a6a03ebdb6d3425a295be5924 Mon Sep 17 00:00:00 2001 From: Maximilian Roos Date: Sat, 29 Aug 2026 14:55:38 -0700 Subject: [PATCH 2/2] Keep the probe timeout rationale current --- tests/test_render_gate.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/tests/test_render_gate.py b/tests/test_render_gate.py index c5d90708c..4d935e508 100644 --- a/tests/test_render_gate.py +++ b/tests/test_render_gate.py @@ -99,16 +99,9 @@ def wait_for_event(self, *_args, **_kwargs): def test_a_broken_probe_module_is_a_gate_finding(browser, serve): """A missing public export names the browser boundary instead of raising a traceback. - The gate's own patience, because the deadline is the other test's subject and this - one races it. Two findings can carry the "browser probe module failed" prefix: the - module's rejection, which names the export, and `_load_probes`'s own timeout, which - names only the route and the bound. Capped at 500ms this test asked a loaded runner - to reject a module faster than its own clock, and the runner lost on - [33272123196](https://github.com/max-sixty/leaf/actions/runs/33272123196) and - [33273079113](https://github.com/max-sixty/leaf/actions/runs/33273079113) — where - the prefix assertion below passed and the export assertion failed, which is the one - shape a beaten deadline can produce. Uncapped, only the arrangement can answer, and - a module that never rejects at all still fails rather than passing as this one. + The neighboring stalled-module test owns the short deadline. This test uses the + gate's default so the module rejection, rather than the driver's timeout, supplies + the finding. """ def break_probe(page):