Repository navigation
fix(ci): budget Linux x64 qualification and expose audit failure - #3362
Merged
Daniel Meppiel (danielmeppiel) merged 2 commits intoOct 22, 2026
Merged
Daniel Meppiel (danielmeppiel) merged 2 commits into
Daniel Meppiel (danielmeppiel) merged 2 commits into
Conversation
Raise only Linux x64 to 120 minutes, preserving full non-live coverage and existing release gates. Add a focused unprivileged packaged audit witness with failure diagnostics; the original Linux assertion remains unresolved pending that evidence. Refs #3361 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5a0ccf37-73e3-4dd4-8f89-ef60e8f0f7a2
Compare only the return code and output lengths so pytest assertion rewriting cannot render an unexpected token value. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5a0ccf37-73e3-4dd4-8f89-ef60e8f0f7a2
Daniel Meppiel (danielmeppiel)
marked this pull request as ready for review
October 22, 2026 18:45
Daniel Meppiel (danielmeppiel)
requested a review
from Sergio Sisternes (sergio-sisternes-epam)
as a code owner
October 22, 2026 18:45
Daniel Meppiel (danielmeppiel)
deleted the
danielmeppiel-linux-release-qualification
branch
October 22, 2026 18:47
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The bounded budget and diagnostic changes preserve assertions and release gates, while full trusted release qualification remains explicitly outstanding.
No open issues 🎉
What changed in this PR
This PR improves Linux x64 release qualification diagnostics and runtime headroom for #3361. It does not claim to resolve the original audit failure or complete full release qualification.
Changes:
- Increase only Linux x64 full-release integration from 60 to 120 minutes, preserving other platform budgets and publication gates.
- Add a five-minute, six-case audit witness to the existing unprivileged Linux PR binary job.
- Capture audit diagnostics, restrict credential-warmup diagnostics to status and output lengths, and extend workflow contracts and documentation.
| File | Description |
|---|---|
tests/unit/test_platform_contract_workflow.py |
Enforce platform budgets and audit-witness execution, including mutation checks. |
tests/integration/test_audit_workspace_identity_lifecycle.py |
Capture audit output and summarize credential-warmup results without printing credential output. |
docs/src/content/docs/contributing/integration-testing.md |
Document platform limits and the focused witness's limited role. |
.github/workflows/ci.yml |
Run the packaged audit cases in the existing Linux binary job. |
.github/workflows/build-release.yml |
Raise the Linux x64 integration timeout to 120 minutes. |
Review effort: Balanced
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.
Description
TL;DR
Raise only Linux x64 full-release integration from 60 to 120 minutes and add a focused audit witness to the existing unprivileged Linux PR binary job. Preserve all audit assertions, full-suite selection, worker grouping, other platform bounds and publication gates. Native Linux passed all six audit cases; this is ready for diagnostic/budget qualification, not an application-fix claim.
Warning
The original full-run Linux x64
[git]assertion remains unexplained. No application code changed and no flake is assumed. Full trusted qualification remains required before publication.Problem (WHY)
Trusted run 39819494530, exact main
5a9be32972c8600745fc0d4933357fd4a2a9e61c, recorded the audit failure at17:46:18.921651Z, then exhausted 60 minutes at 78%. Workers were progressing; linear extrapolation is approximately 77 minutes before tail headroom. The timeout cannot explain the earlier assertion failure.The investigation follows the Agent Skills execution loop: "do the work, run a validator (a script, a reference checklist, or a self-check), fix any issues, and repeat until validation passes."
Approach (WHAT)
Implementation (HOW)
.github/workflows/build-release.yml.github/workflows/ci.ymlpr-binary-smoke; no new trigger/job/secret/permission/required check.tests/integration/test_audit_workspace_identity_lifecycle.pytests/unit/test_platform_contract_workflow.pydocs/src/content/docs/contributing/integration-testing.mdDiagrams
Highlighted interactions are new; coverage and release dependencies remain unchanged. Validated with
mmdc.sequenceDiagram participant CI as ci.yml participant PR as pr-binary-smoke participant R as build-release.yml CI->>PR: Build Linux x64 binary without secrets rect rgb(255, 247, 200) PR->>PR: Run all six isolated audit identity cases PR-->>CI: Exit status and captured failure diagnostics end Note over CI,PR: Existing non-required PR witness only rect rgb(255, 247, 200) R->>R: Linux x64 integration budget 60 to 120 minutes end Note over R: Same corpus, workers, HOME grouping and publication gatesTrade-offs
Benefits
Issue and approved scope
Issue: #3361.
Human scope-approval comment: none fabricated. Authorization comes from the user conversation relayed by the release owner: "ok so merge it and proceed until release happens, fixing anything that needs fixing on the way and bypass merging the fixes (CI)". The coordinator explicitly authorized a truthful diagnostic/budget repair after native focused evidence and credential-safe requalification. The issue records agent-authored conversation provenance, not a human GitHub approval comment.
Review contact: Daniel Meppiel (@danielmeppiel). This PR does not complete the issue: the original assertion is unexplained and full qualification remains. The parent alone owns merges, dispatches, tagging and publication.
Type of change
Testing
Validation
Native Linux: CI run 39832616381, job 120012448221, head
e3c24cab4d7df9cb4e1e23f88e6e9ab6b957b017, succeeded. The generated Linux x64 PyInstaller binary ran:Final head
c76045bf36fa08b4cc5b2bb1f9c48cac0545bc08changes only credential-diagnostic presentation from that witnessed head. Final local qualification passed; final-head hosted checks are not claimed green.uv run --extra dev pytest -q 'tests/integration/test_audit_workspace_identity_lifecycle.py::test_fresh_clone_audit_preserves_identity_across_cold_repeated_and_warm_runs[git]' -rA --tb=longuv run --extra dev pytest -q tests/integration/test_audit_workspace_identity_lifecycle.py -rA --tb=long --basetemp=<owned-scratch>/audit-beforeAPM_BINARY_PATH=<exact-main-macos-artifact>/dist/apm-darwin-arm64/apm uv run --extra dev pytest -q tests/integration/test_audit_workspace_identity_lifecycle.py -rA --tb=long --basetemp=<owned-scratch>/audit-frozen-beforeuv run --extra dev pytest -q tests/unit/test_platform_contract_workflow.py tests/unit/test_security_workflow_contracts.py tests/quality/test_ci_topology.py tests/unit/scripts/test_lifecycle_smoke_sharding.py --tb=short --basetemp=<owned-scratch>/workflow-greenAPM_BINARY_PATH=<exact-main-macos-artifact>/dist/apm-darwin-arm64/apm uv run --extra dev pytest -q tests/integration/test_audit_workspace_identity_lifecycle.py tests/unit/test_platform_contract_workflow.py --tb=long --show-capture=all --no-showlocals --basetemp=<owned-scratch>/audit-final-redactedPaths are abbreviated:
<owned-scratch>is the isolated recovery artifact directory; the macOS binary came from exact run 39819494530. A scratch pytest probe injected sentinel stdout/stderr at both unexpected-return-code and unexpected-output boundaries: 2 passed, no sentinel in rewritten assertions. Its initial invocation failed import collection;python -m pytestcorrected repository imports. Four scratch-only unknown-marker warnings arose outside repository configuration; repository tests passed without them.Old/new regression and complete canonical lint
Before workflow edits:
Expected failures identified the old 60-minute setting (two contracts) and missing witness. All selected contracts passed after edits.
git fetch --quiet origin main && git merge --no-edit origin/mainreturnedAlready up to date.. Every final-tree command passed:YAML I/O, 2100-line and raw-relative-path guard bodies were executed directly from
ci.ymlusing GNUggrepon macOS: all passed. The first format check requested formatting of the edited workflow contract; it was corrected before complete successful reruns.Unchanged boundaries: parsed old/new
build-release.ymlobjects are identical after restoring only the Unix step timeout to60. Triggers, matrix, permissions, secrets, markers, worker distribution, failure propagation and release dependencies are unchanged.scripts/test-integration.sh, grouping/collection fixtures,merge-gate.yml,pyproject.toml,uv.lockandCHANGELOG.mdare unchanged. APM remains 0.35.0; #3353 and #3360 are preserved.Scenario Evidence
tests/unit/test_platform_contract_workflow.py::test_missing_or_old_timeout_mutation_is_rejected(regression-trap for #3361), parallelism contracts,tests/quality/test_ci_topology.pytests/integration/test_audit_workspace_identity_lifecycle.py: six native Linux passes; original full-run failure unresolvedtests/unit/test_platform_contract_workflow.py::test_linux_audit_witness_bypass_mutation_is_rejected,tests/unit/test_security_workflow_contracts.pyHow to test
uv sync --frozen --extra dev --extra build && uv run ./scripts/build-binary.sh, select the generated binary withAPM_BINARY_PATH, then run the hosted six-case command.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