diff --git a/.github/workflows/package-validation.yml b/.github/workflows/package-validation.yml index 87b6b1c..b96e47c 100644 --- a/.github/workflows/package-validation.yml +++ b/.github/workflows/package-validation.yml @@ -61,3 +61,39 @@ jobs: dist/INSTALL.md if-no-files-found: error retention-days: 14 + candidate-install: + name: Canonical artifacts / ${{ matrix.os }} / Python ${{ matrix.python }} + needs: package + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + python: ['3.10', '3.11', '3.12', '3.13', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 0 + persist-credentials: false + ref: ${{ inputs.source_ref || github.sha }} + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: ${{ matrix.python }} + - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 + with: + name: gem-candidate-${{ github.run_id }} + path: ${{ runner.temp }}/gem-canonical + digest-mismatch: error + - name: Verify and install exact canonical wheel and sdist without rebuilding + run: python tools/ci_validate.py --output-dir "${{ runner.temp }}/gem-canonical-ci" --candidate-directory "${{ runner.temp }}/gem-canonical" + - name: Retain canonical installation diagnostics + if: always() + uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 + with: + name: gem-canonical-checks-${{ runner.os }}-py${{ matrix.python }}-${{ github.run_id }} + path: | + ${{ runner.temp }}/gem-canonical-ci/*.json + ${{ runner.temp }}/gem-canonical-ci/*.log + if-no-files-found: warn + retention-days: 14 diff --git a/audit/PHASE5C-RELEASE-CANDIDATE.md b/audit/PHASE5C-RELEASE-CANDIDATE.md new file mode 100644 index 0000000..57d0b39 --- /dev/null +++ b/audit/PHASE5C-RELEASE-CANDIDATE.md @@ -0,0 +1,199 @@ +# Phase 5C — Release candidate verification + +Base: master `a21273c857e6ed9e948fa92246226100efb80355` (PR #62). +Branch: `release/phase5c-candidate`. Target: gem 1.0.0, GitHub-first. + +## Windows reference investigation + +An unchanged-baseline trace identifies the first difference in `math.sin` of +`0x1.921fb54442d18p-1` (the binary64 approximation of pi/4). Linux/macOS return +`0x1.6a09e667f3bccp-1`; Windows returns `0x1.6a09e667f3bcdp-1`, one ULP higher. +A 90-digit Decimal series using the exact input float gives +0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922. +The Linux/macOS result is nearest; Windows differs by one ULP. Inputs and all +other traced math calls match on the representative CPython 3.12 jobs. + +This changes SLERP's scalar weight for t=0.25, then the quaternion's scalar +component from `0x1.ee8dd4748bf15p-1` to `0x1.ee8dd4748bf16p-1`. The Hamilton +sandwich computes X as w*w-z*z: the rotated axis changes from +`0x1.bb67ae8584cabp-1` (0.8660254037844387) to +`0x1.bb67ae8584cadp-1` (0.8660254037844389), two ULP apart. +The mathematical result sqrt(3)/2 is +0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093; +its nearest float is `0x1.bb67ae8584caap-1`. The two results are respectively +one and three ULP above that reference. Absolute error remains below 2^-51. +The same sine call affects the t=0.75 imaginary component and the small +cancellation residual in the 90-degree rotated axes. + +This is a benign platform libm difference and an overly strict full-precision +JSON serialization requirement, not a defect in the frozen mathematics. +Verification now permits differences no larger than 2^-52 between only eight +audited quaternion measurement fields. Both manifests must independently satisfy +closed-form values within 2^-51. SVG bytes, all other fields, key/type structure, +serialization, metadata and artifact hashes remain exact. Existing numerical +assertions and committed references are unchanged. Regression tests replay the +specific libm difference and reject larger, unrelated and shared numerical errors. + +## Cross-platform verification + +[Machine-readable verification](phase5c-release-verification.json) records every +job, interpreter/platform/compiler, command, artifact digest and installation +result. [Package run 38016538984](https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984) +passed all 30 jobs: 15 full validations followed by 15 installations of the same +canonical archives. [Documentation run 38016538948](https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538948) +also passed. + +| CPython | Linux | Windows | macOS | Canonical wheel/sdist installation | +| --- | --- | --- | --- | --- | +| 3.10 | 4050 passed | 4050 passed | 4050 passed | All three platforms passed | +| 3.11 | 4050 passed | 4050 passed | 4050 passed | All three platforms passed | +| 3.12 | 4050 passed | 4050 passed | 4050 passed | All three platforms passed | +| 3.13 | 4050 passed | 4050 passed | 4050 passed | All three platforms passed | +| 3.14 | 4050 passed | 4050 passed | 4050 passed | All three platforms passed | + +Every full suite has zero failures, errors, expected failures and skips. All +jobs checked 268 declarations and 43 executable documentation examples. +Each primary job built and installed its own wheel and sdist; the second matrix +installed the identical canonical wheel and sdist on all 15 environments. +These are 60 isolated installations in total. Every installed runtime matched +all 18 source Python files and passed independent mathematical smoke checks. + +The unchanged baseline trace run +[38015993880](https://github.com/AlexMarinescu/pyGameMath/actions/runs/38015993880) +reproduced the original failure on all five Windows interpreters, with 4035 +passes and one failure each; Linux/macOS passed 4036. The same first sine +variation occurs on every Windows version. Intermediate policy validation run +38016288200 passed 4047 tests on every platform before the final three workflow +guard cases were added. No tests were skipped or converted to expected failures. + +Representative CPython 3.12 trace environments were Linux x86-64, glibc 2.39, +GCC 13.3.0 / Python 3.12.15; Windows Server 2025 build 26100, AMD64, +MSC v.1943 / Python 3.12.10; and macOS 26.6.2 ARM64, Clang 13.0.0 / +Python 3.12.10. These are tested runners, not claims about every OS version. + +Local CPython 3.12.14 passed the final 4050-test suite and both clean archive +installations. Four other local interpreters passed the preceding 4047-test +implementation. The hosted final matrix supplies complete final-version evidence. +The safeguard suite now has 74 tests, including the eight permanent tampering +cases and canonical-install dependency/digest/matrix guards. Existing mathematical +assertions, fixtures, APIs and all 18 runtime files remain unchanged from PR #62. + +Strict MkDocs/site checking passed: 69 pages, 7724 links/anchors, 24 MathML +equations, 16 image references and seven navigation checks. All nine tutorials +and 43 examples remain present. Actionlint 1.7.12 and workflow policy checks +passed; Shellcheck was unavailable and was not executed. + +## Preserved candidate and provenance + +Verified branch implementation: `fb71f4feb2adcf20533afdeab961fb0db0a4a499`. +The hosted PR checkout and preserved candidate source commit is +`775fcafddcc6c930aa24e0ba9d963b9f8885c10d`, tree +`51cc45700514e8c4f11fad7b0a67c0ed882b3b9d`. +This is the tested merge ref of that branch into master +`a21273c857e6ed9e948fa92246226100efb80355`, not a final approved master release. +The following report/notes commit is separate from the tested source snapshot. + +The canonical artifact is `gem-candidate-38016538984`, artifact ID 11656447664, +ZIP SHA-256 `3aef3e7232fe82ddb10cbacd419a91260e82393886ef12735b1841925126b4bd`. +It is retained by Actions until 2026-10-24 02:20:09 UTC. An unchanged copy is +preserved outside the source checkout at +`/workspace/release-candidates/phase5c-fb71f4f/` with its manifest, +`SHA256SUMS` and `INSTALL.md`. + +| File | SHA-256 | +| --- | --- | +| gem-1.0.0-py3-none-any.whl | `ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95` | +| gem-1.0.0.tar.gz | `b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027` | +| SHA256SUMS | `ac228c890608bc8c87b67b57b29f7b5c82d2f59d5dd8402490dcd0aa7e2a309c` | +| INSTALL.md | `ff0a41a420db7bb41a40772703cd5b360555167fb7188985aa6ac6e3c138c91e` | + +The manifest records clean-source provenance, distribution `gem`, version +`1.0.0` and exact archive hashes. The wheel has exactly 18 runtime modules plus +five metadata/license entries. Strict metadata, contents and Twine checks +passed. The sole mandatory dependency remains six; packaging metadata is intact. +A detached checkout of the recorded merge commit independently passed the +artifact integrity gate against the downloaded bundle. + +Two local builds at the same branch commit produced identical member payloads +(23 wheel files, 393 sdist files), but different archive hashes: five wheel +metadata timestamps, 36 tar member mtimes and gzip timestamps differed. +Build reproduction is therefore content-equivalent, not byte-identical with +these existing build tools. No archive was rewritten to disguise this limitation. +Preserve the exact validated bytes; rebuilding cannot substitute for their +verified hashes. This phase changes no build metadata or archive format. + +## Reproduce verification + +Use a clean Git checkout with history and the CI-only requirements. Release +checks require that checkout; an extracted sdist is an installation artifact, +not a substitute for Git provenance and the audit baseline. + +```sh +python -m pip install -r requirements-ci.txt +python -m pytest -q +python tools/trace_showcase.py --output /tmp/showcase-trace.json +python tools/check_workflows.py +python tools/ci_validate.py --output-dir /tmp/gem-ci --artifacts-dir /tmp/gem-candidate +python tools/ci_validate.py --output-dir /tmp/gem-exact-ci --candidate-directory /tmp/gem-candidate +python -m examples.showcase.regenerate --verify +python -m mkdocs build --strict --site-dir /tmp/gem-site +python tools/check_site.py --site-dir /tmp/gem-site --output /tmp/gem-site.json +``` + +Exact local candidate pipeline: + +```sh +/tmp/phase5a-py312/bin/python tools/ci_validate.py --output-dir /tmp/phase5c-final-ci --artifacts-dir /tmp/phase5c-final-assets --offline --wheelhouse /tmp/phase5b-wheelhouse +/tmp/phase5a-py312/bin/python tools/ci_validate.py --output-dir /tmp/phase5c-exact-ci --candidate-directory /tmp/phase5c-final-assets --offline --wheelhouse /tmp/phase5b-wheelhouse +/tmp/phase5a-py312/bin/python /tmp/phase5c-verified-source/tools/release_gate.py verify-artifacts --directory /workspace/release-candidates/phase5c-fb71f4f --commit 775fcafddcc6c930aa24e0ba9d963b9f8885c10d --tag v1.0.0 --output /tmp/phase5c-canonical-integrity.json +``` + +The local build is separate from the hosted canonical build; their hashes are +not interchangeable. Machine-readable evidence distinguishes both. + +## GitHub release recommendation: NOT READY for publication + +Numerical and cross-platform candidate verification passed. CI-WIN01 is closed. +Publication still requires the following human-controlled prerequisites: + +| Prerequisite | Status and action | +| --- | --- | +| Reviewed final master | PR #63 is unmerged. Review and merge, then run manual release validation at the exact resulting master SHA; the PR candidate cannot pass the publication provenance guard. | +| Protected release environment | Connector cannot read `gem-release-review`. Verify required reviewers, prevented self-review, disabled admin bypass and protected-branch deployment; exercise protected review successfully. | +| Release enablement | Connector cannot inspect `GEM_RELEASE_ENABLED`. Keep unset/false during preparation and verify its actual setting manually. | +| Explicit owner authorization | No authorization for tag creation or GitHub Release publication has been granted. Obtain it separately in Phase 5D. | + +The public master ruleset is active and requires PRs/linear history, but has zero +required approving reviews and no required status-check rule. Administrator +bypass is present. The release-tag ruleset prevents updates/deletion/force pushes +and also has administrator bypass. These settings were inspected, not changed; +`protected: true` alone is not proof of enforced CI or protected human approval. +Review the effective merge policy and permissions before final signoff. + +Two moderate default-branch Dependabot alerts were reported by Git push. Details +are inaccessible through the connector; owner triage remains a documented risk, +not a claim of a newly confirmed runtime vulnerability. The release environment, +branch-protection endpoint and enablement variable could not be fully inspected. +Missing release protection fails closed at runtime. No real manual master dispatch +or approval was simulated as a successful protected release. + +Prepared release title: **gem 1.0.0**. See +[release notes](../docs/development/release-notes-1.0.0.md) and +[installation/release guide](../docs/development/ci-release.md). PyPI publication +is pending account recovery and verified publishing authority; this blocks PyPI +only. There is no claim that gem 1.0.0 is available on PyPI. + +Final approval checklist: + +- Review this PR and verify the environment, merge policy and outstanding alerts. +- Validate the exact final master SHA using the existing manual workflow; + complete both matrices, integrity verification and protected review. +- Preserve that run's exact wheel/sdist/checksums/instructions before retention + expires, and identify them explicitly in the publication approval. +- Obtain separate authorization for tag creation and GitHub Release publication; + ensure v1.0.0 targets that same reviewed and tested commit. +- Publish only in the separately authorized Phase 5D. Preserve official bytes + for later PyPI use; never silently rebuild or replace them. + +No tags, GitHub Releases, package uploads, repository-setting changes or merges +were performed. The 1.0 mathematics, API, dependencies and feature scope remain frozen. diff --git a/audit/phase5c-release-verification.json b/audit/phase5c-release-verification.json new file mode 100644 index 0000000..e326e74 --- /dev/null +++ b/audit/phase5c-release-verification.json @@ -0,0 +1,12203 @@ +{ + "schema_version": 1, + "base_commit": "a21273c857e6ed9e948fa92246226100efb80355", + "verified_branch_commit": "fb71f4feb2adcf20533afdeab961fb0db0a4a499", + "candidate_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "candidate_kind": "PR merge-ref preparation candidate; not an approved master release", + "recommendation": "NOT READY for publication; numerical and cross-platform candidate validation passed", + "verification_run": { + "id": 38016538984, + "url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984", + "jobs": [ + { + "id": 114107956626, + "name": "ubuntu-latest / Python 3.10", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956626" + }, + { + "id": 114107956705, + "name": "windows-latest / Python 3.14", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956705" + }, + { + "id": 114107956709, + "name": "macos-latest / Python 3.14", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956709" + }, + { + "id": 114107956710, + "name": "macos-latest / Python 3.13", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956710" + }, + { + "id": 114107956713, + "name": "windows-latest / Python 3.10", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956713" + }, + { + "id": 114107956724, + "name": "windows-latest / Python 3.11", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956724" + }, + { + "id": 114107956726, + "name": "ubuntu-latest / Python 3.13", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956726" + }, + { + "id": 114107956738, + "name": "ubuntu-latest / Python 3.14", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956738" + }, + { + "id": 114107956740, + "name": "macos-latest / Python 3.10", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956740" + }, + { + "id": 114107956743, + "name": "macos-latest / Python 3.11", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956743" + }, + { + "id": 114107956745, + "name": "ubuntu-latest / Python 3.12", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956745" + }, + { + "id": 114107956766, + "name": "windows-latest / Python 3.12", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956766" + }, + { + "id": 114107956769, + "name": "ubuntu-latest / Python 3.11", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956769" + }, + { + "id": 114107956792, + "name": "windows-latest / Python 3.13", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956792" + }, + { + "id": 114107956798, + "name": "macos-latest / Python 3.12", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114107956798" + }, + { + "id": 114108347893, + "name": "Canonical artifacts / windows-latest / Python 3.10", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347893" + }, + { + "id": 114108347894, + "name": "Canonical artifacts / ubuntu-latest / Python 3.12", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347894" + }, + { + "id": 114108347904, + "name": "Canonical artifacts / ubuntu-latest / Python 3.13", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347904" + }, + { + "id": 114108347914, + "name": "Canonical artifacts / ubuntu-latest / Python 3.10", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347914" + }, + { + "id": 114108347917, + "name": "Canonical artifacts / windows-latest / Python 3.14", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347917" + }, + { + "id": 114108347931, + "name": "Canonical artifacts / windows-latest / Python 3.11", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347931" + }, + { + "id": 114108347941, + "name": "Canonical artifacts / macos-latest / Python 3.11", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347941" + }, + { + "id": 114108347950, + "name": "Canonical artifacts / windows-latest / Python 3.12", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347950" + }, + { + "id": 114108347953, + "name": "Canonical artifacts / ubuntu-latest / Python 3.14", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347953" + }, + { + "id": 114108347961, + "name": "Canonical artifacts / ubuntu-latest / Python 3.11", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347961" + }, + { + "id": 114108347985, + "name": "Canonical artifacts / macos-latest / Python 3.10", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108347985" + }, + { + "id": 114108348000, + "name": "Canonical artifacts / macos-latest / Python 3.12", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108348000" + }, + { + "id": 114108348012, + "name": "Canonical artifacts / windows-latest / Python 3.13", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108348012" + }, + { + "id": 114108348025, + "name": "Canonical artifacts / macos-latest / Python 3.13", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108348025" + }, + { + "id": 114108348038, + "name": "Canonical artifacts / macos-latest / Python 3.14", + "status": "completed", + "conclusion": "success", + "html_url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538984/job/114108348038" + } + ], + "status": "completed", + "conclusion": "success" + }, + "documentation_run": { + "id": 38016538948, + "url": "https://github.com/AlexMarinescu/pyGameMath/actions/runs/38016538948", + "status": "completed", + "conclusion": "success" + }, + "baseline_investigation": { + "run_id": 38015993880, + "source_commit": "454cf8bd33370131a4a59397d8fb0f213eb9a3bf", + "results": [ + { + "name": "gem-checks-Windows-py3.13-38015993880", + "artifact_id": 11656985599, + "artifact_sha256": "a89b8ac9c0719fcaf0299b9129401609fd8ffa327fb9a157a7b31ec3f50fe8fd", + "environment": { + "python": "3.13.15 (tags/v3.13.15:4061bc4, Aug 5 2026, 13:05:39) [MSC v.1944 64 bit (AMD64)]", + "compiler": "MSC v.1944 64 bit (AMD64)", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 1, + "errors": 0, + "skipped": 0, + "passed": 4035 + }, + "failures": [ + { + "name": "tests.test_showcase_examples::test_committed_artifacts_match_generation", + "reason": "strict measurements.json byte comparison; platform sin(pi/4) difference independently traced" + } + ], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890684, + "hex": "0x1.ee8dd4748bf16p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.5, + "hex": "0x1.0000000000000p-1", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.5, + "hex": "-0x1.0000000000000p-1", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1" + } + ], + "axes": [ + [ + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-macOS-py3.10-38015993880", + "artifact_id": 11656815840, + "artifact_sha256": "60594a0cc1bc145d078916b5c23f029f36736b75400694818dec4106ed4c37cf", + "environment": { + "python": "3.10.11 (v3.10.11:7d4cc5aa85, Apr 4 2023, 19:05:19) [Clang 13.0.0 (clang-1300.0.29.30)]", + "compiler": "Clang 13.0.0 (clang-1300.0.29.30)", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "machine": "arm64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-macOS-py3.12-38015993880", + "artifact_id": 11656735829, + "artifact_sha256": "e7c08d3d0121958f1a3cb51f9e793687b1b640231e3f120c9b9073684b5e8811", + "environment": { + "python": "3.12.10 (v3.12.10:0cc81280367, Apr 8 2025, 08:46:59) [Clang 13.0.0 (clang-1300.0.29.30)]", + "compiler": "Clang 13.0.0 (clang-1300.0.29.30)", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "machine": "arm64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-macOS-py3.14-38015993880", + "artifact_id": 11656705746, + "artifact_sha256": "e092582bd3f0eba2048155f9d38dad9cfa72b6772dc20149ac3cb4f3a999b655", + "environment": { + "python": "3.14.7 (v3.14.7:823f0323ee6, Aug 5 2026, 07:07:01) [Clang 21.0.0 (clang-2100.1.1.101)]", + "compiler": "Clang 21.0.0 (clang-2100.1.1.101)", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "machine": "arm64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Linux-py3.11-38015993880", + "artifact_id": 11656545916, + "artifact_sha256": "a81b363b883a159939398cbb3874fd843e33cd36a6c4aa89ff3c7a5400745325", + "environment": { + "python": "3.11.17 (main, Oct 1 2026, 14:32:31) [GCC 13.3.0]", + "compiler": "GCC 13.3.0", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "libc": [ + "glibc", + "2.39" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Linux-py3.10-38015993880", + "artifact_id": 11656466611, + "artifact_sha256": "4d6fa3feac865115a9410d233704d6cae4e6fae6ecfccdaa998874f4dda450ca", + "environment": { + "python": "3.10.22 (main, Oct 1 2026, 14:30:20) [GCC 13.3.0]", + "compiler": "GCC 13.3.0", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "libc": [ + "glibc", + "2.39" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Linux-py3.13-38015993880", + "artifact_id": 11656371539, + "artifact_sha256": "415ffd3ff6df7b5e57740cfa06aa7265f3a4ced68601138091b41ba2b6b652ac", + "environment": { + "python": "3.13.16 (main, Oct 1 2026, 02:37:54) [GCC 13.3.0]", + "compiler": "GCC 13.3.0", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "libc": [ + "glibc", + "2.39" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Windows-py3.11-38015993880", + "artifact_id": 11656361699, + "artifact_sha256": "e6d0263beabb14d1c09205d8b2a0cc745ba0ad479bab549cc984fd5014305981", + "environment": { + "python": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]", + "compiler": "MSC v.1938 64 bit (AMD64)", + "platform": "Windows-10-10.0.26100-SP0", + "machine": "AMD64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 1, + "errors": 0, + "skipped": 0, + "passed": 4035 + }, + "failures": [ + { + "name": "tests.test_showcase_examples::test_committed_artifacts_match_generation", + "reason": "strict measurements.json byte comparison; platform sin(pi/4) difference independently traced" + } + ], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890684, + "hex": "0x1.ee8dd4748bf16p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.5, + "hex": "0x1.0000000000000p-1", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.5, + "hex": "-0x1.0000000000000p-1", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1" + } + ], + "axes": [ + [ + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Linux-py3.12-38015993880", + "artifact_id": 11656351663, + "artifact_sha256": "1677586099a6446d5067c9cb4db59f93873322ac8b0def5e9474c5772687c919", + "environment": { + "python": "3.12.15 (main, Oct 1 2026, 02:35:59) [GCC 13.3.0]", + "compiler": "GCC 13.3.0", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "libc": [ + "glibc", + "2.39" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Windows-py3.10-38015993880", + "artifact_id": 11656286839, + "artifact_sha256": "f7904201dad189e5a47bb1e236bc9baacc58353efa85b7d1781f61e26a5b62b0", + "environment": { + "python": "3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]", + "compiler": "MSC v.1929 64 bit (AMD64)", + "platform": "Windows-10-10.0.26100-SP0", + "machine": "AMD64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 1, + "errors": 0, + "skipped": 0, + "passed": 4035 + }, + "failures": [ + { + "name": "tests.test_showcase_examples::test_committed_artifacts_match_generation", + "reason": "strict measurements.json byte comparison; platform sin(pi/4) difference independently traced" + } + ], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890684, + "hex": "0x1.ee8dd4748bf16p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.5, + "hex": "0x1.0000000000000p-1", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.5, + "hex": "-0x1.0000000000000p-1", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1" + } + ], + "axes": [ + [ + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Windows-py3.12-38015993880", + "artifact_id": 11655966901, + "artifact_sha256": "214110c271984bf119f872e959a9ad684192fa89d31fd14feb279a770aedaf2a", + "environment": { + "python": "3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]", + "compiler": "MSC v.1943 64 bit (AMD64)", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 1, + "errors": 0, + "skipped": 0, + "passed": 4035 + }, + "failures": [ + { + "name": "tests.test_showcase_examples::test_committed_artifacts_match_generation", + "reason": "strict measurements.json byte comparison; platform sin(pi/4) difference independently traced" + } + ], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890684, + "hex": "0x1.ee8dd4748bf16p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.5, + "hex": "0x1.0000000000000p-1", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.5, + "hex": "-0x1.0000000000000p-1", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1" + } + ], + "axes": [ + [ + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Windows-py3.14-38015993880", + "artifact_id": 11655932046, + "artifact_sha256": "b7aa243f5a86621c09bd63534f3d683908515674c04ed6fbe6fe0d6fb0a7ef7d", + "environment": { + "python": "3.14.7 (tags/v3.14.7:823f032, Aug 5 2026, 10:51:32) [MSC v.1944 64 bit (AMD64)]", + "compiler": "MSC v.1944 64 bit (AMD64)", + "platform": "Windows-2025Server-10.0.26100-SP0", + "machine": "AMD64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 1, + "errors": 0, + "skipped": 0, + "passed": 4035 + }, + "failures": [ + { + "name": "tests.test_showcase_examples::test_committed_artifacts_match_generation", + "reason": "strict measurements.json byte comparison; platform sin(pi/4) difference independently traced" + } + ], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 1 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890684, + "hex": "0x1.ee8dd4748bf16p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.5, + "hex": "0x1.0000000000000p-1", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.5, + "hex": "-0x1.0000000000000p-1", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 0 + }, + { + "value": 0.8660254037844389, + "hex": "0x1.bb67ae8584cadp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 3 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865476, + "hex": "0x1.6a09e667f3bcdp-1" + } + ], + "axes": [ + [ + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 1.1102230246251565e-16, + "hex": "0x1.0000000000000p-53", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4368491638549381120 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-Linux-py3.14-38015993880", + "artifact_id": 11655886967, + "artifact_sha256": "3dea26946cfbacfd2911d76b5ca1a259f0eede78c7f72d980d73816a5fcd2f59", + "environment": { + "python": "3.14.8 (main, Oct 1 2026, 02:38:33) [GCC 13.3.0]", + "compiler": "GCC 13.3.0", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "machine": "x86_64", + "libc": [ + "glibc", + "2.39" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-macOS-py3.11-38015993880", + "artifact_id": 11655876911, + "artifact_sha256": "c00d5fc121e7c4b6feb73acae0bf5aecb7b528a55bdb10837040800f73b0ae74", + "environment": { + "python": "3.11.9 (v3.11.9:de54cf5be3, Apr 2 2024, 07:12:50) [Clang 13.0.0 (clang-1300.0.29.30)]", + "compiler": "Clang 13.0.0 (clang-1300.0.29.30)", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "machine": "arm64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + }, + { + "name": "gem-checks-macOS-py3.13-38015993880", + "artifact_id": 11655832039, + "artifact_sha256": "e947f6fdaf333d406f81cf861254b7583a688cc99a4b8b18abc6943df929b057", + "environment": { + "python": "3.13.15 (v3.13.15:4061bc4c35f, Aug 5 2026, 09:08:51) [Clang 21.0.0 (clang-2100.1.1.101)]", + "compiler": "Clang 21.0.0 (clang-2100.1.1.101)", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "machine": "arm64", + "libc": [ + "", + "" + ] + }, + "tests": { + "tests": 4036, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4036, + "xfailed": 0 + }, + "failures": [], + "sine_at_pi_over_4": [ + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + }, + { + "operation": "sin", + "arguments": [ + { + "value": 0.7853981633974483, + "hex": "0x1.921fb54442d18p-1" + } + ], + "result": { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1", + "reference_decimal": "0.707106781186547502751942956217516746261543239537492789524366119137482021518043926217856922", + "reference_hex": "0x1.6a09e667f3bccp-1", + "ulps_from_rounded_reference": 0 + } + } + ], + "quarter_frame": { + "t": 0.25, + "math_call_range": [ + 14, + 24 + ], + "quaternion": [ + { + "value": 0.9659258262890683, + "hex": "0x1.ee8dd4748bf15p-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.25881904510252074, + "hex": "0x1.0907dc1930690p-2" + } + ], + "axes": [ + [ + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.49999999999999994, + "hex": "0x1.fffffffffffffp-2", + "reference_decimal": "0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -0.49999999999999994, + "hex": "-0x1.fffffffffffffp-2", + "reference_decimal": "-0.499999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", + "reference_hex": "-0x1.0000000000000p-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.8660254037844387, + "hex": "0x1.bb67ae8584cabp-1", + "reference_decimal": "0.866025403784438646763723170752936183471402626905190314027903489725966508454400018540573093", + "reference_hex": "0x1.bb67ae8584caap-1", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + }, + "three_quarter_frame": { + "t": 0.75, + "math_call_range": [ + 34, + 44 + ], + "quaternion": [ + { + "value": 0.7071067811865477, + "hex": "0x1.6a09e667f3bcep-1" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.0, + "hex": "0x0.0p+0" + }, + { + "value": 0.7071067811865475, + "hex": "0x1.6a09e667f3bccp-1" + } + ], + "axes": [ + [ + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 1.0000000000000002, + "hex": "0x1.0000000000001p+0", + "reference_decimal": "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ], + [ + { + "value": -1.0000000000000002, + "hex": "-0x1.0000000000001p+0", + "reference_decimal": "-1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "reference_hex": "-0x1.0000000000000p+0", + "ulps_from_rounded_reference": 1 + }, + { + "value": 3.3306690738754696e-16, + "hex": "0x1.8000000000000p-52", + "reference_decimal": "0E-267", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 4375247037990436864 + }, + { + "value": 0.0, + "hex": "0x0.0p+0", + "reference_decimal": "0", + "reference_hex": "0x0.0p+0", + "ulps_from_rounded_reference": 0 + } + ] + ] + } + } + ] + }, + "cross_platform_results": [ + { + "name": "gem-checks-Windows-py3.12-38016538984", + "stage": "full-validation", + "artifact_id": 11656926495, + "artifact_sha256": "1d74426cc54cd76444c4d4bf90ef7b13df52216a73c02639645b850c713f9485", + "python": "3.12.10", + "platform": "Windows-2025Server-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.12.10\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\trace_showcase.py", + "--output", + "D:\\a\\_temp\\gem-ci\\showcase-trace.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.12.10\\x64\\python.exe", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "D:\\a\\_temp\\gem-ci\\pytest.xml" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.12.10\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "D:\\a\\_temp\\gem-ci\\source-docs.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.12.10\\x64\\python.exe", + "-m", + "build", + "--outdir", + "D:\\a\\pyGameMath\\pyGameMath\\dist" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.12.10\\x64\\python.exe", + "-m", + "twine", + "check", + "--strict", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.12.10\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--wheel", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "--sdist", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz", + "--output", + "D:\\a\\_temp\\gem-ci\\artifacts.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "24d787b9c1603f106c0df5a020dcf51a316c1569535b6f2449a23b93b9bfe43e", + "gem-1.0.0.tar.gz": "ef63508f0ba4ef327edd5b68d845bf933bfe928aba9d60272c6197fe649cf3c6" + } + }, + "environment": "3.12.10 (tags/v3.12.10:0cc8128, Apr 8 2025, 12:21:36) [MSC v.1943 64 bit (AMD64)]" + }, + { + "name": "gem-checks-Linux-py3.13-38016538984", + "stage": "full-validation", + "artifact_id": 11656886453, + "artifact_sha256": "6bddeb3f7bc615a43f7d842422c245da8cbafab4d8656dd8f1aa075fb9e14c50", + "python": "3.13.16", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.16", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.16", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/opt/hostedtoolcache/Python/3.13.16/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/home/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.13.16/x64/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/home/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.13.16/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/home/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.13.16/x64/bin/python", + "-m", + "build", + "--outdir", + "/home/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.13.16/x64/bin/python", + "-m", + "twine", + "check", + "--strict", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.13.16/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/home/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "62e41c852e9be621772a641ab595ffc0292e701616304893fb147a0622052939", + "gem-1.0.0.tar.gz": "81a75246de81e9155a7088e871d689f13d1e0704196d74c22da99e4000deb563" + } + }, + "environment": "3.13.16 (main, Oct 1 2026, 02:37:54) [GCC 13.3.0]" + }, + { + "name": "gem-checks-macOS-py3.14-38016538984", + "stage": "full-validation", + "artifact_id": 11656831487, + "artifact_sha256": "cc32e484ebe52bc7f6e080f31c846b05aab4f56b432f19bf85f10a25b5b79128", + "python": "3.14.7", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.14/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/Users/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.14/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/Users/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.14/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/Users/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.14/bin/python", + "-m", + "build", + "--outdir", + "/Users/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.14/bin/python", + "-m", + "twine", + "check", + "--strict", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.14/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/Users/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "b4d179a9541de94b2d0c218a2481066b844026010c78c69f4d7503f4bea76aa5", + "gem-1.0.0.tar.gz": "66ded2841ba72b992a7bc37e3794da27589193795c97edd07721fdcec175013e" + } + }, + "environment": "3.14.7 (v3.14.7:823f0323ee6, Aug 5 2026, 07:07:01) [Clang 21.0.0 (clang-2100.1.1.101)]" + }, + { + "name": "gem-checks-Windows-py3.14-38016538984", + "stage": "full-validation", + "artifact_id": 11656701559, + "artifact_sha256": "bd7a608a2fa8668f877d3b4f5d684bbdc7ec2435c9cdee928e39877755e79d9f", + "python": "3.14.7", + "platform": "Windows-2025Server-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.14.7\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\trace_showcase.py", + "--output", + "D:\\a\\_temp\\gem-ci\\showcase-trace.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.14.7\\x64\\python.exe", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "D:\\a\\_temp\\gem-ci\\pytest.xml" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.14.7\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "D:\\a\\_temp\\gem-ci\\source-docs.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.14.7\\x64\\python.exe", + "-m", + "build", + "--outdir", + "D:\\a\\pyGameMath\\pyGameMath\\dist" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.14.7\\x64\\python.exe", + "-m", + "twine", + "check", + "--strict", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.14.7\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--wheel", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "--sdist", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz", + "--output", + "D:\\a\\_temp\\gem-ci\\artifacts.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "634deac214798231222351f66cf611a36cae175480b654ce013112d428e448db", + "gem-1.0.0.tar.gz": "15e711880ee46c679d624b07d81b742c8efdb46a146ec65fb4c7ec88cbe360a8" + } + }, + "environment": "3.14.7 (tags/v3.14.7:823f032, Aug 5 2026, 10:51:32) [MSC v.1944 64 bit (AMD64)]" + }, + { + "name": "gem-checks-Windows-py3.11-38016538984", + "stage": "full-validation", + "artifact_id": 11656691649, + "artifact_sha256": "b168cae289e8a04ffa81a6a03fed8fd5fb302580ebae0ee827a379be718a6af5", + "python": "3.11.9", + "platform": "Windows-10-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.11.9\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\trace_showcase.py", + "--output", + "D:\\a\\_temp\\gem-ci\\showcase-trace.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.11.9\\x64\\python.exe", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "D:\\a\\_temp\\gem-ci\\pytest.xml" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.11.9\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "D:\\a\\_temp\\gem-ci\\source-docs.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.11.9\\x64\\python.exe", + "-m", + "build", + "--outdir", + "D:\\a\\pyGameMath\\pyGameMath\\dist" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.11.9\\x64\\python.exe", + "-m", + "twine", + "check", + "--strict", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.11.9\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--wheel", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "--sdist", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz", + "--output", + "D:\\a\\_temp\\gem-ci\\artifacts.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "51534af7b16bcb38ea7a0ede0179f32b43a8bc9aaf76ce110c28530d66c1bb62", + "gem-1.0.0.tar.gz": "e90bf3247dee0b4eca63cb66ae88b18a8b57837ab2c10d3a3161fbb6633a0c04" + } + }, + "environment": "3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]" + }, + { + "name": "gem-checks-Windows-py3.10-38016538984", + "stage": "full-validation", + "artifact_id": 11656636622, + "artifact_sha256": "81dfa8adf2b874f3a4511c8b132f4bcaa1781adffb8884e2a668cc3fd86f2776", + "python": "3.10.11", + "platform": "Windows-10-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.10.11\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\trace_showcase.py", + "--output", + "D:\\a\\_temp\\gem-ci\\showcase-trace.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.10.11\\x64\\python.exe", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "D:\\a\\_temp\\gem-ci\\pytest.xml" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.10.11\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "D:\\a\\_temp\\gem-ci\\source-docs.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.10.11\\x64\\python.exe", + "-m", + "build", + "--outdir", + "D:\\a\\pyGameMath\\pyGameMath\\dist" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.10.11\\x64\\python.exe", + "-m", + "twine", + "check", + "--strict", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.10.11\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--wheel", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "--sdist", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz", + "--output", + "D:\\a\\_temp\\gem-ci\\artifacts.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "e5013267ba7301b23531f3bbbf973ba9db7168185d72d9ce386e3fa132a326d4", + "gem-1.0.0.tar.gz": "928307c0b5f9372d46cd6d2fbd9d3daa15ea2059960e6a5de50768817bb8b453" + } + }, + "environment": "3.10.11 (tags/v3.10.11:7d4cc5a, Apr 5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]" + }, + { + "name": "gem-checks-macOS-py3.12-38016538984", + "stage": "full-validation", + "artifact_id": 11656581693, + "artifact_sha256": "657da1e1cda8b93c3c6ffc46b160fd8f0baf0a2308690f93e8eb7ba395199d0c", + "python": "3.12.10", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.12/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/Users/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.12/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/Users/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.12/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/Users/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.12/bin/python", + "-m", + "build", + "--outdir", + "/Users/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.12/bin/python", + "-m", + "twine", + "check", + "--strict", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.12/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/Users/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "9b4411bd9fa5e488c08a2c38e919b226944060281379a7ff834745d2095f34a1", + "gem-1.0.0.tar.gz": "3e5316de0fe219d59acbcc2e23d0a828b22fbdae862b0dd9656a183c67d149fb" + } + }, + "environment": "3.12.10 (v3.12.10:0cc81280367, Apr 8 2025, 08:46:59) [Clang 13.0.0 (clang-1300.0.29.30)]" + }, + { + "name": "gem-checks-Linux-py3.11-38016538984", + "stage": "full-validation", + "artifact_id": 11656556587, + "artifact_sha256": "13a5292250c1e6de63f41e45c1c692fea8a5208cd8050878fce8659b0ce05988", + "python": "3.11.17", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.17", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.17", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/opt/hostedtoolcache/Python/3.11.17/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/home/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.11.17/x64/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/home/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.11.17/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/home/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.11.17/x64/bin/python", + "-m", + "build", + "--outdir", + "/home/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.11.17/x64/bin/python", + "-m", + "twine", + "check", + "--strict", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.11.17/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/home/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "7090550f9fcec6e51a4bc91308e4c540618e9cdd915b339dfc3d7ae0033ba855", + "gem-1.0.0.tar.gz": "fc109a6c1c10b14cb0f41b8e25150036f12376c3a934d4fa035f318467ae0eca" + } + }, + "environment": "3.11.17 (main, Oct 1 2026, 14:32:31) [GCC 13.3.0]" + }, + { + "name": "gem-checks-Linux-py3.14-38016538984", + "stage": "full-validation", + "artifact_id": 11656472636, + "artifact_sha256": "0fb658ad15395aa93626e391031df5e923ae20b55ddd8eb66713743e1f65a455", + "python": "3.14.8", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.8", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.8", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/opt/hostedtoolcache/Python/3.14.8/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/home/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.14.8/x64/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/home/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.14.8/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/home/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.14.8/x64/bin/python", + "-m", + "build", + "--outdir", + "/home/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.14.8/x64/bin/python", + "-m", + "twine", + "check", + "--strict", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.14.8/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/home/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "4083ecb5db80eaa3f5546a8f0a587455cb24b5df3086553d44b68eeb05345685", + "gem-1.0.0.tar.gz": "2909e890b7ed20f2c685851ff7f476ab88a8cd2a35157ef5843168d3307ee669" + } + }, + "environment": "3.14.8 (main, Oct 1 2026, 02:38:33) [GCC 13.3.0]" + }, + { + "name": "gem-checks-Windows-py3.13-38016538984", + "stage": "full-validation", + "artifact_id": 11656451635, + "artifact_sha256": "e1beea4f35ba8f8afefdb9130f1d98cb1755a5e19b53617cea2b69bcd59a0826", + "python": "3.13.15", + "platform": "Windows-2025Server-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.13.15\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\trace_showcase.py", + "--output", + "D:\\a\\_temp\\gem-ci\\showcase-trace.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.13.15\\x64\\python.exe", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "D:\\a\\_temp\\gem-ci\\pytest.xml" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.13.15\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "D:\\a\\_temp\\gem-ci\\source-docs.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.13.15\\x64\\python.exe", + "-m", + "build", + "--outdir", + "D:\\a\\pyGameMath\\pyGameMath\\dist" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.13.15\\x64\\python.exe", + "-m", + "twine", + "check", + "--strict", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "C:\\hostedtoolcache\\windows\\Python\\3.13.15\\x64\\python.exe", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--wheel", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl", + "--sdist", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz", + "--output", + "D:\\a\\_temp\\gem-ci\\artifacts.json" + ], + "cwd": "D:\\a\\pyGameMath\\pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\pyGameMath\\pyGameMath\\dist\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "a58874b9ddfaff10b98163e3ca2cf7e8825f74a5d92d384540d0006a0db5cb73", + "gem-1.0.0.tar.gz": "cd496d625fcf0e8ed51eb7ca0e6da94c729a5724c7dd5283c24d46325bfc66b3" + } + }, + "environment": "3.13.15 (tags/v3.13.15:4061bc4, Aug 5 2026, 13:05:39) [MSC v.1944 64 bit (AMD64)]" + }, + { + "name": "gem-checks-Linux-py3.12-38016538984", + "stage": "full-validation", + "artifact_id": 11656437654, + "artifact_sha256": "1307869185aa5017910d6f8e584d4aa4011c6b97dbb69435b214f3623b633752", + "python": "3.12.15", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.15", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.15", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/opt/hostedtoolcache/Python/3.12.15/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/home/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.12.15/x64/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/home/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.12.15/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/home/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.12.15/x64/bin/python", + "-m", + "build", + "--outdir", + "/home/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.12.15/x64/bin/python", + "-m", + "twine", + "check", + "--strict", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.12.15/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/home/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "environment": "3.12.15 (main, Oct 1 2026, 02:35:59) [GCC 13.3.0]" + }, + { + "name": "gem-checks-macOS-py3.11-38016538984", + "stage": "full-validation", + "artifact_id": 11656322744, + "artifact_sha256": "b9423d483295a6b81665beda3b25edbf09846cf1580cc7bb7175f36e913ec3e8", + "python": "3.11.9", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.11/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/Users/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.11/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/Users/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.11/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/Users/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.11/bin/python", + "-m", + "build", + "--outdir", + "/Users/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.11/bin/python", + "-m", + "twine", + "check", + "--strict", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.11/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/Users/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "780f250e3903a6525295acb866ca3ad1fc3080c5557725875dd0e7b1889aa45a", + "gem-1.0.0.tar.gz": "33b659ffdb47d15af8a2f65c31341f6ec11ae57f7da2780bc1b52b2b16dc4e11" + } + }, + "environment": "3.11.9 (v3.11.9:de54cf5be3, Apr 2 2024, 07:12:50) [Clang 13.0.0 (clang-1300.0.29.30)]" + }, + { + "name": "gem-checks-macOS-py3.10-38016538984", + "stage": "full-validation", + "artifact_id": 11656232828, + "artifact_sha256": "96eac14c6504167290b856c1eb84bbc5ba126a0e00947491d4c9a81c57ff0d4a", + "python": "3.10.11", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.10/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/Users/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.10/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/Users/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.10/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/Users/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.10/bin/python", + "-m", + "build", + "--outdir", + "/Users/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.10/bin/python", + "-m", + "twine", + "check", + "--strict", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.10/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/Users/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "60dae1c22e8f29421a185e015cc52a29b65b1b3f8067069a7c9189a3ca281c39", + "gem-1.0.0.tar.gz": "073d79bc91fa8308a2e1ac388d51d727db650bebeea6dc336b03f32bc41dbf96" + } + }, + "environment": "3.10.11 (v3.10.11:7d4cc5aa85, Apr 4 2023, 19:05:19) [Clang 13.0.0 (clang-1300.0.29.30)]" + }, + { + "name": "gem-checks-macOS-py3.13-38016538984", + "stage": "full-validation", + "artifact_id": 11656162760, + "artifact_sha256": "ba9d1a87d3ea545645a042dab2506acf00368b2485cc3de40fc47f0f9c35e69a", + "python": "3.13.15", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/Users/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/Users/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/Users/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python", + "-m", + "build", + "--outdir", + "/Users/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python", + "-m", + "twine", + "check", + "--strict", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/Users/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/Users/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ef0d38e9f97c43d496b9c545f001a9ae88b4dfc1785c446ea5ba0097bcd0757d", + "gem-1.0.0.tar.gz": "36e191de816fb451f22894e25b155d6e77158a71daa21e42487c671495a998c6" + } + }, + "environment": "3.13.15 (v3.13.15:4061bc4c35f, Aug 5 2026, 09:08:51) [Clang 21.0.0 (clang-2100.1.1.101)]" + }, + { + "name": "gem-checks-Linux-py3.10-38016538984", + "stage": "full-validation", + "artifact_id": 11655892988, + "artifact_sha256": "814c765333235c3f1e5bd5b90bf6462a71ec678bf9407b4c79ada9e73478a00f", + "python": "3.10.22", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.22", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.22", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/opt/hostedtoolcache/Python/3.10.22/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/trace_showcase.py", + "--output", + "/home/runner/work/_temp/gem-ci/showcase-trace.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.10.22/x64/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/home/runner/work/_temp/gem-ci/pytest.xml" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.10.22/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/home/runner/work/_temp/gem-ci/source-docs.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.10.22/x64/bin/python", + "-m", + "build", + "--outdir", + "/home/runner/work/pyGameMath/pyGameMath/dist" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.10.22/x64/bin/python", + "-m", + "twine", + "check", + "--strict", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/opt/hostedtoolcache/Python/3.10.22/x64/bin/python", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz", + "--output", + "/home/runner/work/_temp/gem-ci/artifacts.json" + ], + "cwd": "/home/runner/work/pyGameMath/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/pyGameMath/pyGameMath/dist/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-ci", + "log": "sdist-docs.log" + } + ], + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "source_documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "d03394d6448d521cdd64042a4dad0581b71d4096e264e237193ae26eebba933e", + "gem-1.0.0.tar.gz": "8705162506b15cc443276bf4216600fa72e78ccfb6c10529b3d16d27a07f3072" + } + }, + "environment": "3.10.22 (main, Oct 1 2026, 14:30:20) [GCC 13.3.0]" + }, + { + "name": "gem-canonical-checks-macOS-py3.11-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656806623, + "artifact_sha256": "15ca1bd5bbaa18f99253a2bd1ef46be2a76c46775fa8d84ca50107dd6df3e0d8", + "python": "3.11.9", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-macOS-py3.13-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656616682, + "artifact_sha256": "e8a9ba84246a8478b25f29ac0f1139b5b3f26a2ce68161a4894521c6e3a549dc", + "python": "3.13.15", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Windows-py3.12-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656591746, + "artifact_sha256": "1e17633b2ceb0a1e61066455a0c0c9d64ea61f1e6ac70f099a014ddd7a63a866", + "python": "3.12.10", + "platform": "Windows-2025Server-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Windows-py3.13-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656422881, + "artifact_sha256": "19db5196b8c15fcbd54e3f8ac293340d75bff78cf5da5cde7a7480b5041acc82", + "python": "3.13.15", + "platform": "Windows-2025Server-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.15", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-macOS-py3.10-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656382887, + "artifact_sha256": "1190634f44fe7e486765e4faa423920998104c1d9d8aca431131a376e21dec74", + "python": "3.10.11", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Linux-py3.14-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656372828, + "artifact_sha256": "a8e7138250f70af0733be0e18ce696699378f16063237fac5ccd8da5319c8e54", + "python": "3.14.8", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.8", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.8", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-macOS-py3.14-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656067960, + "artifact_sha256": "4cbd4281ba9315184ee7ddea36c5ce9a2ada37db172972e3352ee3722d9676c8", + "python": "3.14.7", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.14/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.14/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Linux-py3.12-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656067942, + "artifact_sha256": "ef931e86b785aff1c52623e7ced6685863e290bdc91328ee76e4c40741449f08", + "python": "3.12.15", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.15", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.15", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Linux-py3.10-38016538984", + "stage": "canonical-installation", + "artifact_id": 11656008045, + "artifact_sha256": "d31af780646981e4017030441a16f4aab6186ea11c93740cd279e0ff7b634ee6", + "python": "3.10.22", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.22", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.22", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.10/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.10/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Windows-py3.14-38016538984", + "stage": "canonical-installation", + "artifact_id": 11655898157, + "artifact_sha256": "79bb0188e59dc45222bfdd3a11d10ba31486580b81a66a5be1381d0fdd388386", + "python": "3.14.7", + "platform": "Windows-2025Server-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.14.7", + "implementation": "CPython", + "platform": "Windows-2025Server-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-macOS-py3.12-38016538984", + "stage": "canonical-installation", + "artifact_id": 11655883162, + "artifact_sha256": "714fea51e65cf6c16d8f1296eb8873cbcc68c58044a8049b62b704380ef058e6", + "python": "3.12.10", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.12.10", + "implementation": "CPython", + "platform": "macOS-26.6.2-arm64-arm-64bit", + "package_root": "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/Users/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/Users/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/Users/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/Users/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Linux-py3.11-38016538984", + "stage": "canonical-installation", + "artifact_id": 11655848195, + "artifact_sha256": "5f5037a66b4a69a0694cf5e21de5e7304a809d9b6eeabf661c26b58d4948afa8", + "python": "3.11.17", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.17", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.17", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.11/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.11/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Linux-py3.13-38016538984", + "stage": "canonical-installation", + "artifact_id": 11655818091, + "artifact_sha256": "3e710f36621957014ba9be2698e0b316e91bdcf77e590087e45bf700b47b5b08", + "python": "3.13.16", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.16", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.13.16", + "implementation": "CPython", + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "package_root": "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.13/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/wheel-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/wheel-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "/home/runner/work/_temp/gem-canonical/gem-1.0.0.tar.gz" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-smoke.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/home/runner/work/pyGameMath/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/home/runner/work/_temp/gem-canonical-ci/sdist-environment/lib/python3.13/site-packages", + "--output", + "/home/runner/work/_temp/gem-canonical-ci/sdist-docs.json" + ], + "cwd": "/home/runner/work/_temp/gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Windows-py3.11-38016538984", + "stage": "canonical-installation", + "artifact_id": 11655803426, + "artifact_sha256": "1814331ec469498fdbe1458aeeb11d8b5a924f701e8f963a73193505b9337d08", + "python": "3.11.9", + "platform": "Windows-10-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.11.9", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + }, + { + "name": "gem-canonical-checks-Windows-py3.10-38016538984", + "stage": "canonical-installation", + "artifact_id": 11655798345, + "artifact_sha256": "244ef56e62acf3b4bde5bf5cdd72bbecf4d3cce5a82736d85f8d72e5f61896ba", + "python": "3.10.11", + "platform": "Windows-10-10.0.26100-SP0", + "status": "passed", + "installed": { + "wheel": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + }, + "sdist": { + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9, + "baseline_examples_preserved": 43 + }, + "smoke": { + "installed": { + "python": "3.10.11", + "implementation": "CPython", + "platform": "Windows-10-10.0.26100-SP0", + "package_root": "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + } + } + }, + "commands": [ + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0-py3-none-any.whl" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\wheel-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "D:\\a\\_temp\\gem-canonical\\gem-1.0.0.tar.gz" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\verify_distribution.py", + "--installed-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-smoke.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Scripts\\python.exe", + "-I", + "-X", + "utf8", + "D:\\a\\pyGameMath\\pyGameMath\\tools\\check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-environment\\Lib\\site-packages", + "--output", + "D:\\a\\_temp\\gem-canonical-ci\\sdist-docs.json" + ], + "cwd": "D:\\a\\_temp\\gem-canonical-ci", + "log": "sdist-docs.log" + } + ], + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + } + } + ], + "local_tests": [ + { + "interpreter_minor": 310, + "tests": { + "tests": 4047, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4047, + "xfailed": 0 + }, + "junit_file": "/tmp/phase5c-pytest-310.xml", + "source_commit": "906ad2771e535e8911aa2906e26bbb0d681b13b5" + }, + { + "interpreter_minor": 311, + "tests": { + "tests": 4047, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4047, + "xfailed": 0 + }, + "junit_file": "/tmp/phase5c-pytest-311.xml", + "source_commit": "906ad2771e535e8911aa2906e26bbb0d681b13b5" + }, + { + "interpreter_minor": 312, + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "junit_file": "/tmp/phase5c-final-ci/pytest.xml", + "source_commit": "fb71f4feb2adcf20533afdeab961fb0db0a4a499" + }, + { + "interpreter_minor": 313, + "tests": { + "tests": 4047, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4047, + "xfailed": 0 + }, + "junit_file": "/tmp/phase5c-pytest-313.xml", + "source_commit": "906ad2771e535e8911aa2906e26bbb0d681b13b5" + }, + { + "interpreter_minor": 314, + "tests": { + "tests": 4047, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4047, + "xfailed": 0 + }, + "junit_file": "/tmp/phase5c-pytest-314.xml", + "source_commit": "906ad2771e535e8911aa2906e26bbb0d681b13b5" + } + ], + "local_pipeline": { + "python": "3.12.14", + "platform": "Linux-6.18.44-x86_64-with-glibc2.41", + "commands": [ + { + "argv": [ + "/tmp/phase5a-py312/bin/python", + "/workspace/pyGameMath/tools/trace_showcase.py", + "--output", + "/tmp/phase5c-final-ci/showcase-trace.json" + ], + "cwd": "/workspace/pyGameMath", + "log": "showcase-trace.log" + }, + { + "argv": [ + "/tmp/phase5a-py312/bin/python", + "-m", + "pytest", + "-q", + "-o", + "junit_family=legacy", + "--junitxml", + "/tmp/phase5c-final-ci/pytest.xml" + ], + "cwd": "/workspace/pyGameMath", + "log": "pytest.log" + }, + { + "argv": [ + "/tmp/phase5a-py312/bin/python", + "/workspace/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--output", + "/tmp/phase5c-final-ci/source-docs.json" + ], + "cwd": "/workspace/pyGameMath", + "log": "source-docs.log" + }, + { + "argv": [ + "/tmp/phase5a-py312/bin/python", + "-m", + "build", + "--outdir", + "/tmp/phase5c-final-assets", + "--no-isolation" + ], + "cwd": "/workspace/pyGameMath", + "log": "build.log" + }, + { + "argv": [ + "/tmp/phase5a-py312/bin/python", + "-m", + "twine", + "check", + "--strict", + "/tmp/phase5c-final-assets/gem-1.0.0-py3-none-any.whl", + "/tmp/phase5c-final-assets/gem-1.0.0.tar.gz" + ], + "cwd": "/workspace/pyGameMath", + "log": "twine.log" + }, + { + "argv": [ + "/tmp/phase5a-py312/bin/python", + "/workspace/pyGameMath/tools/verify_distribution.py", + "--wheel", + "/tmp/phase5c-final-assets/gem-1.0.0-py3-none-any.whl", + "--sdist", + "/tmp/phase5c-final-assets/gem-1.0.0.tar.gz", + "--output", + "/tmp/phase5c-final-ci/artifacts.json" + ], + "cwd": "/workspace/pyGameMath", + "log": "artifacts.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0", + "--no-index", + "--find-links", + "/tmp/phase5b-wheelhouse" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "--no-index", + "/tmp/phase5c-final-assets/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/tmp/phase5c-final-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-final-ci/wheel-smoke.json" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/tmp/phase5c-final-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-final-ci/wheel-docs.json" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0", + "--no-index", + "--find-links", + "/tmp/phase5b-wheelhouse" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "--no-index", + "/tmp/phase5c-final-assets/gem-1.0.0.tar.gz" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/tmp/phase5c-final-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-final-ci/sdist-smoke.json" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/tmp/phase5c-final-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/tmp/phase5c-final-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-final-ci/sdist-docs.json" + ], + "cwd": "/tmp/phase5c-final-ci", + "log": "sdist-docs.log" + } + ], + "status": "passed", + "working_directory": "/workspace/pyGameMath", + "tests": { + "tests": 4050, + "failures": 0, + "errors": 0, + "skipped": 0, + "passed": 4050, + "xfailed": 0 + }, + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9 + }, + "artifacts": { + "artifacts": { + "metadata": { + "Metadata-Version": "2.4", + "Name": "gem", + "Version": "1.0.0", + "Summary": "Pure-Python mathematics for games and graphics", + "Author-email": "Alex Marinescu ", + "License-Expression": "BSD-2-Clause", + "Project-URL": "Issues, https://github.com/AlexMarinescu/pyGameMath/issues", + "Keywords": "math,game,graphics,library", + "Classifier": "Topic :: Software Development :: Libraries", + "Requires-Python": ">=3.10", + "Description-Content-Type": "text/markdown", + "License-File": "LICENSE", + "Requires-Dist": "six", + "Dynamic": "license-file" + }, + "runtime_files": 18, + "runtime_sha256": { + "gem/__init__.py": "ed387aee9744786790d8c56cda8f17e9c311039ef37ba9af0216d782494de735", + "gem/common.py": "2384eae0490eff93499fca6fe56cc25074119b6955b40ca3d6823f8099406ec8", + "gem/matrix.py": "e539db231c9b71bc0846954f2a0fad0840b0b03ffd78ae65a4189a634b56c17c", + "gem/plane.py": "bbffce137d4885d3587efcb0aa0f2d5084d12191f9c62efb54e2cbe4dd9033f6", + "gem/quaternion.py": "c17e8fd731d601e36ff21bae86613e1f4982e6275b07d1d27be6f6405dff8059", + "gem/ray.py": "307dfac3a68a2235c3342d4bfe0d93fd15335dba4c28eff4cf6b79ae6167c1a4", + "gem/vector.py": "df658aa596999334153e143c0801eabc5e5fb4e5bc402770e78a0178dc83c28c", + "gem/spherical_harmonics.py": "25bb90b46e4ba5175e320a7f232ac6a2523b31d495e82412db5bdc9579f0d06b", + "gem/_version.py": "49a1ce110282313f047abcfceec9291077a8a1d8495afae37177e05511144a4d", + "gem/legendre.py": "bcad8a96d35f47eb4f03a1535cf5083017a351e89129534b6acb673966a254f8", + "gem/bezier.py": "1d354070a425ea0cb99e590f984f1dd86cf5b2a03432bee848f3352f85fc75b3", + "gem/experimental/__init__.py": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "gem/experimental/bezier.py": "4d61b9ad9b6a807101a06e4641b74dae96325a82cdc5796bd2326f7f1afdaf15", + "gem/experimental/legendre.py": "4f1fb87056d71982405e1cd5d83fbb07fe9f8a9c464d18ac641486cc47633db5", + "gem/experimental/sph.py": "192b1c96295ddf6585da4c91c1da372b5c4f53bc844ee9125ff38b913496ff0d", + "gem/experimental/sph_irradiance_map.py": "e7d8fa175ad566fb2d4def36978d632a537e930b5acb02396c906ae1465bab94", + "gem/experimental/sph_sample.py": "fbf10456e724005116524fa797474fe767cbf0224468cfc878e5fd8e6f278c15", + "gem/experimental/_bezier_legacy.py": "39f9522eaeb171837e7797ab604bb4bacf718053375266a61c39a0de9217a034" + }, + "wheel": { + "name": "gem-1.0.0-py3-none-any.whl", + "sha256": "2a976b59f5b04e0338c09975a6efe22860baad4074b630fc2e680bdf4cf23586", + "files": [ + "gem-1.0.0.dist-info/METADATA", + "gem-1.0.0.dist-info/RECORD", + "gem-1.0.0.dist-info/WHEEL", + "gem-1.0.0.dist-info/licenses/LICENSE", + "gem-1.0.0.dist-info/top_level.txt", + "gem/__init__.py", + "gem/_version.py", + "gem/bezier.py", + "gem/common.py", + "gem/experimental/__init__.py", + "gem/experimental/_bezier_legacy.py", + "gem/experimental/bezier.py", + "gem/experimental/legendre.py", + "gem/experimental/sph.py", + "gem/experimental/sph_irradiance_map.py", + "gem/experimental/sph_sample.py", + "gem/legendre.py", + "gem/matrix.py", + "gem/plane.py", + "gem/quaternion.py", + "gem/ray.py", + "gem/spherical_harmonics.py", + "gem/vector.py" + ] + }, + "sdist": { + "name": "gem-1.0.0.tar.gz", + "sha256": "2e62f62a5a6c08826b227885b331694ca99fed5441ef9c10aab3f2f97d3ce6a9", + "files": [ + ".landscape.yaml", + ".travis.yml", + "LICENSE", + "MANIFEST.in", + "PKG-INFO", + "README.md", + "README.rst", + "ROADMAP.md", + "audit/BENCHMARKS.md", + "audit/COMPATIBILITY.md", + "audit/CONVENTIONS.md", + "audit/PHASE1.md", + "audit/PHASE1B-WIKI.md", + "audit/PHASE2-DECISIONS.md", + "audit/PHASE2A.md", + "audit/PHASE2B.md", + "audit/PHASE2C.md", + "audit/PHASE2D1.md", + "audit/PHASE2D2.md", + "audit/PHASE2D3.md", + "audit/PHASE2D4.md", + "audit/PHASE2E1.md", + "audit/PHASE2E2.md", + "audit/PHASE2E3.md", + "audit/PHASE2E4.md", + "audit/PHASE2E5.md", + "audit/PHASE2F1.md", + "audit/PHASE2F2.md", + "audit/PHASE2F3A.md", + "audit/PHASE2F3B.md", + "audit/PHASE2F4.md", + "audit/PHASE2F5.md", + "audit/PHASE2F5C.md", + "audit/PHASE2F5D.md", + "audit/PHASE2F6.md", + "audit/PHASE2F7.md", + "audit/PHASE2G.md", + "audit/PHASE3A-PERFORMANCE.md", + "audit/PHASE3B-MATRIX-INVERSE.md", + "audit/PHASE3C-VECTOR-QUATERNION.md", + "audit/PHASE3D-BEZIER-SH.md", + "audit/PHASE3E-PERFORMANCE-GUARDS.md", + "audit/PHASE4FB-README.md", + "audit/PHASE4FC-DOCUMENTATION.md", + "audit/PHASE4G1-CORE-REVIEW.md", + "audit/PHASE4G1R-QUATERNION-REPAIRS.md", + "audit/PHASE4G2-CURVES-LEGENDRE.md", + "audit/PHASE4G2R-NUMERICAL-REPAIRS.md", + "audit/PHASE4G3-SPHERICAL-HARMONICS.md", + "audit/PHASE4G3R-NEAR-POLE-REPAIR.md", + "audit/PHASE4G4-GEOMETRY.md", + "audit/PHASE4G4R-GEOMETRY-REPAIR.md", + "audit/PHASE4G5-FINAL-INTEGRATION.md", + "audit/PHASE4G5R-SLERP-REPAIR.md", + "audit/PHASE5A-PACKAGING.md", + "audit/PHASE5B-CI-RELEASE.md", + "audit/PHASE5C-RELEASE-CANDIDATE.md", + "audit/PULL_REQUESTS.md", + "audit/README.md", + "audit/benchmark-numerical-inversion.py", + "audit/benchmark-quaternion-interpolation.py", + "audit/benchmark-results.json", + "audit/geometry_repair_smoke.py", + "audit/geometry_reproductions.py", + "audit/phase1b-test-results.json", + "audit/phase2a-test-results.json", + "audit/phase2b-test-results.json", + "audit/phase2c-test-results.json", + "audit/phase2d1-test-results.json", + "audit/phase2d2-test-results.json", + "audit/phase2d3-test-results.json", + "audit/phase2d4-test-results.json", + "audit/phase2e1-test-results.json", + "audit/phase2e2-test-results.json", + "audit/phase2e3-test-results.json", + "audit/phase2e4-interpolation-measurements.json", + "audit/phase2e4-test-results.json", + "audit/phase2e5-test-results.json", + "audit/phase2f1-test-results.json", + "audit/phase2f2-inversion-benchmarks.json", + "audit/phase2f2-test-results.json", + "audit/phase2f3a-test-results.json", + "audit/phase2f3b-test-results.json", + "audit/phase2f4-benchmarks.json", + "audit/phase2f4-test-results.json", + "audit/phase2f5-test-results.json", + "audit/phase2f5c-benchmarks.json", + "audit/phase2f5c-test-results.json", + "audit/phase2f5d-test-results.json", + "audit/phase2f6-test-results.json", + "audit/phase2f7-test-results.json", + "audit/phase2g-benchmarks.json", + "audit/phase2g-test-results.json", + "audit/phase3a-benchmarks.json", + "audit/phase3a-repeat.json", + "audit/phase3a-reproducibility.json", + "audit/phase3a-test-results.json", + "audit/phase3a-variability-recheck.json", + "audit/phase3b-benchmarks.json", + "audit/phase3b-equivalence.json", + "audit/phase3b-performance-summary.json", + "audit/phase3b-repeat.json", + "audit/phase3b-test-results.json", + "audit/phase3c-benchmarks.json", + "audit/phase3c-equivalence.json", + "audit/phase3c-followup.json", + "audit/phase3c-performance-summary.json", + "audit/phase3c-repeat.json", + "audit/phase3c-test-results.json", + "audit/phase3d-benchmarks.json", + "audit/phase3d-cache-memory.json", + "audit/phase3d-equivalence.json", + "audit/phase3d-hdr-reference.json", + "audit/phase3d-performance-summary.json", + "audit/phase3d-repeat.json", + "audit/phase3d-test-results.json", + "audit/phase3e-comparison.json", + "audit/phase3e-extended.json", + "audit/phase3e-hdr-reference.json", + "audit/phase3e-historical-comparison.json", + "audit/phase3e-profiles.json", + "audit/phase3e-quick.json", + "audit/phase3e-repeat.json", + "audit/phase3e-reporting-scenarios.json", + "audit/phase3e-verification.json", + "audit/phase4fc-screenshots/home-dark-viewport.png", + "audit/phase4fc-screenshots/home-light-viewport.png", + "audit/phase4fc-screenshots/mobile-drawer.png", + "audit/phase4fc-verification.json", + "audit/phase4g1-test-results.json", + "audit/phase4g1r-performance-repeat.json", + "audit/phase4g1r-performance.json", + "audit/phase4g1r-test-results.json", + "audit/phase4g2-test-results.json", + "audit/phase4g2r-performance-repeat.json", + "audit/phase4g2r-performance.json", + "audit/phase4g2r-test-results.json", + "audit/phase4g3-test-results.json", + "audit/phase4g3r-performance-repeat.json", + "audit/phase4g3r-performance.json", + "audit/phase4g3r-verification.json", + "audit/phase4g4-verification.json", + "audit/phase4g4r-performance-repeat.json", + "audit/phase4g4r-performance.json", + "audit/phase4g4r-verification.json", + "audit/phase4g5-verification.json", + "audit/phase4g5_collect.py", + "audit/phase4g5_verify.py", + "audit/phase4g5r-performance-repeat.json", + "audit/phase4g5r-performance-third.json", + "audit/phase4g5r-performance.json", + "audit/phase4g5r-verification.json", + "audit/phase4g5r_collect.py", + "audit/phase5b-verification.json", + "audit/retired-tests/README.md", + "audit/test-results.json", + "audit/verify_geometry_repair.py", + "audit/wiki-snapshot/Common-Functions.md", + "audit/wiki-snapshot/Home.md", + "audit/wiki-snapshot/Matrix-Class.md", + "audit/wiki-snapshot/Plane-Class.md", + "audit/wiki-snapshot/Quaternion-Class.md", + "audit/wiki-snapshot/Ray-Class.md", + "audit/wiki-snapshot/Vector-Class.md", + "audit/wiki-snapshot/manifest.json", + "benchmarks/README.md", + "benchmarks/REGRESSION_POLICY.md", + "benchmarks/baseline.py", + "benchmarks/bezier_sh.py", + "benchmarks/compare.py", + "benchmarks/core_baseline.py", + "benchmarks/curve_repairs.py", + "benchmarks/curve_wheel_smoke.py", + "benchmarks/final_contracts.py", + "benchmarks/final_integration_audit.py", + "benchmarks/geometry_repair_compare.py", + "benchmarks/matrix_inverse.py", + "benchmarks/measure_sh_cache.py", + "benchmarks/quaternion_repairs.py", + "benchmarks/recheck_variability.py", + "benchmarks/run_core.py", + "benchmarks/sh_near_pole.py", + "benchmarks/slerp_repairs.py", + "benchmarks/slerp_wheel_smoke.py", + "benchmarks/summarize_bezier_sh.py", + "benchmarks/summarize_matrix_inverse.py", + "benchmarks/summarize_vector_quaternion.py", + "benchmarks/vector_quaternion.py", + "benchmarks/verify_bezier_sh.py", + "benchmarks/verify_hdr_reference.py", + "benchmarks/verify_inverse_baseline.py", + "benchmarks/verify_vector_quaternion.py", + "docs/EXPERIMENTAL_MIGRATION.md", + "docs/QUATERNIONS.md", + "docs/RAYS.md", + "docs/README.md", + "docs/SPHERICAL_HARMONICS.md", + "docs/VECTOR_VIEWPORT_CONTRACTS.md", + "docs/api/bezier.md", + "docs/api/common.md", + "docs/api/coverage.json", + "docs/api/coverage.md", + "docs/api/decisions.md", + "docs/api/index.md", + "docs/api/legacy.md", + "docs/api/legendre.md", + "docs/api/matrix.md", + "docs/api/plane.md", + "docs/api/projection.md", + "docs/api/quaternion.md", + "docs/api/ray.md", + "docs/api/spherical-harmonics.md", + "docs/api/transformations.md", + "docs/api/vector.md", + "docs/api/verification-results.json", + "docs/architecture/api-inventory.md", + "docs/architecture/compatibility.md", + "docs/architecture/conventions.md", + "docs/architecture/notation.md", + "docs/architecture/philosophy.md", + "docs/assets/diagrams/legendre.svg", + "docs/assets/stylesheets/extra.css", + "docs/development/ci-release.md", + "docs/development/contributing.md", + "docs/development/documentation-stack.md", + "docs/development/packaging.md", + "docs/development/release-notes-1.0.0.md", + "docs/development/releases.md", + "docs/development/roadmap.md", + "docs/development/verification.md", + "docs/development/visual-overhaul.md", + "docs/development/website-verification.json", + "docs/development/website-verification.md", + "docs/development/website.md", + "docs/development/wiki.md", + "docs/examples/ASSET-MANIFEST.md", + "docs/examples/gallery/bezier.md", + "docs/examples/gallery/lighting.md", + "docs/examples/gallery/quaternions.md", + "docs/examples/gallery/transforms.md", + "docs/examples/gallery/vectors.md", + "docs/examples/index.md", + "docs/examples/verification-results.json", + "docs/examples/verification.md", + "docs/getting-started/README.md", + "docs/getting-started/installation.md", + "docs/getting-started/quick-start.md", + "docs/getting-started/verification-results.json", + "docs/getting-started/verification.md", + "docs/index.md", + "docs/overrides/404.html", + "docs/overrides/partials/logo.html", + "docs/tutorials/bezier.md", + "docs/tutorials/camera.md", + "docs/tutorials/decisions.md", + "docs/tutorials/geometry.md", + "docs/tutorials/index.md", + "docs/tutorials/interop.md", + "docs/tutorials/lighting.md", + "docs/tutorials/numerical.md", + "docs/tutorials/quaternions.md", + "docs/tutorials/transformations.md", + "docs/tutorials/vectors.md", + "docs/tutorials/verification-results.json", + "docs/tutorials/verification.md", + "docs/wiki-migration/README.md", + "docs/wiki-migration/manifest.json", + "docs/wiki-migration/pages/Contributing.md", + "docs/wiki-migration/pages/Development-Roadmap.md", + "docs/wiki-migration/pages/Documentation.md", + "docs/wiki-migration/pages/Examples-and-Tutorials.md", + "docs/wiki-migration/pages/Getting-Started.md", + "docs/wiki-migration/pages/Historical-Home.md", + "docs/wiki-migration/pages/Historical-and-Legacy-Notes.md", + "docs/wiki-migration/pages/Home.md", + "docs/wiki-migration/pages/Mathematical-Conventions.md", + "docs/wiki-migration/pages/_Sidebar.md", + "examples/hdr_sh/README.md", + "examples/hdr_sh/__init__.py", + "examples/hdr_sh/diffuse.glsl", + "examples/hdr_sh/environment.py", + "examples/hdr_sh/fixtures/asymmetric.json", + "examples/hdr_sh/reference.py", + "examples/hdr_sh/regenerate.py", + "examples/hdr_sh/visualize.py", + "examples/output/irradiance_coefficients.glsl", + "examples/output/reference.json", + "examples/output/sh_original.png", + "examples/output/sh_original_coefficients.glsl", + "examples/output/sh_rotated.png", + "examples/output/sh_rotated_coefficients.glsl", + "examples/output/visualization.json", + "examples/showcase/README.md", + "examples/showcase/__init__.py", + "examples/showcase/output/bezier.svg", + "examples/showcase/output/measurements.json", + "examples/showcase/output/quaternions.svg", + "examples/showcase/output/transforms.svg", + "examples/showcase/output/vectors.svg", + "examples/showcase/regenerate.py", + "examples/showcase/scenes.py", + "examples/showcase/svg.py", + "examples/showcase/verify.py", + "gem.egg-info/SOURCES.txt", + "gem/__init__.py", + "gem/_version.py", + "gem/bezier.py", + "gem/common.py", + "gem/experimental/__init__.py", + "gem/experimental/_bezier_legacy.py", + "gem/experimental/bezier.py", + "gem/experimental/legendre.py", + "gem/experimental/sph.py", + "gem/experimental/sph_irradiance_map.py", + "gem/experimental/sph_sample.py", + "gem/legendre.py", + "gem/matrix.py", + "gem/plane.py", + "gem/quaternion.py", + "gem/ray.py", + "gem/spherical_harmonics.py", + "gem/vector.py", + "mkdocs.yml", + "pyproject.toml", + "requirements-audit.txt", + "requirements-build.txt", + "requirements-docs-browser.txt", + "requirements-docs.txt", + "setup.cfg", + "setup.py", + "tests/__init__.py", + "tests/conftest.py", + "tests/helpers.py", + "tests/test_angles_refraction.py", + "tests/test_api_edges.py", + "tests/test_bezier.py", + "tests/test_bezier_sampling.py", + "tests/test_bezier_sh_optimization.py", + "tests/test_core_algebra_audit.py", + "tests/test_core_packaging.py", + "tests/test_curve_numerical_repairs.py", + "tests/test_curves_legendre_audit.py", + "tests/test_documentation_infrastructure.py", + "tests/test_documentation_overhaul.py", + "tests/test_experimental.py", + "tests/test_final_integration_audit.py", + "tests/test_final_vector_contracts.py", + "tests/test_geometry_audit.py", + "tests/test_geometry_repair.py", + "tests/test_hdr_sh_example.py", + "tests/test_inverse_optimization.py", + "tests/test_legendre.py", + "tests/test_matrix.py", + "tests/test_matrix_division.py", + "tests/test_numerical_robustness.py", + "tests/test_performance_reporting.py", + "tests/test_pivot_shear.py", + "tests/test_plane_ray.py", + "tests/test_planes.py", + "tests/test_projection.py", + "tests/test_quaternion.py", + "tests/test_quaternion_contracts.py", + "tests/test_quaternion_interpolation.py", + "tests/test_quaternion_matrix.py", + "tests/test_quaternion_numerical_repairs.py", + "tests/test_quaternion_operations.py", + "tests/test_quaternion_powers.py", + "tests/test_rays.py", + "tests/test_release_packaging.py", + "tests/test_release_workflows.py", + "tests/test_sh_near_pole_repair.py", + "tests/test_sh_rotation.py", + "tests/test_showcase_examples.py", + "tests/test_slerp_numerical_repair.py", + "tests/test_spherical_harmonics.py", + "tests/test_spherical_harmonics_audit.py", + "tests/test_transformations.py", + "tests/test_vector_common.py", + "tests/test_vector_quaternion_optimization.py", + "tests/test_wiki_contracts.py", + "tools/check_architecture_docs.py", + "tools/check_site.py", + "tools/check_site_browser.py", + "tools/check_workflows.py", + "tools/ci_validate.py", + "tools/github_release.py", + "tools/prepare_wiki.py", + "tools/release_gate.py", + "tools/site/collect_verification.py", + "tools/site/hooks.py", + "tools/site/legendre_diagram.py", + "tools/trace_showcase.py", + "tools/verify_distribution.py" + ] + } + } + }, + "installed": { + "wheel": { + "smoke": { + "installed": { + "python": "3.12.14", + "implementation": "CPython", + "platform": "Linux-6.18.44-x86_64-with-glibc2.41", + "package_root": "/tmp/phase5c-final-ci/wheel-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + }, + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9 + } + }, + "sdist": { + "smoke": { + "installed": { + "python": "3.12.14", + "implementation": "CPython", + "platform": "Linux-6.18.44-x86_64-with-glibc2.41", + "package_root": "/tmp/phase5c-final-ci/sdist-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + }, + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9 + } + } + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "fb71f4feb2adcf20533afdeab961fb0db0a4a499", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "2a976b59f5b04e0338c09975a6efe22860baad4074b630fc2e680bdf4cf23586", + "gem-1.0.0.tar.gz": "2e62f62a5a6c08826b227885b331694ca99fed5441ef9c10aab3f2f97d3ce6a9" + } + } + }, + "local_exact_archive_installation": { + "python": "3.12.14", + "platform": "Linux-6.18.44-x86_64-with-glibc2.41", + "commands": [ + { + "argv": [ + "/tmp/phase5c-exact-ci/wheel-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0", + "--no-index", + "--find-links", + "/tmp/phase5b-wheelhouse" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "wheel-dependencies.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/wheel-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "--no-index", + "/tmp/phase5c-final-assets/gem-1.0.0-py3-none-any.whl" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "wheel-install.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/tmp/phase5c-exact-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-exact-ci/wheel-smoke.json" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "wheel-smoke.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/wheel-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/tmp/phase5c-exact-ci/wheel-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-exact-ci/wheel-docs.json" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "wheel-docs.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/sdist-environment/bin/python", + "-m", + "pip", + "install", + "six==1.17.0", + "setuptools==80.9.0", + "wheel==0.48.0", + "--no-index", + "--find-links", + "/tmp/phase5b-wheelhouse" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "sdist-dependencies.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/sdist-environment/bin/python", + "-I", + "-m", + "pip", + "install", + "--no-deps", + "--no-build-isolation", + "--no-index", + "/tmp/phase5c-final-assets/gem-1.0.0.tar.gz" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "sdist-install.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/verify_distribution.py", + "--installed-root", + "/tmp/phase5c-exact-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-exact-ci/sdist-smoke.json" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "sdist-smoke.log" + }, + { + "argv": [ + "/tmp/phase5c-exact-ci/sdist-environment/bin/python", + "-I", + "-X", + "utf8", + "/workspace/pyGameMath/tools/check_architecture_docs.py", + "--examples", + "--getting-started", + "--api-reference", + "--tutorials", + "--showcase", + "--website", + "--package-root", + "/tmp/phase5c-exact-ci/sdist-environment/lib/python3.12/site-packages", + "--output", + "/tmp/phase5c-exact-ci/sdist-docs.json" + ], + "cwd": "/tmp/phase5c-exact-ci", + "log": "sdist-docs.log" + } + ], + "status": "passed", + "source_commit": "fb71f4feb2adcf20533afdeab961fb0db0a4a499", + "integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "fb71f4feb2adcf20533afdeab961fb0db0a4a499", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "2a976b59f5b04e0338c09975a6efe22860baad4074b630fc2e680bdf4cf23586", + "gem-1.0.0.tar.gz": "2e62f62a5a6c08826b227885b331694ca99fed5441ef9c10aab3f2f97d3ce6a9" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + }, + "installed": { + "wheel": { + "smoke": { + "installed": { + "python": "3.12.14", + "implementation": "CPython", + "platform": "Linux-6.18.44-x86_64-with-glibc2.41", + "package_root": "/tmp/phase5c-exact-ci/wheel-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + }, + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9 + } + }, + "sdist": { + "smoke": { + "installed": { + "python": "3.12.14", + "implementation": "CPython", + "platform": "Linux-6.18.44-x86_64-with-glibc2.41", + "package_root": "/tmp/phase5c-exact-ci/sdist-environment/lib/python3.12/site-packages", + "version": "1.0.0", + "runtime_files_matched": 18, + "smoke": "passed" + } + }, + "documentation": { + "source_declarations_checked": 268, + "examples_executed": 43, + "tutorials_preserved": 9 + } + } + } + }, + "candidate_manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "candidate_download": { + "id": 11656447664, + "name": "gem-candidate-38016538984", + "size_in_bytes": 1497839, + "url": "https://api.github.com/repos/AlexMarinescu/pyGameMath/actions/artifacts/11656447664", + "archive_download_url": "https://api.github.com/repos/AlexMarinescu/pyGameMath/actions/artifacts/11656447664/zip", + "expired": false, + "created_at": "2026-10-10T02:20:10Z", + "expires_at": "2026-10-24T02:20:09Z", + "updated_at": "2026-10-10T02:20:10Z", + "digest": "sha256:3aef3e7232fe82ddb10cbacd419a91260e82393886ef12735b1841925126b4bd", + "workflow_run": { + "id": 38016538984, + "repository_id": 4026921, + "head_repository_id": 4026921, + "head_branch": "release/phase5c-candidate", + "head_sha": "fb71f4feb2adcf20533afdeab961fb0db0a4a499" + }, + "path": "/workspace/attachments/dd0687ab-fc5b-43bd-86d7-76d036662e79/github-actions-artifact-11656447664.zip" + }, + "preserved_artifact_directory": "/workspace/release-candidates/phase5c-fb71f4f", + "asset_sha256": { + "SHA256SUMS": "ac228c890608bc8c87b67b57b29f7b5c82d2f59d5dd8402490dcd0aa7e2a309c", + "candidate-manifest.json": "8c84847dffa0759f504db1b2ebf4ccd89583c848832a6fb15fe7aeb3fdb0ee56", + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027", + "INSTALL.md": "ff0a41a420db7bb41a40772703cd5b360555167fb7188985aa6ac6e3c138c91e" + }, + "candidate_integrity": { + "status": "artifact integrity verified", + "manifest": { + "schema_version": 1, + "distribution": "gem", + "version": "1.0.0", + "tag": "v1.0.0", + "source_commit": "775fcafddcc6c930aa24e0ba9d963b9f8885c10d", + "source_tree": "51cc45700514e8c4f11fad7b0a67c0ed882b3b9d", + "source_clean": true, + "files": { + "gem-1.0.0-py3-none-any.whl": "ee06ecc4ca27ea5934fed62149bf2cc4a62c029c33abcd3f059da1df39b32c95", + "gem-1.0.0.tar.gz": "b63ca118bbe3f409db042a28952374b45d5c92c4e0ffccf6f7bbfef795b42027" + } + }, + "runtime_files": 18, + "publication_enabled": false, + "ownership_verified": false + }, + "reproducibility": { + "gem-1.0.0-py3-none-any.whl": { + "first_sha256": "2a976b59f5b04e0338c09975a6efe22860baad4074b630fc2e680bdf4cf23586", + "repeat_sha256": "4b4e19249556e59090f327dfeb9485ec6dca7b368774e479e645f986445b10b1", + "byte_identical": false, + "file_payloads_identical": true, + "file_count": 23, + "timestamp_changes": [ + { + "file": "gem-1.0.0.dist-info/licenses/LICENSE", + "first": [ + 2026, + 10, + 10, + 2, + 20, + 14 + ], + "repeat": [ + 2026, + 10, + 10, + 2, + 19, + 50 + ] + }, + { + "file": "gem-1.0.0.dist-info/METADATA", + "first": [ + 2026, + 10, + 10, + 2, + 20, + 14 + ], + "repeat": [ + 2026, + 10, + 10, + 2, + 19, + 50 + ] + }, + { + "file": "gem-1.0.0.dist-info/WHEEL", + "first": [ + 2026, + 10, + 10, + 2, + 20, + 14 + ], + "repeat": [ + 2026, + 10, + 10, + 2, + 19, + 50 + ] + }, + { + "file": "gem-1.0.0.dist-info/top_level.txt", + "first": [ + 2026, + 10, + 10, + 2, + 20, + 14 + ], + "repeat": [ + 2026, + 10, + 10, + 2, + 19, + 50 + ] + }, + { + "file": "gem-1.0.0.dist-info/RECORD", + "first": [ + 2026, + 10, + 10, + 2, + 20, + 14 + ], + "repeat": [ + 2026, + 10, + 10, + 2, + 19, + 50 + ] + } + ] + }, + "gem-1.0.0.tar.gz": { + "first_sha256": "2e62f62a5a6c08826b227885b331694ca99fed5441ef9c10aab3f2f97d3ce6a9", + "repeat_sha256": "ab0422c1c8ceaf46bb16000d0ee1fc08b79b2ab5bd5ab9c628afb97c4ebdbbc0", + "byte_identical": false, + "file_payloads_identical": true, + "file_count": 393, + "mtime_changes": [ + { + "file": "gem-1.0.0", + "first": 1791598812.1160789, + "repeat": 1791598790.1435902 + }, + { + "file": "gem-1.0.0/PKG-INFO", + "first": 1791598812.1160388, + "repeat": 1791598790.143521 + }, + { + "file": "gem-1.0.0/audit", + "first": 1791598812.0807927, + "repeat": 1791598790.1087587 + }, + { + "file": "gem-1.0.0/audit/phase4fc-screenshots", + "first": 1791598812.081378, + "repeat": 1791598790.1094055 + }, + { + "file": "gem-1.0.0/audit/retired-tests", + "first": 1791598812.0819988, + "repeat": 1791598790.1105607 + }, + { + "file": "gem-1.0.0/audit/wiki-snapshot", + "first": 1791598812.083632, + "repeat": 1791598790.1116292 + }, + { + "file": "gem-1.0.0/benchmarks", + "first": 1791598812.0883508, + "repeat": 1791598790.1153696 + }, + { + "file": "gem-1.0.0/docs", + "first": 1791598812.0890882, + "repeat": 1791598790.1161544 + }, + { + "file": "gem-1.0.0/docs/api", + "first": 1791598812.0912542, + "repeat": 1791598790.118888 + }, + { + "file": "gem-1.0.0/docs/architecture", + "first": 1791598812.0918846, + "repeat": 1791598790.1197703 + }, + { + "file": "gem-1.0.0/docs/assets", + "first": 1791598812.0323617, + "repeat": 1791598790.0683658 + }, + { + "file": "gem-1.0.0/docs/assets/diagrams", + "first": 1791598812.092016, + "repeat": 1791598790.1201234 + }, + { + "file": "gem-1.0.0/docs/assets/stylesheets", + "first": 1791598812.0921326, + "repeat": 1791598790.1202793 + }, + { + "file": "gem-1.0.0/docs/development", + "first": 1791598812.0936599, + "repeat": 1791598790.1220903 + }, + { + "file": "gem-1.0.0/docs/examples", + "first": 1791598812.094084, + "repeat": 1791598790.1224468 + }, + { + "file": "gem-1.0.0/docs/examples/gallery", + "first": 1791598812.094581, + "repeat": 1791598790.1230204 + }, + { + "file": "gem-1.0.0/docs/getting-started", + "first": 1791598812.0953033, + "repeat": 1791598790.1236944 + }, + { + "file": "gem-1.0.0/docs/overrides", + "first": 1791598812.0954032, + "repeat": 1791598790.1238065 + }, + { + "file": "gem-1.0.0/docs/overrides/partials", + "first": 1791598812.0955148, + "repeat": 1791598790.1239185 + }, + { + "file": "gem-1.0.0/docs/tutorials", + "first": 1791598812.0968812, + "repeat": 1791598790.1258473 + }, + { + "file": "gem-1.0.0/docs/wiki-migration", + "first": 1791598812.0971248, + "repeat": 1791598790.1261888 + }, + { + "file": "gem-1.0.0/docs/wiki-migration/pages", + "first": 1791598812.098199, + "repeat": 1791598790.1274178 + }, + { + "file": "gem-1.0.0/examples", + "first": 1791598812.0323617, + "repeat": 1791598790.0683658 + }, + { + "file": "gem-1.0.0/examples/hdr_sh", + "first": 1791598812.099029, + "repeat": 1791598790.1282775 + }, + { + "file": "gem-1.0.0/examples/hdr_sh/fixtures", + "first": 1791598812.099135, + "repeat": 1791598790.128362 + }, + { + "file": "gem-1.0.0/examples/output", + "first": 1791598812.100486, + "repeat": 1791598790.1293201 + }, + { + "file": "gem-1.0.0/examples/showcase", + "first": 1791598812.1016765, + "repeat": 1791598790.1300569 + }, + { + "file": "gem-1.0.0/examples/showcase/output", + "first": 1791598812.1022496, + "repeat": 1791598790.1306858 + }, + { + "file": "gem-1.0.0/gem", + "first": 1791598812.103879, + "repeat": 1791598790.132432 + }, + { + "file": "gem-1.0.0/gem/experimental", + "first": 1791598812.1050148, + "repeat": 1791598790.1335475 + }, + { + "file": "gem-1.0.0/gem.egg-info", + "first": 1791598812.115544, + "repeat": 1791598790.142082 + }, + { + "file": "gem-1.0.0/gem.egg-info/SOURCES.txt", + "first": 1791598812.0, + "repeat": 1791598790.0 + }, + { + "file": "gem-1.0.0/setup.cfg", + "first": 1791598812.1163728, + "repeat": 1791598790.1439002 + }, + { + "file": "gem-1.0.0/tests", + "first": 1791598812.1133149, + "repeat": 1791598790.1401563 + }, + { + "file": "gem-1.0.0/tools", + "first": 1791598812.1151073, + "repeat": 1791598790.1415257 + }, + { + "file": "gem-1.0.0/tools/site", + "first": 1791598812.115443, + "repeat": 1791598790.141881 + } + ], + "gzip_mtime_first": 1791598812, + "gzip_mtime_repeat": 1791598790 + } + }, + "documentation_site": { + "external_asset_dependencies": 0, + "hosting": "relative project-prefix-safe paths", + "html_pages": 69, + "image_references": 16, + "local_links_checked": 7726, + "mathml_equations": 24, + "navigation_checked": 7, + "search_api_entries": 42, + "syntax_highlighting": true + }, + "workflow_policy": { + "workflows": [ + "documentation-artifact.yml", + "github-release.yml", + "package-validation.yml", + "publish-docs.yml", + "release-validation.yml" + ], + "action_pins": [ + "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1", + "actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346", + "actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333", + "actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97", + "actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9", + "actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9" + ], + "matrix_jobs": 15, + "canonical_install_jobs": 15, + "package_publication_enabled": false, + "wiki_mutation_enabled": false, + "pages_write_scope": "master-only deployment job", + "manual_release_modes": [ + "validate", + "review" + ] + }, + "actionlint": { + "version": "1.7.12", + "status": "passed", + "command": "/tmp/phase5b-tools/actionlint -color=false -shellcheck='' .github/workflows/*.yml", + "shellcheck": "unavailable; not run" + }, + "runtime_sha256": { + "gem/__init__.py": "ed387aee9744786790d8c56cda8f17e9c311039ef37ba9af0216d782494de735", + "gem/_version.py": "49a1ce110282313f047abcfceec9291077a8a1d8495afae37177e05511144a4d", + "gem/bezier.py": "1d354070a425ea0cb99e590f984f1dd86cf5b2a03432bee848f3352f85fc75b3", + "gem/common.py": "2384eae0490eff93499fca6fe56cc25074119b6955b40ca3d6823f8099406ec8", + "gem/experimental/__init__.py": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "gem/experimental/_bezier_legacy.py": "39f9522eaeb171837e7797ab604bb4bacf718053375266a61c39a0de9217a034", + "gem/experimental/bezier.py": "4d61b9ad9b6a807101a06e4641b74dae96325a82cdc5796bd2326f7f1afdaf15", + "gem/experimental/legendre.py": "4f1fb87056d71982405e1cd5d83fbb07fe9f8a9c464d18ac641486cc47633db5", + "gem/experimental/sph.py": "192b1c96295ddf6585da4c91c1da372b5c4f53bc844ee9125ff38b913496ff0d", + "gem/experimental/sph_irradiance_map.py": "e7d8fa175ad566fb2d4def36978d632a537e930b5acb02396c906ae1465bab94", + "gem/experimental/sph_sample.py": "fbf10456e724005116524fa797474fe767cbf0224468cfc878e5fd8e6f278c15", + "gem/legendre.py": "bcad8a96d35f47eb4f03a1535cf5083017a351e89129534b6acb673966a254f8", + "gem/matrix.py": "e539db231c9b71bc0846954f2a0fad0840b0b03ffd78ae65a4189a634b56c17c", + "gem/plane.py": "bbffce137d4885d3587efcb0aa0f2d5084d12191f9c62efb54e2cbe4dd9033f6", + "gem/quaternion.py": "c17e8fd731d601e36ff21bae86613e1f4982e6275b07d1d27be6f6405dff8059", + "gem/ray.py": "307dfac3a68a2235c3342d4bfe0d93fd15335dba4c28eff4cf6b79ae6167c1a4", + "gem/spherical_harmonics.py": "25bb90b46e4ba5175e320a7f232ac6a2523b31d495e82412db5bdc9579f0d06b", + "gem/vector.py": "df658aa596999334153e143c0801eabc5e5fb4e5bc402770e78a0178dc83c28c" + }, + "unchanged": [ + "gem", + "pyproject.toml", + "setup.py", + "setup.cfg", + "MANIFEST.in", + "requirements-build.txt", + "requirements-audit.txt", + "requirements-docs.txt", + "requirements-ci.txt" + ], + "repository_settings": { + "branches/master": { + "name": "master", + "protected": true, + "protection": { + "enabled": false, + "required_status_checks": { + "enforcement_level": "off", + "contexts": [], + "checks": [] + } + }, + "sha": "a21273c857e6ed9e948fa92246226100efb80355" + }, + "rulesets": [ + { + "id": 24763748, + "name": "gem-main-protection", + "target": "branch", + "source_type": "Repository", + "source": "AlexMarinescu/pyGameMath", + "enforcement": "active", + "node_id": "RRS_lACqUmVwb3NpdG9yec4APXIpzgF53WQ", + "_links": { + "self": { + "href": "https://api.github.com/repos/AlexMarinescu/pyGameMath/rulesets/24763748" + }, + "html": { + "href": "https://github.com/AlexMarinescu/pyGameMath/rules/24763748" + } + }, + "created_at": "2026-10-08T22:26:39.056-04:00", + "updated_at": "2026-10-08T22:28:17.551-04:00" + }, + { + "id": 24763855, + "name": "gem-release-tags", + "target": "tag", + "source_type": "Repository", + "source": "AlexMarinescu/pyGameMath", + "enforcement": "active", + "node_id": "RRS_lACqUmVwb3NpdG9yec4APXIpzgF53c8", + "_links": { + "self": { + "href": "https://api.github.com/repos/AlexMarinescu/pyGameMath/rulesets/24763855" + }, + "html": { + "href": "https://github.com/AlexMarinescu/pyGameMath/rules/24763855" + } + }, + "created_at": "2026-10-08T22:30:50.307-04:00", + "updated_at": "2026-10-08T22:30:50.371-04:00" + } + ], + "environments/gem-release-review": { + "error": "HTTPError: 400: GitHub Fetch URL is not an allowed public GitHub repository or search endpoint. (Response: None)", + "error_code": "INVALID_ARGUMENT" + }, + "actions/variables/GEM_RELEASE_ENABLED": { + "error": "HTTPError: 400: GitHub Fetch URL is not an allowed public GitHub repository or search endpoint. (Response: None)", + "error_code": "INVALID_ARGUMENT" + }, + "branches/master/protection": { + "error": "GitHub API error 403: {\"message\":\"Resource not accessible by integration\",\"documentation_url\":\"https://docs.github.com/rest/branches/branch-protection#get-branch-protection\",\"status\":\"403\"}", + "error_code": "FORBIDDEN", + "error_data": { + "message": "Resource not accessible by integration", + "documentation_url": "https://docs.github.com/rest/branches/branch-protection#get-branch-protection", + "status": "403" + } + }, + "releases/tags/v1.0.0": { + "error": "GitHub API error 404: {\"message\":\"Not Found\",\"documentation_url\":\"https://docs.github.com/rest/releases/releases#get-a-release-by-tag-name\",\"status\":\"404\"}", + "error_code": "NOT_FOUND", + "error_data": { + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/releases/releases#get-a-release-by-tag-name", + "status": "404" + } + }, + "git/ref/tags/v1.0.0": { + "error": "GitHub API error 404: {\"message\":\"Not Found\",\"documentation_url\":\"https://docs.github.com/rest/git/refs#get-a-reference\",\"status\":\"404\"}", + "error_code": "NOT_FOUND", + "error_data": { + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/git/refs#get-a-reference", + "status": "404" + } + } + }, + "rulesets": [ + { + "id": 24763748, + "name": "gem-main-protection", + "target": "branch", + "source_type": "Repository", + "source": "AlexMarinescu/pyGameMath", + "enforcement": "active", + "conditions": { + "ref_name": { + "exclude": [], + "include": [ + "refs/heads/master", + "~DEFAULT_BRANCH" + ] + } + }, + "rules": [ + { + "type": "deletion" + }, + { + "type": "non_fast_forward" + }, + { + "type": "required_linear_history" + }, + { + "type": "pull_request", + "parameters": { + "required_approving_review_count": 0, + "dismiss_stale_reviews_on_push": false, + "required_reviewers": [], + "require_code_owner_review": false, + "require_last_push_approval": false, + "required_review_thread_resolution": true, + "require_extra_approval_for_unattributed_changes": false, + "allowed_merge_methods": [ + "squash" + ] + } + } + ], + "node_id": "RRS_lACqUmVwb3NpdG9yec4APXIpzgF53WQ", + "created_at": "2026-10-08T22:26:39.056-04:00", + "updated_at": "2026-10-08T22:28:17.551-04:00", + "bypass_actors": [ + { + "actor_id": 5, + "actor_type": "RepositoryRole", + "bypass_mode": "always" + }, + { + "actor_id": 1144995, + "actor_type": "Integration", + "bypass_mode": "pull_request" + } + ], + "current_user_can_bypass": "always", + "_links": { + "self": { + "href": "https://api.github.com/repos/AlexMarinescu/pyGameMath/rulesets/24763748" + }, + "html": { + "href": "https://github.com/AlexMarinescu/pyGameMath/rules/24763748" + } + } + }, + { + "id": 24763855, + "name": "gem-release-tags", + "target": "tag", + "source_type": "Repository", + "source": "AlexMarinescu/pyGameMath", + "enforcement": "active", + "conditions": { + "ref_name": { + "exclude": [], + "include": [ + "refs/tags/v*" + ] + } + }, + "rules": [ + { + "type": "deletion" + }, + { + "type": "non_fast_forward" + }, + { + "type": "update" + } + ], + "node_id": "RRS_lACqUmVwb3NpdG9yec4APXIpzgF53c8", + "created_at": "2026-10-08T22:30:50.307-04:00", + "updated_at": "2026-10-08T22:30:50.371-04:00", + "bypass_actors": [ + { + "actor_id": 5, + "actor_type": "RepositoryRole", + "bypass_mode": "always" + } + ], + "current_user_can_bypass": "always", + "_links": { + "self": { + "href": "https://api.github.com/repos/AlexMarinescu/pyGameMath/rulesets/24763855" + }, + "html": { + "href": "https://github.com/AlexMarinescu/pyGameMath/rules/24763855" + } + } + } + ], + "blockers": [ + { + "id": "RC-MASTER", + "status": "open", + "detail": "PR candidate is not merged master; manual master release-validation/review must pass at final reviewed SHA before publication." + }, + { + "id": "RC-ENV", + "status": "unverified", + "detail": "Owner must verify required reviewers, prevented self-review, no admin bypass and protected-branch deployment in gem-release-review; connector cannot read environment/enablement settings." + }, + { + "id": "RC-AUTH", + "status": "pending", + "detail": "Separate explicit owner authorization for tag and GitHub Release publication has not been granted." + } + ], + "risks": [ + "Two moderate default-branch Dependabot alerts reported by git push; details unavailable to connector and require owner triage.", + "Branch ruleset has zero required approving reviews and no required status-check rule; protected:true alone does not establish a full CI/review policy.", + "Repeated builds have identical member payloads but differing archive timestamps/hashes; preserve the exact validated archives.", + "PR artifacts expire after 14 days; preserve/download them, but only final manual-master candidates can enter publication workflow." + ], + "pypi_status": "pending account recovery and publishing-authority verification; blocks PyPI only", + "publication_performed": false, + "tag_created": false, + "release_created": false, + "automatic_merge": false, + "manual_release_dispatch_executed": false, + "source_documentation_final": { + "source_declarations_checked": 268, + "examples_executed": 43, + "baseline_examples_preserved": 43, + "tutorials_preserved": 9, + "protected_files_unchanged": 115, + "reviewed_candidate_reference_files": [ + "examples/showcase/README.md", + "examples/showcase/regenerate.py", + "examples/showcase/verify.py", + "tests/test_showcase_examples.py" + ] + } +} diff --git a/docs/development/ci-release.md b/docs/development/ci-release.md index 0d61392..319e7a4 100644 --- a/docs/development/ci-release.md +++ b/docs/development/ci-release.md @@ -21,6 +21,10 @@ The portable harness runs the complete suite, checks 268 API declarations and and installs each archive into a fresh isolated environment. It checks installed runtime bytes and repeats the API/examples checks. Skips and expected failures fail the candidate gate. Diagnostics remain available when a matrix job fails. +After the full matrix passes, a second installation matrix verifies the same +canonical Ubuntu/CPython 3.12 wheel and sdist on all 15 environments, without +rebuilding them. It reuses the shared installation checks and verifies manifest +provenance and SHA-256 digests before installation. The archive inspector rejects unexpected wheel contents, links, unsafe paths, caches, temporary credential files and recognizable credential-shaped content. @@ -59,7 +63,7 @@ is not an independent authenticity guarantee. GitHub Release v1.0.0 preparation is independent of PyPI account recovery. Publishing that release and creating/pushing its tag require final validation -and explicit owner authorization for each action. This workflow performs neither. +and explicit owner authorization for each action. Validation mode performs neither. Preserve the approved wheel and sdist unchanged for eventual PyPI publication; never silently rebuild official 1.0.0 artifacts. @@ -74,10 +78,10 @@ separately reviewed publishing workflow is enabled, establish: workflow and protected environment, if OIDC is selected. - Protected branch/review settings and an approved release/tag procedure. -No PyPI token is required or hardcoded. There is no PyPI/TestPyPI upload action, -OIDC package publishing permission, GitHub Release creation or tag creation in -this pipeline. Introducing any of them requires a separate reviewed change; -package identity must not be changed to bypass ownership verification. +No PyPI token is required or hardcoded. There is no PyPI/TestPyPI upload action +or OIDC package publishing permission. The GitHub publish job below remains +separately gated; ordinary CI and validation mode create no tag or release. +Package identity must not be changed to bypass ownership verification. If validation fails, retain diagnostics, discard the candidate and rerun from a reviewed clean commit after correction. Never upload a partially validated diff --git a/docs/development/release-notes-1.0.0.md b/docs/development/release-notes-1.0.0.md index ac4e116..e533ca6 100644 --- a/docs/development/release-notes-1.0.0.md +++ b/docs/development/release-notes-1.0.0.md @@ -10,9 +10,11 @@ The release strategy is GitHub-first. This document prepares release notes; it does not establish that a release has been published. PyPI 1.0.0 publication is deferred until publishing authority is verified. -CPython 3.10–3.14 are the supported interpreter targets. Completed CI runs must -establish platform verification before release; workflow configuration alone -is not evidence of Windows/macOS support. Python 2.7 is unsupported. +CPython 3.10–3.14 passed the Phase 5C regression and installation matrix on +GitHub-hosted Linux x86-64, Windows AMD64 and macOS ARM64. This evidence covers +the tested interpreter builds and runners, not every operating-system release +or architecture. Final merged-master validation and owner approval remain +required before publication. Python 2.7 is unsupported. Download the approved wheel or sdist, verify SHA-256 checksums, then install with `python -m pip install ./gem-1.0.0-py3-none-any.whl` or the corresponding @@ -23,10 +25,28 @@ are separate. Historical experimental import shims remain transitional; canonical modules are gem.bezier, gem.legendre and gem.spherical_harmonics. Unfinished shadow -transport is retired. Numerical guarantees remain subject to binary64 limits +transport is retired. The showcase retains byte-exact SVGs and checks eight audited full-precision +quaternion JSON measurements using independently bounded platform rounding. +No runtime mathematics or committed reference image is changed. Numerical +guarantees remain subject to binary64 limits and documented domains; SH lighting is a low-order approximation, not a visibility or rendering engine. See the mathematical conventions and compatibility documentation for detailed contracts. Preserve the approved artifacts unchanged for eventual PyPI upload. Do not rebuild or overwrite official release assets silently. + + +GitHub Release title: **gem 1.0.0**. After publication, obtain assets from +. That URL is the +planned release location; these notes do not claim it currently exists. +Verify the downloaded `SHA256SUMS` before installation: + +```sh +sha256sum -c SHA256SUMS +python -m pip install ./gem-1.0.0-py3-none-any.whl +``` + +On Windows, use `Get-FileHash -Algorithm SHA256` for the wheel and sdist and +compare both values with the approved checksum listing. Checksums alone do +not establish authenticity; obtain them from the reviewed release. diff --git a/examples/showcase/README.md b/examples/showcase/README.md index 46c0953..2a8111c 100644 --- a/examples/showcase/README.md +++ b/examples/showcase/README.md @@ -10,7 +10,7 @@ python -m examples.showcase.regenerate --verify No GPU, window server, downloads or image packages are needed. The command writes only `vectors.svg`, `transforms.svg`, `quaternions.svg`, `bezier.svg` and `measurements.json` in `examples/showcase/output/`. Use `--output-dir /tmp/gem-gallery` -to generate elsewhere. Verification rebuilds in memory and compares without writes. +to generate elsewhere. Verification rebuilds in memory and compares without writes. SVGs remain byte-exact. `scenes.py` uses gem for vector geometry, matrices, quaternion SLERP and rotation, and Bezier evaluation/subdivision. `svg.py` only maps drawing coordinates and @@ -22,7 +22,15 @@ The SVG viewBox is 960×560, with CSS sRGB colors and generic sans-serif labels. Geometry serializes to six decimal places. Viewer font selection can change text appearance. SHA-256 hashes describe text artifacts, not identical rasterization across platforms. Python/libm rounding can affect the full-precision JSON values; -numerical checks remain the primary correctness test. +numerical checks remain the primary correctness test. Verification permits only +one binary64 ULP at unit scale (2^-52) between eight audited quaternion +measurement fields, and independently checks those fields against closed-form +values within 2^-51. Every other JSON field and its serialization remain exact. +This handles a measured one-ULP platform difference in sin(pi/4), propagated +through SLERP and rotation. It does not change gem's mathematical tolerances, +round generated values or update the committed reference. Identical generation +within one environment is still byte-exact. See the +[release-candidate investigation](../../audit/PHASE5C-RELEASE-CANDIDATE.md). The existing HDR example is reused directly; this command never touches `examples/output/`. To verify that reference separately: diff --git a/examples/showcase/regenerate.py b/examples/showcase/regenerate.py index 6e846c5..41be77b 100644 --- a/examples/showcase/regenerate.py +++ b/examples/showcase/regenerate.py @@ -4,7 +4,7 @@ import json from pathlib import Path from .scenes import SCENES -from .verify import check_numerics, check_svg +from .verify import check_numerics, check_svg, check_artifact def generate(): @@ -34,8 +34,10 @@ def main(argv=None): for name, payload in artifacts.items(): destination = args.output_dir/name if args.verify: - if destination.read_bytes() != payload: - raise SystemExit('artifact mismatch: '+str(destination)) + try: + check_artifact(name, destination.read_bytes(), payload) + except (AssertionError, ValueError, KeyError, TypeError, IndexError) as error: + raise SystemExit('artifact mismatch: '+str(destination)) from error else: destination.write_bytes(payload) print(('verified ' if args.verify else 'wrote ')+str(destination)+' ('+str(len(payload))+' bytes)') diff --git a/examples/showcase/verify.py b/examples/showcase/verify.py index dda0de5..40c006f 100644 --- a/examples/showcase/verify.py +++ b/examples/showcase/verify.py @@ -57,3 +57,69 @@ def check_svg(text): assert root.find('{http://www.w3.org/2000/svg}title') is not None assert not any(node.tag.endswith(('script', 'image', 'foreignObject')) for node in root.iter()) return [960, 560] + + +def check_artifact(name, expected, actual): + """Keep artifacts exact except eight audited unit-scale libm measurements. + + The allowance is one binary64 ULP at 1 between manifests, with a separate + two-ULP-at-1 closed-form accuracy check. It is not a gem math tolerance. + """ + import copy + from decimal import Decimal, localcontext + import json + if name != 'measurements.json': + if expected != actual: + raise AssertionError('artifact mismatch: '+name) + return + def decode(payload): + def pairs(items): + result = {} + for key, value in items: + if key in result: raise AssertionError('duplicate measurement key') + result[key] = value + return result + def invalid(value): raise AssertionError('nonfinite measurement: '+value) + report = json.loads(payload, object_pairs_hook=pairs, parse_constant=invalid) + canonical = (json.dumps(report, indent=2, sort_keys=True, allow_nan=False)+'\n').encode('utf-8') + if payload != canonical: raise AssertionError('measurement serialization mismatch') + check_numerics(report['scenes']) + return report + reference, observed = decode(expected), decode(actual) + # These are exactly the fields affected by sin(pi/4)'s one-ULP platform + # variation in the fixed 120-degree showcase. All other leaves stay exact. + with localcontext() as context: + context.prec = 90 + d = Decimal + sqrt2, sqrt3, sqrt6 = d(2).sqrt(), d(3).sqrt(), d(6).sqrt() + allowed = { + (1, 'quaternion', 0): (sqrt6+sqrt2)/4, + (1, 'axes', 0, 0): sqrt3/2, + (1, 'axes', 0, 1): d('.5'), + (1, 'axes', 1, 0): d('-.5'), + (1, 'axes', 1, 1): sqrt3/2, + (3, 'quaternion', 3): sqrt2/2, + (3, 'axes', 0, 0): d(0), + (3, 'axes', 1, 1): d(0), + } + difference_bound = math.ulp(1.0) + accuracy_bound = d.from_float(2*math.ulp(1.0)) + normalized = copy.deepcopy(observed) + for path, exact in allowed.items(): + a = reference['scenes']['quaternions']['frames'] + b = observed['scenes']['quaternions']['frames'] + target = normalized['scenes']['quaternions']['frames'] + for key in path[:-1]: a, b, target = a[key], b[key], target[key] + av, bv = a[path[-1]], b[path[-1]] + if type(av) is not float or type(bv) is not float or not all(map(math.isfinite, (av,bv))): + raise AssertionError('invalid quaternion measurement') + if abs(av-bv) > difference_bound: + raise AssertionError('quaternion manifest difference exceeds audited bound') + if any(abs(d.from_float(value)-exact) > accuracy_bound for value in (av,bv)): + raise AssertionError('quaternion measurement fails closed-form reference') + target[path[-1]] = av + # Compare canonical bytes, keeping types, signed zeros, lengths, keys, + # metadata, hashes and all unlisted numerical values exact. + normalized_bytes = (json.dumps(normalized, indent=2, sort_keys=True, allow_nan=False)+'\n').encode('utf-8') + if normalized_bytes != expected: + raise AssertionError('unaudited measurement difference') diff --git a/tests/test_release_workflows.py b/tests/test_release_workflows.py index ba5c104..c86a07b 100644 --- a/tests/test_release_workflows.py +++ b/tests/test_release_workflows.py @@ -264,3 +264,28 @@ def test_candidate_integrity_rejects_tampering(tmp_path, monkeypatch, case, reas lambda argv, **kwargs: (tree if argv[-1] == 'HEAD^{tree}' else SHA) + '\n') with pytest.raises(ValueError, match=reason): gate.verify_artifacts(tmp_path, SHA, 'v1.0.0') + + +def test_candidate_scope_cannot_exempt_runtime(tmp_path, monkeypatch): + import json + checker = load('check_architecture_docs') + monkeypatch.setattr(checker, 'ROOT', tmp_path) + monkeypatch.setattr(checker.subprocess, 'check_output', lambda *args, **kwargs: '') + (tmp_path/'tools').mkdir() + (tmp_path/'tools/phase5c-reference-scope.json').write_text(json.dumps({ + 'base': checker.BASE, 'files': {'gem/quaternion.py': 'unauthorized'}})) + with pytest.raises(ValueError, match='mathematics cannot be exempted'): + checker.check_scope() + + +@pytest.mark.parametrize('change', ['dependency', 'digest', 'workload']) +def test_canonical_artifact_matrix_cannot_bypass_validation(change): + data = workflows.load_workflows() + job = data['package-validation.yml']['jobs']['candidate-install'] + if change == 'dependency': job['needs'] = [] + elif change == 'digest': + step = next(s for s in job['steps'] if s.get('uses', '').startswith('actions/download-artifact@')) + step['with']['digest-mismatch'] = 'warn' + else: job['strategy']['matrix']['python'] = ['3.12'] + with pytest.raises(ValueError, match='canonical'): + workflows.validate(data) diff --git a/tests/test_showcase_examples.py b/tests/test_showcase_examples.py index 58cc75a..e8d80f4 100644 --- a/tests/test_showcase_examples.py +++ b/tests/test_showcase_examples.py @@ -5,7 +5,7 @@ import pytest from examples.showcase.regenerate import generate, main from examples.showcase.scenes import SCENES -from examples.showcase.verify import check_numerics, check_svg +from examples.showcase.verify import check_numerics, check_svg, check_artifact from examples.showcase.svg import Canvas ROOT = Path(__file__).resolve().parents[1] @@ -31,7 +31,7 @@ def test_independent_geometry_references(): def test_committed_artifacts_match_generation(): for name, payload in generate().items(): - assert (ROOT/'examples/showcase/output'/name).read_bytes() == payload + check_artifact(name, (ROOT/'examples/showcase/output'/name).read_bytes(), payload) def test_output_scope_repeated_runs_and_verification(tmp_path): @@ -57,3 +57,52 @@ def test_manifest_and_svg_escaping(): parsed = ET.fromstring(c.finish()) assert parsed.find('{http://www.w3.org/2000/svg}title').text == 'A < B & C' assert '<script>' in c.finish() + + +def encode_measurements(report): + return (json.dumps(report, indent=2, sort_keys=True, allow_nan=False)+'\n').encode() + + +def test_audited_libm_variation_preserves_artifact_verification(monkeypatch): + import math + # Replay the exact first differing libm operation, not a fabricated fixture. + original = math.sin + def windows_sine(angle): + if angle.hex() == '0x1.921fb54442d18p-1': + return float.fromhex('0x1.6a09e667f3bcdp-1') + return original(angle) + monkeypatch.setattr(math, 'sin', windows_sine) + for name, payload in generate().items(): + check_artifact(name, (ROOT/'examples/showcase/output'/name).read_bytes(), payload) + + +@pytest.mark.parametrize('mutation', ['excess', 'unlisted', 'metadata', 'type', 'key', 'nan', 'serialization']) +def test_artifact_portability_policy_rejects_corruption(mutation): + import math + reference = (ROOT/'examples/showcase/output/measurements.json').read_bytes() + report = json.loads(reference) + frames = report['scenes']['quaternions']['frames'] + if mutation == 'excess': frames[1]['axes'][0][0] += 2*math.ulp(1.) + elif mutation == 'unlisted': frames[2]['quaternion'][0] = math.nextafter(frames[2]['quaternion'][0], 1.) + elif mutation == 'metadata': report['randomness'] = 'changed' + elif mutation == 'type': frames[1]['axes'][0][0] = str(frames[1]['axes'][0][0]) + elif mutation == 'key': del frames[1]['axes'] + payload = encode_measurements(report) + if mutation == 'nan': payload = payload.replace(b'0.8660254037844387', b'NaN', 1) + elif mutation == 'serialization': payload = payload.rstrip() + with pytest.raises((AssertionError, KeyError, TypeError)): + check_artifact('measurements.json', reference, payload) + + +def test_portability_allowance_cannot_hide_shared_mathematical_error(): + reference = json.loads((ROOT/'examples/showcase/output/measurements.json').read_bytes()) + reference['scenes']['quaternions']['frames'][1]['axes'][0][0] += 1e-14 + payload = encode_measurements(reference) + with pytest.raises(AssertionError, match='closed-form'): + check_artifact('measurements.json', payload, payload) + + +def test_svg_verification_remains_byte_exact(): + reference = generate()['quaternions.svg'] + with pytest.raises(AssertionError): + check_artifact('quaternions.svg', reference, reference.replace(b'120', b'121')) diff --git a/tools/check_architecture_docs.py b/tools/check_architecture_docs.py index 54e67e1..8e42ec0 100644 --- a/tools/check_architecture_docs.py +++ b/tools/check_architecture_docs.py @@ -87,6 +87,20 @@ def protected(name): for name, digest in ci_reviewed.items(): if hashlib.sha256((ROOT/name).read_bytes()).hexdigest() != digest: raise ValueError('unreviewed CI portability change: '+name) + candidate_reviewed = {} + candidate_manifest = ROOT/'tools/phase5c-reference-scope.json' + if candidate_manifest.exists(): + candidate_scope = json.loads(candidate_manifest.read_text(encoding='utf-8')) + if candidate_scope['base'] != BASE: + raise ValueError('candidate scope baseline mismatch') + candidate_reviewed = candidate_scope['files'] + if set(candidate_reviewed)-{'examples/showcase/verify.py', + 'examples/showcase/regenerate.py', 'examples/showcase/README.md', + 'tests/test_showcase_examples.py'}: + raise ValueError('mathematics cannot be exempted by candidate scope') + for name, digest in candidate_reviewed.items(): + if hashlib.sha256((ROOT/name).read_bytes()).hexdigest() != digest: + raise ValueError('unreviewed candidate reference change: '+name) reviewed = {} manifest = ROOT/'tools/phase5a-packaging-scope.json' if manifest.exists(): @@ -110,10 +124,11 @@ def protected(name): fingerprint = hashlib.sha256() for name in sorted(originals): content = (ROOT/name).read_bytes() - if name not in reviewed and name not in ci_reviewed and content != subprocess.check_output(['git', 'show', BASE+':'+name], cwd=ROOT): + if name not in reviewed and name not in ci_reviewed and name not in candidate_reviewed and content != subprocess.check_output(['git', 'show', BASE+':'+name], cwd=ROOT): raise ValueError('out-of-scope modification: '+name) fingerprint.update(name.encode()); fingerprint.update(content) - return {'protected_files_unchanged': len(originals-set(reviewed)-set(ci_reviewed)), + return {'protected_files_unchanged': len(originals-set(reviewed)-set(ci_reviewed)-set(candidate_reviewed)), + 'reviewed_candidate_reference_files': sorted(candidate_reviewed), 'protected_sha256': fingerprint.hexdigest(), 'new_documentation_test_modules': sorted(additions), 'reviewed_ci_files': sorted(ci_reviewed), diff --git a/tools/check_workflows.py b/tools/check_workflows.py index 1d17f1c..794bf4b 100644 --- a/tools/check_workflows.py +++ b/tools/check_workflows.py @@ -75,6 +75,16 @@ def validate(workflows): require(package['jobs']['package']['strategy'].get('fail-fast') is False,'all platforms must report') require(any('tools/ci_validate.py' in s.get('run','') for s in package['jobs']['package']['steps']), 'shared packaging validation missing') + canonical=package['jobs'].get('candidate-install',{}) + require(canonical.get('needs')=='package','canonical installs must await whole matrix') + require(canonical.get('strategy',{}).get('matrix')==matrix and + canonical['strategy'].get('fail-fast') is False,'canonical installation matrix incomplete') + downloads=[s for s in canonical.get('steps',[]) if s.get('uses','').startswith('actions/download-artifact@')] + require(len(downloads)==1 and downloads[0].get('with',{}).get('digest-mismatch')=='error' and + downloads[0]['with'].get('name')=='gem-candidate-${{ github.run_id }}', + 'canonical installs require verified same-run artifacts') + require(any('--candidate-directory' in s.get('run','') for s in canonical.get('steps',[])), + 'canonical archive verification missing') docs=workflows['documentation-artifact.yml'];steps=docs['jobs']['build']['steps'] commands=[s.get('run','') for s in steps] require(any('check_architecture_docs.py' in c and '--api-reference' in c and '--tutorials' in c for c in commands), @@ -117,7 +127,7 @@ def validate(workflows): require(github_release['on']['workflow_dispatch']['inputs']['mode']['default']=='validate', 'GitHub release must default to dry validation') return {'workflows':sorted(workflows),'action_pins':sorted(set(pins)), - 'matrix_jobs':15,'package_publication_enabled':False,'wiki_mutation_enabled':False, + 'matrix_jobs':15,'canonical_install_jobs':15,'package_publication_enabled':False,'wiki_mutation_enabled':False, 'pages_write_scope':'master-only deployment job','manual_release_modes':['validate','review']} diff --git a/tools/ci_validate.py b/tools/ci_validate.py index adeb7e5..988f6e1 100644 --- a/tools/ci_validate.py +++ b/tools/ci_validate.py @@ -30,6 +30,32 @@ def assert_clean_junit(path): return dict(totals, passed=totals['tests'], xfailed=0) +def install_artifacts(output_dir, wheel, sdist, command, read, offline=False, wheelhouse=None): + installed={} + for kind,artifact in [('wheel',wheel),('sdist',sdist)]: + target=output_dir/(kind+'-environment') + venv.EnvBuilder(with_pip=True,symlinks=os.name!='nt').create(target) + executable=environment_python(target) + # Build tools are deliberately separate from gem's runtime dependency. + setup=[executable,'-m','pip','install','six==1.17.0','setuptools==80.9.0','wheel==0.48.0'] + if offline: setup.extend(['--no-index','--find-links',str(wheelhouse.resolve())]) + command(setup,kind+'-dependencies',cwd=output_dir) + install=[executable,'-I','-m','pip','install','--no-deps','--no-build-isolation',artifact] + if offline:install.insert(-1,'--no-index') + command(install,kind+'-install',cwd=output_dir) + site=subprocess.check_output([str(executable),'-I','-c', + 'import sysconfig; print(sysconfig.get_path("purelib"))'],text=True,cwd=output_dir).strip() + command([executable,'-I','-X','utf8',ROOT/'tools/verify_distribution.py','--installed-root',site, + '--output',output_dir/(kind+'-smoke.json')],kind+'-smoke',cwd=output_dir) + command([executable,'-I','-X','utf8',ROOT/'tools/check_architecture_docs.py',*DOC_FLAGS,'--package-root',site, + '--output',output_dir/(kind+'-docs.json')],kind+'-docs',cwd=output_dir) + docs=read(kind+'-docs.json') + if docs['source_declarations_checked']!=268 or docs['examples_executed']!=43: + raise ValueError('installed API/example coverage incomplete') + installed[kind]={'smoke':read(kind+'-smoke.json'),'documentation':docs} + return installed + + def run(output_dir, artifacts_dir, offline=False, wheelhouse=None): if sys.flags.optimize: raise ValueError('CI assertions must not run with Python optimization enabled') if offline and wheelhouse is None: raise ValueError('offline verification requires an explicit wheelhouse') @@ -48,6 +74,8 @@ def command(args, name, cwd=ROOT): subprocess.run(list(map(str,args)),cwd=cwd,env=env,stdout=log,stderr=subprocess.STDOUT,check=True) def read(name):return json.loads((output_dir/name).read_text(encoding='utf-8')) try: + command([sys.executable,ROOT/'tools/trace_showcase.py','--output', + output_dir/'showcase-trace.json'],'showcase-trace') pytest_error=None try: command([sys.executable,'-m','pytest','-q','-o','junit_family=legacy', @@ -75,28 +103,7 @@ def read(name):return json.loads((output_dir/name).read_text(encoding='utf-8')) command([sys.executable,ROOT/'tools/verify_distribution.py','--wheel',wheel,'--sdist',sdist, '--output',output_dir/'artifacts.json'],'artifacts') report['artifacts']=read('artifacts.json') - report['installed']={} - for kind,artifact in [('wheel',wheel),('sdist',sdist)]: - target=output_dir/(kind+'-environment') - venv.EnvBuilder(with_pip=True,symlinks=os.name!='nt').create(target) - executable=environment_python(target) - # Build tools are deliberately separate from gem's runtime dependency. - setup=[executable,'-m','pip','install','six==1.17.0','setuptools==80.9.0','wheel==0.48.0'] - if offline: setup.extend(['--no-index','--find-links',str(wheelhouse.resolve())]) - command(setup,kind+'-dependencies',cwd=output_dir) - install=[executable,'-I','-m','pip','install','--no-deps','--no-build-isolation',artifact] - if offline:install.insert(-1,'--no-index') - command(install,kind+'-install',cwd=output_dir) - site=subprocess.check_output([str(executable),'-I','-c', - 'import sysconfig; print(sysconfig.get_path("purelib"))'],text=True,cwd=output_dir).strip() - command([executable,'-I','-X','utf8',ROOT/'tools/verify_distribution.py','--installed-root',site, - '--output',output_dir/(kind+'-smoke.json')],kind+'-smoke',cwd=output_dir) - command([executable,'-I','-X','utf8',ROOT/'tools/check_architecture_docs.py',*DOC_FLAGS,'--package-root',site, - '--output',output_dir/(kind+'-docs.json')],kind+'-docs',cwd=output_dir) - docs=read(kind+'-docs.json') - if docs['source_declarations_checked']!=268 or docs['examples_executed']!=43: - raise ValueError('installed API/example coverage incomplete') - report['installed'][kind]={'smoke':read(kind+'-smoke.json'),'documentation':docs} + report['installed']=install_artifacts(output_dir,wheel,sdist,command,read,offline,wheelhouse) if pytest_error is not None: raise ValueError('suite failed; archive/install diagnostics do not approve the candidate') from pytest_error commit=subprocess.check_output(['git','rev-parse','HEAD'],cwd=ROOT,text=True).strip() @@ -128,14 +135,49 @@ def read(name):return json.loads((output_dir/name).read_text(encoding='utf-8')) return report +def verify_candidate(output_dir, directory, offline=False, wheelhouse=None): + """Install the same canonical archives on each platform without rebuilding.""" + from release_gate import verify_artifacts + if sys.flags.optimize: raise ValueError('CI assertions must not run with Python optimization enabled') + if offline and wheelhouse is None: raise ValueError('offline verification requires an explicit wheelhouse') + output_dir=output_dir.resolve(); directory=directory.resolve() + output_dir.mkdir(parents=True,exist_ok=True) + commit=subprocess.check_output(['git','rev-parse','HEAD'],cwd=ROOT,text=True).strip() + report={'python':platform.python_version(),'platform':platform.platform(),'commands':[], + 'status':'running','source_commit':commit} + env=os.environ.copy();env.pop('PYTHONPATH',None);env['PYTHONUTF8']='1' + env['PIP_DISABLE_PIP_VERSION_CHECK']='1' + def command(args, name, cwd=ROOT): + report['commands'].append({'argv':list(map(str,args)),'cwd':str(cwd),'log':name+'.log'}) + with (output_dir/(name+'.log')).open('w',encoding='utf-8') as log: + subprocess.run(list(map(str,args)),cwd=cwd,env=env,stdout=log,stderr=subprocess.STDOUT,check=True) + def read(name):return json.loads((output_dir/name).read_text(encoding='utf-8')) + try: + report['integrity']=verify_artifacts(directory,commit,'v1.0.0') + report['installed']=install_artifacts(output_dir,directory/'gem-1.0.0-py3-none-any.whl', + directory/'gem-1.0.0.tar.gz',command,read,offline,wheelhouse) + report['status']='passed' + except Exception as error: + report['status']='failed';report['error_type']=type(error).__name__ + raise + finally: + (output_dir/'candidate-install-results.json').write_text(json.dumps(report,indent=2)+'\n',encoding='utf-8') + return report + + def main(): parser=argparse.ArgumentParser(description=__doc__) parser.add_argument('--output-dir',type=Path,required=True) - parser.add_argument('--artifacts-dir',type=Path,required=True) + parser.add_argument('--artifacts-dir',type=Path) + parser.add_argument('--candidate-directory',type=Path,help='verify/install an existing canonical bundle; never rebuild') parser.add_argument('--offline',action='store_true',help='use preinstalled pinned dependencies; no index/build isolation') parser.add_argument('--wheelhouse',type=Path,help='local wheels for offline installed dependencies') - args=parser.parse_args();report=run(args.output_dir,args.artifacts_dir,args.offline,args.wheelhouse) - print(json.dumps({'status':report['status'],'python':report['python'],'tests':report['tests']},indent=2)) + args=parser.parse_args() + if bool(args.artifacts_dir) == bool(args.candidate_directory): + parser.error('choose exactly one of --artifacts-dir or --candidate-directory') + report=(verify_candidate(args.output_dir,args.candidate_directory,args.offline,args.wheelhouse) + if args.candidate_directory else run(args.output_dir,args.artifacts_dir,args.offline,args.wheelhouse)) + print(json.dumps({'status':report['status'],'python':report['python'],'tests':report.get('tests')},indent=2)) if __name__=='__main__':main() diff --git a/tools/phase5c-reference-scope.json b/tools/phase5c-reference-scope.json new file mode 100644 index 0000000..66bc702 --- /dev/null +++ b/tools/phase5c-reference-scope.json @@ -0,0 +1,9 @@ +{ + "base": "15fbce64fa87008203890142070dbf30ea802ebc", + "files": { + "examples/showcase/verify.py": "7dadf3f42b2c831c55b650e9ec9ae87b15c77fd2eee478d31af2079659b37f0c", + "examples/showcase/regenerate.py": "cbd21e153e88d529bdfb26dd1941aee3724f4ecb8b322936ac901000d14e8df3", + "examples/showcase/README.md": "3aeb634152291eeb25fbde924de2b38a79e6bd2e86096e68df65dadc874a85e4", + "tests/test_showcase_examples.py": "88e5e09e52647e90f2f414722304ff62117c08427e2f48d1637db5ec80240a22" + } +} diff --git a/tools/trace_showcase.py b/tools/trace_showcase.py new file mode 100644 index 0000000..13eed6d --- /dev/null +++ b/tools/trace_showcase.py @@ -0,0 +1,121 @@ +"""Trace platform math used by the fixed quaternion showcase (diagnostics only).""" +import argparse +from decimal import Decimal, localcontext +import json +import math +from pathlib import Path +import platform +import struct +import sys + +ROOT = Path(__file__).resolve().parents[1] +# Independent 100-digit mathematical constant, not binary64 math.pi. +PI = Decimal('3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679') + + +def sine(x): + term = total = x + for n in range(1, 200): + term *= -x*x / Decimal((2*n)*(2*n+1)) + previous = total + total += term + if total == previous: + return total + raise AssertionError('reference sine did not converge') + + +def arctan(x): + if x < 0: + return -arctan(-x) + if x > 1: + return PI/2-arctan(1/x) + if x > Decimal('.5'): + return PI/4+arctan((x-1)/(x+1)) + term = total = x + for n in range(1, 200): + term *= -x*x + previous = total + total += term/Decimal(2*n+1) + if previous == total: + return total + raise AssertionError('reference atan did not converge') + + +def reference(name, values): + with localcontext() as context: + context.prec = 90 + args = [Decimal.from_float(value) for value in values] + if name == 'sin': return sine(args[0]) + if name == 'cos': return sine(PI/2-args[0]) + if name == 'hypot': return sum(x*x for x in args).sqrt() + if name == 'radians': return args[0]*PI/180 + if name == 'atan2': + y, x = args + assert x > 0 # Every atan2 in this fixed showcase has positive X. + return arctan(y/x) + raise AssertionError(name) + + +def bits(value): + return struct.unpack('>Q', struct.pack('>d', value))[0] + + +def describe(value, expected=None): + result = {'value': value, 'hex': value.hex()} + if expected is not None: + rounded = float(expected) + result.update(reference_decimal=str(expected), reference_hex=rounded.hex(), + ulps_from_rounded_reference=abs(bits(value)-bits(rounded))) + return result + + +def trace(): + sys.path.insert(0, str(ROOT)) + from gem.quaternion import Quaternion, quat_from_axis_angle, quat_slerp, quat_rotate_vector + from gem.vector import Vector + calls = [] + names = ('radians', 'sin', 'cos', 'hypot', 'atan2') + originals = {name: getattr(math, name) for name in names} + def wrapper(name): + def call(*args): + value = originals[name](*args) + calls.append({'operation': name, 'arguments': [describe(float(a)) for a in args], + 'result': describe(value, reference(name, list(map(float, args))))}) + return value + return call + frames = [] + try: + for name in names: setattr(math, name, wrapper(name)) + q0, q1 = Quaternion(), quat_from_axis_angle([0., 0., 1.], 120) + endpoint = [describe(x) for x in q1.data] + for t in (0., .25, .5, .75, 1.): + start = len(calls) + q = quat_slerp(q0, q1, t) + axes = [quat_rotate_vector(q, Vector(3, list(axis))).vector + for axis in ((1., 0., 0.), (0., 1., 0.))] + with localcontext() as context: + context.prec = 90 + angle = PI*Decimal.from_float(t)*Decimal(2)/3 + s, c = sine(angle), sine(PI/2-angle) + expected = ((c, s, Decimal(0)), (-s, c, Decimal(0))) + frames.append({'t': t, 'math_call_range': [start, len(calls)], + 'quaternion': [describe(x) for x in q.data], + 'axes': [[describe(x, e) for x, e in zip(axis, ref)] + for axis, ref in zip(axes, expected)]}) + finally: + for name, function in originals.items(): setattr(math, name, function) + return {'schema_version': 1, 'python': sys.version, 'implementation': platform.python_implementation(), + 'compiler': platform.python_compiler(), 'platform': platform.platform(), + 'machine': platform.machine(), 'libc': platform.libc_ver(), + 'float_info': str(sys.float_info), 'reference_precision': 90, + 'endpoint': endpoint, 'math_calls': calls, 'frames': frames} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--output', type=Path, required=True) + args = parser.parse_args() + args.output.write_text(json.dumps(trace(), indent=2, allow_nan=False)+'\n', encoding='utf-8') + + +if __name__ == '__main__': main()