From e5c4aea8ceb1358421866ae2faf87b018ee6dd02 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 5 Aug 2026 06:44:32 +0000 Subject: [PATCH] ci: gate workspaces on the unbatched multi-start search check Turns on check_search_memory.py, added in #228, for every workspace that calls this reusable workflow. This is the piece that actually protects CI. The runtime guard in PyAutoFit#1453 reads XLA's memory analysis, which reports 0 bytes on a CPU-only JAX build - which is what CI runs - so it helps GPU users and would not have caught the failure that cost two nightly release runs. A static AST check has no such blind spot. Held back from #228 until the workspaces were clean: run against the real trees it found eight further unguarded sites beyond the two already fixed. All eight now carry an explicit batch_size, so this can go on without breaking unrelated work. Its own job rather than a step on the paths job, so the check name is legible in a PR's status list. Stdlib-only, so it needs no pip install and cannot be broken by dependency resolution. Refs PyAutoLabs/PyAutoFit#1452. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0171voyyTrr91hJ3vU5AjeVz --- .github/workflows/navigator_check.yml | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/navigator_check.yml b/.github/workflows/navigator_check.yml index 03f76582..69f009a5 100644 --- a/.github/workflows/navigator_check.yml +++ b/.github/workflows/navigator_check.yml @@ -42,6 +42,34 @@ jobs: - name: Run navigator checker (paths hard, banners fail) run: python PyAutoHands/autohands/check_navigator.py --root workspace --banners=fail + search_memory: + # A MultiStart* search left on its default batch_size=None vmaps every + # start into one value_and_grad. For a memory-heavy likelihood that is + # tens of GB — it OOMed two nightly release runs in 2026-07 and nothing + # at authoring time flagged it (PyAutoLabs/PyAutoFit#1452). The runtime + # guard in autofit relies on XLA memory analysis, which reports 0 on the + # CPU-only builds CI uses, so this static check is what protects CI. + name: Unbatched multi-start search check + runs-on: ubuntu-latest + steps: + - name: Checkout workspace + uses: actions/checkout@v4 + with: + path: workspace + - name: Checkout PyAutoHands + uses: actions/checkout@v4 + with: + repository: PyAutoLabs/PyAutoHands + path: PyAutoHands + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + # No pip install: the checker is stdlib-only (ast + pathlib) on purpose, + # so it cannot be broken by a dependency resolution problem. + - name: Check for unbatched multi-start searches + run: python PyAutoHands/autohands/check_search_memory.py --root workspace + staleness: name: Catalogue staleness runs-on: ubuntu-latest