Repository navigation
fix(ci): budget macOS ARM full release integration - #3360
Merged
Daniel Meppiel (danielmeppiel) merged 1 commit intoOct 22, 2026
Merged
Conversation
Raise only the ARM non-live integration step limit from 60 to 120 minutes. Run 39784442659 reached 77% with all four workers still passing at the cutoff; preserve selection, grouped workers, and release gates. Add focused budget and scheduling mutation contracts and document the bound. Refs #3356 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: f91bdda0-3177-41e4-87f0-3b441cfb343c
Daniel Meppiel (danielmeppiel)
requested a review
from Sergio Sisternes (sergio-sisternes-epam)
as a code owner
October 22, 2026 17:03
Daniel Meppiel (danielmeppiel)
deleted the
danielmeppiel-macos-release-budget
branch
October 22, 2026 17:04
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The narrowly scoped timeout adjustment has matching regression contracts and documentation, with no unresolved findings or changes to release gates.
No open issues 🎉
What changed in this PR
This PR addresses #3356 by increasing the macOS ARM release integration timeout from 60 to 120 minutes, following the timeout left unresolved by #3353.
Changes:
- Raises only the ARM integration budget, preserving full non-live coverage, grouped four-worker execution, and release gates.
- Extends regression contracts for timeout and parallelism settings.
- Documents the budget rationale; hosted completion remains a separate release qualification step.
| File | Description |
|---|---|
| tests/unit/test_platform_contract_workflow.py | Pins the 120-minute budget and tests invalid timeout and parallelism settings. |
| docs/src/content/docs/contributing/integration-testing.md | Explains the ARM budget and preserved coverage and failure gates. |
| .github/workflows/build-release.yml | Raises the ARM integration timeout and records the rationale. |
Review effort: Balanced
This was referenced Oct 22, 2026
[BUG] Linux x64 release qualification: cold Git audit failure and exhausted integration budget
#3361
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix(ci): budget macOS ARM full release integration
Description
TL;DR
Raise only macOS ARM's full integration step limit from 60 to 120 minutes. The previous nonpublishing run reached 77% with all four workers still passing cases at the cutoff; full selection, grouping, failure propagation, and publication gates stay unchanged.
Important
This is a bounded CI-budget recovery, not proof of a successful full release run. The 120-minute hosted completion time remains unverified; v0.35.0 is unchanged.
Problem (WHY)
2026-10-22T13:21:13Zto14:21:26Z, then reportedThe action 'Run integration tests' has timed out after 60 minutes.14:21:24.1787490Z. This supports insufficient budget rather than a demonstrated hang.60 / 0.77 = 77.9minutes. A 120-minute bound leaves about 42 minutes beyond that estimate for setup/tail variability; it is not a measured completion time.The diagnosis follows "Read agent execution traces, not just final outputs."; local qualification follows "Only proceed when validation passes". #3353 deliberately left this timeout outside its fixture-repair scope.
Approach (WHAT)
not live,-n 4 --dist loadgroup, HOME grouping, all failure propagation, and every release dependency.Implementation (HOW)
.github/workflows/build-release.ymltests/unit/test_platform_contract_workflow.pydocs/src/content/docs/contributing/integration-testing.mdDiagrams
The dashed step is the only behavioral change; downstream validation and publication conditions remain unchanged.
flowchart LR subgraph ARM["build-and-validate-macos-arm"] I["Run integration tests: 120 minutes"] -->|"success"| R["Run release validation tests: 20 minutes"] end R -->|"success"| C["create-release: pushed tags only"] O["Other required release jobs"] -->|"success"| C I -->|"failure or timeout"| F["Publication blocked"] classDef changed stroke-dasharray: 5 5; class I changed;Trade-offs
Benefits
Issue and approved scope
Issue: Fixes #3356 (bounded timeout recovery; hosted release qualification remains separate).
Human scope-approval comment: No human-authored GitHub approval URL is claimed. The tracking issue transparently records agent-authored provenance for the direct user instruction relayed by the parent release session: "ok so merge it and proceed until release happens, fixing anything that needs fixing on the way and bypass merging the fixes (CI)". The delegated scope is this minimal budget/contracts/docs PR; review contact is Daniel Meppiel (@danielmeppiel).
Does this PR complete the issue, or what remains? It completes the bounded configuration and local regression work. A new trusted full-route run on changed main must establish hosted completion before release qualification; the currently running
39817934984uses the old workflow at041642f2b226042652e31130ba3f57b15f044d9e.Type of change
Testing
Validation
Head:
4d52b815847d59b683ffabd0ddd4873a453adf00. Base: latest fetched/merged main041642f2b226042652e31130ba3f57b15f044d9e. No product changelog entry or version bump is needed for this CI-only recovery.Old workflow, after updating the contract but before changing the timeout:
uv run --frozen --extra dev pytest -q tests/unit/test_platform_contract_workflow.py::test_linux_and_arm_retain_non_live_corpus_grouped_parallelism— expected exit 1:New workflow:
uv run --frozen --extra dev pytest -q tests/unit/test_platform_contract_workflow.py tests/unit/test_security_workflow_contracts.py tests/unit/test_ado_live_workflow_contract.py— exit 0:Canonical lint mirror and test-quality commands — all exited 0
uv run --frozen --extra dev ruff check src/ tests/ scripts/lint_architecture_boundaries.py scripts/architecture_linter/ scripts/windows_native_symlink_probe_entry.pyAll checks passed!uv run --frozen --extra dev ruff format --check src/ tests/ scripts/lint_architecture_boundaries.py scripts/architecture_linter/ scripts/windows_native_symlink_probe_entry.py2091 files already formatteduv run --frozen --extra dev python -m pylint --disable=all --enable=R0801 --min-similarity-lines=10 --fail-on=R0801 src/apm_cli/ scripts/lint_architecture_boundaries.py scripts/architecture_linter/ scripts/windows_native_symlink_probe_entry.pyYour code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)bash scripts/lint-auth-signals.sh[+] auth-signal lint cleanbash scripts/lint-architecture-boundaries.shuv run --frozen python scripts/check_test_assertions.py[+] assertion-quality ratchet clean: AQ001=4, AQ002=12uv run --frozen python scripts/check_exact_test_duplicates.py[+] exact test duplicate ratchet clean: 1415 files, 0 allowed duplicate group(s)git diff --checkThe remaining CI lint guards used this portable Python equivalent of CI's regex/path/line checks:
Result: exit 0,
PASS: CI-equivalent YAML I/O, portable relative-path and 2100-line guards (portable Python regex mirror).Exact workflow-preservation and version check — exit 0
Diagram:
mmdc -i release-budget.mmd -o release-budget.svg --quietand the corresponding PNG render both exited 0; the rendered diagram was inspected. Artifact paths were session-local.Scenario Evidence
tests/unit/test_platform_contract_workflow.py::test_linux_and_arm_retain_non_live_corpus_grouped_parallelism(regression-trap for #3356),test_arm_missing_or_old_timeout_mutation_is_rejectedtests/unit/test_platform_contract_workflow.py::test_non_live_unix_parallelism_mutation_is_rejected,test_arm_focused_subset_mutation_is_rejectedHow to test
assert 60 == 120. Restore 120 afterward.Spec conformance (OpenAPM v0.1)
If this PR changes behaviour that an OpenAPM v0.1
req-XXXcovers,confirm the three-step ritual in the
development guide:
docs/src/content/docs/specs/openapm-v0.1.mdupdated(new/changed
<a id="req-XXX"></a>anchor + prose + Appendix Crow).
docs/src/content/docs/specs/manifests/openapm-v0.1.requirements.ymlupdated.
@pytest.mark.req("req-XXX")test undertests/spec_conformance/added or extended.CONFORMANCE.{md,json}regenerated viauv run --extra dev python -m tests.spec_conformance.gen_statementand committed.
Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com