diff --git a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/models.py b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/models.py index 79a2f3401..8e7ede80c 100644 --- a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/models.py +++ b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/models.py @@ -19,6 +19,7 @@ class _SchemeContext: replayed: bool unsettled: list + @dataclass(frozen=True, slots=True) class _SchemeReadings: failsoft: list diff --git a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/preview.py b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/preview.py index 9b6c244da..676c0a345 100644 --- a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/preview.py +++ b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/preview.py @@ -49,6 +49,7 @@ def preview_server( finally: httpd.shutdown() + @contextlib.contextmanager def preview_source_server( page_dir: Path, diff --git a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/scheme.py b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/scheme.py index 5b78e5e1e..ed914d696 100644 --- a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/scheme.py +++ b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/scheme.py @@ -30,11 +30,13 @@ def served(page, url: str, path: str, timeout_ms: int | None = None): timeout_ms = SERVED_TIMEOUT_MS if timeout_ms is None else timeout_ms return page.request.get(urljoin(url, path), timeout=timeout_ms) + def previous_stamp(revision: int, versions: list[dict]) -> dict | None: """The newest stamped revision before ``revision``, if one exists.""" earlier = [version for version in versions if version["revision"] < revision] return max(earlier, key=lambda version: version["revision"]) if earlier else None + def rendered_revision(url: str, state: dict) -> int: """Resolve the immutable revision shown at ``url`` from the public state.""" name = Path(urlsplit(url).path).name @@ -54,9 +56,11 @@ def rendered_revision(url: str, state: dict) -> int: def resize_observer_error(text: str) -> bool: return text.startswith(RESIZE_OBSERVER_ERROR) + def recurring_resize_observer_error(unit: str) -> str: return f"{RESIZE_OBSERVER_ERROR} notice recurred on the confirming {unit}" + def _render_scheme(browser, url, scheme, served_timeout_ms, opened_pages): """Read and report the browser gate for one color scheme.""" from playwright.sync_api import Error as PlaywrightError diff --git a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/version.py b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/version.py index 9d1a722b5..30feff33a 100644 --- a/plugins/leaf/skills/leaf/scripts/leaf/render_gate/version.py +++ b/plugins/leaf/skills/leaf/scripts/leaf/render_gate/version.py @@ -62,6 +62,7 @@ def _render_version_attempt( light_complete and dark_complete, ) + def render_version(browser, url: str, served_timeout_ms: int | None = None) -> list: """Read a version, confirming a complete attempt that reports a ResizeObserver loop notice.