From 0d13f5f852311d92027cffd65c8e7e69475c5150 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Thu, 22 Oct 2026 21:54:19 +0200 Subject: [PATCH] fix(ci): budget focused Intel release qualification Raise only the focused macOS Intel step to 60 minutes after observed passing progress at 91% exhausted the 30-minute limit. Preserve test selection and release gates; add missing/old/oversized budget mutations and update the existing budget paragraph.\n\nRefs #3363 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 851e86b9-f93e-4efb-a823-9806aba2b112 --- .github/workflows/build-release.yml | 5 ++++- .../docs/contributing/integration-testing.md | 10 +++++++--- tests/unit/test_platform_contract_workflow.py | 20 ++++++++++++++++++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index b661bb2b60..468c9fece9 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -253,7 +253,10 @@ jobs: run: | chmod +x scripts/test-integration.sh uv run ./scripts/test-integration.sh - timeout-minutes: 30 + # Run 39834866538 timed out at 30m with workers still passing at 91%. + # 30 / 0.91 projects roughly 33m; 60m adds setup/tail headroom, + # not a completion guarantee. Keep selection and failure gates intact. + timeout-minutes: 60 # PHASE 3: RELEASE VALIDATION (tag/schedule/dispatch only) - name: Prepare isolated release-validation environment diff --git a/docs/src/content/docs/contributing/integration-testing.md b/docs/src/content/docs/contributing/integration-testing.md index 7e080372ed..b80fd4c10b 100644 --- a/docs/src/content/docs/contributing/integration-testing.md +++ b/docs/src/content/docs/contributing/integration-testing.md @@ -521,9 +521,13 @@ The Linux x64 and macOS Apple Silicon full integration steps have 120-minute limits and keep `not live` selection with `-n 4 --dist loadgroup` for HOME-mutating test grouping. Previous 60-minute limits stopped progressing workers at 78% and 77%, respectively; the budgets allow setup and tail headroom without excluding -tests. Linux ARM keeps 60 minutes, Windows 20, and the focused Intel step 30. -Failures and timeouts still block release publication; a larger budget is not -evidence that a failed assertion is fixed. +tests. Linux ARM keeps 60 minutes and Windows 20. The focused Intel step has +60 minutes: its prior 30-minute limit stopped passing workers at 91%. +The rough `30 / 0.91` projection is 33 minutes; 60 adds setup/tail headroom, +not a completion guarantee. +Its `lifecycle_smoke and not live` selection and four `loadgroup` workers are +unchanged. Failures and timeouts still block release publication; a larger +budget is not evidence that a failed assertion is fixed. The existing unprivileged `PR Binary Smoke (Linux)` job also runs `tests/integration/test_audit_workspace_identity_lifecycle.py` against its built diff --git a/tests/unit/test_platform_contract_workflow.py b/tests/unit/test_platform_contract_workflow.py index 0a94f50c9e..5df9b67a12 100644 --- a/tests/unit/test_platform_contract_workflow.py +++ b/tests/unit/test_platform_contract_workflow.py @@ -160,7 +160,7 @@ def _assert_intel_focused_integration(workflow: dict) -> None: ) assert step["env"].get("PYTEST_MARK_EXPR") == INTEL_FOCUSED_MARK_EXPRESSION assert step["env"].get("PYTEST_EXTRA_ARGS") == NON_LIVE_UNIX_PYTEST_ARGS - assert step.get("timeout-minutes") == 30 + assert step.get("timeout-minutes") == 60 assert_exact_command( shell_commands(step), ["uv", "run", "./scripts/test-integration.sh"], @@ -293,6 +293,24 @@ def test_intel_non_live_corpus_mutation_is_rejected() -> None: _assert_intel_focused_integration(workflow) +@pytest.mark.parametrize("timeout_minutes", (None, 30, 61)) +def test_intel_missing_old_or_oversized_timeout_mutation_is_rejected( + timeout_minutes: int | None, +) -> None: + """Intel cannot lose its bound or regress to the exhausted 30-minute limit.""" + workflow = deepcopy(_workflow()) + step = workflow_step( + workflow_job(workflow, "build-and-validate-macos-intel"), + INTEL_FOCUSED_INTEGRATION_STEP, + ) + del step["timeout-minutes"] + if timeout_minutes is not None: + step["timeout-minutes"] = timeout_minutes + + with pytest.raises(AssertionError): + _assert_intel_focused_integration(workflow) + + def test_arm_focused_subset_mutation_is_rejected() -> None: """ARM remains the broad non-live macOS release authority.""" workflow = deepcopy(_workflow())