diff --git a/.gitattributes b/.gitattributes index 855878f..02969fd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,4 @@ demo_evidence/** -text *.md text eol=lf *.html text eol=lf *.ps1 text eol=crlf +cad_evidence/** -text diff --git a/.github/apparmor/pmix-bwrap b/.github/apparmor/pmix-bwrap new file mode 100644 index 0000000..b9818ac --- /dev/null +++ b/.github/apparmor/pmix-bwrap @@ -0,0 +1,6 @@ +abi , +include + +/usr/bin/bwrap flags=(unconfined) { + userns, +} diff --git a/.github/workflows/release-checks.yml b/.github/workflows/release-checks.yml index 2a30e52..1ab43b0 100644 --- a/.github/workflows/release-checks.yml +++ b/.github/workflows/release-checks.yml @@ -10,7 +10,8 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.os == 'ubuntu-latest' && 'ubuntu-24.04' || matrix.os }} + timeout-minutes: 15 defaults: run: shell: bash @@ -24,16 +25,78 @@ jobs: - name: Install payment adapter dependencies run: python -m pip install -r paypal_adapter/requirements.lock + - name: Prepare verified pmix release and fixtures + if: matrix.os == 'ubuntu-latest' + run: | + (cd vendor/ubuntu-noble && sha256sum -c SHA256SUMS) + sudo dpkg --install vendor/ubuntu-noble/bubblewrap_0.9.0-1ubuntu0.3_amd64.deb + dpkg-query -W util-linux + test "$(id -u)" -ne 0 + if [ "$(cat /proc/sys/kernel/apparmor_restrict_unprivileged_userns 2>/dev/null || echo 0)" = 1 ]; then + sudo apparmor_parser --replace .github/apparmor/pmix-bwrap + fi + python -B scripts/install_pmix.py vendor/pmix/PAYPAL_CAD_001_RELEASE_20261110.zip + command -v prlimit + command -v bwrap + + - name: Verify actual pmix sandbox execution + if: matrix.os == 'ubuntu-latest' + run: | + PYTHONPATH=tests python -B -m unittest -v test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation + + - name: Reproduce original experiment and prototype + if: matrix.os == 'ubuntu-latest' + working-directory: external/cad-experiment + run: | + python3 run_benchmark.py | tee benchmark-ci.log + python3 cad_adapter_prototype.py | tee adapter-ci.log + - name: Rebuild dossiers from raw evidence and audit run: python -B scripts/build_and_serve.py --evidence demo_evidence --no-serve - - name: Release tests (payments, contract binding, Judge facts, economics, negative matrix) - run: python -B -m unittest discover -s tests -v + - name: All LEGION tests including real Linux pmix integration + if: matrix.os == 'ubuntu-latest' + run: python -B -m unittest discover -s tests -v |& tee "${RUNNER_TEMP}/legion-tests.log" + + - name: Verify all 860 critical records against source STEP files + if: matrix.os == 'ubuntu-latest' + run: PYTHONPATH=. python -B scripts/audit_pmix_provenance.py | tee "${RUNNER_TEMP}/pmix-provenance.json" + + - name: Windows LEGION tests (supported release, industrial and demand modules) + if: matrix.os == 'windows-latest' + run: PYTHONPATH=tests python -B -m unittest -v test_demand_first test_industrial test_release |& tee "${RUNNER_TEMP}/legion-tests.log" + + - uses: actions/setup-node@v4 + if: matrix.os == 'ubuntu-latest' + with: + node-version: '22' + + - name: Real browser workflow at 1440px and 390px + if: matrix.os == 'ubuntu-latest' + env: + LEGION_CAD_EVIDENCE: ${{ runner.temp }}/cad-browser + run: | + npm ci --prefix scripts/pmix-browser --ignore-scripts + scripts/pmix-browser/node_modules/.bin/playwright install chromium + node scripts/test_pmix_browser.cjs + + - uses: actions/upload-artifact@v4 + if: always() && matrix.os == 'ubuntu-latest' + with: + name: cad-browser-and-regressions + path: | + ${{ runner.temp }}/cad-browser/ + ${{ runner.temp }}/legion-tests.log + ${{ runner.temp }}/pmix-provenance.json + external/cad-experiment/benchmark-ci.log + external/cad-experiment/adapter-ci.log + external/cad-experiment/BENCHMARK_RESULTS.json + external/cad-experiment/ADAPTER_RESULTS.json - name: Payment adapter tests (fake provider, no network; Windows-only adapter) if: matrix.os == 'windows-latest' working-directory: paypal_adapter - run: python -B -m unittest discover -s tests -t . + run: python -B -m unittest discover -s tests -t . -v - name: Payment negative controls (N07, N09, N10, N14; Windows-only adapter) if: matrix.os == 'windows-latest' @@ -74,5 +137,7 @@ jobs: - name: No secrets, private identifiers or machine paths run: | - ! grep -rIlE 'nvapi-[A-Za-z0-9]{8}|client_secret["'"'"' ]*[:=] *["'"'"'][A-Za-z0-9]|BEGIN [A-Z ]*PRIVATE KEY|AKIA[0-9A-Z]{16}|RGFNDXFWF988G|Users[\/]+Administrator|ADMINI~1|Dropbox' \ - --exclude-dir=.git --exclude-dir=.github . + result=0 + grep -rIlE 'nvapi-[A-Za-z0-9]{8}|client_secret["'"'"' ]*[:=] *["'"'"'][A-Za-z0-9]|BEGIN [A-Z ]*PRIVATE KEY|AKIA[0-9A-Z]{16}|RGFNDXFWF988G|Users[\/]+Administrator|ADMINI~1|Dropbox' \ + --exclude-dir=.git --exclude-dir=.github . || result=$? + test "$result" -eq 1 diff --git a/.gitignore b/.gitignore index bfa9715..15d4d77 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ external/ __pycache__/ *.pyc .venv/ +node_modules/ demo_evidence/runs/A2-live-*/ demo_evidence/negatives-live-*/ diff --git a/NOTICE b/NOTICE index aa74f19..d5d3204 100644 --- a/NOTICE +++ b/NOTICE @@ -1,6 +1,11 @@ LEGION Deal Rescue Copyright 2026 Veraxis +Optional STEP extraction uses pmix v0.16.1 by Julian Chultarsky, +https://github.com/jchultarsky101/pmix (MIT; third_party/pmix.LICENSE.md). +Its binary is not committed here and is separately checksum-pinned. +Reference STEP fixtures retain NIST/pmix attribution and are not held-out data. + This product is licensed under the Apache License, Version 2.0 (see LICENSE). paypal_adapter/commerce_adapter/ is byte-identical to veraxis-protocol/LEGION-Commerce commerce_adapter/ at commit diff --git a/cad_evidence/ADAPTER_RESULTS.json b/cad_evidence/ADAPTER_RESULTS.json new file mode 100644 index 0000000..20a0a0b --- /dev/null +++ b/cad_evidence/ADAPTER_RESULTS.json @@ -0,0 +1,5 @@ +{ + "tests_passed": 7, + "tests_total": 7, + "status": "T:read_only_extract,Z:engineering,Z:quote,F:checkout_enabled" +} \ No newline at end of file diff --git a/cad_evidence/BENCHMARK_RESULTS.json b/cad_evidence/BENCHMARK_RESULTS.json new file mode 100644 index 0000000..b9a786d --- /dev/null +++ b/cad_evidence/BENCHMARK_RESULTS.json @@ -0,0 +1,983 @@ +{ + "summary": { + "experiment": "WO-CAD-001", + "sample_count": 26, + "nist_count": 20, + "synthetic_count": 6, + "pmix_version": "0.16.1", + "pmix_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "pmix_parse_pass": 26, + "pmix_product_pass": 26, + "baseline_extracted": 0, + "baseline_unknown": 20, + "baseline_rejected": 6, + "pmix_dimensions": 287, + "pmix_gdt_tolerances": 380, + "pmix_datums": 127, + "pmix_parts": 33, + "pmix_relations": 5, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 20, + "pmix_extract_p50_ms": 76.22, + "pmix_extract_p95_ms": 149.53, + "checks_pass": 22, + "checks_total": 22, + "evidence_scope": "DIRECT LOCAL BIN+NIST CORPUS TEST; not independent manufacturing validation" + }, + "cases": [ + { + "case": "01_nist_ctc_01_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ctc_01_asme1_ap242-e1.stp", + "size_bytes": 395283, + "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.41, + "pmix_extract_rc": 0, + "pmix_extract_ms": 46.583, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 43.52, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 61, + "pmi_source_ref_count": 234, + "invalid_pmi_source_refs": 0, + "pmi_features": 38, + "pmi_datums": 3, + "pmi_datum_systems": 2, + "pmi_dimensions": 12, + "pmi_tolerances": 6, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_01_asme1_ap242-e1.stp" + }, + { + "case": "02_nist_ctc_02_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ctc_02_asme1_ap242-e2.stp", + "size_bytes": 1981342, + "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.258, + "pmix_extract_rc": 0, + "pmix_extract_ms": 101.182, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 101.222, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 1, + "pmix_semantic_total": 111, + "pmi_source_ref_count": 421, + "invalid_pmi_source_refs": 0, + "pmi_features": 58, + "pmi_datums": 10, + "pmi_datum_systems": 14, + "pmi_dimensions": 7, + "pmi_tolerances": 22, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_02_asme1_ap242-e2.stp" + }, + { + "case": "03_nist_ctc_03_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ctc_03_asme1_ap242-e2.stp", + "size_bytes": 673846, + "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.455, + "pmix_extract_rc": 0, + "pmix_extract_ms": 53.659, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 43.226, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 69, + "pmi_source_ref_count": 358, + "invalid_pmi_source_refs": 0, + "pmi_features": 34, + "pmi_datums": 6, + "pmi_datum_systems": 6, + "pmi_dimensions": 10, + "pmi_tolerances": 13, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_03_asme1_ap242-e2.stp" + }, + { + "case": "04_nist_ctc_04_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ctc_04_asme1_ap242-e2.stp", + "size_bytes": 1287291, + "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.841, + "pmix_extract_rc": 0, + "pmix_extract_ms": 120.079, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 86.939, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 235, + "pmi_source_ref_count": 940, + "invalid_pmi_source_refs": 0, + "pmi_features": 205, + "pmi_datums": 8, + "pmi_datum_systems": 5, + "pmi_dimensions": 10, + "pmi_tolerances": 7, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_04_asme1_ap242-e2.stp" + }, + { + "case": "05_nist_ctc_05_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ctc_05_asme1_ap242-e1.stp", + "size_bytes": 878030, + "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.592, + "pmix_extract_rc": 0, + "pmix_extract_ms": 62.119, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 58.878, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 45, + "pmi_source_ref_count": 161, + "invalid_pmi_source_refs": 0, + "pmi_features": 20, + "pmi_datums": 4, + "pmi_datum_systems": 5, + "pmi_dimensions": 6, + "pmi_tolerances": 10, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_05_asme1_ap242-e1.stp" + }, + { + "case": "06_nist_ftc_06_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_06_asme1_ap242-e2.stp", + "size_bytes": 1971192, + "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.234, + "pmix_extract_rc": 0, + "pmix_extract_ms": 92.98, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 76.438, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 215, + "pmi_source_ref_count": 1060, + "invalid_pmi_source_refs": 0, + "pmi_features": 141, + "pmi_datums": 10, + "pmi_datum_systems": 12, + "pmi_dimensions": 24, + "pmi_tolerances": 28, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_06_asme1_ap242-e2.stp" + }, + { + "case": "07_nist_ftc_07_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_07_asme1_ap242-e2.stp", + "size_bytes": 1478375, + "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.946, + "pmix_extract_rc": 0, + "pmix_extract_ms": 80.025, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 83.083, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 221, + "pmi_source_ref_count": 724, + "invalid_pmi_source_refs": 0, + "pmi_features": 167, + "pmi_datums": 5, + "pmi_datum_systems": 5, + "pmi_dimensions": 17, + "pmi_tolerances": 27, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_07_asme1_ap242-e2.stp" + }, + { + "case": "08_nist_ftc_08_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_08_asme1_ap242-e2.stp", + "size_bytes": 4722264, + "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.017, + "pmix_extract_rc": 0, + "pmix_extract_ms": 149.526, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 131.168, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 4, + "pmix_semantic_total": 196, + "pmi_source_ref_count": 563, + "invalid_pmi_source_refs": 0, + "pmi_features": 133, + "pmi_datums": 11, + "pmi_datum_systems": 9, + "pmi_dimensions": 10, + "pmi_tolerances": 33, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e2.stp" + }, + { + "case": "09_nist_ftc_08_asme1_ap242-e4-tg", + "family": "NIST AP242", + "filename": "nist_ftc_08_asme1_ap242-e4-tg.stp", + "size_bytes": 2120559, + "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.021, + "pmix_extract_rc": 0, + "pmix_extract_ms": 115.6, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 79.963, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 21, + "pmi_source_ref_count": 252, + "invalid_pmi_source_refs": 0, + "pmi_features": 21, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e4-tg.stp" + }, + { + "case": "10_nist_ftc_09_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ftc_09_asme1_ap242-e1.stp", + "size_bytes": 6109836, + "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.015, + "pmix_extract_rc": 0, + "pmix_extract_ms": 176.719, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 158.921, + "pmix_product_error": "", + "pmix_parts": 4, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 1, + "pmix_semantic_total": 235, + "pmi_source_ref_count": 794, + "invalid_pmi_source_refs": 0, + "pmi_features": 166, + "pmi_datums": 8, + "pmi_datum_systems": 8, + "pmi_dimensions": 22, + "pmi_tolerances": 31, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_09_asme1_ap242-e1.stp" + }, + { + "case": "11_nist_ftc_10_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_10_asme1_ap242-e2.stp", + "size_bytes": 1879881, + "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.216, + "pmix_extract_rc": 0, + "pmix_extract_ms": 101.095, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 87.84, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 261, + "pmi_source_ref_count": 900, + "invalid_pmi_source_refs": 0, + "pmi_features": 172, + "pmi_datums": 11, + "pmi_datum_systems": 12, + "pmi_dimensions": 26, + "pmi_tolerances": 40, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_10_asme1_ap242-e2.stp" + }, + { + "case": "12_nist_ftc_11_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_ftc_11_asme1_ap242-e3.stp", + "size_bytes": 1946454, + "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.279, + "pmix_extract_rc": 0, + "pmix_extract_ms": 69.051, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 59.184, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 30, + "pmi_source_ref_count": 77, + "invalid_pmi_source_refs": 0, + "pmi_features": 17, + "pmi_datums": 2, + "pmi_datum_systems": 1, + "pmi_dimensions": 6, + "pmi_tolerances": 4, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_11_asme1_ap242-e3.stp" + }, + { + "case": "13_nist_stc_06_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_stc_06_asme1_ap242-e3.stp", + "size_bytes": 1006401, + "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.656, + "pmix_extract_rc": 0, + "pmix_extract_ms": 70.545, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 60.438, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 160, + "pmi_source_ref_count": 451, + "invalid_pmi_source_refs": 0, + "pmi_features": 103, + "pmi_datums": 6, + "pmi_datum_systems": 9, + "pmi_dimensions": 17, + "pmi_tolerances": 25, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_06_asme1_ap242-e3.stp" + }, + { + "case": "14_nist_stc_07_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_stc_07_asme1_ap242-e3.stp", + "size_bytes": 1945387, + "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.57, + "pmix_extract_rc": 0, + "pmix_extract_ms": 105.422, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 94.038, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 228, + "pmi_source_ref_count": 1123, + "invalid_pmi_source_refs": 0, + "pmi_features": 151, + "pmi_datums": 5, + "pmi_datum_systems": 5, + "pmi_dimensions": 45, + "pmi_tolerances": 22, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_07_asme1_ap242-e3.stp" + }, + { + "case": "15_nist_stc_08_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_stc_08_asme1_ap242-e3.stp", + "size_bytes": 2251152, + "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.016, + "pmix_extract_rc": 0, + "pmix_extract_ms": 94.097, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 77.04, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 179, + "pmi_source_ref_count": 845, + "invalid_pmi_source_refs": 0, + "pmi_features": 125, + "pmi_datums": 8, + "pmi_datum_systems": 9, + "pmi_dimensions": 7, + "pmi_tolerances": 30, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_08_asme1_ap242-e3.stp" + }, + { + "case": "16_nist_stc_09_asme1_ap242-e4", + "family": "NIST AP242", + "filename": "nist_stc_09_asme1_ap242-e4.stp", + "size_bytes": 968495, + "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.654, + "pmix_extract_rc": 0, + "pmix_extract_ms": 60.499, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 59.583, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 0, + "pmix_semantic_total": 201, + "pmi_source_ref_count": 703, + "invalid_pmi_source_refs": 0, + "pmi_features": 138, + "pmi_datums": 8, + "pmi_datum_systems": 8, + "pmi_dimensions": 20, + "pmi_tolerances": 27, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_09_asme1_ap242-e4.stp" + }, + { + "case": "17_nist_stc_10_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_stc_10_asme1_ap242-e2.stp", + "size_bytes": 4875056, + "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.015, + "pmix_extract_rc": 0, + "pmix_extract_ms": 153.191, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 120.998, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 6, + "pmix_semantic_total": 253, + "pmi_source_ref_count": 808, + "invalid_pmi_source_refs": 0, + "pmi_features": 168, + "pmi_datums": 9, + "pmi_datum_systems": 12, + "pmi_dimensions": 27, + "pmi_tolerances": 37, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_10_asme1_ap242-e2.stp" + }, + { + "case": "18_nist_ctc_04_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ctc_04_asme1_ap242-e1.stp", + "size_bytes": 1287291, + "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.772, + "pmix_extract_rc": 0, + "pmix_extract_ms": 86.841, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 80.205, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 235, + "pmi_source_ref_count": 940, + "invalid_pmi_source_refs": 0, + "pmi_features": 205, + "pmi_datums": 8, + "pmi_datum_systems": 5, + "pmi_dimensions": 10, + "pmi_tolerances": 7, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ctc_04_asme1_ap242-e1.stp" + }, + { + "case": "19_nist_ftc_08_asme1_ap242-e1-tg", + "family": "NIST AP242", + "filename": "nist_ftc_08_asme1_ap242-e1-tg.stp", + "size_bytes": 2120356, + "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.015, + "pmix_extract_rc": 0, + "pmix_extract_ms": 106.068, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 71.346, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 21, + "pmi_source_ref_count": 252, + "invalid_pmi_source_refs": 0, + "pmi_features": 21, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_08_asme1_ap242-e1-tg.stp" + }, + { + "case": "20_nist_ftc_11_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_11_asme1_ap242-e2.stp", + "size_bytes": 1946454, + "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.303, + "pmix_extract_rc": 0, + "pmix_extract_ms": 72.422, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 60.321, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 30, + "pmi_source_ref_count": 77, + "invalid_pmi_source_refs": 0, + "pmi_features": 17, + "pmi_datums": 2, + "pmi_datum_systems": 1, + "pmi_dimensions": 6, + "pmi_tolerances": 4, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_11_asme1_ap242-e2.stp" + }, + { + "case": "21_assembly_two_parts", + "family": "synthetic", + "filename": "assembly_two_parts.stp", + "size_bytes": 14239, + "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.057, + "pmix_extract_rc": 0, + "pmix_extract_ms": 25.862, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 27.592, + "pmix_product_error": "", + "pmix_parts": 3, + "pmix_relations": 2, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 0, + "pmi_source_ref_count": 0, + "invalid_pmi_source_refs": 0, + "pmi_features": 0, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_two_parts.stp" + }, + { + "case": "22_assembly_properties", + "family": "synthetic", + "filename": "assembly_properties.stp", + "size_bytes": 3293, + "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.034, + "pmix_extract_rc": 0, + "pmix_extract_ms": 29.303, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 28.268, + "pmix_product_error": "", + "pmix_parts": 3, + "pmix_relations": 3, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 0, + "pmi_source_ref_count": 0, + "invalid_pmi_source_refs": 0, + "pmi_features": 0, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_properties.stp" + }, + { + "case": "23_dimension_basics", + "family": "synthetic", + "filename": "dimension_basics.stp", + "size_bytes": 4646, + "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.037, + "pmix_extract_rc": 0, + "pmix_extract_ms": 30.865, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 32.901, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 8, + "pmi_source_ref_count": 29, + "invalid_pmi_source_refs": 0, + "pmi_features": 3, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 5, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/dimension_basics.stp" + }, + { + "case": "24_plate_one_hole", + "family": "synthetic", + "filename": "plate_one_hole.stp", + "size_bytes": 8538, + "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.034, + "pmix_extract_rc": 0, + "pmix_extract_ms": 28.52, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 26.528, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 0, + "pmi_source_ref_count": 0, + "invalid_pmi_source_refs": 0, + "pmi_features": 0, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/plate_one_hole.stp" + }, + { + "case": "25_property_basics", + "family": "synthetic", + "filename": "property_basics.stp", + "size_bytes": 4341, + "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.034, + "pmix_extract_rc": 0, + "pmix_extract_ms": 26.878, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 26.156, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 2, + "pmi_source_ref_count": 4, + "invalid_pmi_source_refs": 0, + "pmi_features": 1, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 1, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/property_basics.stp" + }, + { + "case": "26_tolerance_datum_basics", + "family": "synthetic", + "filename": "tolerance_datum_basics.stp", + "size_bytes": 6817, + "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.037, + "pmix_extract_rc": 0, + "pmix_extract_ms": 29.255, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 27.023, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 16, + "pmi_source_ref_count": 54, + "invalid_pmi_source_refs": 0, + "pmi_features": 3, + "pmi_datums": 3, + "pmi_datum_systems": 4, + "pmi_dimensions": 0, + "pmi_tolerances": 6, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/tolerance_datum_basics.stp" + } + ], + "checks": [ + { + "name": "NIST CTC01 #120 size 35.0 mm", + "pass": true, + "details": null + }, + { + "name": "NIST CTC01 size tolerance -0.2/0.0", + "pass": true, + "details": { + "type": "plus_minus", + "lower": { + "value": -0.2, + "unit": "mm" + }, + "upper": { + "value": 0.0, + "unit": "mm" + } + } + }, + { + "name": "NIST CTC01 #21 position tolerance 0.75", + "pass": true, + "details": null + }, + { + "name": "26 baseline runs", + "pass": true, + "details": null + }, + { + "name": "20 independent NIST source files", + "pass": true, + "details": null + }, + { + "name": "All baseline STEP runs no extracted BOM", + "pass": true, + "details": null + }, + { + "name": "PMIX parsed all STEP files", + "pass": true, + "details": null + }, + { + "name": "PMIX product parsed all STEP files", + "pass": true, + "details": null + }, + { + "name": "No invalid PMI #entity references", + "pass": true, + "details": null + }, + { + "name": "At least one NIST PMI dimension", + "pass": true, + "details": null + }, + { + "name": "At least one NIST GD&T tolerance", + "pass": true, + "details": null + }, + { + "name": "Assembly two parts parsed as multi-part", + "pass": true, + "details": null + }, + { + "name": "Max 2MB baseline rejects present", + "pass": true, + "details": null + }, + { + "name": "PMIX replay deterministic byte-for-byte", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_one_hole.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_hole_larger.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_hole_moved.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_one_hole_inches.stp", + "pass": true, + "details": null + }, + { + "name": "Hole Ø8 vs changed Ø10 detected", + "pass": true, + "details": null + }, + { + "name": "Moved hole origin 20->25 mm", + "pass": true, + "details": null + }, + { + "name": "Unit normalization inch == mm feature", + "pass": true, + "details": null + }, + { + "name": "Invalid STEP rejected by pmix", + "pass": true, + "details": null + } + ] +} \ No newline at end of file diff --git a/cad_evidence/BROWSER_RESULTS.json b/cad_evidence/BROWSER_RESULTS.json new file mode 100644 index 0000000..2adc9f2 --- /dev/null +++ b/cad_evidence/BROWSER_RESULTS.json @@ -0,0 +1,20 @@ +[ + { + "width": 1440, + "status": "FAIL", + "error": "AssertionError [ERR_ASSERTION]: real pmix must extract both components", + "post_requests": [ + "/api/industrial/engineering-extract" + ], + "errors": [] + }, + { + "width": 390, + "status": "FAIL", + "error": "AssertionError [ERR_ASSERTION]: real pmix must extract both components", + "post_requests": [ + "/api/industrial/engineering-extract" + ], + "errors": [] + } +] \ No newline at end of file diff --git a/cad_evidence/BROWSER_RESULTS_PRE_RECOVERY.json b/cad_evidence/BROWSER_RESULTS_PRE_RECOVERY.json new file mode 100644 index 0000000..2adc9f2 --- /dev/null +++ b/cad_evidence/BROWSER_RESULTS_PRE_RECOVERY.json @@ -0,0 +1,20 @@ +[ + { + "width": 1440, + "status": "FAIL", + "error": "AssertionError [ERR_ASSERTION]: real pmix must extract both components", + "post_requests": [ + "/api/industrial/engineering-extract" + ], + "errors": [] + }, + { + "width": 390, + "status": "FAIL", + "error": "AssertionError [ERR_ASSERTION]: real pmix must extract both components", + "post_requests": [ + "/api/industrial/engineering-extract" + ], + "errors": [] + } +] \ No newline at end of file diff --git a/cad_evidence/CHECKS.json b/cad_evidence/CHECKS.json new file mode 100644 index 0000000..e97b190 --- /dev/null +++ b/cad_evidence/CHECKS.json @@ -0,0 +1,122 @@ +[ + { + "name": "NIST CTC01 #120 size 35.0 mm", + "pass": true, + "details": null + }, + { + "name": "NIST CTC01 size tolerance -0.2/0.0", + "pass": true, + "details": { + "type": "plus_minus", + "lower": { + "value": -0.2, + "unit": "mm" + }, + "upper": { + "value": 0.0, + "unit": "mm" + } + } + }, + { + "name": "NIST CTC01 #21 position tolerance 0.75", + "pass": true, + "details": null + }, + { + "name": "26 baseline runs", + "pass": true, + "details": null + }, + { + "name": "20 independent NIST source files", + "pass": true, + "details": null + }, + { + "name": "All baseline STEP runs no extracted BOM", + "pass": true, + "details": null + }, + { + "name": "PMIX parsed all STEP files", + "pass": true, + "details": null + }, + { + "name": "PMIX product parsed all STEP files", + "pass": true, + "details": null + }, + { + "name": "No invalid PMI #entity references", + "pass": true, + "details": null + }, + { + "name": "At least one NIST PMI dimension", + "pass": true, + "details": null + }, + { + "name": "At least one NIST GD&T tolerance", + "pass": true, + "details": null + }, + { + "name": "Assembly two parts parsed as multi-part", + "pass": true, + "details": null + }, + { + "name": "Max 2MB baseline rejects present", + "pass": true, + "details": null + }, + { + "name": "PMIX replay deterministic byte-for-byte", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_one_hole.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_hole_larger.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_hole_moved.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_one_hole_inches.stp", + "pass": true, + "details": null + }, + { + "name": "Hole \u00d88 vs changed \u00d810 detected", + "pass": true, + "details": null + }, + { + "name": "Moved hole origin 20->25 mm", + "pass": true, + "details": null + }, + { + "name": "Unit normalization inch == mm feature", + "pass": true, + "details": null + }, + { + "name": "Invalid STEP rejected by pmix", + "pass": true, + "details": null + } +] \ No newline at end of file diff --git a/cad_evidence/GO_NO_GO.json b/cad_evidence/GO_NO_GO.json new file mode 100644 index 0000000..b9d47ee --- /dev/null +++ b/cad_evidence/GO_NO_GO.json @@ -0,0 +1,38 @@ +{ + "work_order": "WO-CAD-003", + "decision": "GO", + "gate": "GO applies to the verified code commit. The final evidence-only revision must pass its own exact-head checks before merge.", + "production_engineering_qualification": "Z", + "local": { + "experiment": "22/22", + "prototype": "7/7", + "step_bubblewrap": "26/26", + "legion_linux": "129/129", + "legion_windows": "100/100", + "paypal_windows": "46/46", + "build_audit": "PASS", + "browser_1440": "PASS", + "browser_390": "PASS", + "valid_critical_records": 860, + "unsupported_approvals": 0, + "unauthorized_effects": 0 + }, + "verified_code_commit": "ef352ebf311d0d705d80cfdc657ee7cb81a432a9", + "required_actions": [ + { + "id": 43041027077, + "event": "pull_request", + "sha": "ef352ebf311d0d705d80cfdc657ee7cb81a432a9", + "conclusion": "success", + "url": "https://github.com/veraxis-protocol/LEGION-Deal-Rescue/actions/runs/43041027077" + }, + { + "id": 43041018119, + "event": "push", + "sha": "ef352ebf311d0d705d80cfdc657ee7cb81a432a9", + "conclusion": "success", + "url": "https://github.com/veraxis-protocol/LEGION-Deal-Rescue/actions/runs/43041018119" + } + ], + "ci_matrix_jobs": "4/4" +} diff --git a/cad_evidence/GO_NO_GO_PRE_RECOVERY.json b/cad_evidence/GO_NO_GO_PRE_RECOVERY.json new file mode 100644 index 0000000..67b5959 --- /dev/null +++ b/cad_evidence/GO_NO_GO_PRE_RECOVERY.json @@ -0,0 +1,64 @@ +{ + "work_order": "WO-CAD-002", + "decision": "NO-GO", + "completion": "PARTIAL_IMPLEMENTATION_BLOCKED_NOT_DONE", + "baseline_commit": "805a30b1a38772b0683cb91941da633706571b34", + "production_engineering_qualification": "Z", + "original_experiment_reproduced": { + "binary_sha256_verified_before_execution": true, + "manifest_members_verified": 134, + "checks_passed": 22, + "checks_total": 22, + "adapter_checks_passed": 7, + "adapter_checks_total": 7, + "step_extract_passed": 26, + "step_product_passed": 26, + "step_total": 26, + "dimensions": 287, + "gdt_tolerances": 380, + "datums": 127, + "unsupported_entities": 17, + "diagnostics": 20 + }, + "new_adapter_archived_json_mapping": { + "mapped": 26, + "total": 26, + "scope": "Original actual pmix outputs mapped on Windows; not a new isolated parse" + }, + "regressions": { + "existing_legion_passed": 100, + "existing_legion_total": 100, + "build_audit": "PASS", + "paypal_passed": 46, + "paypal_total": 46, + "full_discovery": "FAIL", + "full_discovery_executed": 104, + "full_discovery_passed": 103, + "full_discovery_failed": 1, + "full_discovery_setup_errors": 1, + "new_tests_defined": 29, + "new_http_passed": 3, + "new_http_failed": 1, + "new_integration_methods_blocked_by_setup": 25, + "new_linux_sandbox_acceptance": "NOT_ESTABLISHED" + }, + "browser_e2e": {"1440": "FAIL", "390": "FAIL", "reason": "Real endpoint returns Z on Windows; no pmix component extraction", "page_errors": 0}, + "zero_failure_checks": { + "observed_unsupported_engineering_approvals": 0, + "observed_supplier_order_or_payment_effects": 0, + "browser_post_requests_before_confirmation": ["/api/industrial/engineering-extract"], + "scope": "Reproduced original experiment, archived JSON adapter mapping, executed Windows regression and HTTP/browser checks; not full new Linux E2E acceptance" + }, + "root_cause": { + "verified": ["C: free space reached zero", "WSL utilities returned Input/output error", "Ubuntu stopped and WSL reported Wsl/Service/E_FAIL", "native Windows does not satisfy Linux sandbox requirements"], + "inference": "Host storage exhaustion prevented Linux sandbox validation; environment recovery still required" + }, + "evidence_to_action": { + "gap": "New adapter binary execution inside mandatory isolation, all 29 integration checks and successful two-size browser extraction", + "required_evidence": "Successful sandbox execution logs; complete 129-test discovery with zero failures/errors/skips; 46 PayPal passes; successful build; 26 isolated reference parses; both browser sizes PASS", + "acquisition": "Restore at least 2-3 GB host free space and working Ubuntu/namespace support; follow docs/PMIX_INSTALL.md and rerun unchanged tests", + "immediate_execution": "Original 22+7 and 26 reference runs reproduced before disk failure; existing Windows regressions/build/PayPal run; all original JSON mapped; full discovery and browser E2E attempted without substitutes", + "acceptance": "GO only if every WO-CAD-002 acceptance condition passes. FAIL for any mismatch/effect/failing test; PARTIAL for missing execution/ground truth. Production qualification remains Z pending independent held-out dataset", + "next_action": "Recover storage/WSL, run pinned installation and real sandbox smoke test, repair any genuine implementation failures, rerun all required suites. If recovery unavailable keep draft PR and NO-GO; do not disable isolation or mock extraction" + } +} diff --git a/cad_evidence/REPORT.md b/cad_evidence/REPORT.md new file mode 100644 index 0000000..1a4ec64 --- /dev/null +++ b/cad_evidence/REPORT.md @@ -0,0 +1,30 @@ +# WO-CAD-003 verification + +Run 43038336265 executed Linux-only integration tests on both runners before provisioning the release. Both jobs reported two FileNotFoundError errors. The endpoint test lacked assembly_two_parts.stp and integration class setup lacked assembly_properties.stp. The failed command was python -B -m unittest discover -s tests -v. This was a CI environment and platform selection defect. + +Ubuntu installs the immutable pmix archive through scripts/install_pmix.py, installs the SHA-256-pinned Ubuntu bubblewrap package and checks the runner-provided util-linux/prlimit, and proves real sandbox extraction before running all 129 tests. Windows explicitly runs the three supported LEGION modules and all 46 PayPal adapter tests. Release and security controls remain in the workflow. Historical logs in the repository redact machine paths and storage names to satisfy the existing secret and private-path check. The final release package includes the raw failed and successful CI logs. + +Independent reproduction from a fresh checkout passed 22/22 original checks, 7/7 prototype checks, 26/26 isolated STEP extracts, 129/129 Linux LEGION tests, 100/100 Windows LEGION tests, 46/46 Windows PayPal tests and build/audit. N07/N09/N10/N14 all passed. The separate source audit verified 860 critical records and their STEP references against original file bytes. + +The real browser ran DRAWING → PARTS → LEGION AT WORK → REVIEW → PAYPAL at 1440px and 390px. The uploaded assembly yielded SYN-BRACKET ×1 and SYN-PIN ×2 with material evidence. Confirmation gated intake. Both flows recorded zero unsupported engineering approvals, zero supplier requests and zero payment effects. Screenshots and API traces are in wo-cad-003/browser. + +The exact-head GitHub Actions check is the final release gate. The release package includes the recorded job conclusions and exact SHA. Production engineering qualification remains Z until the independent engineer-adjudicated CAD validation defined in docs/PMIX_INSTALL.md passes. + +Two intermediate workflow revisions waited in package provisioning on hosted Ubuntu. The final setup uses the verified Ubuntu package locally and preserves the ordinary-user sandbox smoke test. + + +Run 43040737416 installed the verified packages successfully on Ubuntu 24.04. +The ordinary-user smoke command +`PYTHONPATH=tests python -B -m unittest -v test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation` +failed with `PMIX_EXTRACT_FAILED: bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted`. +The responsible layer was Ubuntu's AppArmor user namespace policy. CI now +loads the executable-specific bwrap profile where that policy is active. +The adapter still requires the full sandbox and the original smoke assertion. + +GitHub Actions accepted code commit ef352ebf311d0d705d80cfdc657ee7cb81a432a9 with four successful matrix jobs. + +- pull_request run 43041027077 passed Ubuntu and Windows. https://github.com/veraxis-protocol/LEGION-Deal-Rescue/actions/runs/43041027077 + +- push run 43041018119 passed Ubuntu and Windows. https://github.com/veraxis-protocol/LEGION-Deal-Rescue/actions/runs/43041018119 + +The final evidence revision requires a fresh exact-head check before merge. The reproducible package records that result alongside the full logs. diff --git a/cad_evidence/REPORT_PRE_RECOVERY.md b/cad_evidence/REPORT_PRE_RECOVERY.md new file mode 100644 index 0000000..21f07b2 --- /dev/null +++ b/cad_evidence/REPORT_PRE_RECOVERY.md @@ -0,0 +1,75 @@ +# WO-CAD-002 — partial implementation / NO-GO + +Baseline: `805a30b1a38772b0683cb91941da633706571b34`. +Development branch: `wo-cad-002-pmix-integration`. This is not DONE or accepted. + +## Evidence and actual extraction + +The original report, benchmark, checks, adapter, source manifest and negatives +were read before edits. All 134 SHA256SUMS entries verified before executing the +bundled pinned binary in WSL. Original commands actually ran: **22/22 + 7/7**, with +**26/26 extract and 26/26 product** results. The replay measured 287 dimensions, +380 GD&T tolerances, 127 datums, 33 product records and five assembly relations. +Seventeen unsupported entities and 20 diagnostics remain visible; no recall or +independent industrial accuracy claim is made. Archive source SHA-256 and binary +pin are recorded in `docs/PMIX_INSTALL.md`. + +The new mapping code independently mapped all 26 archived actual JSON outputs, +retaining Z and disabled checkout. This validates JSON mapping only, not new +sandbox execution. Source/quantity example: SYN-BRACKET=1, SYN-PIN=2, explicit +materials SYN-ALLOY-17 and SYN-STEEL-4; unspecified revision/process remain Z. + +## Changes prepared + +* Existing pmix JSON → provenance-bearing STEP BOM/engineering evidence adapter. +* Mandatory bubblewrap namespaces and subprocess resource/time/output limits; + hash verification on each execution; no unsafe platform/sandbox fallback. +* Existing CSV/JSON/DXF/SVG/PDF behavior retained; STEP gets 16 MiB cap. +* Read-only engineering-extract API, bounded JSON/socket read, no commerce session. +* STEP selection bound to file digest/part/quantity; strict engineering compatibility + screening; no coalition, quote, supplier order or payment authority from extraction. +* Five-screen browser flow, specifications/evidence and mandatory parts confirmation. +* 29 new test methods, real browser test driver, pinned archive installer and docs. + +## Executed validation and blockers + +Existing LEGION tests: **100/100 PASS** inside full discovery. Build/audit PASS. +PayPal regression: **46/46 PASS** (Windows Python 3.11.9, cryptography 46.0.3, +cffi 2.0.0, pycparser 2.23; no live calls). + +Full discovery is **FAIL**, not a regression acceptance pass: 104 executed, +103 passed, one new HTTP failure and one class-setup error. Twenty-five new +binary integration methods could not execute after setup failed on Windows. +The setup error is mandatory Linux sandbox availability, not a skipped test. +The Linux smoke attempt failed at OS execution before pmix, with I/O error. + +Both browser sizes actually ran and **FAIL** because real components were not +extracted on the Windows fallback server. No JS page errors; observed POSTs +before confirmation were extraction only. Screenshots are failure evidence. +Nothing is mocked to obtain PASS. + +C: reached 0 bytes during test dependency provisioning; WSL binaries returned +I/O error, then Ubuntu stopped with `Wsl/Service/E_FAIL`. A redundant locally +downloaded ZIP was removed; original evidence storage release remains intact. A previous +temporary-cache deletion was rejected by automatic review and not performed. +No user documents or other projects were cleaned. Storage/WSL recovery is needed. + +## Required continuation / six-part evidence path + +Gap: new Linux isolation, complete integration suite and successful browser +extraction. Required evidence: sandbox output, all 129 discovered tests passing, +26 isolated reference parses, 46 PayPal passes, build PASS and two browser PASSes. +Obtain it by restoring host storage and Ubuntu, installing pins and following +`docs/PMIX_INSTALL.md`. Independently feasible checks already executed are logged +above; the unsafe sandbox bypass was not used. PASS requires every work-order +condition, FAIL any mismatch/unauthorized effect, PARTIAL missing execution. +Next: recover at least 2–3 GB, rerun the sandbox smoke then all suites unchanged; +repair actual defects if found. If unavailable, keep draft/NO-GO and no integration +release. Independent held-out engineering qualification remains Z and requires +engineer-adjudicated immutable inputs as specified in the installation document. + +Work type: CAPABILITY EXPANSION with INVARIANT VERIFICATION. L1 checks extraction, +provenance, quantities, compatibility and no-effect boundaries. L2 enables review +of actual STEP demand; no GAIA2 ≥95% Pass@1 or cost improvement was measured. +L3 preserves separation of parsing, engineering truth, user intent and authority; +full new-chain correctness requires the execution evidence above. diff --git a/cad_evidence/SHA256SUMS b/cad_evidence/SHA256SUMS new file mode 100644 index 0000000..4a87f4e --- /dev/null +++ b/cad_evidence/SHA256SUMS @@ -0,0 +1,58 @@ +d8164686ff782c699b9dab5cccf93e7fe2f4d9808ebf359b0db60c28890c7b35 cad_evidence/adapter-rerun.log +05b6c78218781fb4f1f4fc0067a8d8d28a3e7943b4fad58f7c28f39be582b85a cad_evidence/ADAPTER_RESULTS.json +457cff556eba5aa54cb3e060912878290cb35e77e838ba7058fa6d4ed5f36294 cad_evidence/benchmark-rerun.log +302171e456377c7962921b22167c23608e4d14228bd430c7e9fa0e257481283c cad_evidence/BENCHMARK_RESULTS.json +30c501a92f5655dd5fbbb078e7c278585158122cb11275fb0fb7e8a83eb1723d cad_evidence/browser-server.log +93eb0e7bf8598bf25615086d0630311fc11030e8c41e0bf1e7dcfa4776ff5e09 cad_evidence/browser-windows.log +c274e9015dbcf2bbaedda84594faa4fc5b9439d8135c312a6cdce83cc56b6117 cad_evidence/BROWSER_RESULTS.json +c274e9015dbcf2bbaedda84594faa4fc5b9439d8135c312a6cdce83cc56b6117 cad_evidence/BROWSER_RESULTS_PRE_RECOVERY.json +a8df924ca88c49f59ad42daaf1f93b53afd316c7e439c8efc24570a6901d97a4 cad_evidence/build-windows.log +9ac1be8dba9636e8d8c0ed3c6bad95e3cc085d2f7e0eb93a7634d0a7b27a3bea cad_evidence/CHECKS.json +ed8044f0e0b3f27fe6233b7211ed4d593d296ce5ceb537acf31391da604df6eb cad_evidence/drawing-1440.png +2234b3f768acfa5f805e6e37a4f92f2b0d5af68d8fc85cebb3288245b11560fa cad_evidence/drawing-390.png +9d44195b5961f9b3d757cad5ee4e3e80736723d5318d1a6b54045ae0c5879d7d cad_evidence/GO_NO_GO.json +d2458571ecca92dc0a712da9ec3e16a75676235bf5ef86a0909c8a5ac9457088 cad_evidence/GO_NO_GO_PRE_RECOVERY.json +2a120ac50fc95cffb188536ffdd74cd16d6b346aa1b09df67b82da55c2c71331 cad_evidence/hash-verification.log +d8164686ff782c699b9dab5cccf93e7fe2f4d9808ebf359b0db60c28890c7b35 cad_evidence/linux-run/adapter-rerun-linux-recovery.log +6ef62044e7af716bd26eeb767dcc7269663869a11e03ca8a03b1ac0dd6b3e6ae cad_evidence/linux-run/ADAPTER_RESULTS.json +0fc01754d87ec60b421966e2203a9343134f47e759024692786b8fe8883e6924 cad_evidence/linux-run/benchmark-rerun-linux-recovery.log +15c4da085e30c3346dd40bbbadfee7a4c2550132df684307298b25cbc809a232 cad_evidence/linux-run/BENCHMARK_RESULTS.json +c75d2db5f17b5eb924ab78a0687ba474de8c8e9c2054adbc94dab691b0a6cf09 cad_evidence/linux-run/browser-linux-server.log +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cad_evidence/linux-run/browser-server.log +788257544179fd923034e061ab720959a5a0523d4c2f1d579ee15b9283f0b85e cad_evidence/linux-run/BROWSER_RESULTS.json +b620929f3faf3ce5e7640cafc42c60bd7546a1b288b426d9e7da1e356e2e7a0b cad_evidence/linux-run/build-linux.log +08e42a0addd44a2a370f545ccf6ebc20a8ae01d391cb29f1ad315368ed1f6823 cad_evidence/linux-run/drawing-1440.png +73ea4fdec6627545921abe7f09acb0a3fc92e1ae375a0cfec0d315baa80c9849 cad_evidence/linux-run/drawing-390.png +20e512a5367db38f082c98b0b5e6a7c0f82f4e4e32e15438e609f765b444b41b cad_evidence/linux-run/parts-1440.png +a7e12944df4678a60c96974f41dccf05be15e98e2215985d3c6ef5419958eddc cad_evidence/linux-run/parts-390.png +8237737e60ec64ce976a19dc81ea8f058340543e36139349857d5cb425cbf270 cad_evidence/linux-run/paypal-regression-linux.log +af160d6ce7b36432a9ddf3b4c0ee8c78e7786e0b235cec14151a8bce2b50280e cad_evidence/linux-run/paypal-regression-windows-pinned.log +91d8ba65b97ea4699f8c3533109db6fb0133e52e9df7512515ab67bbf8c56afd cad_evidence/linux-run/REFERENCE_PROVENANCE.json +242c3c402a789f95d463b4eaa7edc65210700faf0e1bbb7189933dc22aded733 cad_evidence/linux-run/regression-linux-installed.log +5484d569873e5ba2c47f735c1c87c881bae55a3320305cf867407a1eb9b04d06 cad_evidence/mapping-results.json +2198b5936aacf4fc15ee0656224dace1ac38ac7927f381a442144afd578f108a cad_evidence/parts-1440.png +71c7544ce77a86899cb24aa243666176076b234ad8b70f78dd5068a1f0444bb2 cad_evidence/parts-390.png +282408b96bd6d24c07047036499f8fdb9f8088d73e067b5bb85db5230f01ebd1 cad_evidence/paypal-regression-windows.log +54fedadd107486f936b6c8df279f59afeb069c59fff63db5f5f85d774d9e23ed cad_evidence/regression-windows.log +ca2a65ccbebfcce6484c603aed31dd69a41531fd9bb71c8e0003ddcd3cb7159e cad_evidence/REPORT.md +9083037c4eb78f7a7e6d8ed98b7f59c7995c74782d0c9f3cd03dca05897cb978 cad_evidence/REPORT_PRE_RECOVERY.md +02282a5aabc2efc2b2d753029c09fcd976eb79c1efdb1d60a41275c55d33ef1c cad_evidence/SOURCE_MANIFEST.json +cbe9c19438b2766d5af6bf34ab21e65fe80b7b9fe17ad66931202ffa7abd896b cad_evidence/wo-cad-003/browser/api-1440.json +cbe9c19438b2766d5af6bf34ab21e65fe80b7b9fe17ad66931202ffa7abd896b cad_evidence/wo-cad-003/browser/api-390.json +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cad_evidence/wo-cad-003/browser/browser-server.log +87f0c30b268d27ee18977116e28888de757fc2e1cc00477dbdbe56f8edb1d66e cad_evidence/wo-cad-003/browser/BROWSER_RESULTS.json +08e42a0addd44a2a370f545ccf6ebc20a8ae01d391cb29f1ad315368ed1f6823 cad_evidence/wo-cad-003/browser/drawing-1440.png +73ea4fdec6627545921abe7f09acb0a3fc92e1ae375a0cfec0d315baa80c9849 cad_evidence/wo-cad-003/browser/drawing-390.png +20e512a5367db38f082c98b0b5e6a7c0f82f4e4e32e15438e609f765b444b41b cad_evidence/wo-cad-003/browser/parts-1440.png +a7e12944df4678a60c96974f41dccf05be15e98e2215985d3c6ef5419958eddc cad_evidence/wo-cad-003/browser/parts-390.png +636c56159fe35902e3cd6ffb6f88a754e198bb26639b0a2d14ce77100aba12d6 cad_evidence/wo-cad-003/browser/paypal-1440.png +07720d3e1c2106bfdd4489dc5138b525d72676f32cfb46c741cbc15399de1309 cad_evidence/wo-cad-003/browser/paypal-390.png +84628cf9e14ea2939516eb37e3b15b0821a2c5fcc2c18a183c86daedac40ac1c cad_evidence/wo-cad-003/browser/review-1440.png +05b5ff9311dcf4ffb2ddfd45058a69ba3ec9c5e34e8344d12e1531e774f9638e cad_evidence/wo-cad-003/browser/review-390.png +0c4904212b50f5805578b24dc46498c8cb02f1f0ca1a50164625fb53a8eb0ea9 cad_evidence/wo-cad-003/browser.log +4220d4cea64d04e0411406b438b3968c8e1fe27ba9c868229e21b1ef29f9a22c cad_evidence/wo-cad-003/linux.log +f22bd1df2f31c8eebcf3979b7fa43ac3be6bc121dfd124ac7003cbe4b7b720cc cad_evidence/wo-cad-003/payment_negatives.json +d53410ab54c8d3c103e1a2090f07fbeaecedeb71e481c03650b3ae7e54e98233 cad_evidence/wo-cad-003/provenance.json +7fad70d1759dff8a19ea4ae0ebefa657eb49aaaf4385128856675c0daa743cb3 cad_evidence/wo-cad-003/windows-legion.log +557588633dd457ae6d18ed87c04035e49809139b55f24ee37d7a2c2cad82c61b cad_evidence/wo-cad-003/windows-negative.log +24442acacb3f769ed4d88edb47a4dfea63d2d1c4a3e5457fcfe746ad3e4a5e25 cad_evidence/wo-cad-003/windows-paypal.log diff --git a/cad_evidence/SOURCE_MANIFEST.json b/cad_evidence/SOURCE_MANIFEST.json new file mode 100644 index 0000000..b6ca367 --- /dev/null +++ b/cad_evidence/SOURCE_MANIFEST.json @@ -0,0 +1,540 @@ +{ + "source": "pmix official release CI artifacts plus pinned LEGION blob", + "pmix_artifact_id": 10306453408, + "source_artifact_id": 10306463705, + "baseline_blob_sha1": "d29a76dfad2b02ba9cb85831c763019c39b4858f", + "files": { + "ADAPTER_RESULTS.json": { + "sha256": "05b6c78218781fb4f1f4fc0067a8d8d28a3e7943b4fad58f7c28f39be582b85a", + "bytes": 119 + }, + "BENCHMARK_RESULTS.json": { + "sha256": "4d73150620ee310a93fc8d799158b1f67bf5fb04af19ed557c0be0c805ddbee6", + "bytes": 31360 + }, + "CHECKS.json": { + "sha256": "9ac1be8dba9636e8d8c0ed3c6bad95e3cc085d2f7e0eb93a7634d0a7b27a3bea", + "bytes": 2284 + }, + "GO_NO_GO.json": { + "sha256": "3a587249eb78c6409881de97b51de825c7692e9246526c8fc90397b0e3c19f12", + "bytes": 868 + }, + "PER_FILE_METRICS.csv": { + "sha256": "d38b4900b67b5f40478d5e14eeb7e2b26b2ae482b5237d8b3d711db299129180", + "bytes": 8516 + }, + "REPRODUCE.md": { + "sha256": "16e2db2154e156e8224d1f2eb53ec8f0fe5d524b9fe257e483316a9c233248b3", + "bytes": 482 + }, + "WO_CAD_001_REPORT.md": { + "sha256": "9311fd967e3ed8048be9d34c83654b8401c5445bded5d19b65518e97d940c328", + "bytes": 5996 + }, + "baseline/deal_rescue/industrial/cad_bom.py": { + "sha256": "54cedb31b75c95551c7e5e4206845c522035698b0838ea03eb72859e722fe211", + "bytes": 5824 + }, + "cad_adapter_prototype.py": { + "sha256": "1085bce9a087497ede319265dc931bf0e168bdf963a163534476d71cbac3f16e", + "bytes": 4088 + }, + "logs/01_nist_ctc_01_asme1_ap242-e1.json": { + "sha256": "91fd8886230595a7a74bfaa2b70c815a8996348ef9af6b85899f96fc45bef099", + "bytes": 337 + }, + "logs/02_nist_ctc_02_asme1_ap242-e2.json": { + "sha256": "3ed2619a2187a53aef34d9f24f3105a1b40ac1b60c15e74a24eba794f6a2ce5f", + "bytes": 338 + }, + "logs/03_nist_ctc_03_asme1_ap242-e2.json": { + "sha256": "79bc384b92d32ce91c9c862c3fa5a29167eb7366333f5f824111b0afb1902d26", + "bytes": 337 + }, + "logs/04_nist_ctc_04_asme1_ap242-e2.json": { + "sha256": "30b288941c1ab470f623c4e9e8d49dfb2f60e5ef4aa688f45a0f6cb62d96c41f", + "bytes": 337 + }, + "logs/05_nist_ctc_05_asme1_ap242-e1.json": { + "sha256": "6f7285cd2efedede4ef26068a3d3116190338856b67f18e1425ebc62dfefd848", + "bytes": 337 + }, + "logs/06_nist_ftc_06_asme1_ap242-e2.json": { + "sha256": "9e99059734f840774b46fbc650ab031b8021653cb2f581b7be27785499612cdc", + "bytes": 337 + }, + "logs/07_nist_ftc_07_asme1_ap242-e2.json": { + "sha256": "654b6dd4ced9662ec9183194061cefe69b5548d87952c249b14d008b24b7f415", + "bytes": 337 + }, + "logs/08_nist_ftc_08_asme1_ap242-e2.json": { + "sha256": "dd086ed5725e0911a29a5899166af28745b56fda08d9be99fe33f60962675ccc", + "bytes": 327 + }, + "logs/09_nist_ftc_08_asme1_ap242-e4-tg.json": { + "sha256": "6239a84093550559b727d29ce66012892b8cec05676f3dc88442230da77e1cb6", + "bytes": 327 + }, + "logs/10_nist_ftc_09_asme1_ap242-e1.json": { + "sha256": "5125bf3c36eed84e78af6b56623f060b9e7ec33fe66f6dc413233c1081a21fdf", + "bytes": 327 + }, + "logs/11_nist_ftc_10_asme1_ap242-e2.json": { + "sha256": "f45420acf70962d6b4e4c19bdcd63a0656e4f824c05e2a4b3fc97236cd3b5e2d", + "bytes": 338 + }, + "logs/12_nist_ftc_11_asme1_ap242-e3.json": { + "sha256": "01a61d85c837650297d5031f18f3005518f269cbb358e80bea78be5333c87721", + "bytes": 338 + }, + "logs/13_nist_stc_06_asme1_ap242-e3.json": { + "sha256": "e081c0580c3f8f027e56a2c7cbe60b00318092df1733d84d6f9a93f4eac2216f", + "bytes": 337 + }, + "logs/14_nist_stc_07_asme1_ap242-e3.json": { + "sha256": "0fb3aea7c0cb93e41aa3893a823d6c62c679df2a089e5542a7f1541d328d6e5f", + "bytes": 339 + }, + "logs/15_nist_stc_08_asme1_ap242-e3.json": { + "sha256": "b5bfaff2a2ee71b80237aeff46bad177d13a34ee52abb84ccad7aeb086c48299", + "bytes": 326 + }, + "logs/16_nist_stc_09_asme1_ap242-e4.json": { + "sha256": "215d4b6b5f2021a147d13ec517064d73d9aa39b0e126eff2a1dc39b7ee984ec9", + "bytes": 336 + }, + "logs/17_nist_stc_10_asme1_ap242-e2.json": { + "sha256": "ec77097b6924117f56671b3c3a5e30dd3503d7bfaed3bb9817c4fc547c55fe5c", + "bytes": 328 + }, + "logs/18_nist_ctc_04_asme1_ap242-e1.json": { + "sha256": "2bbefa80269dc25ac9ca70ac9defac1201742bfc6890f4872e38bf11cd611dc3", + "bytes": 337 + }, + "logs/19_nist_ftc_08_asme1_ap242-e1-tg.json": { + "sha256": "9ce927556fe33f1ba33d26364dc4f04040ac5fd6eb90a278532d8a5fbb63b617", + "bytes": 326 + }, + "logs/20_nist_ftc_11_asme1_ap242-e2.json": { + "sha256": "cdb0f49edd1c154e5b23eac17213c2a21d96954033651a4958e1652aaaa9e5c4", + "bytes": 337 + }, + "logs/21_assembly_two_parts.json": { + "sha256": "3ddeae5b0a81802671f4ad6d3c08a0ffc2512d460077c89e5e29249aff7bbc31", + "bytes": 336 + }, + "logs/22_assembly_properties.json": { + "sha256": "22152a5dab7760a34321f476b671fc40cf999e278faf6237bcd47b909ac0a905", + "bytes": 335 + }, + "logs/23_dimension_basics.json": { + "sha256": "61077381f6963d12d0ac2b1e89cb49dc7bbcf9204f1b1d3435ffb8eb5615d2cd", + "bytes": 335 + }, + "logs/24_plate_one_hole.json": { + "sha256": "7f40a85aea02b5a07799bc1f8154d77e99d37ceac079673fc8a96769410b7e2c", + "bytes": 335 + }, + "logs/25_property_basics.json": { + "sha256": "40e1d2bef5dfe327647ff840636534c2867a2d9c8a77b3020b1c020b5e8731dd", + "bytes": 335 + }, + "logs/26_tolerance_datum_basics.json": { + "sha256": "8dbf57595f813a67f28731669dda105d106a8cce7ad3da52400769389613f015", + "bytes": 335 + }, + "logs/adapter_stdout.log": { + "sha256": "d8164686ff782c699b9dab5cccf93e7fe2f4d9808ebf359b0db60c28890c7b35", + "bytes": 163 + }, + "logs/benchmark_stdout.log": { + "sha256": "b70153e8a8b86786886b914dbaea350a785a72cfbe63b74e01e337eaaf83817f", + "bytes": 3102 + }, + "outputs/01_nist_ctc_01_asme1_ap242-e1_extract.json": { + "sha256": "af705cde89ccf56582687b9381c94b2ecbc281212a7c4072da8e5a45a64f3065", + "bytes": 86549 + }, + "outputs/01_nist_ctc_01_asme1_ap242-e1_product.json": { + "sha256": "dde1cb8ec19a51ad5add919f111ce9341b29df5c655b885f7199b51b117f931f", + "bytes": 1040 + }, + "outputs/02_nist_ctc_02_asme1_ap242-e2_extract.json": { + "sha256": "815750f9235c69fcafc66cafdf01f1e9e7de99472ba0e01f4ba311b35e04747f", + "bytes": 260761 + }, + "outputs/02_nist_ctc_02_asme1_ap242-e2_product.json": { + "sha256": "00f311fc99b676d5d5e65c2f7485ecd6e9d6c4a543ad40d146902c83591b203e", + "bytes": 1111 + }, + "outputs/03_nist_ctc_03_asme1_ap242-e2_extract.json": { + "sha256": "eb9980a6e7b531253e49b48670e88121060644ee2167361155e0529a5a4ac8ea", + "bytes": 166605 + }, + "outputs/03_nist_ctc_03_asme1_ap242-e2_product.json": { + "sha256": "208662c270ea085d5a9b0b02b97bd4061298122e54c7efd405c6d10bfb630f0e", + "bytes": 1048 + }, + "outputs/04_nist_ctc_04_asme1_ap242-e2_extract.json": { + "sha256": "d7fcc6dff403b91a221424f024f094af4dc834309ffdd10f32767b9a89109db2", + "bytes": 301048 + }, + "outputs/04_nist_ctc_04_asme1_ap242-e2_product.json": { + "sha256": "a893a8c0c01639bab6e1c02b523af5aa2d86f1424dc44757d6df5addaf42ecc9", + "bytes": 1147 + }, + "outputs/05_nist_ctc_05_asme1_ap242-e1_extract.json": { + "sha256": "5e72c2c5d0f0d16f86d2af876d6f658165cb8b7372c2f7ee6a7106643f56ebfd", + "bytes": 91659 + }, + "outputs/05_nist_ctc_05_asme1_ap242-e1_product.json": { + "sha256": "34ba5949c78a0ac1ea1112838906bea34fcd0a203f13ce30464f1442816332ff", + "bytes": 1058 + }, + "outputs/06_nist_ftc_06_asme1_ap242-e2_extract.json": { + "sha256": "e8df67faae1f10b5c582644952f729db486c0713d5f8132125bf1a0e761f4858", + "bytes": 407654 + }, + "outputs/06_nist_ftc_06_asme1_ap242-e2_product.json": { + "sha256": "8835c9269d24712727205a3087610685558f4262fb210a8c656b2607c00127a6", + "bytes": 1096 + }, + "outputs/07_nist_ftc_07_asme1_ap242-e2_extract.json": { + "sha256": "22359c25c017e05af9f167a933632cb37a51a84ae5727b0e71d03cca97a613fa", + "bytes": 510230 + }, + "outputs/07_nist_ftc_07_asme1_ap242-e2_product.json": { + "sha256": "e9a7791bf20253f0b7030a8a79f843332ce52ca1cc40610c9dcc6a9c40a7f9a0", + "bytes": 1071 + }, + "outputs/08_nist_ftc_08_asme1_ap242-e2_extract.json": { + "sha256": "e39a79b2242cbfdbd534f77986a40b08304429b465d72fbecea06b03026ba6ec", + "bytes": 259255 + }, + "outputs/08_nist_ftc_08_asme1_ap242-e2_product.json": { + "sha256": "c4a2e8258d2fb1a371de2d014b91bb27cb9476756171b578d1a7512ea8fa941f", + "bytes": 1018 + }, + "outputs/09_nist_ftc_08_asme1_ap242-e4-tg_extract.json": { + "sha256": "4adf76ff843696f034fd09aa62f83038dbab17efe95f32f37fd53c149ca9d8b2", + "bytes": 269044 + }, + "outputs/09_nist_ftc_08_asme1_ap242-e4-tg_product.json": { + "sha256": "2597e1ddec92509a57f30b0fa1d0d24d19f56d456bff2ea3ec5a5d3083dcfb6a", + "bytes": 725 + }, + "outputs/10_nist_ftc_09_asme1_ap242-e1_extract.json": { + "sha256": "57f70cbc9b2ae8f9625384dd6d354a2a83928614076e7c2d6212f56b0bb378a6", + "bytes": 283936 + }, + "outputs/10_nist_ftc_09_asme1_ap242-e1_product.json": { + "sha256": "94683e86b928c0a075aa87dc7300b7fe5f64abfd97c00a59b27597ab83e0e900", + "bytes": 2057 + }, + "outputs/11_nist_ftc_10_asme1_ap242-e2_extract.json": { + "sha256": "401e2478d0ac526c7704a8baf2107b09fb7ae0811e2efa40096bf1fe53bea2e1", + "bytes": 383149 + }, + "outputs/11_nist_ftc_10_asme1_ap242-e2_product.json": { + "sha256": "365e39ccae0e55791029e9ee1a5cde1f1419af19dc9a1da1389309e8c4f62b32", + "bytes": 1390 + }, + "outputs/12_nist_ftc_11_asme1_ap242-e3_extract.json": { + "sha256": "7504219c58c1cfa8ed4ec0db4d195f1258a5738631b0ffc6623fda90b7caf878", + "bytes": 72006 + }, + "outputs/12_nist_ftc_11_asme1_ap242-e3_product.json": { + "sha256": "5e80f0646a564ddd08a51be84ba6bb08a69dc92089fe0e53fa9f9b930a797ce2", + "bytes": 1011 + }, + "outputs/13_nist_stc_06_asme1_ap242-e3_extract.json": { + "sha256": "bf955f352c587d8aa9384e3278778f992933ceefc808f297aa9df0480b0fe869", + "bytes": 681008 + }, + "outputs/13_nist_stc_06_asme1_ap242-e3_product.json": { + "sha256": "242a2adaefc92a13484796ad554c67eed06791dfdb42eb41be7067ccc7e78cfb", + "bytes": 988 + }, + "outputs/14_nist_stc_07_asme1_ap242-e3_extract.json": { + "sha256": "07a7433872a2edac0429cc4603fb484276a500172c1dde92268774a3d9c6d784", + "bytes": 538592 + }, + "outputs/14_nist_stc_07_asme1_ap242-e3_product.json": { + "sha256": "c0f683397df2c00af66c86184a62c035fced47809618f7162b32c51bf2330084", + "bytes": 1110 + }, + "outputs/15_nist_stc_08_asme1_ap242-e3_extract.json": { + "sha256": "2c906ee5fbb8fdccc556b0669c4570a33453e95ce0c6ea7c4ff9f1f9381a2df8", + "bytes": 314439 + }, + "outputs/15_nist_stc_08_asme1_ap242-e3_product.json": { + "sha256": "d8257dd9e68b8d67c4a58c99f1c31cc53223eae8441f92190ba1daef34ae7387", + "bytes": 1139 + }, + "outputs/16_nist_stc_09_asme1_ap242-e4_extract.json": { + "sha256": "1778334b787ee905df971e819a51db8c3ace4198dbdbe890ac9f14ce4f7d3975", + "bytes": 255295 + }, + "outputs/16_nist_stc_09_asme1_ap242-e4_product.json": { + "sha256": "bfeccc6c1f9ea9028e93a063da4b4873da763ca45b58608ce69787fba4492454", + "bytes": 1264 + }, + "outputs/17_nist_stc_10_asme1_ap242-e2_extract.json": { + "sha256": "82a27882c09c1c41daded023212b935fbc7a99685600809907615372fdedb83f", + "bytes": 499127 + }, + "outputs/17_nist_stc_10_asme1_ap242-e2_product.json": { + "sha256": "2a450ccf842abaa33e1f0ac2f8591feb0642b0dd677bb93aa577bc68693fa8a9", + "bytes": 990 + }, + "outputs/18_nist_ctc_04_asme1_ap242-e1_extract.json": { + "sha256": "c3c53f9093f145eed4f7124e8de59ac44fbaa183cc79d11148db3e092f32c4ec", + "bytes": 301048 + }, + "outputs/18_nist_ctc_04_asme1_ap242-e1_product.json": { + "sha256": "5799f8c81e4696e89850111e9122547af9251453d1519cbda476e4e59e7f6179", + "bytes": 1147 + }, + "outputs/19_nist_ftc_08_asme1_ap242-e1-tg_extract.json": { + "sha256": "1577e83d712fbebccca86fcf9a4da1605216ab42da830cfd5b4094202db79e8d", + "bytes": 269044 + }, + "outputs/19_nist_ftc_08_asme1_ap242-e1-tg_product.json": { + "sha256": "7126e4d7c2b024fc39a7456bdabd658df8431bcc3625cadf8f65efa30bc8dbdd", + "bytes": 725 + }, + "outputs/20_nist_ftc_11_asme1_ap242-e2_extract.json": { + "sha256": "0021463ad99bab6333460d3f061dcd5c7234315597f48b25f8a03aff7399886e", + "bytes": 72006 + }, + "outputs/20_nist_ftc_11_asme1_ap242-e2_product.json": { + "sha256": "ddf53db1688233b163aac95d890d707a2bdaca4ea4de46d55efd3bcc71a0e8af", + "bytes": 1011 + }, + "outputs/21_assembly_two_parts_extract.json": { + "sha256": "226a09a0fa0ddec964fbd8fd8150dda85ed7ca1f7e549a56c1ef889cf6423ed2", + "bytes": 586 + }, + "outputs/21_assembly_two_parts_product.json": { + "sha256": "cae2f5fbcbe2110f04fb3ecb1075453ce816c067258ab0c5f36cb863969bc5a7", + "bytes": 2545 + }, + "outputs/22_assembly_properties_extract.json": { + "sha256": "acb30b17112c54aa75c1dc5911f6861b7b0359d9c54e9d40800b444c877e97a6", + "bytes": 3096 + }, + "outputs/22_assembly_properties_product.json": { + "sha256": "568a54a07e9c076202b4f2c5e1dd8c04b92372c3554f1f5bca1cb803aab45e23", + "bytes": 1700 + }, + "outputs/23_dimension_basics_extract.json": { + "sha256": "ba3934859446d82d32c37e47ec0de10767172569cb4007c8c293afa0dcfa51ea", + "bytes": 4950 + }, + "outputs/23_dimension_basics_product.json": { + "sha256": "3caa58d3ca807bf4ce12ff04fb5da4391365e3a4033ae17d9443c14f69434fdb", + "bytes": 685 + }, + "outputs/24_plate_one_hole_extract.json": { + "sha256": "271084967915eafcee9e9aa3651c54bd210cc83b38495c49898e733359a78643", + "bytes": 582 + }, + "outputs/24_plate_one_hole_product.json": { + "sha256": "b6a2c3d14581e29e1affb2476302af03b104ca505b95991469355cb4a38d7c23", + "bytes": 942 + }, + "outputs/25_property_basics_extract.json": { + "sha256": "472c09061f97aa621b3f4ab2e8a27df70f5cd68b4dad0c7733a1d8be6eea49be", + "bytes": 5953 + }, + "outputs/25_property_basics_product.json": { + "sha256": "a8fc66ceaa31957e7392b9c77b8351c68feb7fc0f5ff26b7ff511e4a72c592cb", + "bytes": 684 + }, + "outputs/26_tolerance_datum_basics_extract.json": { + "sha256": "ce9c47af25b00946830ef7b15a6db510086740ac96775c5ccde8fbd9392f64f1", + "bytes": 10301 + }, + "outputs/26_tolerance_datum_basics_product.json": { + "sha256": "988c3fda8abb1f8ece704c30be40859bea7a82a4d5ae2f87fd4fb6f68209eca7", + "bytes": 691 + }, + "outputs/LEGION_repeated_part_ADAPTER.json": { + "sha256": "ac9dcbfd581e81143b8fce7b18979c51aa3cc3faf5012a543d6489163f380a47", + "bytes": 1542 + }, + "outputs/LEGION_two_parts_ADAPTER.json": { + "sha256": "c93cbd01f2c6c1c9de8033b47e06f4c00bf3daf2cb00041a5ef87340a88ccc36", + "bytes": 1554 + }, + "outputs/features_plate_hole_larger.json": { + "sha256": "27ef17bda187ec723beb4b3430a3508bff97a22a0ba39a60b84cae4830591b40", + "bytes": 2070 + }, + "outputs/features_plate_hole_moved.json": { + "sha256": "25f0c38349c939e2e453470b9328b792e25d64c19d4b327f7003416bca1e1404", + "bytes": 2068 + }, + "outputs/features_plate_one_hole.json": { + "sha256": "d01765e2c62eefd8e7afb0911ebc33a072b65fb49210f06982fffae7cae96ac1", + "bytes": 2066 + }, + "outputs/features_plate_one_hole_inches.json": { + "sha256": "08c65aba197ee2bd99243ff5d1707d498828570cb3839baf8703b1a1963a92df", + "bytes": 2073 + }, + "outputs/replay_extract.json": { + "sha256": "af705cde89ccf56582687b9381c94b2ecbc281212a7c4072da8e5a45a64f3065", + "bytes": 86549 + }, + "outputs/sample_extract.json": { + "sha256": "af705cde89ccf56582687b9381c94b2ecbc281212a7c4072da8e5a45a64f3065", + "bytes": 86549 + }, + "outputs/sample_features.json": { + "sha256": "d01765e2c62eefd8e7afb0911ebc33a072b65fb49210f06982fffae7cae96ac1", + "bytes": 2066 + }, + "outputs/sample_product.json": { + "sha256": "cae2f5fbcbe2110f04fb3ecb1075453ce816c067258ab0c5f36cb863969bc5a7", + "bytes": 2545 + }, + "run_benchmark.py": { + "sha256": "346a09e5532552e788445f47c36bcd809f6f008b65d36e1de071970c6a7dbc86", + "bytes": 11596 + }, + "tools/pmix-0.16.1/LICENSE.md": { + "sha256": "44d4211c4232d50175b46c2f332dba3c7aed1097b1cec610291a3cffc29e237a", + "bytes": 1076 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/README.md": { + "sha256": "964b901943136e3c02881133f976e45957fab01afaaaf92a32e5a85e4e8b8f7e", + "bytes": 2238 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_01_asme1_ap242-e1.stp": { + "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", + "bytes": 395283 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_02_asme1_ap242-e2.stp": { + "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", + "bytes": 1981342 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_03_asme1_ap242-e2.stp": { + "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", + "bytes": 673846 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_04_asme1_ap242-e2.stp": { + "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", + "bytes": 1287291 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_05_asme1_ap242-e1.stp": { + "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", + "bytes": 878030 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_06_asme1_ap242-e2.stp": { + "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", + "bytes": 1971192 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_07_asme1_ap242-e2.stp": { + "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", + "bytes": 1478375 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e2.stp": { + "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", + "bytes": 4722264 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e4-tg.stp": { + "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", + "bytes": 2120559 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_09_asme1_ap242-e1.stp": { + "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", + "bytes": 6109836 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_10_asme1_ap242-e2.stp": { + "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", + "bytes": 1879881 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_11_asme1_ap242-e3.stp": { + "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", + "bytes": 1946454 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_06_asme1_ap242-e3.stp": { + "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", + "bytes": 1006401 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_07_asme1_ap242-e3.stp": { + "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", + "bytes": 1945387 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_08_asme1_ap242-e3.stp": { + "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", + "bytes": 2251152 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_09_asme1_ap242-e4.stp": { + "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", + "bytes": 968495 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_10_asme1_ap242-e2.stp": { + "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", + "bytes": 4875056 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ctc_04_asme1_ap242-e1.stp": { + "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", + "bytes": 1287291 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_08_asme1_ap242-e1-tg.stp": { + "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", + "bytes": 2120356 + }, + "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_11_asme1_ap242-e2.stp": { + "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", + "bytes": 1946454 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/README.md": { + "sha256": "9c15b6802a2339cf5a8610cb48b2826151aaa54de7fc36992d64c2bcf986364c", + "bytes": 5334 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_properties.stp": { + "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "bytes": 3293 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_two_parts.stp": { + "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", + "bytes": 14239 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/dimension_basics.stp": { + "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", + "bytes": 4646 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/plate_hole_larger.stp": { + "sha256": "12be95d7670727f25c17067ae543bb19d33ba632f18abd0e9ad579af377f1179", + "bytes": 8556 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/plate_hole_moved.stp": { + "sha256": "ed2a6f01ad60548b32588e6805a417e20ae1f7917748481c9ce62aec18af9638", + "bytes": 8547 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/plate_one_hole.stp": { + "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", + "bytes": 8538 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/plate_one_hole_inches.stp": { + "sha256": "76e6087d26db36f75602e903c1afe2f68f598d465f04904c10dba33eb295dfc8", + "bytes": 8701 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/property_basics.stp": { + "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", + "bytes": 4341 + }, + "tools/pmix-0.16.1/tests/fixtures/synthetic/tolerance_datum_basics.stp": { + "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", + "bytes": 6817 + }, + "tools/pmix-x86_64-unknown-linux-gnu/pmix": { + "sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "bytes": 4706120 + } + } +} \ No newline at end of file diff --git a/cad_evidence/adapter-rerun.log b/cad_evidence/adapter-rerun.log new file mode 100644 index 0000000..ffb8813 --- /dev/null +++ b/cad_evidence/adapter-rerun.log @@ -0,0 +1,3 @@ +two_parts {'SYN-BLOCK': 1, 'SYN-PLATE': 1} gate Z checkout False +repeated_part {'SYN-BRACKET': 1, 'SYN-PIN': 2} gate Z checkout False +ADAPTER_CONTRACT_TESTS 7 / 7 diff --git a/cad_evidence/benchmark-rerun.log b/cad_evidence/benchmark-rerun.log new file mode 100644 index 0000000..1921ee4 --- /dev/null +++ b/cad_evidence/benchmark-rerun.log @@ -0,0 +1,51 @@ +01/26 nist_ctc_01_asme1_ap242-e1.stp base=Z PMI= 61 parts= 1 pmix=0/0 +02/26 nist_ctc_02_asme1_ap242-e2.stp base=Z PMI= 111 parts= 1 pmix=0/0 +03/26 nist_ctc_03_asme1_ap242-e2.stp base=Z PMI= 69 parts= 1 pmix=0/0 +04/26 nist_ctc_04_asme1_ap242-e2.stp base=Z PMI= 235 parts= 1 pmix=0/0 +05/26 nist_ctc_05_asme1_ap242-e1.stp base=Z PMI= 45 parts= 1 pmix=0/0 +06/26 nist_ftc_06_asme1_ap242-e2.stp base=Z PMI= 215 parts= 1 pmix=0/0 +07/26 nist_ftc_07_asme1_ap242-e2.stp base=Z PMI= 221 parts= 1 pmix=0/0 +08/26 nist_ftc_08_asme1_ap242-e2.stp base=REJECTED PMI= 196 parts= 1 pmix=0/0 +09/26 nist_ftc_08_asme1_ap242-e4-tg.stp base=REJECTED PMI= 21 parts= 1 pmix=0/0 +10/26 nist_ftc_09_asme1_ap242-e1.stp base=REJECTED PMI= 235 parts= 4 pmix=0/0 +11/26 nist_ftc_10_asme1_ap242-e2.stp base=Z PMI= 261 parts= 1 pmix=0/0 +12/26 nist_ftc_11_asme1_ap242-e3.stp base=Z PMI= 30 parts= 1 pmix=0/0 +13/26 nist_stc_06_asme1_ap242-e3.stp base=Z PMI= 160 parts= 1 pmix=0/0 +14/26 nist_stc_07_asme1_ap242-e3.stp base=Z PMI= 228 parts= 1 pmix=0/0 +15/26 nist_stc_08_asme1_ap242-e3.stp base=REJECTED PMI= 179 parts= 1 pmix=0/0 +16/26 nist_stc_09_asme1_ap242-e4.stp base=Z PMI= 201 parts= 1 pmix=0/0 +17/26 nist_stc_10_asme1_ap242-e2.stp base=REJECTED PMI= 253 parts= 1 pmix=0/0 +18/26 nist_ctc_04_asme1_ap242-e1.stp base=Z PMI= 235 parts= 1 pmix=0/0 +19/26 nist_ftc_08_asme1_ap242-e1-tg.stp base=REJECTED PMI= 21 parts= 1 pmix=0/0 +20/26 nist_ftc_11_asme1_ap242-e2.stp base=Z PMI= 30 parts= 1 pmix=0/0 +21/26 assembly_two_parts.stp base=Z PMI= 0 parts= 3 pmix=0/0 +22/26 assembly_properties.stp base=Z PMI= 0 parts= 3 pmix=0/0 +23/26 dimension_basics.stp base=Z PMI= 8 parts= 1 pmix=0/0 +24/26 plate_one_hole.stp base=Z PMI= 0 parts= 1 pmix=0/0 +25/26 property_basics.stp base=Z PMI= 2 parts= 1 pmix=0/0 +26/26 tolerance_datum_basics.stp base=Z PMI= 16 parts= 1 pmix=0/0 +SUMMARY { + "experiment": "WO-CAD-001", + "sample_count": 26, + "nist_count": 20, + "synthetic_count": 6, + "pmix_version": "0.16.1", + "pmix_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "pmix_parse_pass": 26, + "pmix_product_pass": 26, + "baseline_extracted": 0, + "baseline_unknown": 20, + "baseline_rejected": 6, + "pmix_dimensions": 287, + "pmix_gdt_tolerances": 380, + "pmix_datums": 127, + "pmix_parts": 33, + "pmix_relations": 5, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 20, + "pmix_extract_p50_ms": 76.22, + "pmix_extract_p95_ms": 149.53, + "checks_pass": 22, + "checks_total": 22, + "evidence_scope": "DIRECT LOCAL BIN+NIST CORPUS TEST; not independent manufacturing validation" +} diff --git a/cad_evidence/browser-server.log b/cad_evidence/browser-server.log new file mode 100644 index 0000000..7eb6c0c --- /dev/null +++ b/cad_evidence/browser-server.log @@ -0,0 +1 @@ +{"url": "http://127.0.0.1:18896/", "runs": ["run-1", "run-2"]} diff --git a/cad_evidence/browser-windows.log b/cad_evidence/browser-windows.log new file mode 100644 index 0000000..2e2fab5 --- /dev/null +++ b/cad_evidence/browser-windows.log @@ -0,0 +1,20 @@ +[ + { + "width": 1440, + "status": "FAIL", + "error": "AssertionError [ERR_ASSERTION]: real pmix must extract both components", + "post_requests": [ + "/api/industrial/engineering-extract" + ], + "errors": [] + }, + { + "width": 390, + "status": "FAIL", + "error": "AssertionError [ERR_ASSERTION]: real pmix must extract both components", + "post_requests": [ + "/api/industrial/engineering-extract" + ], + "errors": [] + } +] diff --git a/cad_evidence/build-windows.log b/cad_evidence/build-windows.log new file mode 100644 index 0000000..37443ed --- /dev/null +++ b/cad_evidence/build-windows.log @@ -0,0 +1,32 @@ +{"run_id": "run-1", "events": 75, "figures": 88, "judge": "PASS_COMPLETED", "judge_hashes_match": true, "paypal_bound": false} +{"run_id": "run-2", "events": 75, "figures": 88, "judge": "PASS_COMPLETED", "judge_hashes_match": true, "paypal_bound": false} +{"contribution": 0, "fees": 1975, "upper_bound": -1975, "break_even_price": 10310, "self_tests": "PASS"} +{ + "audit": { + "run-1": { + "coverage": 100.0, + "prov": true, + "mission": "SIMULATED_MISSION_VERIFIED", + "claims": true + }, + "run-2": { + "coverage": 100.0, + "prov": true, + "mission": "SIMULATED_MISSION_VERIFIED", + "claims": true + } + }, + "negatives": { + "attempted": 15, + "passed": 15, + "blocked": [], + "failed": [], + "harness": { + "forbidden_effects": 0, + "passed": 25, + "total": 25 + } + } +} + +{"runs": ["run-1", "run-2"], "counted": "run-2", "audit_all_pass": true} diff --git a/cad_evidence/drawing-1440.png b/cad_evidence/drawing-1440.png new file mode 100644 index 0000000..4d7f1eb Binary files /dev/null and b/cad_evidence/drawing-1440.png differ diff --git a/cad_evidence/drawing-390.png b/cad_evidence/drawing-390.png new file mode 100644 index 0000000..7bae58f Binary files /dev/null and b/cad_evidence/drawing-390.png differ diff --git a/cad_evidence/hash-verification.log b/cad_evidence/hash-verification.log new file mode 100644 index 0000000..43a6207 --- /dev/null +++ b/cad_evidence/hash-verification.log @@ -0,0 +1,134 @@ +ADAPTER_RESULTS.json: OK +BENCHMARK_RESULTS.json: OK +CHECKS.json: OK +GO_NO_GO.json: OK +PER_FILE_METRICS.csv: OK +REPRODUCE.md: OK +SOURCE_MANIFEST.json: OK +WO_CAD_001_REPORT.md: OK +baseline/deal_rescue/industrial/cad_bom.py: OK +cad_adapter_prototype.py: OK +logs/01_nist_ctc_01_asme1_ap242-e1.json: OK +logs/02_nist_ctc_02_asme1_ap242-e2.json: OK +logs/03_nist_ctc_03_asme1_ap242-e2.json: OK +logs/04_nist_ctc_04_asme1_ap242-e2.json: OK +logs/05_nist_ctc_05_asme1_ap242-e1.json: OK +logs/06_nist_ftc_06_asme1_ap242-e2.json: OK +logs/07_nist_ftc_07_asme1_ap242-e2.json: OK +logs/08_nist_ftc_08_asme1_ap242-e2.json: OK +logs/09_nist_ftc_08_asme1_ap242-e4-tg.json: OK +logs/10_nist_ftc_09_asme1_ap242-e1.json: OK +logs/11_nist_ftc_10_asme1_ap242-e2.json: OK +logs/12_nist_ftc_11_asme1_ap242-e3.json: OK +logs/13_nist_stc_06_asme1_ap242-e3.json: OK +logs/14_nist_stc_07_asme1_ap242-e3.json: OK +logs/15_nist_stc_08_asme1_ap242-e3.json: OK +logs/16_nist_stc_09_asme1_ap242-e4.json: OK +logs/17_nist_stc_10_asme1_ap242-e2.json: OK +logs/18_nist_ctc_04_asme1_ap242-e1.json: OK +logs/19_nist_ftc_08_asme1_ap242-e1-tg.json: OK +logs/20_nist_ftc_11_asme1_ap242-e2.json: OK +logs/21_assembly_two_parts.json: OK +logs/22_assembly_properties.json: OK +logs/23_dimension_basics.json: OK +logs/24_plate_one_hole.json: OK +logs/25_property_basics.json: OK +logs/26_tolerance_datum_basics.json: OK +logs/adapter_stdout.log: OK +logs/benchmark_stdout.log: OK +outputs/01_nist_ctc_01_asme1_ap242-e1_extract.json: OK +outputs/01_nist_ctc_01_asme1_ap242-e1_product.json: OK +outputs/02_nist_ctc_02_asme1_ap242-e2_extract.json: OK +outputs/02_nist_ctc_02_asme1_ap242-e2_product.json: OK +outputs/03_nist_ctc_03_asme1_ap242-e2_extract.json: OK +outputs/03_nist_ctc_03_asme1_ap242-e2_product.json: OK +outputs/04_nist_ctc_04_asme1_ap242-e2_extract.json: OK +outputs/04_nist_ctc_04_asme1_ap242-e2_product.json: OK +outputs/05_nist_ctc_05_asme1_ap242-e1_extract.json: OK +outputs/05_nist_ctc_05_asme1_ap242-e1_product.json: OK +outputs/06_nist_ftc_06_asme1_ap242-e2_extract.json: OK +outputs/06_nist_ftc_06_asme1_ap242-e2_product.json: OK +outputs/07_nist_ftc_07_asme1_ap242-e2_extract.json: OK +outputs/07_nist_ftc_07_asme1_ap242-e2_product.json: OK +outputs/08_nist_ftc_08_asme1_ap242-e2_extract.json: OK +outputs/08_nist_ftc_08_asme1_ap242-e2_product.json: OK +outputs/09_nist_ftc_08_asme1_ap242-e4-tg_extract.json: OK +outputs/09_nist_ftc_08_asme1_ap242-e4-tg_product.json: OK +outputs/10_nist_ftc_09_asme1_ap242-e1_extract.json: OK +outputs/10_nist_ftc_09_asme1_ap242-e1_product.json: OK +outputs/11_nist_ftc_10_asme1_ap242-e2_extract.json: OK +outputs/11_nist_ftc_10_asme1_ap242-e2_product.json: OK +outputs/12_nist_ftc_11_asme1_ap242-e3_extract.json: OK +outputs/12_nist_ftc_11_asme1_ap242-e3_product.json: OK +outputs/13_nist_stc_06_asme1_ap242-e3_extract.json: OK +outputs/13_nist_stc_06_asme1_ap242-e3_product.json: OK +outputs/14_nist_stc_07_asme1_ap242-e3_extract.json: OK +outputs/14_nist_stc_07_asme1_ap242-e3_product.json: OK +outputs/15_nist_stc_08_asme1_ap242-e3_extract.json: OK +outputs/15_nist_stc_08_asme1_ap242-e3_product.json: OK +outputs/16_nist_stc_09_asme1_ap242-e4_extract.json: OK +outputs/16_nist_stc_09_asme1_ap242-e4_product.json: OK +outputs/17_nist_stc_10_asme1_ap242-e2_extract.json: OK +outputs/17_nist_stc_10_asme1_ap242-e2_product.json: OK +outputs/18_nist_ctc_04_asme1_ap242-e1_extract.json: OK +outputs/18_nist_ctc_04_asme1_ap242-e1_product.json: OK +outputs/19_nist_ftc_08_asme1_ap242-e1-tg_extract.json: OK +outputs/19_nist_ftc_08_asme1_ap242-e1-tg_product.json: OK +outputs/20_nist_ftc_11_asme1_ap242-e2_extract.json: OK +outputs/20_nist_ftc_11_asme1_ap242-e2_product.json: OK +outputs/21_assembly_two_parts_extract.json: OK +outputs/21_assembly_two_parts_product.json: OK +outputs/22_assembly_properties_extract.json: OK +outputs/22_assembly_properties_product.json: OK +outputs/23_dimension_basics_extract.json: OK +outputs/23_dimension_basics_product.json: OK +outputs/24_plate_one_hole_extract.json: OK +outputs/24_plate_one_hole_product.json: OK +outputs/25_property_basics_extract.json: OK +outputs/25_property_basics_product.json: OK +outputs/26_tolerance_datum_basics_extract.json: OK +outputs/26_tolerance_datum_basics_product.json: OK +outputs/LEGION_repeated_part_ADAPTER.json: OK +outputs/LEGION_two_parts_ADAPTER.json: OK +outputs/features_plate_hole_larger.json: OK +outputs/features_plate_hole_moved.json: OK +outputs/features_plate_one_hole.json: OK +outputs/features_plate_one_hole_inches.json: OK +outputs/replay_extract.json: OK +outputs/sample_extract.json: OK +outputs/sample_features.json: OK +outputs/sample_product.json: OK +run_benchmark.py: OK +tools/pmix-0.16.1/LICENSE.md: OK +tools/pmix-0.16.1/tests/fixtures/nist/README.md: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_01_asme1_ap242-e1.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_02_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_03_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_04_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_05_asme1_ap242-e1.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_06_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_07_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e4-tg.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_09_asme1_ap242-e1.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_10_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_11_asme1_ap242-e3.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_06_asme1_ap242-e3.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_07_asme1_ap242-e3.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_08_asme1_ap242-e3.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_09_asme1_ap242-e4.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_10_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ctc_04_asme1_ap242-e1.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_08_asme1_ap242-e1-tg.stp: OK +tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_11_asme1_ap242-e2.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/README.md: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_properties.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_two_parts.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/dimension_basics.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/plate_hole_larger.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/plate_hole_moved.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/plate_one_hole.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/plate_one_hole_inches.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/property_basics.stp: OK +tools/pmix-0.16.1/tests/fixtures/synthetic/tolerance_datum_basics.stp: OK +tools/pmix-x86_64-unknown-linux-gnu/pmix: OK diff --git a/cad_evidence/linux-run/ADAPTER_RESULTS.json b/cad_evidence/linux-run/ADAPTER_RESULTS.json new file mode 100644 index 0000000..a839ddf --- /dev/null +++ b/cad_evidence/linux-run/ADAPTER_RESULTS.json @@ -0,0 +1,5 @@ +{ + "tests_passed": 7, + "tests_total": 7, + "status": "T:read_only_extract,Z:engineering,Z:quote,F:checkout_enabled" +} diff --git a/cad_evidence/linux-run/BENCHMARK_RESULTS.json b/cad_evidence/linux-run/BENCHMARK_RESULTS.json new file mode 100644 index 0000000..61a6590 --- /dev/null +++ b/cad_evidence/linux-run/BENCHMARK_RESULTS.json @@ -0,0 +1,983 @@ +{ + "summary": { + "experiment": "WO-CAD-001", + "sample_count": 26, + "nist_count": 20, + "synthetic_count": 6, + "pmix_version": "0.16.1", + "pmix_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "pmix_parse_pass": 26, + "pmix_product_pass": 26, + "baseline_extracted": 0, + "baseline_unknown": 20, + "baseline_rejected": 6, + "pmix_dimensions": 287, + "pmix_gdt_tolerances": 380, + "pmix_datums": 127, + "pmix_parts": 33, + "pmix_relations": 5, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 20, + "pmix_extract_p50_ms": 85.42, + "pmix_extract_p95_ms": 165.59, + "checks_pass": 22, + "checks_total": 22, + "evidence_scope": "DIRECT LOCAL BIN+NIST CORPUS TEST; not independent manufacturing validation" + }, + "cases": [ + { + "case": "01_nist_ctc_01_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ctc_01_asme1_ap242-e1.stp", + "size_bytes": 395283, + "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.411, + "pmix_extract_rc": 0, + "pmix_extract_ms": 63.509, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 56.723, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 61, + "pmi_source_ref_count": 234, + "invalid_pmi_source_refs": 0, + "pmi_features": 38, + "pmi_datums": 3, + "pmi_datum_systems": 2, + "pmi_dimensions": 12, + "pmi_tolerances": 6, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_01_asme1_ap242-e1.stp" + }, + { + "case": "02_nist_ctc_02_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ctc_02_asme1_ap242-e2.stp", + "size_bytes": 1981342, + "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.643, + "pmix_extract_rc": 0, + "pmix_extract_ms": 129.773, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 120.912, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 1, + "pmix_semantic_total": 111, + "pmi_source_ref_count": 421, + "invalid_pmi_source_refs": 0, + "pmi_features": 58, + "pmi_datums": 10, + "pmi_datum_systems": 14, + "pmi_dimensions": 7, + "pmi_tolerances": 22, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_02_asme1_ap242-e2.stp" + }, + { + "case": "03_nist_ctc_03_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ctc_03_asme1_ap242-e2.stp", + "size_bytes": 673846, + "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.538, + "pmix_extract_rc": 0, + "pmix_extract_ms": 71.982, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 57.726, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 69, + "pmi_source_ref_count": 358, + "invalid_pmi_source_refs": 0, + "pmi_features": 34, + "pmi_datums": 6, + "pmi_datum_systems": 6, + "pmi_dimensions": 10, + "pmi_tolerances": 13, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_03_asme1_ap242-e2.stp" + }, + { + "case": "04_nist_ctc_04_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ctc_04_asme1_ap242-e2.stp", + "size_bytes": 1287291, + "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.912, + "pmix_extract_rc": 0, + "pmix_extract_ms": 101.323, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 111.047, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 235, + "pmi_source_ref_count": 940, + "invalid_pmi_source_refs": 0, + "pmi_features": 205, + "pmi_datums": 8, + "pmi_datum_systems": 5, + "pmi_dimensions": 10, + "pmi_tolerances": 7, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_04_asme1_ap242-e2.stp" + }, + { + "case": "05_nist_ctc_05_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ctc_05_asme1_ap242-e1.stp", + "size_bytes": 878030, + "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.642, + "pmix_extract_rc": 0, + "pmix_extract_ms": 74.254, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 64.706, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 45, + "pmi_source_ref_count": 161, + "invalid_pmi_source_refs": 0, + "pmi_features": 20, + "pmi_datums": 4, + "pmi_datum_systems": 5, + "pmi_dimensions": 6, + "pmi_tolerances": 10, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ctc_05_asme1_ap242-e1.stp" + }, + { + "case": "06_nist_ftc_06_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_06_asme1_ap242-e2.stp", + "size_bytes": 1971192, + "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.447, + "pmix_extract_rc": 0, + "pmix_extract_ms": 107.119, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 83.923, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 215, + "pmi_source_ref_count": 1060, + "invalid_pmi_source_refs": 0, + "pmi_features": 141, + "pmi_datums": 10, + "pmi_datum_systems": 12, + "pmi_dimensions": 24, + "pmi_tolerances": 28, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_06_asme1_ap242-e2.stp" + }, + { + "case": "07_nist_ftc_07_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_07_asme1_ap242-e2.stp", + "size_bytes": 1478375, + "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.026, + "pmix_extract_rc": 0, + "pmix_extract_ms": 96.864, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 87.329, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 221, + "pmi_source_ref_count": 724, + "invalid_pmi_source_refs": 0, + "pmi_features": 167, + "pmi_datums": 5, + "pmi_datum_systems": 5, + "pmi_dimensions": 17, + "pmi_tolerances": 27, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_07_asme1_ap242-e2.stp" + }, + { + "case": "08_nist_ftc_08_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_08_asme1_ap242-e2.stp", + "size_bytes": 4722264, + "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.024, + "pmix_extract_rc": 0, + "pmix_extract_ms": 166.553, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 126.893, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 4, + "pmix_semantic_total": 196, + "pmi_source_ref_count": 563, + "invalid_pmi_source_refs": 0, + "pmi_features": 133, + "pmi_datums": 11, + "pmi_datum_systems": 9, + "pmi_dimensions": 10, + "pmi_tolerances": 33, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e2.stp" + }, + { + "case": "09_nist_ftc_08_asme1_ap242-e4-tg", + "family": "NIST AP242", + "filename": "nist_ftc_08_asme1_ap242-e4-tg.stp", + "size_bytes": 2120559, + "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.019, + "pmix_extract_rc": 0, + "pmix_extract_ms": 99.551, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 78.201, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 21, + "pmi_source_ref_count": 252, + "invalid_pmi_source_refs": 0, + "pmi_features": 21, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_08_asme1_ap242-e4-tg.stp" + }, + { + "case": "10_nist_ftc_09_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ftc_09_asme1_ap242-e1.stp", + "size_bytes": 6109836, + "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.019, + "pmix_extract_rc": 0, + "pmix_extract_ms": 187.353, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 158.817, + "pmix_product_error": "", + "pmix_parts": 4, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 1, + "pmix_semantic_total": 235, + "pmi_source_ref_count": 794, + "invalid_pmi_source_refs": 0, + "pmi_features": 166, + "pmi_datums": 8, + "pmi_datum_systems": 8, + "pmi_dimensions": 22, + "pmi_tolerances": 31, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_09_asme1_ap242-e1.stp" + }, + { + "case": "11_nist_ftc_10_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_10_asme1_ap242-e2.stp", + "size_bytes": 1879881, + "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.716, + "pmix_extract_rc": 0, + "pmix_extract_ms": 110.029, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 97.393, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 261, + "pmi_source_ref_count": 900, + "invalid_pmi_source_refs": 0, + "pmi_features": 172, + "pmi_datums": 11, + "pmi_datum_systems": 12, + "pmi_dimensions": 26, + "pmi_tolerances": 40, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_10_asme1_ap242-e2.stp" + }, + { + "case": "12_nist_ftc_11_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_ftc_11_asme1_ap242-e3.stp", + "size_bytes": 1946454, + "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.356, + "pmix_extract_rc": 0, + "pmix_extract_ms": 78.834, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 87.511, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 30, + "pmi_source_ref_count": 77, + "invalid_pmi_source_refs": 0, + "pmi_features": 17, + "pmi_datums": 2, + "pmi_datum_systems": 1, + "pmi_dimensions": 6, + "pmi_tolerances": 4, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_ftc_11_asme1_ap242-e3.stp" + }, + { + "case": "13_nist_stc_06_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_stc_06_asme1_ap242-e3.stp", + "size_bytes": 1006401, + "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.708, + "pmix_extract_rc": 0, + "pmix_extract_ms": 77.219, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 63.865, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 160, + "pmi_source_ref_count": 451, + "invalid_pmi_source_refs": 0, + "pmi_features": 103, + "pmi_datums": 6, + "pmi_datum_systems": 9, + "pmi_dimensions": 17, + "pmi_tolerances": 25, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_06_asme1_ap242-e3.stp" + }, + { + "case": "14_nist_stc_07_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_stc_07_asme1_ap242-e3.stp", + "size_bytes": 1945387, + "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.623, + "pmix_extract_rc": 0, + "pmix_extract_ms": 107.352, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 100.168, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 228, + "pmi_source_ref_count": 1123, + "invalid_pmi_source_refs": 0, + "pmi_features": 151, + "pmi_datums": 5, + "pmi_datum_systems": 5, + "pmi_dimensions": 45, + "pmi_tolerances": 22, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_07_asme1_ap242-e3.stp" + }, + { + "case": "15_nist_stc_08_asme1_ap242-e3", + "family": "NIST AP242", + "filename": "nist_stc_08_asme1_ap242-e3.stp", + "size_bytes": 2251152, + "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.016, + "pmix_extract_rc": 0, + "pmix_extract_ms": 97.001, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 79.563, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 179, + "pmi_source_ref_count": 845, + "invalid_pmi_source_refs": 0, + "pmi_features": 125, + "pmi_datums": 8, + "pmi_datum_systems": 9, + "pmi_dimensions": 7, + "pmi_tolerances": 30, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_08_asme1_ap242-e3.stp" + }, + { + "case": "16_nist_stc_09_asme1_ap242-e4", + "family": "NIST AP242", + "filename": "nist_stc_09_asme1_ap242-e4.stp", + "size_bytes": 968495, + "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.742, + "pmix_extract_rc": 0, + "pmix_extract_ms": 82.381, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 62.624, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 0, + "pmix_semantic_total": 201, + "pmi_source_ref_count": 703, + "invalid_pmi_source_refs": 0, + "pmi_features": 138, + "pmi_datums": 8, + "pmi_datum_systems": 8, + "pmi_dimensions": 20, + "pmi_tolerances": 27, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_09_asme1_ap242-e4.stp" + }, + { + "case": "17_nist_stc_10_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_stc_10_asme1_ap242-e2.stp", + "size_bytes": 4875056, + "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.02, + "pmix_extract_rc": 0, + "pmix_extract_ms": 165.594, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 125.852, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 6, + "pmix_semantic_total": 253, + "pmi_source_ref_count": 808, + "invalid_pmi_source_refs": 0, + "pmi_features": 168, + "pmi_datums": 9, + "pmi_datum_systems": 12, + "pmi_dimensions": 27, + "pmi_tolerances": 37, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/nist_stc_10_asme1_ap242-e2.stp" + }, + { + "case": "18_nist_ctc_04_asme1_ap242-e1", + "family": "NIST AP242", + "filename": "nist_ctc_04_asme1_ap242-e1.stp", + "size_bytes": 1287291, + "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.942, + "pmix_extract_rc": 0, + "pmix_extract_ms": 88.453, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 81.58, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 235, + "pmi_source_ref_count": 940, + "invalid_pmi_source_refs": 0, + "pmi_features": 205, + "pmi_datums": 8, + "pmi_datum_systems": 5, + "pmi_dimensions": 10, + "pmi_tolerances": 7, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ctc_04_asme1_ap242-e1.stp" + }, + { + "case": "19_nist_ftc_08_asme1_ap242-e1-tg", + "family": "NIST AP242", + "filename": "nist_ftc_08_asme1_ap242-e1-tg.stp", + "size_bytes": 2120356, + "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", + "baseline_status": "REJECTED", + "baseline_reason": "INVALID_SIZE_MAX_2MB", + "baseline_bom_lines": 0, + "baseline_ms": 0.021, + "pmix_extract_rc": 0, + "pmix_extract_ms": 113.898, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 85.158, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 21, + "pmi_source_ref_count": 252, + "invalid_pmi_source_refs": 0, + "pmi_features": 21, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_08_asme1_ap242-e1-tg.stp" + }, + { + "case": "20_nist_ftc_11_asme1_ap242-e2", + "family": "NIST AP242", + "filename": "nist_ftc_11_asme1_ap242-e2.stp", + "size_bytes": 1946454, + "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 1.396, + "pmix_extract_rc": 0, + "pmix_extract_ms": 70.121, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 60.769, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 2, + "pmix_semantic_total": 30, + "pmi_source_ref_count": 77, + "invalid_pmi_source_refs": 0, + "pmi_features": 17, + "pmi_datums": 2, + "pmi_datum_systems": 1, + "pmi_dimensions": 6, + "pmi_tolerances": 4, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/nist/previous/nist_ftc_11_asme1_ap242-e2.stp" + }, + { + "case": "21_assembly_two_parts", + "family": "synthetic", + "filename": "assembly_two_parts.stp", + "size_bytes": 14239, + "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.042, + "pmix_extract_rc": 0, + "pmix_extract_ms": 27.551, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 27.054, + "pmix_product_error": "", + "pmix_parts": 3, + "pmix_relations": 2, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 0, + "pmi_source_ref_count": 0, + "invalid_pmi_source_refs": 0, + "pmi_features": 0, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_two_parts.stp" + }, + { + "case": "22_assembly_properties", + "family": "synthetic", + "filename": "assembly_properties.stp", + "size_bytes": 3293, + "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.034, + "pmix_extract_rc": 0, + "pmix_extract_ms": 25.728, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 24.9, + "pmix_product_error": "", + "pmix_parts": 3, + "pmix_relations": 3, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 0, + "pmi_source_ref_count": 0, + "invalid_pmi_source_refs": 0, + "pmi_features": 0, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_properties.stp" + }, + { + "case": "23_dimension_basics", + "family": "synthetic", + "filename": "dimension_basics.stp", + "size_bytes": 4646, + "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.037, + "pmix_extract_rc": 0, + "pmix_extract_ms": 26.982, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 24.083, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 8, + "pmi_source_ref_count": 29, + "invalid_pmi_source_refs": 0, + "pmi_features": 3, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 5, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/dimension_basics.stp" + }, + { + "case": "24_plate_one_hole", + "family": "synthetic", + "filename": "plate_one_hole.stp", + "size_bytes": 8538, + "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.042, + "pmix_extract_rc": 0, + "pmix_extract_ms": 25.207, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 27.305, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 0, + "pmi_source_ref_count": 0, + "invalid_pmi_source_refs": 0, + "pmi_features": 0, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 0, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/plate_one_hole.stp" + }, + { + "case": "25_property_basics", + "family": "synthetic", + "filename": "property_basics.stp", + "size_bytes": 4341, + "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.043, + "pmix_extract_rc": 0, + "pmix_extract_ms": 27.575, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 25.289, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 2, + "pmi_source_ref_count": 4, + "invalid_pmi_source_refs": 0, + "pmi_features": 1, + "pmi_datums": 0, + "pmi_datum_systems": 0, + "pmi_dimensions": 0, + "pmi_tolerances": 1, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/property_basics.stp" + }, + { + "case": "26_tolerance_datum_basics", + "family": "synthetic", + "filename": "tolerance_datum_basics.stp", + "size_bytes": 6817, + "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", + "baseline_status": "Z", + "baseline_reason": "NO_BOM_EXTRACTABLE_MANUAL_BOM_REQUIRED", + "baseline_bom_lines": 0, + "baseline_ms": 0.046, + "pmix_extract_rc": 0, + "pmix_extract_ms": 30.25, + "pmix_extract_error": "", + "pmix_product_rc": 0, + "pmix_product_ms": 25.59, + "pmix_product_error": "", + "pmix_parts": 1, + "pmix_relations": 0, + "pmix_unknown_entities": 0, + "pmix_diagnostics": 0, + "pmix_semantic_total": 16, + "pmi_source_ref_count": 54, + "invalid_pmi_source_refs": 0, + "pmi_features": 3, + "pmi_datums": 3, + "pmi_datum_systems": 4, + "pmi_dimensions": 0, + "pmi_tolerances": 6, + "pmi_notes": 0, + "pmi_other": 0, + "source_path": "tools/pmix-0.16.1/tests/fixtures/synthetic/tolerance_datum_basics.stp" + } + ], + "checks": [ + { + "name": "NIST CTC01 #120 size 35.0 mm", + "pass": true, + "details": null + }, + { + "name": "NIST CTC01 size tolerance -0.2/0.0", + "pass": true, + "details": { + "type": "plus_minus", + "lower": { + "value": -0.2, + "unit": "mm" + }, + "upper": { + "value": 0.0, + "unit": "mm" + } + } + }, + { + "name": "NIST CTC01 #21 position tolerance 0.75", + "pass": true, + "details": null + }, + { + "name": "26 baseline runs", + "pass": true, + "details": null + }, + { + "name": "20 independent NIST source files", + "pass": true, + "details": null + }, + { + "name": "All baseline STEP runs no extracted BOM", + "pass": true, + "details": null + }, + { + "name": "PMIX parsed all STEP files", + "pass": true, + "details": null + }, + { + "name": "PMIX product parsed all STEP files", + "pass": true, + "details": null + }, + { + "name": "No invalid PMI #entity references", + "pass": true, + "details": null + }, + { + "name": "At least one NIST PMI dimension", + "pass": true, + "details": null + }, + { + "name": "At least one NIST GD&T tolerance", + "pass": true, + "details": null + }, + { + "name": "Assembly two parts parsed as multi-part", + "pass": true, + "details": null + }, + { + "name": "Max 2MB baseline rejects present", + "pass": true, + "details": null + }, + { + "name": "PMIX replay deterministic byte-for-byte", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_one_hole.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_hole_larger.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_hole_moved.stp", + "pass": true, + "details": null + }, + { + "name": "PMIX features plate_one_hole_inches.stp", + "pass": true, + "details": null + }, + { + "name": "Hole \u00d88 vs changed \u00d810 detected", + "pass": true, + "details": null + }, + { + "name": "Moved hole origin 20->25 mm", + "pass": true, + "details": null + }, + { + "name": "Unit normalization inch == mm feature", + "pass": true, + "details": null + }, + { + "name": "Invalid STEP rejected by pmix", + "pass": true, + "details": null + } + ] +} diff --git a/cad_evidence/linux-run/BROWSER_RESULTS.json b/cad_evidence/linux-run/BROWSER_RESULTS.json new file mode 100644 index 0000000..aa05e86 --- /dev/null +++ b/cad_evidence/linux-run/BROWSER_RESULTS.json @@ -0,0 +1,30 @@ +[ + { + "width": 1440, + "status": "PASS", + "post_requests": [ + "/api/industrial/engineering-extract", + "/api/industrial/intake" + ], + "errors": [], + "parts_confirmed": true, + "engineering_verdict": "Z", + "payment_effects": 0, + "supplier_requests_sent": 0, + "horizontal_overflow": false + }, + { + "width": 390, + "status": "PASS", + "post_requests": [ + "/api/industrial/engineering-extract", + "/api/industrial/intake" + ], + "errors": [], + "parts_confirmed": true, + "engineering_verdict": "Z", + "payment_effects": 0, + "supplier_requests_sent": 0, + "horizontal_overflow": false + } +] \ No newline at end of file diff --git a/cad_evidence/linux-run/REFERENCE_PROVENANCE.json b/cad_evidence/linux-run/REFERENCE_PROVENANCE.json new file mode 100644 index 0000000..9ba924f --- /dev/null +++ b/cad_evidence/linux-run/REFERENCE_PROVENANCE.json @@ -0,0 +1,314 @@ +[ + { + "case": "01_nist_ctc_01_asme1_ap242-e1", + "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", + "critical_fields_with_provenance": 23, + "dimensions": 12, + "gdt": 6, + "datums": 3, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "02_nist_ctc_02_asme1_ap242-e2", + "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", + "critical_fields_with_provenance": 41, + "dimensions": 7, + "gdt": 22, + "datums": 10, + "unsupported": 0, + "diagnostics": 1, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "03_nist_ctc_03_asme1_ap242-e2", + "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", + "critical_fields_with_provenance": 31, + "dimensions": 10, + "gdt": 13, + "datums": 6, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "04_nist_ctc_04_asme1_ap242-e2", + "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", + "critical_fields_with_provenance": 28, + "dimensions": 10, + "gdt": 7, + "datums": 8, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "05_nist_ctc_05_asme1_ap242-e1", + "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", + "critical_fields_with_provenance": 23, + "dimensions": 6, + "gdt": 10, + "datums": 4, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "06_nist_ftc_06_asme1_ap242-e2", + "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", + "critical_fields_with_provenance": 64, + "dimensions": 24, + "gdt": 28, + "datums": 10, + "unsupported": 0, + "diagnostics": 2, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "07_nist_ftc_07_asme1_ap242-e2", + "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", + "critical_fields_with_provenance": 51, + "dimensions": 17, + "gdt": 27, + "datums": 5, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "08_nist_ftc_08_asme1_ap242-e2", + "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", + "critical_fields_with_provenance": 56, + "dimensions": 10, + "gdt": 33, + "datums": 11, + "unsupported": 0, + "diagnostics": 4, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "09_nist_ftc_08_asme1_ap242-e4-tg", + "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", + "critical_fields_with_provenance": 2, + "dimensions": 0, + "gdt": 0, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "10_nist_ftc_09_asme1_ap242-e1", + "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", + "critical_fields_with_provenance": 65, + "dimensions": 22, + "gdt": 31, + "datums": 8, + "unsupported": 0, + "diagnostics": 1, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "11_nist_ftc_10_asme1_ap242-e2", + "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", + "critical_fields_with_provenance": 79, + "dimensions": 26, + "gdt": 40, + "datums": 11, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "12_nist_ftc_11_asme1_ap242-e3", + "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", + "critical_fields_with_provenance": 14, + "dimensions": 6, + "gdt": 4, + "datums": 2, + "unsupported": 0, + "diagnostics": 2, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "13_nist_stc_06_asme1_ap242-e3", + "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", + "critical_fields_with_provenance": 50, + "dimensions": 17, + "gdt": 25, + "datums": 6, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "14_nist_stc_07_asme1_ap242-e3", + "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", + "critical_fields_with_provenance": 74, + "dimensions": 45, + "gdt": 22, + "datums": 5, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "15_nist_stc_08_asme1_ap242-e3", + "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", + "critical_fields_with_provenance": 47, + "dimensions": 7, + "gdt": 30, + "datums": 8, + "unsupported": 0, + "diagnostics": 2, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "16_nist_stc_09_asme1_ap242-e4", + "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", + "critical_fields_with_provenance": 58, + "dimensions": 20, + "gdt": 27, + "datums": 8, + "unsupported": 17, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "17_nist_stc_10_asme1_ap242-e2", + "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", + "critical_fields_with_provenance": 75, + "dimensions": 27, + "gdt": 37, + "datums": 9, + "unsupported": 0, + "diagnostics": 6, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "18_nist_ctc_04_asme1_ap242-e1", + "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", + "critical_fields_with_provenance": 28, + "dimensions": 10, + "gdt": 7, + "datums": 8, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "19_nist_ftc_08_asme1_ap242-e1-tg", + "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", + "critical_fields_with_provenance": 2, + "dimensions": 0, + "gdt": 0, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "20_nist_ftc_11_asme1_ap242-e2", + "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", + "critical_fields_with_provenance": 14, + "dimensions": 6, + "gdt": 4, + "datums": 2, + "unsupported": 0, + "diagnostics": 2, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "21_assembly_two_parts", + "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", + "critical_fields_with_provenance": 6, + "dimensions": 0, + "gdt": 0, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "22_assembly_properties", + "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "critical_fields_with_provenance": 6, + "dimensions": 0, + "gdt": 0, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "23_dimension_basics", + "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", + "critical_fields_with_provenance": 7, + "dimensions": 5, + "gdt": 0, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "24_plate_one_hole", + "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", + "critical_fields_with_provenance": 2, + "dimensions": 0, + "gdt": 0, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "25_property_basics", + "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", + "critical_fields_with_provenance": 3, + "dimensions": 0, + "gdt": 1, + "datums": 0, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + }, + { + "case": "26_tolerance_datum_basics", + "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", + "critical_fields_with_provenance": 11, + "dimensions": 0, + "gdt": 6, + "datums": 3, + "unsupported": 0, + "diagnostics": 0, + "engineering_verdict": "Z", + "checkout_enabled": false + } +] diff --git a/cad_evidence/linux-run/adapter-rerun-linux-recovery.log b/cad_evidence/linux-run/adapter-rerun-linux-recovery.log new file mode 100644 index 0000000..ffb8813 --- /dev/null +++ b/cad_evidence/linux-run/adapter-rerun-linux-recovery.log @@ -0,0 +1,3 @@ +two_parts {'SYN-BLOCK': 1, 'SYN-PLATE': 1} gate Z checkout False +repeated_part {'SYN-BRACKET': 1, 'SYN-PIN': 2} gate Z checkout False +ADAPTER_CONTRACT_TESTS 7 / 7 diff --git a/cad_evidence/linux-run/benchmark-rerun-linux-recovery.log b/cad_evidence/linux-run/benchmark-rerun-linux-recovery.log new file mode 100644 index 0000000..8f5e467 --- /dev/null +++ b/cad_evidence/linux-run/benchmark-rerun-linux-recovery.log @@ -0,0 +1,51 @@ +01/26 nist_ctc_01_asme1_ap242-e1.stp base=Z PMI= 61 parts= 1 pmix=0/0 +02/26 nist_ctc_02_asme1_ap242-e2.stp base=Z PMI= 111 parts= 1 pmix=0/0 +03/26 nist_ctc_03_asme1_ap242-e2.stp base=Z PMI= 69 parts= 1 pmix=0/0 +04/26 nist_ctc_04_asme1_ap242-e2.stp base=Z PMI= 235 parts= 1 pmix=0/0 +05/26 nist_ctc_05_asme1_ap242-e1.stp base=Z PMI= 45 parts= 1 pmix=0/0 +06/26 nist_ftc_06_asme1_ap242-e2.stp base=Z PMI= 215 parts= 1 pmix=0/0 +07/26 nist_ftc_07_asme1_ap242-e2.stp base=Z PMI= 221 parts= 1 pmix=0/0 +08/26 nist_ftc_08_asme1_ap242-e2.stp base=REJECTED PMI= 196 parts= 1 pmix=0/0 +09/26 nist_ftc_08_asme1_ap242-e4-tg.stp base=REJECTED PMI= 21 parts= 1 pmix=0/0 +10/26 nist_ftc_09_asme1_ap242-e1.stp base=REJECTED PMI= 235 parts= 4 pmix=0/0 +11/26 nist_ftc_10_asme1_ap242-e2.stp base=Z PMI= 261 parts= 1 pmix=0/0 +12/26 nist_ftc_11_asme1_ap242-e3.stp base=Z PMI= 30 parts= 1 pmix=0/0 +13/26 nist_stc_06_asme1_ap242-e3.stp base=Z PMI= 160 parts= 1 pmix=0/0 +14/26 nist_stc_07_asme1_ap242-e3.stp base=Z PMI= 228 parts= 1 pmix=0/0 +15/26 nist_stc_08_asme1_ap242-e3.stp base=REJECTED PMI= 179 parts= 1 pmix=0/0 +16/26 nist_stc_09_asme1_ap242-e4.stp base=Z PMI= 201 parts= 1 pmix=0/0 +17/26 nist_stc_10_asme1_ap242-e2.stp base=REJECTED PMI= 253 parts= 1 pmix=0/0 +18/26 nist_ctc_04_asme1_ap242-e1.stp base=Z PMI= 235 parts= 1 pmix=0/0 +19/26 nist_ftc_08_asme1_ap242-e1-tg.stp base=REJECTED PMI= 21 parts= 1 pmix=0/0 +20/26 nist_ftc_11_asme1_ap242-e2.stp base=Z PMI= 30 parts= 1 pmix=0/0 +21/26 assembly_two_parts.stp base=Z PMI= 0 parts= 3 pmix=0/0 +22/26 assembly_properties.stp base=Z PMI= 0 parts= 3 pmix=0/0 +23/26 dimension_basics.stp base=Z PMI= 8 parts= 1 pmix=0/0 +24/26 plate_one_hole.stp base=Z PMI= 0 parts= 1 pmix=0/0 +25/26 property_basics.stp base=Z PMI= 2 parts= 1 pmix=0/0 +26/26 tolerance_datum_basics.stp base=Z PMI= 16 parts= 1 pmix=0/0 +SUMMARY { + "experiment": "WO-CAD-001", + "sample_count": 26, + "nist_count": 20, + "synthetic_count": 6, + "pmix_version": "0.16.1", + "pmix_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "pmix_parse_pass": 26, + "pmix_product_pass": 26, + "baseline_extracted": 0, + "baseline_unknown": 20, + "baseline_rejected": 6, + "pmix_dimensions": 287, + "pmix_gdt_tolerances": 380, + "pmix_datums": 127, + "pmix_parts": 33, + "pmix_relations": 5, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 20, + "pmix_extract_p50_ms": 85.42, + "pmix_extract_p95_ms": 165.59, + "checks_pass": 22, + "checks_total": 22, + "evidence_scope": "DIRECT LOCAL BIN+NIST CORPUS TEST; not independent manufacturing validation" +} diff --git a/cad_evidence/linux-run/browser-linux-server.log b/cad_evidence/linux-run/browser-linux-server.log new file mode 100644 index 0000000..e278c3f --- /dev/null +++ b/cad_evidence/linux-run/browser-linux-server.log @@ -0,0 +1 @@ +{"url": "http://127.0.0.1:18896/", "runs": ["run-1", "run-2"]} diff --git a/cad_evidence/linux-run/browser-server.log b/cad_evidence/linux-run/browser-server.log new file mode 100644 index 0000000..e69de29 diff --git a/cad_evidence/linux-run/build-linux.log b/cad_evidence/linux-run/build-linux.log new file mode 100644 index 0000000..c167a22 --- /dev/null +++ b/cad_evidence/linux-run/build-linux.log @@ -0,0 +1,32 @@ +{"run_id": "run-1", "events": 75, "figures": 88, "judge": "PASS_COMPLETED", "judge_hashes_match": true, "paypal_bound": false} +{"run_id": "run-2", "events": 75, "figures": 88, "judge": "PASS_COMPLETED", "judge_hashes_match": true, "paypal_bound": false} +{"contribution": 0, "fees": 1975, "upper_bound": -1975, "break_even_price": 10310, "self_tests": "PASS"} +{ + "audit": { + "run-1": { + "coverage": 100.0, + "prov": true, + "mission": "SIMULATED_MISSION_VERIFIED", + "claims": true + }, + "run-2": { + "coverage": 100.0, + "prov": true, + "mission": "SIMULATED_MISSION_VERIFIED", + "claims": true + } + }, + "negatives": { + "attempted": 15, + "passed": 15, + "blocked": [], + "failed": [], + "harness": { + "forbidden_effects": 0, + "passed": 25, + "total": 25 + } + } +} + +{"runs": ["run-1", "run-2"], "counted": "run-2", "audit_all_pass": true} diff --git a/cad_evidence/linux-run/drawing-1440.png b/cad_evidence/linux-run/drawing-1440.png new file mode 100644 index 0000000..a5e287a Binary files /dev/null and b/cad_evidence/linux-run/drawing-1440.png differ diff --git a/cad_evidence/linux-run/drawing-390.png b/cad_evidence/linux-run/drawing-390.png new file mode 100644 index 0000000..06f78ac Binary files /dev/null and b/cad_evidence/linux-run/drawing-390.png differ diff --git a/cad_evidence/linux-run/parts-1440.png b/cad_evidence/linux-run/parts-1440.png new file mode 100644 index 0000000..fcba9cc Binary files /dev/null and b/cad_evidence/linux-run/parts-1440.png differ diff --git a/cad_evidence/linux-run/parts-390.png b/cad_evidence/linux-run/parts-390.png new file mode 100644 index 0000000..9e55403 Binary files /dev/null and b/cad_evidence/linux-run/parts-390.png differ diff --git a/cad_evidence/linux-run/paypal-regression-linux.log b/cad_evidence/linux-run/paypal-regression-linux.log new file mode 100644 index 0000000..250d1f6 --- /dev/null +++ b/cad_evidence/linux-run/paypal-regression-linux.log @@ -0,0 +1,133 @@ +test_approved_callback_captures_and_reads_back (tests.test_approval.ApprovalTests.test_approved_callback_captures_and_reads_back) ... ok +test_callback_does_not_replace_buyer_approval (tests.test_approval.ApprovalTests.test_callback_does_not_replace_buyer_approval) ... ok +test_foreign_host_rejected (tests.test_approval.ApprovalTests.test_foreign_host_rejected) ... ok +test_forged_callback_no_capture (tests.test_approval.ApprovalTests.test_forged_callback_no_capture) ... ok +test_acceptance_missing_bad_signature_or_hash (tests.test_gateway.GatewayTests.test_acceptance_missing_bad_signature_or_hash) ... ok +test_control_replay (tests.test_gateway.GatewayTests.test_control_replay) ... ok +test_duplicate_provider_capture_rejected (tests.test_gateway.GatewayTests.test_duplicate_provider_capture_rejected) ... ok +test_empty_original_obligations (tests.test_gateway.GatewayTests.test_empty_original_obligations) ... ok +test_expired_after_reserve_no_calls (tests.test_gateway.GatewayTests.test_expired_after_reserve_no_calls) ... ok +test_fake_stored_receipt_not_ground_truth (tests.test_gateway.GatewayTests.test_fake_stored_receipt_not_ground_truth) ... ok +test_provider_amount_change_pre_capture (tests.test_gateway.GatewayTests.test_provider_amount_change_pre_capture) ... ok +test_recover_unknown_create_by_independent_get (tests.test_gateway.GatewayTests.test_recover_unknown_create_by_independent_get) ... ok +test_refund_does_not_restore_spend (tests.test_gateway.GatewayTests.test_refund_does_not_restore_spend) ... ok +test_stale_quote_epoch_expiry (tests.test_gateway.GatewayTests.test_stale_quote_epoch_expiry) ... ok +test_t01_approved_capture_requires_two_gets (tests.test_gateway.GatewayTests.test_t01_approved_capture_requires_two_gets) +A04-T01 mechanism only; A05 no mission closure from payment. ... ok +test_t02_denied_no_calls (tests.test_gateway.GatewayTests.test_t02_denied_no_calls) +A04-T02 all independent authority gates, including UNKNOWN. ... ok +test_t03_parallel_320_260 (tests.test_gateway.GatewayTests.test_t03_parallel_320_260) +A04-T03 actual SQLite concurrent writer contention (single host). ... ok +test_t03_separate_process_reservations (tests.test_gateway.GatewayTests.test_t03_separate_process_reservations) +A04-T03 competing OS processes, both bound to the same signed mission. ... ok +test_t04_same_effect_retry_after_timeout (tests.test_gateway.GatewayTests.test_t04_same_effect_retry_after_timeout) +A04-T04 timeout retains identity and does not blindly retry create. ... ok +test_t05_lost_success_reconcile_no_second_capture (tests.test_gateway.GatewayTests.test_t05_lost_success_reconcile_no_second_capture) +A04-T05 mock lost reply after success; live required separately. ... ok +test_t06_created_is_not_paid (tests.test_gateway.GatewayTests.test_t06_created_is_not_paid) +A04-T06 no buyer approval: no capture POST. ... ok +test_t07_declined (tests.test_gateway.GatewayTests.test_t07_declined) +A04-T07 DECLINED never counts completed. ... ok +test_t07_pending (tests.test_gateway.GatewayTests.test_t07_pending) +A04-T07 PENDING holds reservation, never confirms. ... ok +test_t08_unsigned_changed_amount_merchant (tests.test_gateway.GatewayTests.test_t08_unsigned_changed_amount_merchant) +A04-T08 tampering rejected before any network. ... ok +test_t09_revoke_after_reserve (tests.test_gateway.GatewayTests.test_t09_revoke_after_reserve) +A04-T09 revocation committed before capture => zero further calls. ... ok +test_t10_same_permit_concurrent (tests.test_gateway.GatewayTests.test_t10_same_permit_concurrent) +A04-T10 idempotent same-effect join; exactly one create/capture. ... ok +test_t10_same_permit_for_different_effect_refused (tests.test_gateway.GatewayTests.test_t10_same_permit_for_different_effect_refused) ... ok +test_t11_process_crash_restart_wal (tests.test_gateway.GatewayTests.test_t11_process_crash_restart_wal) +A04-T11 abrupt separate-process exit preserves committed reserve. ... ok +test_t12_altered_readback (tests.test_gateway.GatewayTests.test_t12_altered_readback) +A04-T12 mismatch is discrepancy and no completed payment. ... ok +test_t12_missing_readback (tests.test_gateway.GatewayTests.test_t12_missing_readback) +A04-T12 missing provider truth cannot close payment. ... ok +test_t13_exact_boundaries (tests.test_gateway.GatewayTests.test_t13_exact_boundaries) +A04-T13 exact 1 / 49999 accepted in isolation, 50001 rejected. ... ok +test_t14_errors (tests.test_gateway.GatewayTests.test_t14_errors) +A04-T14 401/403/500 fail closed, classified, reservation retained. ... ok +test_tampered_capture_readback (tests.test_gateway.GatewayTests.test_tampered_capture_readback) ... ok +test_unknown_capture_approved_readback_does_not_retry (tests.test_gateway.GatewayTests.test_unknown_capture_approved_readback_does_not_retry) ... ok +test_wrong_capture_order_rejected (tests.test_gateway.GatewayTests.test_wrong_capture_order_rejected) ... ok +test_n07_duplicate_capture_single_post (tests.test_release_negatives.ReleaseNegatives.test_n07_duplicate_capture_single_post) ... ok +test_n10_approved_without_payer_identity_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_approved_without_payer_identity_no_capture) ... ok +test_n10_payee_swapped_at_provider_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_payee_swapped_at_provider_no_capture) ... ok +test_n14_capture_without_provider_approval_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n14_capture_without_provider_approval_no_capture) ... ok +test_401_invalidates_without_post_retry (tests.test_transport.TransportTests.test_401_invalidates_without_post_retry) ... ERROR +test_cli_preflight_missing_config_no_network (tests.test_transport.TransportTests.test_cli_preflight_missing_config_no_network) ... ok +test_http_errors_redacted (tests.test_transport.TransportTests.test_http_errors_redacted) ... ERROR +test_oauth_cache_and_renewal (tests.test_transport.TransportTests.test_oauth_cache_and_renewal) ... ERROR +test_path_injection_disallowed (tests.test_transport.TransportTests.test_path_injection_disallowed) ... ERROR +test_read_only_disallows_post_before_credentials (tests.test_transport.TransportTests.test_read_only_disallows_post_before_credentials) ... ERROR +test_redirect_never_forwards_auth (tests.test_transport.TransportTests.test_redirect_never_forwards_auth) ... ok + +====================================================================== +ERROR: test_401_invalidates_without_post_retry (tests.test_transport.TransportTests.test_401_invalidates_without_post_retry) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/tests/test_transport.py", line 22, in test_401_invalidates_without_post_retry + client=PayPalSandbox(read_only=False,credential_loader=lambda:("fixture-id","fixture-secret")) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/paypal.py", line 64, in __init__ + require(os.name == "nt", "WINDOWS_HOST_REQUIRED") + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/contracts.py", line 16, in require + raise Denied(code) +commerce_adapter.contracts.Denied: WINDOWS_HOST_REQUIRED + +====================================================================== +ERROR: test_http_errors_redacted (tests.test_transport.TransportTests.test_http_errors_redacted) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/tests/test_transport.py", line 44, in test_http_errors_redacted + client=PayPalSandbox() + ^^^^^^^^^^^^^^^ + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/paypal.py", line 64, in __init__ + require(os.name == "nt", "WINDOWS_HOST_REQUIRED") + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/contracts.py", line 16, in require + raise Denied(code) +commerce_adapter.contracts.Denied: WINDOWS_HOST_REQUIRED + +====================================================================== +ERROR: test_oauth_cache_and_renewal (tests.test_transport.TransportTests.test_oauth_cache_and_renewal) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/tests/test_transport.py", line 14, in test_oauth_cache_and_renewal + client=PayPalSandbox(credential_loader=lambda:("fixture-id","fixture-secret"),clock=lambda:now[0]) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/paypal.py", line 64, in __init__ + require(os.name == "nt", "WINDOWS_HOST_REQUIRED") + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/contracts.py", line 16, in require + raise Denied(code) +commerce_adapter.contracts.Denied: WINDOWS_HOST_REQUIRED + +====================================================================== +ERROR: test_path_injection_disallowed (tests.test_transport.TransportTests.test_path_injection_disallowed) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/tests/test_transport.py", line 36, in test_path_injection_disallowed + client=PayPalSandbox() + ^^^^^^^^^^^^^^^ + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/paypal.py", line 64, in __init__ + require(os.name == "nt", "WINDOWS_HOST_REQUIRED") + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/contracts.py", line 16, in require + raise Denied(code) +commerce_adapter.contracts.Denied: WINDOWS_HOST_REQUIRED + +====================================================================== +ERROR: test_read_only_disallows_post_before_credentials (tests.test_transport.TransportTests.test_read_only_disallows_post_before_credentials) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/tests/test_transport.py", line 30, in test_read_only_disallows_post_before_credentials + client=PayPalSandbox() + ^^^^^^^^^^^^^^^ + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/paypal.py", line 64, in __init__ + require(os.name == "nt", "WINDOWS_HOST_REQUIRED") + File "/mnt/c/Documents/Codex/2026-11-03/codex-wo-nim-connection-001-codex/work/wo-cad-002/repo/paypal_adapter/commerce_adapter/contracts.py", line 16, in require + raise Denied(code) +commerce_adapter.contracts.Denied: WINDOWS_HOST_REQUIRED + +---------------------------------------------------------------------- +Ran 46 tests in 10.512s + +FAILED (errors=5) diff --git a/cad_evidence/linux-run/paypal-regression-windows-pinned.log b/cad_evidence/linux-run/paypal-regression-windows-pinned.log new file mode 100644 index 0000000..a5f9a33 --- /dev/null +++ b/cad_evidence/linux-run/paypal-regression-windows-pinned.log @@ -0,0 +1,70 @@ +test_approved_callback_captures_and_reads_back (tests.test_approval.ApprovalTests.test_approved_callback_captures_and_reads_back) ... ok +test_callback_does_not_replace_buyer_approval (tests.test_approval.ApprovalTests.test_callback_does_not_replace_buyer_approval) ... ok +test_foreign_host_rejected (tests.test_approval.ApprovalTests.test_foreign_host_rejected) ... \AppData\Local\Python\pythoncore-3.14-64\Lib\tempfile.py:484: ResourceWarning: Implicitly cleaning up + _warnings.warn(self.warn_message, ResourceWarning) +ok +test_forged_callback_no_capture (tests.test_approval.ApprovalTests.test_forged_callback_no_capture) ... ok +test_acceptance_missing_bad_signature_or_hash (tests.test_gateway.GatewayTests.test_acceptance_missing_bad_signature_or_hash) ... ok +test_control_replay (tests.test_gateway.GatewayTests.test_control_replay) ... ok +test_duplicate_provider_capture_rejected (tests.test_gateway.GatewayTests.test_duplicate_provider_capture_rejected) ... ok +test_empty_original_obligations (tests.test_gateway.GatewayTests.test_empty_original_obligations) ... ok +test_expired_after_reserve_no_calls (tests.test_gateway.GatewayTests.test_expired_after_reserve_no_calls) ... ok +test_fake_stored_receipt_not_ground_truth (tests.test_gateway.GatewayTests.test_fake_stored_receipt_not_ground_truth) ... ok +test_provider_amount_change_pre_capture (tests.test_gateway.GatewayTests.test_provider_amount_change_pre_capture) ... ok +test_recover_unknown_create_by_independent_get (tests.test_gateway.GatewayTests.test_recover_unknown_create_by_independent_get) ... ok +test_refund_does_not_restore_spend (tests.test_gateway.GatewayTests.test_refund_does_not_restore_spend) ... ok +test_stale_quote_epoch_expiry (tests.test_gateway.GatewayTests.test_stale_quote_epoch_expiry) ... ok +test_t01_approved_capture_requires_two_gets (tests.test_gateway.GatewayTests.test_t01_approved_capture_requires_two_gets) +A04-T01 mechanism only; A05 no mission closure from payment. ... ok +test_t02_denied_no_calls (tests.test_gateway.GatewayTests.test_t02_denied_no_calls) +A04-T02 all independent authority gates, including UNKNOWN. ... ok +test_t03_parallel_320_260 (tests.test_gateway.GatewayTests.test_t03_parallel_320_260) +A04-T03 actual SQLite concurrent writer contention (single host). ... ok +test_t03_separate_process_reservations (tests.test_gateway.GatewayTests.test_t03_separate_process_reservations) +A04-T03 competing OS processes, both bound to the same signed mission. ... ok +test_t04_same_effect_retry_after_timeout (tests.test_gateway.GatewayTests.test_t04_same_effect_retry_after_timeout) +A04-T04 timeout retains identity and does not blindly retry create. ... ok +test_t05_lost_success_reconcile_no_second_capture (tests.test_gateway.GatewayTests.test_t05_lost_success_reconcile_no_second_capture) +A04-T05 mock lost reply after success; live required separately. ... ok +test_t06_created_is_not_paid (tests.test_gateway.GatewayTests.test_t06_created_is_not_paid) +A04-T06 no buyer approval: no capture POST. ... ok +test_t07_declined (tests.test_gateway.GatewayTests.test_t07_declined) +A04-T07 DECLINED never counts completed. ... ok +test_t07_pending (tests.test_gateway.GatewayTests.test_t07_pending) +A04-T07 PENDING holds reservation, never confirms. ... ok +test_t08_unsigned_changed_amount_merchant (tests.test_gateway.GatewayTests.test_t08_unsigned_changed_amount_merchant) +A04-T08 tampering rejected before any network. ... ok +test_t09_revoke_after_reserve (tests.test_gateway.GatewayTests.test_t09_revoke_after_reserve) +A04-T09 revocation committed before capture => zero further calls. ... ok +test_t10_same_permit_concurrent (tests.test_gateway.GatewayTests.test_t10_same_permit_concurrent) +A04-T10 idempotent same-effect join; exactly one create/capture. ... ok +test_t10_same_permit_for_different_effect_refused (tests.test_gateway.GatewayTests.test_t10_same_permit_for_different_effect_refused) ... ok +test_t11_process_crash_restart_wal (tests.test_gateway.GatewayTests.test_t11_process_crash_restart_wal) +A04-T11 abrupt separate-process exit preserves committed reserve. ... ok +test_t12_altered_readback (tests.test_gateway.GatewayTests.test_t12_altered_readback) +A04-T12 mismatch is discrepancy and no completed payment. ... ok +test_t12_missing_readback (tests.test_gateway.GatewayTests.test_t12_missing_readback) +A04-T12 missing provider truth cannot close payment. ... ok +test_t13_exact_boundaries (tests.test_gateway.GatewayTests.test_t13_exact_boundaries) +A04-T13 exact 1 / 49999 accepted in isolation, 50001 rejected. ... ok +test_t14_errors (tests.test_gateway.GatewayTests.test_t14_errors) +A04-T14 401/403/500 fail closed, classified, reservation retained. ... ok +test_tampered_capture_readback (tests.test_gateway.GatewayTests.test_tampered_capture_readback) ... ok +test_unknown_capture_approved_readback_does_not_retry (tests.test_gateway.GatewayTests.test_unknown_capture_approved_readback_does_not_retry) ... ok +test_wrong_capture_order_rejected (tests.test_gateway.GatewayTests.test_wrong_capture_order_rejected) ... ok +test_n07_duplicate_capture_single_post (tests.test_release_negatives.ReleaseNegatives.test_n07_duplicate_capture_single_post) ... ok +test_n10_approved_without_payer_identity_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_approved_without_payer_identity_no_capture) ... ok +test_n10_payee_swapped_at_provider_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_payee_swapped_at_provider_no_capture) ... ok +test_n14_capture_without_provider_approval_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n14_capture_without_provider_approval_no_capture) ... ok +test_401_invalidates_without_post_retry (tests.test_transport.TransportTests.test_401_invalidates_without_post_retry) ... ok +test_cli_preflight_missing_config_no_network (tests.test_transport.TransportTests.test_cli_preflight_missing_config_no_network) ... ok +test_http_errors_redacted (tests.test_transport.TransportTests.test_http_errors_redacted) ... ok +test_oauth_cache_and_renewal (tests.test_transport.TransportTests.test_oauth_cache_and_renewal) ... ok +test_path_injection_disallowed (tests.test_transport.TransportTests.test_path_injection_disallowed) ... ok +test_read_only_disallows_post_before_credentials (tests.test_transport.TransportTests.test_read_only_disallows_post_before_credentials) ... ok +test_redirect_never_forwards_auth (tests.test_transport.TransportTests.test_redirect_never_forwards_auth) ... ok + +---------------------------------------------------------------------- +Ran 46 tests in 5.406s + +OK diff --git a/cad_evidence/linux-run/regression-linux-installed.log b/cad_evidence/linux-run/regression-linux-installed.log new file mode 100644 index 0000000..3a97a2f --- /dev/null +++ b/cad_evidence/linux-run/regression-linux-installed.log @@ -0,0 +1,135 @@ +test_direct_retail_without_discovery_consent (test_demand_first.BuyerEntryAlternatives.test_direct_retail_without_discovery_consent) ... ok +test_existing_supplier_batch_80_plus_20 (test_demand_first.BuyerEntryAlternatives.test_existing_supplier_batch_80_plus_20) ... ok +test_no_live_direct_unauthorized_quote (test_demand_first.BuyerEntryAlternatives.test_no_live_direct_unauthorized_quote) ... ok +test_retail_more_expensive_than_coalition (test_demand_first.BuyerEntryAlternatives.test_retail_more_expensive_than_coalition) ... ok +test_csv_quantity_aggregation (test_demand_first.CADIntake.test_csv_quantity_aggregation) ... ok +test_drawing_digest_stable (test_demand_first.CADIntake.test_drawing_digest_stable) ... ok +test_dxf_blocks_not_placements (test_demand_first.CADIntake.test_dxf_blocks_not_placements) ... ok +test_dxf_multiple_components (test_demand_first.CADIntake.test_dxf_multiple_components) ... ok +test_empty_dxf_never_invents_bom (test_demand_first.CADIntake.test_empty_dxf_never_invents_bom) ... ok +test_json_bom_20 (test_demand_first.CADIntake.test_json_bom_20) ... ok +test_real_dxf_insert_count (test_demand_first.CADIntake.test_real_dxf_insert_count) ... ok +test_reject_bad_quantity (test_demand_first.CADIntake.test_reject_bad_quantity) ... ok +test_reject_external_xml_entity_no_expansion (test_demand_first.CADIntake.test_reject_external_xml_entity_no_expansion) ... ok +test_reject_oversized_file (test_demand_first.CADIntake.test_reject_oversized_file) ... ok +test_reject_path_traversal (test_demand_first.CADIntake.test_reject_path_traversal) ... ok +test_step_never_claims_bom (test_demand_first.CADIntake.test_step_never_claims_bom) ... ok +test_svg_explicit_annotations (test_demand_first.CADIntake.test_svg_explicit_annotations) ... ok +test_amounts_are_cents_and_exact (test_demand_first.DemandFirst.test_amounts_are_cents_and_exact) ... ok +test_budget_cap_prevents_confirmation (test_demand_first.DemandFirst.test_budget_cap_prevents_confirmation) ... ok +test_fixture_status_never_real_authority (test_demand_first.DemandFirst.test_fixture_status_never_real_authority) ... ok +test_material_mismatch_cannot_group (test_demand_first.DemandFirst.test_material_mismatch_cannot_group) ... ok +test_missing_payment_fee_holds (test_demand_first.DemandFirst.test_missing_payment_fee_holds) ... ok +test_missing_taxes_holds (test_demand_first.DemandFirst.test_missing_taxes_holds) ... ok +test_multi_component_bom_cannot_complete (test_demand_first.DemandFirst.test_multi_component_bom_cannot_complete) ... ok +test_optin_is_explicit_and_revocable (test_demand_first.DemandFirst.test_optin_is_explicit_and_revocable) ... ok +test_part_number_missing_in_bom_rejected (test_demand_first.DemandFirst.test_part_number_missing_in_bom_rejected) ... ok +test_positive_buyer_intake_to_demand_pool (test_demand_first.DemandFirst.test_positive_buyer_intake_to_demand_pool) ... ok +test_real_claim_cannot_use_demo_peers (test_demand_first.DemandFirst.test_real_claim_cannot_use_demo_peers) ... ok +test_real_paypal_cannot_be_bound_to_new_contract (test_demand_first.DemandFirst.test_real_paypal_cannot_be_bound_to_new_contract) ... ok +test_revision_mismatch_cannot_group (test_demand_first.DemandFirst.test_revision_mismatch_cannot_group) ... ok +test_supplier_listing_never_accepted_quote (test_demand_first.DemandFirst.test_supplier_listing_never_accepted_quote) ... ok +test_unknown_shipping_holds (test_demand_first.DemandFirst.test_unknown_shipping_holds) ... ok +test_unsupported_geometry_no_fabricated_bom (test_demand_first.DemandFirst.test_unsupported_geometry_no_fabricated_bom) ... ok +test_cross_contract_idempotency_fails (test_demand_first.DemoIntent.test_cross_contract_idempotency_fails) ... ok +test_customer_can_confirm_demo_review (test_demand_first.DemoIntent.test_customer_can_confirm_demo_review) ... ok +test_hash_mutant_fails (test_demand_first.DemoIntent.test_hash_mutant_fails) ... ok +test_idempotent_retry (test_demand_first.DemoIntent.test_idempotent_retry) ... ok +test_price_changed_fails (test_demand_first.DemoIntent.test_price_changed_fails) ... ok +test_requires_click (test_demand_first.DemoIntent.test_requires_click) ... ok +test_wrong_buyer_fails (test_demand_first.DemoIntent.test_wrong_buyer_fails) ... ok +test_100_metadata_preflight_tasks (test_demand_first.Dispatch.test_100_metadata_preflight_tasks) ... ok +test_actual_100_preflight_receipts_no_agents (test_demand_first.Dispatch.test_actual_100_preflight_receipts_no_agents) ... ok +test_bad_spec_F (test_demand_first.ProviderContracts.test_bad_spec_F) ... ok +test_capacity_F (test_demand_first.ProviderContracts.test_capacity_F) ... ok +test_external_quote_rejected_on_self_attestation (test_demand_first.ProviderContracts.test_external_quote_rejected_on_self_attestation) ... ok +test_moq_F (test_demand_first.ProviderContracts.test_moq_F) ... ok +test_quote_can_earn_T_from_independent_verifier (test_demand_first.ProviderContracts.test_quote_can_earn_T_from_independent_verifier) ... ok +test_unknown_shipping_Z (test_demand_first.ProviderContracts.test_unknown_shipping_Z) ... ok +test_unusable_expiry_F (test_demand_first.ProviderContracts.test_unusable_expiry_F) ... ok +test_wrong_destination_F (test_demand_first.ProviderContracts.test_wrong_destination_F) ... ok +test_1_missing_Z (test_demand_first.RealAdmissionContract.test_1_missing_Z) ... ok +test_changed_epoch_F (test_demand_first.RealAdmissionContract.test_changed_epoch_F) ... ok +test_earns_T_only_with_all_ten_independently_accepted_receipts (test_demand_first.RealAdmissionContract.test_earns_T_only_with_all_ten_independently_accepted_receipts) ... ok +test_no_paypal_call_for_even_T (test_demand_first.RealAdmissionContract.test_no_paypal_call_for_even_T) ... ok +test_no_verifier_never_T (test_demand_first.RealAdmissionContract.test_no_verifier_never_T) ... ok +test_one_independently_denied_F (test_demand_first.RealAdmissionContract.test_one_independently_denied_F) ... ok +test_price_receipt_mismatch_F (test_demand_first.RealAdmissionContract.test_price_receipt_mismatch_F) ... ok +test_revoked_F (test_demand_first.RealAdmissionContract.test_revoked_F) ... ok +test_verifier_unavailable_Z (test_demand_first.RealAdmissionContract.test_verifier_unavailable_Z) ... ok +test_wrong_buyer_F (test_demand_first.RealAdmissionContract.test_wrong_buyer_F) ... ok +test_wrong_evidence_F (test_demand_first.RealAdmissionContract.test_wrong_evidence_F) ... ok +test_demo_opt_in_is_not_live_authority (test_industrial.Demand.test_demo_opt_in_is_not_live_authority) ... ok +test_duplicate_buyer_is_denied (test_industrial.Demand.test_duplicate_buyer_is_denied) ... ok +test_invalid_qty_budget_fails (test_industrial.Demand.test_invalid_qty_budget_fails) ... ok +test_material_process_or_hash_prevents_merge (test_industrial.Demand.test_material_process_or_hash_prevents_merge) ... ok +test_missing_fields_hold (test_industrial.Demand.test_missing_fields_hold) ... ok +test_real_unverified_optin_unknown (test_industrial.Demand.test_real_unverified_optin_unknown) ... ok +test_revocation_and_consent_scope (test_industrial.Demand.test_revocation_and_consent_scope) ... ok +test_self_attested_real_optin_does_not_pass (test_industrial.Demand.test_self_attested_real_optin_does_not_pass) ... ok +test_spec_revision_prevents_superficial_merge (test_industrial.Demand.test_spec_revision_prevents_superficial_merge) ... ok +test_changed_revision_no_false_coalition (test_industrial.EndToEnd.test_changed_revision_no_false_coalition) ... ok +test_coalition_route_numerical_on_demo_fixture (test_industrial.EndToEnd.test_coalition_route_numerical_on_demo_fixture) ... ok +test_direct_route_must_win_when_cheaper (test_industrial.EndToEnd.test_direct_route_must_win_when_cheaper) ... ok +test_missing_case_rejected (test_industrial.EndToEnd.test_missing_case_rejected) ... ok +test_no_z_to_t_and_no_payment_transfer (test_industrial.EndToEnd.test_no_z_to_t_and_no_payment_transfer) ... ok +test_passport_deterministic (test_industrial.EndToEnd.test_passport_deterministic) ... ok +test_rfq_excludes_private_buyer_identity_or_cad (test_industrial.EndToEnd.test_rfq_excludes_private_buyer_identity_or_cad) ... ok +test_claimed_proof_without_independent_verifier_is_Z (test_industrial.Proofs.test_claimed_proof_without_independent_verifier_is_Z) ... ok +test_external_rejection_cannot_be_faked (test_industrial.Proofs.test_external_rejection_cannot_be_faked) ... ok +test_forged_request_digest_F (test_industrial.Proofs.test_forged_request_digest_F) ... ok +test_no_ztl_receipt_is_Z (test_industrial.Proofs.test_no_ztl_receipt_is_Z) ... ok +test_stubbed_positive_isolated_contract_only (test_industrial.Proofs.test_stubbed_positive_isolated_contract_only) ... ok +test_wrong_verifier_pin_F (test_industrial.Proofs.test_wrong_verifier_pin_F) ... ok +test_capacity_and_moq_negative (test_industrial.Quotations.test_capacity_and_moq_negative) ... ok +test_due_date_critical (test_industrial.Quotations.test_due_date_critical) ... ok +test_fixture_only_not_actual_supplier_quote (test_industrial.Quotations.test_fixture_only_not_actual_supplier_quote) ... ok +test_missing_quote_fields_do_not_pass (test_industrial.Quotations.test_missing_quote_fields_do_not_pass) ... ok +test_nonbinding_budget_blocks (test_industrial.Quotations.test_nonbinding_budget_blocks) ... ok +test_quotes_research_only_when_unconfirmed (test_industrial.Quotations.test_quotes_research_only_when_unconfirmed) ... ok +test_self_attested_supplier_quote_does_not_pass (test_industrial.Quotations.test_self_attested_supplier_quote_does_not_pass) ... ok +test_wrong_revision_digest_material_rejected (test_industrial.Quotations.test_wrong_revision_digest_material_rejected) ... ok +test_87_discovery_entries_not_quoted (test_industrial.Registry.test_87_discovery_entries_not_quoted) ... ok +test_hp_48_member_index_exact_and_no_double_claim (test_industrial.Registry.test_hp_48_member_index_exact_and_no_double_claim) ... ok +test_no_filename_traversal (test_industrial.Registry.test_no_filename_traversal) ... ok +test_shortlist_unknown_capability (test_industrial.Registry.test_shortlist_unknown_capability) ... ok +test_bad_base64_rejected (test_pmix_integration.EngineeringHTTP.test_bad_base64_rejected) ... ok +test_cross_origin_denied (test_pmix_integration.EngineeringHTTP.test_cross_origin_denied) ... ok +test_endpoint_real_extraction_no_session (test_pmix_integration.EngineeringHTTP.test_endpoint_real_extraction_no_session) ... ok +test_legacy_csv_endpoint_preserved (test_pmix_integration.EngineeringHTTP.test_legacy_csv_endpoint_preserved) ... ok +test_all_26_reference_steps_parse_in_sandbox (test_pmix_integration.PmixIntegration.test_all_26_reference_steps_parse_in_sandbox) ... PMIX_REFERENCE_AUDIT [{"case": "01_nist_ctc_01_asme1_ap242-e1", "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", "critical_fields_with_provenance": 23, "dimensions": 12, "gdt": 6, "datums": 3, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "02_nist_ctc_02_asme1_ap242-e2", "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", "critical_fields_with_provenance": 41, "dimensions": 7, "gdt": 22, "datums": 10, "unsupported": 0, "diagnostics": 1, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "03_nist_ctc_03_asme1_ap242-e2", "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", "critical_fields_with_provenance": 31, "dimensions": 10, "gdt": 13, "datums": 6, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "04_nist_ctc_04_asme1_ap242-e2", "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", "critical_fields_with_provenance": 28, "dimensions": 10, "gdt": 7, "datums": 8, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "05_nist_ctc_05_asme1_ap242-e1", "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", "critical_fields_with_provenance": 23, "dimensions": 6, "gdt": 10, "datums": 4, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "06_nist_ftc_06_asme1_ap242-e2", "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", "critical_fields_with_provenance": 64, "dimensions": 24, "gdt": 28, "datums": 10, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "07_nist_ftc_07_asme1_ap242-e2", "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", "critical_fields_with_provenance": 51, "dimensions": 17, "gdt": 27, "datums": 5, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "08_nist_ftc_08_asme1_ap242-e2", "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", "critical_fields_with_provenance": 56, "dimensions": 10, "gdt": 33, "datums": 11, "unsupported": 0, "diagnostics": 4, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "09_nist_ftc_08_asme1_ap242-e4-tg", "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", "critical_fields_with_provenance": 2, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "10_nist_ftc_09_asme1_ap242-e1", "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", "critical_fields_with_provenance": 65, "dimensions": 22, "gdt": 31, "datums": 8, "unsupported": 0, "diagnostics": 1, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "11_nist_ftc_10_asme1_ap242-e2", "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", "critical_fields_with_provenance": 79, "dimensions": 26, "gdt": 40, "datums": 11, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "12_nist_ftc_11_asme1_ap242-e3", "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", "critical_fields_with_provenance": 14, "dimensions": 6, "gdt": 4, "datums": 2, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "13_nist_stc_06_asme1_ap242-e3", "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", "critical_fields_with_provenance": 50, "dimensions": 17, "gdt": 25, "datums": 6, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "14_nist_stc_07_asme1_ap242-e3", "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", "critical_fields_with_provenance": 74, "dimensions": 45, "gdt": 22, "datums": 5, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "15_nist_stc_08_asme1_ap242-e3", "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", "critical_fields_with_provenance": 47, "dimensions": 7, "gdt": 30, "datums": 8, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "16_nist_stc_09_asme1_ap242-e4", "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", "critical_fields_with_provenance": 58, "dimensions": 20, "gdt": 27, "datums": 8, "unsupported": 17, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "17_nist_stc_10_asme1_ap242-e2", "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", "critical_fields_with_provenance": 75, "dimensions": 27, "gdt": 37, "datums": 9, "unsupported": 0, "diagnostics": 6, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "18_nist_ctc_04_asme1_ap242-e1", "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", "critical_fields_with_provenance": 28, "dimensions": 10, "gdt": 7, "datums": 8, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "19_nist_ftc_08_asme1_ap242-e1-tg", "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", "critical_fields_with_provenance": 2, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "20_nist_ftc_11_asme1_ap242-e2", "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", "critical_fields_with_provenance": 14, "dimensions": 6, "gdt": 4, "datums": 2, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "21_assembly_two_parts", "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", "critical_fields_with_provenance": 6, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "22_assembly_properties", "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", "critical_fields_with_provenance": 6, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "23_dimension_basics", "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", "critical_fields_with_provenance": 7, "dimensions": 5, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "24_plate_one_hole", "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", "critical_fields_with_provenance": 2, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "25_property_basics", "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", "critical_fields_with_provenance": 3, "dimensions": 0, "gdt": 1, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "26_tolerance_datum_basics", "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", "critical_fields_with_provenance": 11, "dimensions": 0, "gdt": 6, "datums": 3, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}] +ok +test_confirmation_required_before_matching (test_pmix_integration.PmixIntegration.test_confirmation_required_before_matching) ... ok +test_confirmed_extraction_cannot_trigger_payment_or_coalition (test_pmix_integration.PmixIntegration.test_confirmed_extraction_cannot_trigger_payment_or_coalition) ... ok +test_critical_field_provenance (test_pmix_integration.PmixIntegration.test_critical_field_provenance) ... ok +test_cycle_rejected (test_pmix_integration.PmixIntegration.test_cycle_rejected) ... ok +test_diagnostics_and_unsupported_retained (test_pmix_integration.PmixIntegration.test_diagnostics_and_unsupported_retained) ... ok +test_explicit_material_by_occurrence (test_pmix_integration.PmixIntegration.test_explicit_material_by_occurrence) ... ok +test_fabricated_entity_reference_rejected (test_pmix_integration.PmixIntegration.test_fabricated_entity_reference_rejected) ... ok +test_gdt_dimension_units_source_refs (test_pmix_integration.PmixIntegration.test_gdt_dimension_units_source_refs) ... ok +test_incompatible_parts_never_match (test_pmix_integration.PmixIntegration.test_incompatible_parts_never_match) ... ok +test_malformed_rejected_and_visible (test_pmix_integration.PmixIntegration.test_malformed_rejected_and_visible) ... ok +test_missing_assembly_reference (test_pmix_integration.PmixIntegration.test_missing_assembly_reference) ... ok +test_missing_binary_fail_closed (test_pmix_integration.PmixIntegration.test_missing_binary_fail_closed) ... ok +test_missing_fields_remain_z (test_pmix_integration.PmixIntegration.test_missing_fields_remain_z) ... ok +test_pinned_binary_checksum (test_pmix_integration.PmixIntegration.test_pinned_binary_checksum) ... ok +test_read_only_extract_never_changes_authority (test_pmix_integration.PmixIntegration.test_read_only_extract_never_changes_authority) ... ok +test_revision_difference_preserved (test_pmix_integration.PmixIntegration.test_revision_difference_preserved) ... ok +test_sandbox_missing_no_fallback (test_pmix_integration.PmixIntegration.test_sandbox_missing_no_fallback) ... ok +test_selection_quantity_cannot_be_changed (test_pmix_integration.PmixIntegration.test_selection_quantity_cannot_be_changed) ... ok +test_successful_extraction_and_bom_reconciliation (test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation) ... ok +test_timeout_kills_group (test_pmix_integration.PmixIntegration.test_timeout_kills_group) ... ok +test_units_preserved_without_geometry_inference (test_pmix_integration.PmixIntegration.test_units_preserved_without_geometry_inference) ... ok +test_unknown_never_becomes_approved (test_pmix_integration.PmixIntegration.test_unknown_never_becomes_approved) ... ok +test_upload_size (test_pmix_integration.PmixIntegration.test_upload_size) ... ok +test_wrong_checksum_never_executes (test_pmix_integration.PmixIntegration.test_wrong_checksum_never_executes) ... ok +test_build_and_audit_pass (test_release.ReleaseTests.test_build_and_audit_pass) ... ok +test_economics_honest (test_release.ReleaseTests.test_economics_honest) ... ok +test_judge_and_scenario_facts (test_release.ReleaseTests.test_judge_and_scenario_facts) ... ok +test_negative_matrix (test_release.ReleaseTests.test_negative_matrix) ... ok +test_paypal_truth (test_release.ReleaseTests.test_paypal_truth) ... ok + +---------------------------------------------------------------------- +Ran 129 tests in 11.556s + +OK diff --git a/cad_evidence/mapping-results.json b/cad_evidence/mapping-results.json new file mode 100644 index 0000000..7595194 --- /dev/null +++ b/cad_evidence/mapping-results.json @@ -0,0 +1,162 @@ +{ + "scope": "Mapping archived original pmix JSON; NOT a new sandbox parse", + "mapped": 26, + "cases": [ + { + "case": "01_nist_ctc_01_asme1_ap242-e1", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "02_nist_ctc_02_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "03_nist_ctc_03_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "04_nist_ctc_04_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "05_nist_ctc_05_asme1_ap242-e1", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "06_nist_ftc_06_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "07_nist_ftc_07_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "08_nist_ftc_08_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "09_nist_ftc_08_asme1_ap242-e4-tg", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "10_nist_ftc_09_asme1_ap242-e1", + "mapped_bom": 4, + "quantity": 4, + "engineering_verdict": "Z" + }, + { + "case": "11_nist_ftc_10_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "12_nist_ftc_11_asme1_ap242-e3", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "13_nist_stc_06_asme1_ap242-e3", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "14_nist_stc_07_asme1_ap242-e3", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "15_nist_stc_08_asme1_ap242-e3", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "16_nist_stc_09_asme1_ap242-e4", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "17_nist_stc_10_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "18_nist_ctc_04_asme1_ap242-e1", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "19_nist_ftc_08_asme1_ap242-e1-tg", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "20_nist_ftc_11_asme1_ap242-e2", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "21_assembly_two_parts", + "mapped_bom": 2, + "quantity": 2, + "engineering_verdict": "Z" + }, + { + "case": "22_assembly_properties", + "mapped_bom": 2, + "quantity": 3, + "engineering_verdict": "Z" + }, + { + "case": "23_dimension_basics", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "24_plate_one_hole", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "25_property_basics", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + }, + { + "case": "26_tolerance_datum_basics", + "mapped_bom": 1, + "quantity": 1, + "engineering_verdict": "Z" + } + ] +} diff --git a/cad_evidence/parts-1440.png b/cad_evidence/parts-1440.png new file mode 100644 index 0000000..2f26e1f Binary files /dev/null and b/cad_evidence/parts-1440.png differ diff --git a/cad_evidence/parts-390.png b/cad_evidence/parts-390.png new file mode 100644 index 0000000..6b254be Binary files /dev/null and b/cad_evidence/parts-390.png differ diff --git a/cad_evidence/paypal-regression-windows.log b/cad_evidence/paypal-regression-windows.log new file mode 100644 index 0000000..d4c890e --- /dev/null +++ b/cad_evidence/paypal-regression-windows.log @@ -0,0 +1,68 @@ +test_approved_callback_captures_and_reads_back (tests.test_approval.ApprovalTests.test_approved_callback_captures_and_reads_back) ... ok +test_callback_does_not_replace_buyer_approval (tests.test_approval.ApprovalTests.test_callback_does_not_replace_buyer_approval) ... ok +test_foreign_host_rejected (tests.test_approval.ApprovalTests.test_foreign_host_rejected) ... ok +test_forged_callback_no_capture (tests.test_approval.ApprovalTests.test_forged_callback_no_capture) ... ok +test_acceptance_missing_bad_signature_or_hash (tests.test_gateway.GatewayTests.test_acceptance_missing_bad_signature_or_hash) ... ok +test_control_replay (tests.test_gateway.GatewayTests.test_control_replay) ... ok +test_duplicate_provider_capture_rejected (tests.test_gateway.GatewayTests.test_duplicate_provider_capture_rejected) ... ok +test_empty_original_obligations (tests.test_gateway.GatewayTests.test_empty_original_obligations) ... ok +test_expired_after_reserve_no_calls (tests.test_gateway.GatewayTests.test_expired_after_reserve_no_calls) ... ok +test_fake_stored_receipt_not_ground_truth (tests.test_gateway.GatewayTests.test_fake_stored_receipt_not_ground_truth) ... ok +test_provider_amount_change_pre_capture (tests.test_gateway.GatewayTests.test_provider_amount_change_pre_capture) ... ok +test_recover_unknown_create_by_independent_get (tests.test_gateway.GatewayTests.test_recover_unknown_create_by_independent_get) ... ok +test_refund_does_not_restore_spend (tests.test_gateway.GatewayTests.test_refund_does_not_restore_spend) ... ok +test_stale_quote_epoch_expiry (tests.test_gateway.GatewayTests.test_stale_quote_epoch_expiry) ... ok +test_t01_approved_capture_requires_two_gets (tests.test_gateway.GatewayTests.test_t01_approved_capture_requires_two_gets) +A04-T01 mechanism only; A05 no mission closure from payment. ... ok +test_t02_denied_no_calls (tests.test_gateway.GatewayTests.test_t02_denied_no_calls) +A04-T02 all independent authority gates, including UNKNOWN. ... ok +test_t03_parallel_320_260 (tests.test_gateway.GatewayTests.test_t03_parallel_320_260) +A04-T03 actual SQLite concurrent writer contention (single host). ... ok +test_t03_separate_process_reservations (tests.test_gateway.GatewayTests.test_t03_separate_process_reservations) +A04-T03 competing OS processes, both bound to the same signed mission. ... ok +test_t04_same_effect_retry_after_timeout (tests.test_gateway.GatewayTests.test_t04_same_effect_retry_after_timeout) +A04-T04 timeout retains identity and does not blindly retry create. ... ok +test_t05_lost_success_reconcile_no_second_capture (tests.test_gateway.GatewayTests.test_t05_lost_success_reconcile_no_second_capture) +A04-T05 mock lost reply after success; live required separately. ... ok +test_t06_created_is_not_paid (tests.test_gateway.GatewayTests.test_t06_created_is_not_paid) +A04-T06 no buyer approval: no capture POST. ... ok +test_t07_declined (tests.test_gateway.GatewayTests.test_t07_declined) +A04-T07 DECLINED never counts completed. ... ok +test_t07_pending (tests.test_gateway.GatewayTests.test_t07_pending) +A04-T07 PENDING holds reservation, never confirms. ... ok +test_t08_unsigned_changed_amount_merchant (tests.test_gateway.GatewayTests.test_t08_unsigned_changed_amount_merchant) +A04-T08 tampering rejected before any network. ... ok +test_t09_revoke_after_reserve (tests.test_gateway.GatewayTests.test_t09_revoke_after_reserve) +A04-T09 revocation committed before capture => zero further calls. ... ok +test_t10_same_permit_concurrent (tests.test_gateway.GatewayTests.test_t10_same_permit_concurrent) +A04-T10 idempotent same-effect join; exactly one create/capture. ... ok +test_t10_same_permit_for_different_effect_refused (tests.test_gateway.GatewayTests.test_t10_same_permit_for_different_effect_refused) ... ok +test_t11_process_crash_restart_wal (tests.test_gateway.GatewayTests.test_t11_process_crash_restart_wal) +A04-T11 abrupt separate-process exit preserves committed reserve. ... ok +test_t12_altered_readback (tests.test_gateway.GatewayTests.test_t12_altered_readback) +A04-T12 mismatch is discrepancy and no completed payment. ... ok +test_t12_missing_readback (tests.test_gateway.GatewayTests.test_t12_missing_readback) +A04-T12 missing provider truth cannot close payment. ... ok +test_t13_exact_boundaries (tests.test_gateway.GatewayTests.test_t13_exact_boundaries) +A04-T13 exact 1 / 49999 accepted in isolation, 50001 rejected. ... ok +test_t14_errors (tests.test_gateway.GatewayTests.test_t14_errors) +A04-T14 401/403/500 fail closed, classified, reservation retained. ... ok +test_tampered_capture_readback (tests.test_gateway.GatewayTests.test_tampered_capture_readback) ... ok +test_unknown_capture_approved_readback_does_not_retry (tests.test_gateway.GatewayTests.test_unknown_capture_approved_readback_does_not_retry) ... ok +test_wrong_capture_order_rejected (tests.test_gateway.GatewayTests.test_wrong_capture_order_rejected) ... ok +test_n07_duplicate_capture_single_post (tests.test_release_negatives.ReleaseNegatives.test_n07_duplicate_capture_single_post) ... ok +test_n10_approved_without_payer_identity_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_approved_without_payer_identity_no_capture) ... ok +test_n10_payee_swapped_at_provider_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_payee_swapped_at_provider_no_capture) ... ok +test_n14_capture_without_provider_approval_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n14_capture_without_provider_approval_no_capture) ... ok +test_401_invalidates_without_post_retry (tests.test_transport.TransportTests.test_401_invalidates_without_post_retry) ... ok +test_cli_preflight_missing_config_no_network (tests.test_transport.TransportTests.test_cli_preflight_missing_config_no_network) ... ok +test_http_errors_redacted (tests.test_transport.TransportTests.test_http_errors_redacted) ... ok +test_oauth_cache_and_renewal (tests.test_transport.TransportTests.test_oauth_cache_and_renewal) ... ok +test_path_injection_disallowed (tests.test_transport.TransportTests.test_path_injection_disallowed) ... ok +test_read_only_disallows_post_before_credentials (tests.test_transport.TransportTests.test_read_only_disallows_post_before_credentials) ... ok +test_redirect_never_forwards_auth (tests.test_transport.TransportTests.test_redirect_never_forwards_auth) ... ok + +---------------------------------------------------------------------- +Ran 46 tests in 5.365s + +OK diff --git a/cad_evidence/regression-windows.log b/cad_evidence/regression-windows.log new file mode 100644 index 0000000..06bf75c --- /dev/null +++ b/cad_evidence/regression-windows.log @@ -0,0 +1,136 @@ +test_direct_retail_without_discovery_consent (test_demand_first.BuyerEntryAlternatives.test_direct_retail_without_discovery_consent) ... ok +test_existing_supplier_batch_80_plus_20 (test_demand_first.BuyerEntryAlternatives.test_existing_supplier_batch_80_plus_20) ... ok +test_no_live_direct_unauthorized_quote (test_demand_first.BuyerEntryAlternatives.test_no_live_direct_unauthorized_quote) ... ok +test_retail_more_expensive_than_coalition (test_demand_first.BuyerEntryAlternatives.test_retail_more_expensive_than_coalition) ... ok +test_csv_quantity_aggregation (test_demand_first.CADIntake.test_csv_quantity_aggregation) ... ok +test_drawing_digest_stable (test_demand_first.CADIntake.test_drawing_digest_stable) ... ok +test_dxf_blocks_not_placements (test_demand_first.CADIntake.test_dxf_blocks_not_placements) ... ok +test_dxf_multiple_components (test_demand_first.CADIntake.test_dxf_multiple_components) ... ok +test_empty_dxf_never_invents_bom (test_demand_first.CADIntake.test_empty_dxf_never_invents_bom) ... ok +test_json_bom_20 (test_demand_first.CADIntake.test_json_bom_20) ... ok +test_real_dxf_insert_count (test_demand_first.CADIntake.test_real_dxf_insert_count) ... ok +test_reject_bad_quantity (test_demand_first.CADIntake.test_reject_bad_quantity) ... ok +test_reject_external_xml_entity_no_expansion (test_demand_first.CADIntake.test_reject_external_xml_entity_no_expansion) ... ok +test_reject_oversized_file (test_demand_first.CADIntake.test_reject_oversized_file) ... ok +test_reject_path_traversal (test_demand_first.CADIntake.test_reject_path_traversal) ... ok +test_step_never_claims_bom (test_demand_first.CADIntake.test_step_never_claims_bom) ... ok +test_svg_explicit_annotations (test_demand_first.CADIntake.test_svg_explicit_annotations) ... ok +test_amounts_are_cents_and_exact (test_demand_first.DemandFirst.test_amounts_are_cents_and_exact) ... ok +test_budget_cap_prevents_confirmation (test_demand_first.DemandFirst.test_budget_cap_prevents_confirmation) ... ok +test_fixture_status_never_real_authority (test_demand_first.DemandFirst.test_fixture_status_never_real_authority) ... ok +test_material_mismatch_cannot_group (test_demand_first.DemandFirst.test_material_mismatch_cannot_group) ... ok +test_missing_payment_fee_holds (test_demand_first.DemandFirst.test_missing_payment_fee_holds) ... ok +test_missing_taxes_holds (test_demand_first.DemandFirst.test_missing_taxes_holds) ... ok +test_multi_component_bom_cannot_complete (test_demand_first.DemandFirst.test_multi_component_bom_cannot_complete) ... ok +test_optin_is_explicit_and_revocable (test_demand_first.DemandFirst.test_optin_is_explicit_and_revocable) ... ok +test_part_number_missing_in_bom_rejected (test_demand_first.DemandFirst.test_part_number_missing_in_bom_rejected) ... ok +test_positive_buyer_intake_to_demand_pool (test_demand_first.DemandFirst.test_positive_buyer_intake_to_demand_pool) ... ok +test_real_claim_cannot_use_demo_peers (test_demand_first.DemandFirst.test_real_claim_cannot_use_demo_peers) ... ok +test_real_paypal_cannot_be_bound_to_new_contract (test_demand_first.DemandFirst.test_real_paypal_cannot_be_bound_to_new_contract) ... ok +test_revision_mismatch_cannot_group (test_demand_first.DemandFirst.test_revision_mismatch_cannot_group) ... ok +test_supplier_listing_never_accepted_quote (test_demand_first.DemandFirst.test_supplier_listing_never_accepted_quote) ... ok +test_unknown_shipping_holds (test_demand_first.DemandFirst.test_unknown_shipping_holds) ... ok +test_unsupported_geometry_no_fabricated_bom (test_demand_first.DemandFirst.test_unsupported_geometry_no_fabricated_bom) ... ok +test_cross_contract_idempotency_fails (test_demand_first.DemoIntent.test_cross_contract_idempotency_fails) ... ok +test_customer_can_confirm_demo_review (test_demand_first.DemoIntent.test_customer_can_confirm_demo_review) ... ok +test_hash_mutant_fails (test_demand_first.DemoIntent.test_hash_mutant_fails) ... ok +test_idempotent_retry (test_demand_first.DemoIntent.test_idempotent_retry) ... ok +test_price_changed_fails (test_demand_first.DemoIntent.test_price_changed_fails) ... ok +test_requires_click (test_demand_first.DemoIntent.test_requires_click) ... ok +test_wrong_buyer_fails (test_demand_first.DemoIntent.test_wrong_buyer_fails) ... ok +test_100_metadata_preflight_tasks (test_demand_first.Dispatch.test_100_metadata_preflight_tasks) ... ok +test_actual_100_preflight_receipts_no_agents (test_demand_first.Dispatch.test_actual_100_preflight_receipts_no_agents) ... ok +test_bad_spec_F (test_demand_first.ProviderContracts.test_bad_spec_F) ... ok +test_capacity_F (test_demand_first.ProviderContracts.test_capacity_F) ... ok +test_external_quote_rejected_on_self_attestation (test_demand_first.ProviderContracts.test_external_quote_rejected_on_self_attestation) ... ok +test_moq_F (test_demand_first.ProviderContracts.test_moq_F) ... ok +test_quote_can_earn_T_from_independent_verifier (test_demand_first.ProviderContracts.test_quote_can_earn_T_from_independent_verifier) ... ok +test_unknown_shipping_Z (test_demand_first.ProviderContracts.test_unknown_shipping_Z) ... ok +test_unusable_expiry_F (test_demand_first.ProviderContracts.test_unusable_expiry_F) ... ok +test_wrong_destination_F (test_demand_first.ProviderContracts.test_wrong_destination_F) ... ok +test_1_missing_Z (test_demand_first.RealAdmissionContract.test_1_missing_Z) ... ok +test_changed_epoch_F (test_demand_first.RealAdmissionContract.test_changed_epoch_F) ... ok +test_earns_T_only_with_all_ten_independently_accepted_receipts (test_demand_first.RealAdmissionContract.test_earns_T_only_with_all_ten_independently_accepted_receipts) ... ok +test_no_paypal_call_for_even_T (test_demand_first.RealAdmissionContract.test_no_paypal_call_for_even_T) ... ok +test_no_verifier_never_T (test_demand_first.RealAdmissionContract.test_no_verifier_never_T) ... ok +test_one_independently_denied_F (test_demand_first.RealAdmissionContract.test_one_independently_denied_F) ... ok +test_price_receipt_mismatch_F (test_demand_first.RealAdmissionContract.test_price_receipt_mismatch_F) ... ok +test_revoked_F (test_demand_first.RealAdmissionContract.test_revoked_F) ... ok +test_verifier_unavailable_Z (test_demand_first.RealAdmissionContract.test_verifier_unavailable_Z) ... ok +test_wrong_buyer_F (test_demand_first.RealAdmissionContract.test_wrong_buyer_F) ... ok +test_wrong_evidence_F (test_demand_first.RealAdmissionContract.test_wrong_evidence_F) ... ok +test_demo_opt_in_is_not_live_authority (test_industrial.Demand.test_demo_opt_in_is_not_live_authority) ... ok +test_duplicate_buyer_is_denied (test_industrial.Demand.test_duplicate_buyer_is_denied) ... ok +test_invalid_qty_budget_fails (test_industrial.Demand.test_invalid_qty_budget_fails) ... ok +test_material_process_or_hash_prevents_merge (test_industrial.Demand.test_material_process_or_hash_prevents_merge) ... ok +test_missing_fields_hold (test_industrial.Demand.test_missing_fields_hold) ... ok +test_real_unverified_optin_unknown (test_industrial.Demand.test_real_unverified_optin_unknown) ... ok +test_revocation_and_consent_scope (test_industrial.Demand.test_revocation_and_consent_scope) ... ok +test_self_attested_real_optin_does_not_pass (test_industrial.Demand.test_self_attested_real_optin_does_not_pass) ... ok +test_spec_revision_prevents_superficial_merge (test_industrial.Demand.test_spec_revision_prevents_superficial_merge) ... ok +test_changed_revision_no_false_coalition (test_industrial.EndToEnd.test_changed_revision_no_false_coalition) ... ok +test_coalition_route_numerical_on_demo_fixture (test_industrial.EndToEnd.test_coalition_route_numerical_on_demo_fixture) ... ok +test_direct_route_must_win_when_cheaper (test_industrial.EndToEnd.test_direct_route_must_win_when_cheaper) ... ok +test_missing_case_rejected (test_industrial.EndToEnd.test_missing_case_rejected) ... ok +test_no_z_to_t_and_no_payment_transfer (test_industrial.EndToEnd.test_no_z_to_t_and_no_payment_transfer) ... ok +test_passport_deterministic (test_industrial.EndToEnd.test_passport_deterministic) ... ok +test_rfq_excludes_private_buyer_identity_or_cad (test_industrial.EndToEnd.test_rfq_excludes_private_buyer_identity_or_cad) ... ok +test_claimed_proof_without_independent_verifier_is_Z (test_industrial.Proofs.test_claimed_proof_without_independent_verifier_is_Z) ... ok +test_external_rejection_cannot_be_faked (test_industrial.Proofs.test_external_rejection_cannot_be_faked) ... ok +test_forged_request_digest_F (test_industrial.Proofs.test_forged_request_digest_F) ... ok +test_no_ztl_receipt_is_Z (test_industrial.Proofs.test_no_ztl_receipt_is_Z) ... ok +test_stubbed_positive_isolated_contract_only (test_industrial.Proofs.test_stubbed_positive_isolated_contract_only) ... ok +test_wrong_verifier_pin_F (test_industrial.Proofs.test_wrong_verifier_pin_F) ... ok +test_capacity_and_moq_negative (test_industrial.Quotations.test_capacity_and_moq_negative) ... ok +test_due_date_critical (test_industrial.Quotations.test_due_date_critical) ... ok +test_fixture_only_not_actual_supplier_quote (test_industrial.Quotations.test_fixture_only_not_actual_supplier_quote) ... ok +test_missing_quote_fields_do_not_pass (test_industrial.Quotations.test_missing_quote_fields_do_not_pass) ... ok +test_nonbinding_budget_blocks (test_industrial.Quotations.test_nonbinding_budget_blocks) ... ok +test_quotes_research_only_when_unconfirmed (test_industrial.Quotations.test_quotes_research_only_when_unconfirmed) ... ok +test_self_attested_supplier_quote_does_not_pass (test_industrial.Quotations.test_self_attested_supplier_quote_does_not_pass) ... ok +test_wrong_revision_digest_material_rejected (test_industrial.Quotations.test_wrong_revision_digest_material_rejected) ... ok +test_87_discovery_entries_not_quoted (test_industrial.Registry.test_87_discovery_entries_not_quoted) ... ok +test_hp_48_member_index_exact_and_no_double_claim (test_industrial.Registry.test_hp_48_member_index_exact_and_no_double_claim) ... ok +test_no_filename_traversal (test_industrial.Registry.test_no_filename_traversal) ... ok +test_shortlist_unknown_capability (test_industrial.Registry.test_shortlist_unknown_capability) ... ok +test_bad_base64_rejected (test_pmix_integration.EngineeringHTTP.test_bad_base64_rejected) ... ok +test_cross_origin_denied (test_pmix_integration.EngineeringHTTP.test_cross_origin_denied) ... ok +test_endpoint_real_extraction_no_session (test_pmix_integration.EngineeringHTTP.test_endpoint_real_extraction_no_session) ... FAIL +test_legacy_csv_endpoint_preserved (test_pmix_integration.EngineeringHTTP.test_legacy_csv_endpoint_preserved) ... ok +setUpClass (test_pmix_integration.PmixIntegration) ... ERROR +test_build_and_audit_pass (test_release.ReleaseTests.test_build_and_audit_pass) ... ok +test_economics_honest (test_release.ReleaseTests.test_economics_honest) ... ok +test_judge_and_scenario_facts (test_release.ReleaseTests.test_judge_and_scenario_facts) ... ok +test_negative_matrix (test_release.ReleaseTests.test_negative_matrix) ... ok +test_paypal_truth (test_release.ReleaseTests.test_paypal_truth) ... ok + +====================================================================== +ERROR: setUpClass (test_pmix_integration.PmixIntegration) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "\Documents\Codex\2026-11-03\codex-wo-nim-connection-001-codex\work\wo-cad-002\repo\tests\test_pmix_integration.py", line 35, in setUpClass + cls.extraction = pmix.extract(cls.raw) + ^^^^^^^^^^^^^^^^^^^^^ + File "\Documents\Codex\2026-11-03\codex-wo-nim-connection-001-codex\work\wo-cad-002\repo\deal_rescue\industrial\pmix_adapter.py", line 225, in extract + binary = _binary() + ^^^^^^^^^ + File "\Documents\Codex\2026-11-03\codex-wo-nim-connection-001-codex\work\wo-cad-002\repo\deal_rescue\industrial\pmix_adapter.py", line 39, in _binary + raise PmixError('PMIX_REQUIRES_LINUX_X86_64_SANDBOX') +deal_rescue.industrial.pmix_adapter.PmixError: PMIX_REQUIRES_LINUX_X86_64_SANDBOX + +====================================================================== +FAIL: test_endpoint_real_extraction_no_session (test_pmix_integration.EngineeringHTTP.test_endpoint_real_extraction_no_session) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "\Documents\Codex\2026-11-03\codex-wo-nim-connection-001-codex\work\wo-cad-002\repo\tests\test_pmix_integration.py", line 221, in test_endpoint_real_extraction_no_session + self.assertEqual(status,200);self.assertEqual(result['extraction'],'T') + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError: 'Z' != 'T' +- Z ++ T + + +---------------------------------------------------------------------- +Ran 104 tests in 2.016s + +FAILED (failures=1, errors=1) diff --git a/cad_evidence/wo-cad-003/browser.log b/cad_evidence/wo-cad-003/browser.log new file mode 100644 index 0000000..56adda0 --- /dev/null +++ b/cad_evidence/wo-cad-003/browser.log @@ -0,0 +1,44 @@ +[ + { + "width": 1440, + "status": "PASS", + "stages": [ + "DRAWING", + "PARTS", + "LEGION AT WORK", + "REVIEW", + "PAYPAL" + ], + "post_requests": [ + "/api/industrial/engineering-extract", + "/api/industrial/intake" + ], + "errors": [], + "parts_confirmed": true, + "engineering_verdict": "Z", + "payment_effects": 0, + "supplier_requests_sent": 0, + "horizontal_overflow": false + }, + { + "width": 390, + "status": "PASS", + "stages": [ + "DRAWING", + "PARTS", + "LEGION AT WORK", + "REVIEW", + "PAYPAL" + ], + "post_requests": [ + "/api/industrial/engineering-extract", + "/api/industrial/intake" + ], + "errors": [], + "parts_confirmed": true, + "engineering_verdict": "Z", + "payment_effects": 0, + "supplier_requests_sent": 0, + "horizontal_overflow": false + } +] diff --git a/cad_evidence/wo-cad-003/browser/BROWSER_RESULTS.json b/cad_evidence/wo-cad-003/browser/BROWSER_RESULTS.json new file mode 100644 index 0000000..36f8cdc --- /dev/null +++ b/cad_evidence/wo-cad-003/browser/BROWSER_RESULTS.json @@ -0,0 +1,44 @@ +[ + { + "width": 1440, + "status": "PASS", + "stages": [ + "DRAWING", + "PARTS", + "LEGION AT WORK", + "REVIEW", + "PAYPAL" + ], + "post_requests": [ + "/api/industrial/engineering-extract", + "/api/industrial/intake" + ], + "errors": [], + "parts_confirmed": true, + "engineering_verdict": "Z", + "payment_effects": 0, + "supplier_requests_sent": 0, + "horizontal_overflow": false + }, + { + "width": 390, + "status": "PASS", + "stages": [ + "DRAWING", + "PARTS", + "LEGION AT WORK", + "REVIEW", + "PAYPAL" + ], + "post_requests": [ + "/api/industrial/engineering-extract", + "/api/industrial/intake" + ], + "errors": [], + "parts_confirmed": true, + "engineering_verdict": "Z", + "payment_effects": 0, + "supplier_requests_sent": 0, + "horizontal_overflow": false + } +] \ No newline at end of file diff --git a/cad_evidence/wo-cad-003/browser/api-1440.json b/cad_evidence/wo-cad-003/browser/api-1440.json new file mode 100644 index 0000000..524289b --- /dev/null +++ b/cad_evidence/wo-cad-003/browser/api-1440.json @@ -0,0 +1,1968 @@ +[ + { + "method": "POST", + "url": "http://127.0.0.1:18897/api/industrial/engineering-extract", + "status": 200, + "request": { + "filename": "assembly_properties.stp", + "claim": { + "demo": true, + "buyer_id": "DEMO-BUYER-NEW", + "requirements": { + "part_no": "SLS-BRACKET-REV-C", + "spec_revision": "REV-C", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "process": "SLS", + "material": "PA12" + }, + "budget_cents": 78000, + "own_shipping_cents": 2500, + "due_date": "2026-12-10", + "taxes_cents": 0, + "payment_fees_cents": 0, + "discovery_consent": false, + "fixture_case": "coalition" + }, + "uploaded_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320" + }, + "response": { + "schema": "legion.cad-bom-intake.v1", + "filename": "assembly_properties.stp", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "format": "STEP", + "extraction": "T", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "engineering_evidence": { + "schema": "legion.pmix-engineering.v1", + "parser": "pmix 0.16.1", + "parser_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "assembly": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "deg", + "declared_length": "mm", + "declared_angle": "rad" + }, + "parts": [ + { + "id": "part:5d9da29581d2d325", + "number": "SYN-ASM", + "name": "synthetic_assembly", + "occurrences": 0, + "source_refs": [ + "#12", + "#11", + "#10" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:77a3b981f71010c8", + "number": "SYN-BRACKET", + "name": "bracket", + "occurrences": 1, + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:e167b8c772a2f170", + "number": "SYN-PIN", + "name": "pin", + "occurrences": 2, + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "relations": [ + { + "id": "use:0d7ede34ba96d616", + "parent": "part:5d9da29581d2d325", + "child": "part:77a3b981f71010c8", + "name": "bracket_left", + "source_refs": [ + "#40" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:34ffa9f92f4f65ec", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_lower", + "source_refs": [ + "#42" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:a256cc1d7b461e7f", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_upper", + "source_refs": [ + "#41" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "unattached": [], + "roots": [ + "part:5d9da29581d2d325" + ], + "diagnostics": [] + }, + "engineering": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix synthetic", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:937ec9ad03852a64", + "name": "Component Count", + "category": "Assembly Metadata", + "kind": "user", + "value": { + "type": "integer", + "value": 3 + }, + "part": "synthetic_assembly", + "unmapped": [], + "source_refs": [ + "#50", + "#53", + "#52", + "#51" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "semantic": { + "features": [], + "datums": [], + "datum_systems": [], + "dimensions": [], + "tolerances": [], + "notes": [], + "other": [] + }, + "presentation": { + "annotations": [], + "views": [] + }, + "unknown": [], + "diagnostics": [] + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "pmi_association": "DOCUMENT_SCOPE_NOT_AUTOMATIC_PART_QUALIFICATION", + "engineering_verdict": "Z", + "production_qualification": "Z", + "procurement_eligible": false, + "checkout_enabled": false, + "payment_effects": 0, + "supplier_effects": 0, + "source_ref_scheme": "STEP_P21_ENTITY_NUMBER_IN_ORIGINAL_FILE", + "parser_stderr": { + "extract": "", + "product": "" + } + }, + "reason": "PMIX_EXTRACTED_REVIEW_REQUIRED", + "evidence_scope": "EXTRACTED_NOT_ENGINEERING_PROOF", + "engineering_verdict": "Z", + "raw_file_retained": false, + "sent_to_suppliers": false + } + }, + { + "method": "POST", + "url": "http://127.0.0.1:18897/api/industrial/intake", + "status": 200, + "request": { + "filename": "assembly_properties.stp", + "claim": { + "demo": true, + "buyer_id": "DEMO-BUYER-NEW", + "requirements": { + "part_no": "SLS-BRACKET-REV-C", + "spec_revision": "REV-C", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "process": "SLS", + "material": "PA12" + }, + "budget_cents": 78000, + "own_shipping_cents": 2500, + "due_date": "2026-12-10", + "taxes_cents": 0, + "payment_fees_cents": 0, + "discovery_consent": false, + "fixture_case": "coalition", + "parts_confirmed": true, + "drawing_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "selected_parts": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "quantity": 1 + } + ] + }, + "uploaded_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320" + }, + "response": { + "schema": "legion.demand-first.v1", + "intake": { + "schema": "legion.cad-bom-intake.v1", + "filename": "assembly_properties.stp", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "format": "STEP", + "extraction": "T", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "engineering_evidence": { + "schema": "legion.pmix-engineering.v1", + "parser": "pmix 0.16.1", + "parser_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "assembly": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "deg", + "declared_length": "mm", + "declared_angle": "rad" + }, + "parts": [ + { + "id": "part:5d9da29581d2d325", + "number": "SYN-ASM", + "name": "synthetic_assembly", + "occurrences": 0, + "source_refs": [ + "#12", + "#11", + "#10" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:77a3b981f71010c8", + "number": "SYN-BRACKET", + "name": "bracket", + "occurrences": 1, + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:e167b8c772a2f170", + "number": "SYN-PIN", + "name": "pin", + "occurrences": 2, + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "relations": [ + { + "id": "use:0d7ede34ba96d616", + "parent": "part:5d9da29581d2d325", + "child": "part:77a3b981f71010c8", + "name": "bracket_left", + "source_refs": [ + "#40" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:34ffa9f92f4f65ec", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_lower", + "source_refs": [ + "#42" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:a256cc1d7b461e7f", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_upper", + "source_refs": [ + "#41" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "unattached": [], + "roots": [ + "part:5d9da29581d2d325" + ], + "diagnostics": [] + }, + "engineering": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix synthetic", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:937ec9ad03852a64", + "name": "Component Count", + "category": "Assembly Metadata", + "kind": "user", + "value": { + "type": "integer", + "value": 3 + }, + "part": "synthetic_assembly", + "unmapped": [], + "source_refs": [ + "#50", + "#53", + "#52", + "#51" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "semantic": { + "features": [], + "datums": [], + "datum_systems": [], + "dimensions": [], + "tolerances": [], + "notes": [], + "other": [] + }, + "presentation": { + "annotations": [], + "views": [] + }, + "unknown": [], + "diagnostics": [] + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "pmi_association": "DOCUMENT_SCOPE_NOT_AUTOMATIC_PART_QUALIFICATION", + "engineering_verdict": "Z", + "production_qualification": "Z", + "procurement_eligible": false, + "checkout_enabled": false, + "payment_effects": 0, + "supplier_effects": 0, + "source_ref_scheme": "STEP_P21_ENTITY_NUMBER_IN_ORIGINAL_FILE", + "parser_stderr": { + "extract": "", + "product": "" + } + }, + "reason": "PMIX_EXTRACTED_REVIEW_REQUIRED", + "evidence_scope": "EXTRACTED_NOT_ENGINEERING_PROOF", + "engineering_verdict": "Z", + "raw_file_retained": false, + "sent_to_suppliers": false + }, + "lines": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "quantity": 1, + "engineering_digest": "7483df5459e287db8dde210185873c499463702f0b8de4e9f871623ae8056a07", + "engineering_compatibility": { + "verdict": "Z", + "why": "ENGINEERING_FIELDS_MISSING", + "fields": [ + "revision", + "process", + "engineering_digest" + ] + }, + "status": "HOLD_ENGINEERING_PROOF_REQUIRED", + "specifications": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "engineering_evidence": { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + "candidate_sources": [], + "supplier_quote_verified": false, + "paypal_payment_authorized": false, + "execution_gate": "Z" + } + ], + "overall": "HOLD_ENGINEERING_PROOF_REQUIRED", + "parts_confirmed": true, + "engineering_digest": "7483df5459e287db8dde210185873c499463702f0b8de4e9f871623ae8056a07", + "engineering_verdict": "Z", + "production_qualification": "Z", + "live_execution_gate": "Z", + "new_paypal_captures": 0, + "supplier_requests_sent": 0, + "customer_call_to_action": "INDEPENDENT_ENGINEERING_REVIEW_REQUIRED", + "existing_historic_paypal_payments_reused": false, + "evidence_sha256": "feb9d79c27e0009fe4a2a0d6272d64fba66716c236ade36fac3ea03f30f4dbf2" + } + } +] \ No newline at end of file diff --git a/cad_evidence/wo-cad-003/browser/api-390.json b/cad_evidence/wo-cad-003/browser/api-390.json new file mode 100644 index 0000000..524289b --- /dev/null +++ b/cad_evidence/wo-cad-003/browser/api-390.json @@ -0,0 +1,1968 @@ +[ + { + "method": "POST", + "url": "http://127.0.0.1:18897/api/industrial/engineering-extract", + "status": 200, + "request": { + "filename": "assembly_properties.stp", + "claim": { + "demo": true, + "buyer_id": "DEMO-BUYER-NEW", + "requirements": { + "part_no": "SLS-BRACKET-REV-C", + "spec_revision": "REV-C", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "process": "SLS", + "material": "PA12" + }, + "budget_cents": 78000, + "own_shipping_cents": 2500, + "due_date": "2026-12-10", + "taxes_cents": 0, + "payment_fees_cents": 0, + "discovery_consent": false, + "fixture_case": "coalition" + }, + "uploaded_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320" + }, + "response": { + "schema": "legion.cad-bom-intake.v1", + "filename": "assembly_properties.stp", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "format": "STEP", + "extraction": "T", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "engineering_evidence": { + "schema": "legion.pmix-engineering.v1", + "parser": "pmix 0.16.1", + "parser_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "assembly": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "deg", + "declared_length": "mm", + "declared_angle": "rad" + }, + "parts": [ + { + "id": "part:5d9da29581d2d325", + "number": "SYN-ASM", + "name": "synthetic_assembly", + "occurrences": 0, + "source_refs": [ + "#12", + "#11", + "#10" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:77a3b981f71010c8", + "number": "SYN-BRACKET", + "name": "bracket", + "occurrences": 1, + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:e167b8c772a2f170", + "number": "SYN-PIN", + "name": "pin", + "occurrences": 2, + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "relations": [ + { + "id": "use:0d7ede34ba96d616", + "parent": "part:5d9da29581d2d325", + "child": "part:77a3b981f71010c8", + "name": "bracket_left", + "source_refs": [ + "#40" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:34ffa9f92f4f65ec", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_lower", + "source_refs": [ + "#42" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:a256cc1d7b461e7f", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_upper", + "source_refs": [ + "#41" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "unattached": [], + "roots": [ + "part:5d9da29581d2d325" + ], + "diagnostics": [] + }, + "engineering": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix synthetic", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:937ec9ad03852a64", + "name": "Component Count", + "category": "Assembly Metadata", + "kind": "user", + "value": { + "type": "integer", + "value": 3 + }, + "part": "synthetic_assembly", + "unmapped": [], + "source_refs": [ + "#50", + "#53", + "#52", + "#51" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "semantic": { + "features": [], + "datums": [], + "datum_systems": [], + "dimensions": [], + "tolerances": [], + "notes": [], + "other": [] + }, + "presentation": { + "annotations": [], + "views": [] + }, + "unknown": [], + "diagnostics": [] + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "pmi_association": "DOCUMENT_SCOPE_NOT_AUTOMATIC_PART_QUALIFICATION", + "engineering_verdict": "Z", + "production_qualification": "Z", + "procurement_eligible": false, + "checkout_enabled": false, + "payment_effects": 0, + "supplier_effects": 0, + "source_ref_scheme": "STEP_P21_ENTITY_NUMBER_IN_ORIGINAL_FILE", + "parser_stderr": { + "extract": "", + "product": "" + } + }, + "reason": "PMIX_EXTRACTED_REVIEW_REQUIRED", + "evidence_scope": "EXTRACTED_NOT_ENGINEERING_PROOF", + "engineering_verdict": "Z", + "raw_file_retained": false, + "sent_to_suppliers": false + } + }, + { + "method": "POST", + "url": "http://127.0.0.1:18897/api/industrial/intake", + "status": 200, + "request": { + "filename": "assembly_properties.stp", + "claim": { + "demo": true, + "buyer_id": "DEMO-BUYER-NEW", + "requirements": { + "part_no": "SLS-BRACKET-REV-C", + "spec_revision": "REV-C", + "spec_digest": "45fb81e09beb1bff53d8519b84cdbed21291af89a197a41f760471fd54248182", + "process": "SLS", + "material": "PA12" + }, + "budget_cents": 78000, + "own_shipping_cents": 2500, + "due_date": "2026-12-10", + "taxes_cents": 0, + "payment_fees_cents": 0, + "discovery_consent": false, + "fixture_case": "coalition", + "parts_confirmed": true, + "drawing_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "selected_parts": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "quantity": 1 + } + ] + }, + "uploaded_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320" + }, + "response": { + "schema": "legion.demand-first.v1", + "intake": { + "schema": "legion.cad-bom-intake.v1", + "filename": "assembly_properties.stp", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "format": "STEP", + "extraction": "T", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "engineering_evidence": { + "schema": "legion.pmix-engineering.v1", + "parser": "pmix 0.16.1", + "parser_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "bom": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + { + "part_id": "part:e167b8c772a2f170", + "part_no": "SYN-PIN", + "description": "pin", + "quantity": 2, + "revision": null, + "material": "SYN-STEEL-4", + "process": null, + "fields": { + "part_no": { + "value": "SYN-PIN", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#32", + "#31", + "#30" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-STEEL-4", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#70", + "#71", + "#72", + "#73", + "#80", + "#81", + "#82", + "#83" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 2, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#30", + "#31", + "#32", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + } + ], + "assembly": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "deg", + "declared_length": "mm", + "declared_angle": "rad" + }, + "parts": [ + { + "id": "part:5d9da29581d2d325", + "number": "SYN-ASM", + "name": "synthetic_assembly", + "occurrences": 0, + "source_refs": [ + "#12", + "#11", + "#10" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:77a3b981f71010c8", + "number": "SYN-BRACKET", + "name": "bracket", + "occurrences": 1, + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "part:e167b8c772a2f170", + "number": "SYN-PIN", + "name": "pin", + "occurrences": 2, + "source_refs": [ + "#32", + "#31", + "#30" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "relations": [ + { + "id": "use:0d7ede34ba96d616", + "parent": "part:5d9da29581d2d325", + "child": "part:77a3b981f71010c8", + "name": "bracket_left", + "source_refs": [ + "#40" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:34ffa9f92f4f65ec", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_lower", + "source_refs": [ + "#42" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "use:a256cc1d7b461e7f", + "parent": "part:5d9da29581d2d325", + "child": "part:e167b8c772a2f170", + "name": "pin_upper", + "source_refs": [ + "#41" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "unattached": [], + "roots": [ + "part:5d9da29581d2d325" + ], + "diagnostics": [] + }, + "engineering": { + "schema_version": 1, + "source": { + "file_name": "input.stp", + "format": "STEP", + "schema": "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF", + "writer": "pmix synthetic", + "time_stamp": "2026-09-09T00:00:00" + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "properties": [ + { + "id": "prop:624e38676d973cba", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#84", + "#87", + "#86", + "#85" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:937ec9ad03852a64", + "name": "Component Count", + "category": "Assembly Metadata", + "kind": "user", + "value": { + "type": "integer", + "value": 3 + }, + "part": "synthetic_assembly", + "unmapped": [], + "source_refs": [ + "#50", + "#53", + "#52", + "#51" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:9dbd22f8d6ab5235", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 2.75 + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#74", + "#77", + "#76", + "#75" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_lower.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_lower", + "unmapped": [], + "source_refs": [ + "#80", + "#83", + "#82", + "#81" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:pin_upper.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-STEEL-4" + }, + "part": "pin_upper", + "unmapped": [], + "source_refs": [ + "#70", + "#73", + "#72", + "#71" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "semantic": { + "features": [], + "datums": [], + "datum_systems": [], + "dimensions": [], + "tolerances": [], + "notes": [], + "other": [] + }, + "presentation": { + "annotations": [], + "views": [] + }, + "unknown": [], + "diagnostics": [] + }, + "units": { + "length": "mm", + "angle": "rad" + }, + "pmi_association": "DOCUMENT_SCOPE_NOT_AUTOMATIC_PART_QUALIFICATION", + "engineering_verdict": "Z", + "production_qualification": "Z", + "procurement_eligible": false, + "checkout_enabled": false, + "payment_effects": 0, + "supplier_effects": 0, + "source_ref_scheme": "STEP_P21_ENTITY_NUMBER_IN_ORIGINAL_FILE", + "parser_stderr": { + "extract": "", + "product": "" + } + }, + "reason": "PMIX_EXTRACTED_REVIEW_REQUIRED", + "evidence_scope": "EXTRACTED_NOT_ENGINEERING_PROOF", + "engineering_verdict": "Z", + "raw_file_retained": false, + "sent_to_suppliers": false + }, + "lines": [ + { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "quantity": 1, + "engineering_digest": "7483df5459e287db8dde210185873c499463702f0b8de4e9f871623ae8056a07", + "engineering_compatibility": { + "verdict": "Z", + "why": "ENGINEERING_FIELDS_MISSING", + "fields": [ + "revision", + "process", + "engineering_digest" + ] + }, + "status": "HOLD_ENGINEERING_PROOF_REQUIRED", + "specifications": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "engineering_evidence": { + "part_id": "part:77a3b981f71010c8", + "part_no": "SYN-BRACKET", + "description": "bracket", + "quantity": 1, + "revision": null, + "material": "SYN-ALLOY-17", + "process": null, + "fields": { + "part_no": { + "value": "SYN-BRACKET", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#22", + "#21", + "#20" + ] + }, + "revision": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "material": { + "value": "SYN-ALLOY-17", + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#60", + "#61", + "#62", + "#63" + ] + }, + "process": { + "value": null, + "extraction": "Z", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [] + }, + "quantity": { + "value": 1, + "extraction": "T", + "engineering_verdict": "Z", + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "source_refs": [ + "#20", + "#21", + "#22", + "#40", + "#41", + "#42" + ] + } + }, + "properties": [ + { + "id": "prop:b199248d31684323", + "name": "Mass (g)", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "number", + "value": 41.5 + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#64", + "#67", + "#66", + "#65" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + }, + { + "id": "prop:bracket_left.Material", + "name": "Material", + "category": "Component Metadata", + "kind": "user", + "value": { + "type": "text", + "value": "SYN-ALLOY-17" + }, + "part": "bracket_left", + "unmapped": [], + "source_refs": [ + "#60", + "#63", + "#62", + "#61" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "engineering_verdict": "Z" + } + ], + "source_refs": [ + "#22", + "#21", + "#20" + ], + "file_sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "origin": "PMIX_STEP_PRODUCT", + "verification": "EXTRACTED_NOT_ENGINEERING_PROVED", + "engineering_verdict": "Z", + "procurement_eligible": false + }, + "candidate_sources": [], + "supplier_quote_verified": false, + "paypal_payment_authorized": false, + "execution_gate": "Z" + } + ], + "overall": "HOLD_ENGINEERING_PROOF_REQUIRED", + "parts_confirmed": true, + "engineering_digest": "7483df5459e287db8dde210185873c499463702f0b8de4e9f871623ae8056a07", + "engineering_verdict": "Z", + "production_qualification": "Z", + "live_execution_gate": "Z", + "new_paypal_captures": 0, + "supplier_requests_sent": 0, + "customer_call_to_action": "INDEPENDENT_ENGINEERING_REVIEW_REQUIRED", + "existing_historic_paypal_payments_reused": false, + "evidence_sha256": "feb9d79c27e0009fe4a2a0d6272d64fba66716c236ade36fac3ea03f30f4dbf2" + } + } +] \ No newline at end of file diff --git a/cad_evidence/wo-cad-003/browser/browser-server.log b/cad_evidence/wo-cad-003/browser/browser-server.log new file mode 100644 index 0000000..e69de29 diff --git a/cad_evidence/wo-cad-003/browser/drawing-1440.png b/cad_evidence/wo-cad-003/browser/drawing-1440.png new file mode 100644 index 0000000..a5e287a Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/drawing-1440.png differ diff --git a/cad_evidence/wo-cad-003/browser/drawing-390.png b/cad_evidence/wo-cad-003/browser/drawing-390.png new file mode 100644 index 0000000..06f78ac Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/drawing-390.png differ diff --git a/cad_evidence/wo-cad-003/browser/parts-1440.png b/cad_evidence/wo-cad-003/browser/parts-1440.png new file mode 100644 index 0000000..fcba9cc Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/parts-1440.png differ diff --git a/cad_evidence/wo-cad-003/browser/parts-390.png b/cad_evidence/wo-cad-003/browser/parts-390.png new file mode 100644 index 0000000..9e55403 Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/parts-390.png differ diff --git a/cad_evidence/wo-cad-003/browser/paypal-1440.png b/cad_evidence/wo-cad-003/browser/paypal-1440.png new file mode 100644 index 0000000..2035978 Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/paypal-1440.png differ diff --git a/cad_evidence/wo-cad-003/browser/paypal-390.png b/cad_evidence/wo-cad-003/browser/paypal-390.png new file mode 100644 index 0000000..5321553 Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/paypal-390.png differ diff --git a/cad_evidence/wo-cad-003/browser/review-1440.png b/cad_evidence/wo-cad-003/browser/review-1440.png new file mode 100644 index 0000000..00e2c99 Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/review-1440.png differ diff --git a/cad_evidence/wo-cad-003/browser/review-390.png b/cad_evidence/wo-cad-003/browser/review-390.png new file mode 100644 index 0000000..4aa43bb Binary files /dev/null and b/cad_evidence/wo-cad-003/browser/review-390.png differ diff --git a/cad_evidence/wo-cad-003/linux.log b/cad_evidence/wo-cad-003/linux.log new file mode 100644 index 0000000..1ce4d5e --- /dev/null +++ b/cad_evidence/wo-cad-003/linux.log @@ -0,0 +1,245 @@ ++ git rev-parse HEAD +a2f669c14e7820e7def8b0ce92b0b9f5c69bc912 ++ python3 --version +Python 3.12.3 ++ bwrap --version +bubblewrap 0.9.0 ++ prlimit --version +prlimit from util-linux 2.39.3 ++ python3 -B scripts/install_pmix.py vendor/pmix/PAYPAL_CAD_001_RELEASE_20261110.zip +Verified pmix 0.16.1 and original experiment installed; no binary executed. ++ PYTHONPATH=tests ++ python3 -B -m unittest -v test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation +test_successful_extraction_and_bom_reconciliation (test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation) ... ok + +---------------------------------------------------------------------- +Ran 1 test in 0.114s + +OK ++ cd external/cad-experiment ++ python3 run_benchmark.py +01/26 nist_ctc_01_asme1_ap242-e1.stp base=Z PMI= 61 parts= 1 pmix=0/0 +02/26 nist_ctc_02_asme1_ap242-e2.stp base=Z PMI= 111 parts= 1 pmix=0/0 +03/26 nist_ctc_03_asme1_ap242-e2.stp base=Z PMI= 69 parts= 1 pmix=0/0 +04/26 nist_ctc_04_asme1_ap242-e2.stp base=Z PMI= 235 parts= 1 pmix=0/0 +05/26 nist_ctc_05_asme1_ap242-e1.stp base=Z PMI= 45 parts= 1 pmix=0/0 +06/26 nist_ftc_06_asme1_ap242-e2.stp base=Z PMI= 215 parts= 1 pmix=0/0 +07/26 nist_ftc_07_asme1_ap242-e2.stp base=Z PMI= 221 parts= 1 pmix=0/0 +08/26 nist_ftc_08_asme1_ap242-e2.stp base=REJECTED PMI= 196 parts= 1 pmix=0/0 +09/26 nist_ftc_08_asme1_ap242-e4-tg.stp base=REJECTED PMI= 21 parts= 1 pmix=0/0 +10/26 nist_ftc_09_asme1_ap242-e1.stp base=REJECTED PMI= 235 parts= 4 pmix=0/0 +11/26 nist_ftc_10_asme1_ap242-e2.stp base=Z PMI= 261 parts= 1 pmix=0/0 +12/26 nist_ftc_11_asme1_ap242-e3.stp base=Z PMI= 30 parts= 1 pmix=0/0 +13/26 nist_stc_06_asme1_ap242-e3.stp base=Z PMI= 160 parts= 1 pmix=0/0 +14/26 nist_stc_07_asme1_ap242-e3.stp base=Z PMI= 228 parts= 1 pmix=0/0 +15/26 nist_stc_08_asme1_ap242-e3.stp base=REJECTED PMI= 179 parts= 1 pmix=0/0 +16/26 nist_stc_09_asme1_ap242-e4.stp base=Z PMI= 201 parts= 1 pmix=0/0 +17/26 nist_stc_10_asme1_ap242-e2.stp base=REJECTED PMI= 253 parts= 1 pmix=0/0 +18/26 nist_ctc_04_asme1_ap242-e1.stp base=Z PMI= 235 parts= 1 pmix=0/0 +19/26 nist_ftc_08_asme1_ap242-e1-tg.stp base=REJECTED PMI= 21 parts= 1 pmix=0/0 +20/26 nist_ftc_11_asme1_ap242-e2.stp base=Z PMI= 30 parts= 1 pmix=0/0 +21/26 assembly_two_parts.stp base=Z PMI= 0 parts= 3 pmix=0/0 +22/26 assembly_properties.stp base=Z PMI= 0 parts= 3 pmix=0/0 +23/26 dimension_basics.stp base=Z PMI= 8 parts= 1 pmix=0/0 +24/26 plate_one_hole.stp base=Z PMI= 0 parts= 1 pmix=0/0 +25/26 property_basics.stp base=Z PMI= 2 parts= 1 pmix=0/0 +26/26 tolerance_datum_basics.stp base=Z PMI= 16 parts= 1 pmix=0/0 +SUMMARY { + "experiment": "WO-CAD-001", + "sample_count": 26, + "nist_count": 20, + "synthetic_count": 6, + "pmix_version": "0.16.1", + "pmix_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "pmix_parse_pass": 26, + "pmix_product_pass": 26, + "baseline_extracted": 0, + "baseline_unknown": 20, + "baseline_rejected": 6, + "pmix_dimensions": 287, + "pmix_gdt_tolerances": 380, + "pmix_datums": 127, + "pmix_parts": 33, + "pmix_relations": 5, + "pmix_unknown_entities": 17, + "pmix_diagnostics": 20, + "pmix_extract_p50_ms": 85.36, + "pmix_extract_p95_ms": 141.25, + "checks_pass": 22, + "checks_total": 22, + "evidence_scope": "DIRECT LOCAL BIN+NIST CORPUS TEST; not independent manufacturing validation" +} ++ python3 cad_adapter_prototype.py +two_parts {'SYN-BLOCK': 1, 'SYN-PLATE': 1} gate Z checkout False +repeated_part {'SYN-BRACKET': 1, 'SYN-PIN': 2} gate Z checkout False +ADAPTER_CONTRACT_TESTS 7 / 7 ++ python3 -B scripts/build_and_serve.py --evidence demo_evidence --no-serve +{"run_id": "run-1", "events": 75, "figures": 88, "judge": "PASS_COMPLETED", "judge_hashes_match": true, "paypal_bound": false} +{"run_id": "run-2", "events": 75, "figures": 88, "judge": "PASS_COMPLETED", "judge_hashes_match": true, "paypal_bound": false} +{"contribution": 0, "fees": 1975, "upper_bound": -1975, "break_even_price": 10310, "self_tests": "PASS"} +{ + "audit": { + "run-1": { + "coverage": 100.0, + "prov": true, + "mission": "SIMULATED_MISSION_VERIFIED", + "claims": true + }, + "run-2": { + "coverage": 100.0, + "prov": true, + "mission": "SIMULATED_MISSION_VERIFIED", + "claims": true + } + }, + "negatives": { + "attempted": 15, + "passed": 15, + "blocked": [], + "failed": [], + "harness": { + "forbidden_effects": 0, + "passed": 25, + "total": 25 + } + } +} + +{"runs": ["run-1", "run-2"], "counted": "run-2", "audit_all_pass": true} ++ python3 -B -m unittest discover -s tests -v +test_direct_retail_without_discovery_consent (test_demand_first.BuyerEntryAlternatives.test_direct_retail_without_discovery_consent) ... ok +test_existing_supplier_batch_80_plus_20 (test_demand_first.BuyerEntryAlternatives.test_existing_supplier_batch_80_plus_20) ... ok +test_no_live_direct_unauthorized_quote (test_demand_first.BuyerEntryAlternatives.test_no_live_direct_unauthorized_quote) ... ok +test_retail_more_expensive_than_coalition (test_demand_first.BuyerEntryAlternatives.test_retail_more_expensive_than_coalition) ... ok +test_csv_quantity_aggregation (test_demand_first.CADIntake.test_csv_quantity_aggregation) ... ok +test_drawing_digest_stable (test_demand_first.CADIntake.test_drawing_digest_stable) ... ok +test_dxf_blocks_not_placements (test_demand_first.CADIntake.test_dxf_blocks_not_placements) ... ok +test_dxf_multiple_components (test_demand_first.CADIntake.test_dxf_multiple_components) ... ok +test_empty_dxf_never_invents_bom (test_demand_first.CADIntake.test_empty_dxf_never_invents_bom) ... ok +test_json_bom_20 (test_demand_first.CADIntake.test_json_bom_20) ... ok +test_real_dxf_insert_count (test_demand_first.CADIntake.test_real_dxf_insert_count) ... ok +test_reject_bad_quantity (test_demand_first.CADIntake.test_reject_bad_quantity) ... ok +test_reject_external_xml_entity_no_expansion (test_demand_first.CADIntake.test_reject_external_xml_entity_no_expansion) ... ok +test_reject_oversized_file (test_demand_first.CADIntake.test_reject_oversized_file) ... ok +test_reject_path_traversal (test_demand_first.CADIntake.test_reject_path_traversal) ... ok +test_step_never_claims_bom (test_demand_first.CADIntake.test_step_never_claims_bom) ... ok +test_svg_explicit_annotations (test_demand_first.CADIntake.test_svg_explicit_annotations) ... ok +test_amounts_are_cents_and_exact (test_demand_first.DemandFirst.test_amounts_are_cents_and_exact) ... ok +test_budget_cap_prevents_confirmation (test_demand_first.DemandFirst.test_budget_cap_prevents_confirmation) ... ok +test_fixture_status_never_real_authority (test_demand_first.DemandFirst.test_fixture_status_never_real_authority) ... ok +test_material_mismatch_cannot_group (test_demand_first.DemandFirst.test_material_mismatch_cannot_group) ... ok +test_missing_payment_fee_holds (test_demand_first.DemandFirst.test_missing_payment_fee_holds) ... ok +test_missing_taxes_holds (test_demand_first.DemandFirst.test_missing_taxes_holds) ... ok +test_multi_component_bom_cannot_complete (test_demand_first.DemandFirst.test_multi_component_bom_cannot_complete) ... ok +test_optin_is_explicit_and_revocable (test_demand_first.DemandFirst.test_optin_is_explicit_and_revocable) ... ok +test_part_number_missing_in_bom_rejected (test_demand_first.DemandFirst.test_part_number_missing_in_bom_rejected) ... ok +test_positive_buyer_intake_to_demand_pool (test_demand_first.DemandFirst.test_positive_buyer_intake_to_demand_pool) ... ok +test_real_claim_cannot_use_demo_peers (test_demand_first.DemandFirst.test_real_claim_cannot_use_demo_peers) ... ok +test_real_paypal_cannot_be_bound_to_new_contract (test_demand_first.DemandFirst.test_real_paypal_cannot_be_bound_to_new_contract) ... ok +test_revision_mismatch_cannot_group (test_demand_first.DemandFirst.test_revision_mismatch_cannot_group) ... ok +test_supplier_listing_never_accepted_quote (test_demand_first.DemandFirst.test_supplier_listing_never_accepted_quote) ... ok +test_unknown_shipping_holds (test_demand_first.DemandFirst.test_unknown_shipping_holds) ... ok +test_unsupported_geometry_no_fabricated_bom (test_demand_first.DemandFirst.test_unsupported_geometry_no_fabricated_bom) ... ok +test_cross_contract_idempotency_fails (test_demand_first.DemoIntent.test_cross_contract_idempotency_fails) ... ok +test_customer_can_confirm_demo_review (test_demand_first.DemoIntent.test_customer_can_confirm_demo_review) ... ok +test_hash_mutant_fails (test_demand_first.DemoIntent.test_hash_mutant_fails) ... ok +test_idempotent_retry (test_demand_first.DemoIntent.test_idempotent_retry) ... ok +test_price_changed_fails (test_demand_first.DemoIntent.test_price_changed_fails) ... ok +test_requires_click (test_demand_first.DemoIntent.test_requires_click) ... ok +test_wrong_buyer_fails (test_demand_first.DemoIntent.test_wrong_buyer_fails) ... ok +test_100_metadata_preflight_tasks (test_demand_first.Dispatch.test_100_metadata_preflight_tasks) ... ok +test_actual_100_preflight_receipts_no_agents (test_demand_first.Dispatch.test_actual_100_preflight_receipts_no_agents) ... ok +test_bad_spec_F (test_demand_first.ProviderContracts.test_bad_spec_F) ... ok +test_capacity_F (test_demand_first.ProviderContracts.test_capacity_F) ... ok +test_external_quote_rejected_on_self_attestation (test_demand_first.ProviderContracts.test_external_quote_rejected_on_self_attestation) ... ok +test_moq_F (test_demand_first.ProviderContracts.test_moq_F) ... ok +test_quote_can_earn_T_from_independent_verifier (test_demand_first.ProviderContracts.test_quote_can_earn_T_from_independent_verifier) ... ok +test_unknown_shipping_Z (test_demand_first.ProviderContracts.test_unknown_shipping_Z) ... ok +test_unusable_expiry_F (test_demand_first.ProviderContracts.test_unusable_expiry_F) ... ok +test_wrong_destination_F (test_demand_first.ProviderContracts.test_wrong_destination_F) ... ok +test_1_missing_Z (test_demand_first.RealAdmissionContract.test_1_missing_Z) ... ok +test_changed_epoch_F (test_demand_first.RealAdmissionContract.test_changed_epoch_F) ... ok +test_earns_T_only_with_all_ten_independently_accepted_receipts (test_demand_first.RealAdmissionContract.test_earns_T_only_with_all_ten_independently_accepted_receipts) ... ok +test_no_paypal_call_for_even_T (test_demand_first.RealAdmissionContract.test_no_paypal_call_for_even_T) ... ok +test_no_verifier_never_T (test_demand_first.RealAdmissionContract.test_no_verifier_never_T) ... ok +test_one_independently_denied_F (test_demand_first.RealAdmissionContract.test_one_independently_denied_F) ... ok +test_price_receipt_mismatch_F (test_demand_first.RealAdmissionContract.test_price_receipt_mismatch_F) ... ok +test_revoked_F (test_demand_first.RealAdmissionContract.test_revoked_F) ... ok +test_verifier_unavailable_Z (test_demand_first.RealAdmissionContract.test_verifier_unavailable_Z) ... ok +test_wrong_buyer_F (test_demand_first.RealAdmissionContract.test_wrong_buyer_F) ... ok +test_wrong_evidence_F (test_demand_first.RealAdmissionContract.test_wrong_evidence_F) ... ok +test_demo_opt_in_is_not_live_authority (test_industrial.Demand.test_demo_opt_in_is_not_live_authority) ... ok +test_duplicate_buyer_is_denied (test_industrial.Demand.test_duplicate_buyer_is_denied) ... ok +test_invalid_qty_budget_fails (test_industrial.Demand.test_invalid_qty_budget_fails) ... ok +test_material_process_or_hash_prevents_merge (test_industrial.Demand.test_material_process_or_hash_prevents_merge) ... ok +test_missing_fields_hold (test_industrial.Demand.test_missing_fields_hold) ... ok +test_real_unverified_optin_unknown (test_industrial.Demand.test_real_unverified_optin_unknown) ... ok +test_revocation_and_consent_scope (test_industrial.Demand.test_revocation_and_consent_scope) ... ok +test_self_attested_real_optin_does_not_pass (test_industrial.Demand.test_self_attested_real_optin_does_not_pass) ... ok +test_spec_revision_prevents_superficial_merge (test_industrial.Demand.test_spec_revision_prevents_superficial_merge) ... ok +test_changed_revision_no_false_coalition (test_industrial.EndToEnd.test_changed_revision_no_false_coalition) ... ok +test_coalition_route_numerical_on_demo_fixture (test_industrial.EndToEnd.test_coalition_route_numerical_on_demo_fixture) ... ok +test_direct_route_must_win_when_cheaper (test_industrial.EndToEnd.test_direct_route_must_win_when_cheaper) ... ok +test_missing_case_rejected (test_industrial.EndToEnd.test_missing_case_rejected) ... ok +test_no_z_to_t_and_no_payment_transfer (test_industrial.EndToEnd.test_no_z_to_t_and_no_payment_transfer) ... ok +test_passport_deterministic (test_industrial.EndToEnd.test_passport_deterministic) ... ok +test_rfq_excludes_private_buyer_identity_or_cad (test_industrial.EndToEnd.test_rfq_excludes_private_buyer_identity_or_cad) ... ok +test_claimed_proof_without_independent_verifier_is_Z (test_industrial.Proofs.test_claimed_proof_without_independent_verifier_is_Z) ... ok +test_external_rejection_cannot_be_faked (test_industrial.Proofs.test_external_rejection_cannot_be_faked) ... ok +test_forged_request_digest_F (test_industrial.Proofs.test_forged_request_digest_F) ... ok +test_no_ztl_receipt_is_Z (test_industrial.Proofs.test_no_ztl_receipt_is_Z) ... ok +test_stubbed_positive_isolated_contract_only (test_industrial.Proofs.test_stubbed_positive_isolated_contract_only) ... ok +test_wrong_verifier_pin_F (test_industrial.Proofs.test_wrong_verifier_pin_F) ... ok +test_capacity_and_moq_negative (test_industrial.Quotations.test_capacity_and_moq_negative) ... ok +test_due_date_critical (test_industrial.Quotations.test_due_date_critical) ... ok +test_fixture_only_not_actual_supplier_quote (test_industrial.Quotations.test_fixture_only_not_actual_supplier_quote) ... ok +test_missing_quote_fields_do_not_pass (test_industrial.Quotations.test_missing_quote_fields_do_not_pass) ... ok +test_nonbinding_budget_blocks (test_industrial.Quotations.test_nonbinding_budget_blocks) ... ok +test_quotes_research_only_when_unconfirmed (test_industrial.Quotations.test_quotes_research_only_when_unconfirmed) ... ok +test_self_attested_supplier_quote_does_not_pass (test_industrial.Quotations.test_self_attested_supplier_quote_does_not_pass) ... ok +test_wrong_revision_digest_material_rejected (test_industrial.Quotations.test_wrong_revision_digest_material_rejected) ... ok +test_87_discovery_entries_not_quoted (test_industrial.Registry.test_87_discovery_entries_not_quoted) ... ok +test_hp_48_member_index_exact_and_no_double_claim (test_industrial.Registry.test_hp_48_member_index_exact_and_no_double_claim) ... ok +test_no_filename_traversal (test_industrial.Registry.test_no_filename_traversal) ... ok +test_shortlist_unknown_capability (test_industrial.Registry.test_shortlist_unknown_capability) ... ok +test_bad_base64_rejected (test_pmix_integration.EngineeringHTTP.test_bad_base64_rejected) ... ok +test_cross_origin_denied (test_pmix_integration.EngineeringHTTP.test_cross_origin_denied) ... ok +test_endpoint_real_extraction_no_session (test_pmix_integration.EngineeringHTTP.test_endpoint_real_extraction_no_session) ... ok +test_legacy_csv_endpoint_preserved (test_pmix_integration.EngineeringHTTP.test_legacy_csv_endpoint_preserved) ... ok +test_all_26_reference_steps_parse_in_sandbox (test_pmix_integration.PmixIntegration.test_all_26_reference_steps_parse_in_sandbox) ... PMIX_REFERENCE_AUDIT [{"case": "01_nist_ctc_01_asme1_ap242-e1", "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", "critical_fields_with_provenance": 23, "dimensions": 12, "gdt": 6, "datums": 3, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "02_nist_ctc_02_asme1_ap242-e2", "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", "critical_fields_with_provenance": 41, "dimensions": 7, "gdt": 22, "datums": 10, "unsupported": 0, "diagnostics": 1, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "03_nist_ctc_03_asme1_ap242-e2", "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", "critical_fields_with_provenance": 31, "dimensions": 10, "gdt": 13, "datums": 6, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "04_nist_ctc_04_asme1_ap242-e2", "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", "critical_fields_with_provenance": 28, "dimensions": 10, "gdt": 7, "datums": 8, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "05_nist_ctc_05_asme1_ap242-e1", "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", "critical_fields_with_provenance": 23, "dimensions": 6, "gdt": 10, "datums": 4, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "06_nist_ftc_06_asme1_ap242-e2", "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", "critical_fields_with_provenance": 64, "dimensions": 24, "gdt": 28, "datums": 10, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "07_nist_ftc_07_asme1_ap242-e2", "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", "critical_fields_with_provenance": 51, "dimensions": 17, "gdt": 27, "datums": 5, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "08_nist_ftc_08_asme1_ap242-e2", "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", "critical_fields_with_provenance": 56, "dimensions": 10, "gdt": 33, "datums": 11, "unsupported": 0, "diagnostics": 4, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "09_nist_ftc_08_asme1_ap242-e4-tg", "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", "critical_fields_with_provenance": 2, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "10_nist_ftc_09_asme1_ap242-e1", "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", "critical_fields_with_provenance": 65, "dimensions": 22, "gdt": 31, "datums": 8, "unsupported": 0, "diagnostics": 1, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "11_nist_ftc_10_asme1_ap242-e2", "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", "critical_fields_with_provenance": 79, "dimensions": 26, "gdt": 40, "datums": 11, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "12_nist_ftc_11_asme1_ap242-e3", "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", "critical_fields_with_provenance": 14, "dimensions": 6, "gdt": 4, "datums": 2, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "13_nist_stc_06_asme1_ap242-e3", "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", "critical_fields_with_provenance": 50, "dimensions": 17, "gdt": 25, "datums": 6, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "14_nist_stc_07_asme1_ap242-e3", "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", "critical_fields_with_provenance": 74, "dimensions": 45, "gdt": 22, "datums": 5, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "15_nist_stc_08_asme1_ap242-e3", "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", "critical_fields_with_provenance": 47, "dimensions": 7, "gdt": 30, "datums": 8, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "16_nist_stc_09_asme1_ap242-e4", "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", "critical_fields_with_provenance": 58, "dimensions": 20, "gdt": 27, "datums": 8, "unsupported": 17, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "17_nist_stc_10_asme1_ap242-e2", "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", "critical_fields_with_provenance": 75, "dimensions": 27, "gdt": 37, "datums": 9, "unsupported": 0, "diagnostics": 6, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "18_nist_ctc_04_asme1_ap242-e1", "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", "critical_fields_with_provenance": 28, "dimensions": 10, "gdt": 7, "datums": 8, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "19_nist_ftc_08_asme1_ap242-e1-tg", "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", "critical_fields_with_provenance": 2, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "20_nist_ftc_11_asme1_ap242-e2", "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", "critical_fields_with_provenance": 14, "dimensions": 6, "gdt": 4, "datums": 2, "unsupported": 0, "diagnostics": 2, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "21_assembly_two_parts", "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", "critical_fields_with_provenance": 6, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "22_assembly_properties", "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", "critical_fields_with_provenance": 6, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "23_dimension_basics", "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", "critical_fields_with_provenance": 7, "dimensions": 5, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "24_plate_one_hole", "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", "critical_fields_with_provenance": 2, "dimensions": 0, "gdt": 0, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "25_property_basics", "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", "critical_fields_with_provenance": 3, "dimensions": 0, "gdt": 1, "datums": 0, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}, {"case": "26_tolerance_datum_basics", "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", "critical_fields_with_provenance": 11, "dimensions": 0, "gdt": 6, "datums": 3, "unsupported": 0, "diagnostics": 0, "engineering_verdict": "Z", "checkout_enabled": false}] +ok +test_confirmation_required_before_matching (test_pmix_integration.PmixIntegration.test_confirmation_required_before_matching) ... ok +test_confirmed_extraction_cannot_trigger_payment_or_coalition (test_pmix_integration.PmixIntegration.test_confirmed_extraction_cannot_trigger_payment_or_coalition) ... ok +test_critical_field_provenance (test_pmix_integration.PmixIntegration.test_critical_field_provenance) ... ok +test_cycle_rejected (test_pmix_integration.PmixIntegration.test_cycle_rejected) ... ok +test_diagnostics_and_unsupported_retained (test_pmix_integration.PmixIntegration.test_diagnostics_and_unsupported_retained) ... ok +test_explicit_material_by_occurrence (test_pmix_integration.PmixIntegration.test_explicit_material_by_occurrence) ... ok +test_fabricated_entity_reference_rejected (test_pmix_integration.PmixIntegration.test_fabricated_entity_reference_rejected) ... ok +test_gdt_dimension_units_source_refs (test_pmix_integration.PmixIntegration.test_gdt_dimension_units_source_refs) ... ok +test_incompatible_parts_never_match (test_pmix_integration.PmixIntegration.test_incompatible_parts_never_match) ... ok +test_malformed_rejected_and_visible (test_pmix_integration.PmixIntegration.test_malformed_rejected_and_visible) ... ok +test_missing_assembly_reference (test_pmix_integration.PmixIntegration.test_missing_assembly_reference) ... ok +test_missing_binary_fail_closed (test_pmix_integration.PmixIntegration.test_missing_binary_fail_closed) ... ok +test_missing_fields_remain_z (test_pmix_integration.PmixIntegration.test_missing_fields_remain_z) ... ok +test_pinned_binary_checksum (test_pmix_integration.PmixIntegration.test_pinned_binary_checksum) ... ok +test_read_only_extract_never_changes_authority (test_pmix_integration.PmixIntegration.test_read_only_extract_never_changes_authority) ... ok +test_revision_difference_preserved (test_pmix_integration.PmixIntegration.test_revision_difference_preserved) ... ok +test_sandbox_missing_no_fallback (test_pmix_integration.PmixIntegration.test_sandbox_missing_no_fallback) ... ok +test_selection_quantity_cannot_be_changed (test_pmix_integration.PmixIntegration.test_selection_quantity_cannot_be_changed) ... ok +test_successful_extraction_and_bom_reconciliation (test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation) ... ok +test_timeout_kills_group (test_pmix_integration.PmixIntegration.test_timeout_kills_group) ... ok +test_units_preserved_without_geometry_inference (test_pmix_integration.PmixIntegration.test_units_preserved_without_geometry_inference) ... ok +test_unknown_never_becomes_approved (test_pmix_integration.PmixIntegration.test_unknown_never_becomes_approved) ... ok +test_upload_size (test_pmix_integration.PmixIntegration.test_upload_size) ... ok +test_wrong_checksum_never_executes (test_pmix_integration.PmixIntegration.test_wrong_checksum_never_executes) ... ok +test_build_and_audit_pass (test_release.ReleaseTests.test_build_and_audit_pass) ... ok +test_economics_honest (test_release.ReleaseTests.test_economics_honest) ... ok +test_judge_and_scenario_facts (test_release.ReleaseTests.test_judge_and_scenario_facts) ... ok +test_negative_matrix (test_release.ReleaseTests.test_negative_matrix) ... ok +test_paypal_truth (test_release.ReleaseTests.test_paypal_truth) ... ok + +---------------------------------------------------------------------- +Ran 129 tests in 12.429s + +OK ++ git diff --exit-code -- demo_evidence/runs demo_evidence/paypal_runs demo_evidence/negatives diff --git a/cad_evidence/wo-cad-003/payment_negatives.json b/cad_evidence/wo-cad-003/payment_negatives.json new file mode 100644 index 0000000..a88a785 --- /dev/null +++ b/cad_evidence/wo-cad-003/payment_negatives.json @@ -0,0 +1,72 @@ +{ + "at": "2026-11-11T14:33:55Z", + "provider": "FakePayPal (MOCK_ONLY; no network, no money)", + "python": "3.14.7", + "cases": { + "N07": [ + { + "test": "tests.test_release_negatives.ReleaseNegatives.test_n07_duplicate_capture_single_post", + "pass": true, + "output_tail": [ + "OK" + ] + } + ], + "N09": [ + { + "test": "tests.test_gateway.GatewayTests.test_unknown_capture_approved_readback_does_not_retry", + "pass": true, + "output_tail": [ + "OK" + ] + } + ], + "N10": [ + { + "test": "tests.test_release_negatives.ReleaseNegatives.test_n10_payee_swapped_at_provider_no_capture", + "pass": true, + "output_tail": [ + "OK" + ] + }, + { + "test": "tests.test_release_negatives.ReleaseNegatives.test_n10_approved_without_payer_identity_no_capture", + "pass": true, + "output_tail": [ + "OK" + ] + }, + { + "test": "tests.test_gateway.GatewayTests.test_t08_unsigned_changed_amount_merchant", + "pass": true, + "output_tail": [ + "OK" + ] + } + ], + "N14": [ + { + "test": "tests.test_release_negatives.ReleaseNegatives.test_n14_capture_without_provider_approval_no_capture", + "pass": true, + "output_tail": [ + "OK" + ] + }, + { + "test": "tests.test_approval.ApprovalTests.test_callback_does_not_replace_buyer_approval", + "pass": true, + "output_tail": [ + "OK" + ] + }, + { + "test": "tests.test_approval.ApprovalTests.test_forged_callback_no_capture", + "pass": true, + "output_tail": [ + "OK" + ] + } + ] + }, + "all_pass": true +} \ No newline at end of file diff --git a/cad_evidence/wo-cad-003/provenance.json b/cad_evidence/wo-cad-003/provenance.json new file mode 100644 index 0000000..7406511 --- /dev/null +++ b/cad_evidence/wo-cad-003/provenance.json @@ -0,0 +1,163 @@ +{ + "result": "PASS", + "cases": [ + { + "case": "01_nist_ctc_01_asme1_ap242-e1", + "sha256": "036683e8358ac27d51a92c35362e175c91bc44d3b600a5c605fb496865edcd37", + "critical_records": 23, + "valid_entity_links": 64 + }, + { + "case": "02_nist_ctc_02_asme1_ap242-e2", + "sha256": "99a0a2079ddeb64d05c2432cbe931fa17c89da60d8b0bcb0b11bd0ed94fa2e68", + "critical_records": 41, + "valid_entity_links": 120 + }, + { + "case": "03_nist_ctc_03_asme1_ap242-e2", + "sha256": "196b665776e759282f80fc8fb27d7bceb995df77cf78b7ce48347535a4d6cb5f", + "critical_records": 31, + "valid_entity_links": 97 + }, + { + "case": "04_nist_ctc_04_asme1_ap242-e2", + "sha256": "7eaea9d2cf417a73d20f8ee840a9d346b0ee5f558a4ab1bf2326a323bd423182", + "critical_records": 28, + "valid_entity_links": 90 + }, + { + "case": "05_nist_ctc_05_asme1_ap242-e1", + "sha256": "7f04f14be27918d31aef5b6d9ff74d547382ad469e45495c5b710baaa772323d", + "critical_records": 23, + "valid_entity_links": 61 + }, + { + "case": "06_nist_ftc_06_asme1_ap242-e2", + "sha256": "b87afb7f25adc0d44d12e182209d50f0b085b533c0742fb8ffd58f4c87403447", + "critical_records": 64, + "valid_entity_links": 207 + }, + { + "case": "07_nist_ftc_07_asme1_ap242-e2", + "sha256": "aa8115c12e12a99cc439477cbfd222916f9ec629fbb3c9002b18e0c264c9a892", + "critical_records": 51, + "valid_entity_links": 177 + }, + { + "case": "08_nist_ftc_08_asme1_ap242-e2", + "sha256": "7b9283b4288d152fd181d76c39285d7c79fbba34fda1e14a41ac4a983f6d68b3", + "critical_records": 56, + "valid_entity_links": 162 + }, + { + "case": "09_nist_ftc_08_asme1_ap242-e4-tg", + "sha256": "40cd4e5e2e02b5742e0884ba5b132f2e37d2215c45f57afb48962a05a060c384", + "critical_records": 2, + "valid_entity_links": 6 + }, + { + "case": "10_nist_ftc_09_asme1_ap242-e1", + "sha256": "f1215fe15a78085a9fa78dd81714caf774b59071be92580b04ebfdc19f52a1bd", + "critical_records": 65, + "valid_entity_links": 221 + }, + { + "case": "11_nist_ftc_10_asme1_ap242-e2", + "sha256": "9d7711f48e81831c5d1838fdac5c11c0de1aa9b61f3c1d67930a7638b3b25e69", + "critical_records": 79, + "valid_entity_links": 265 + }, + { + "case": "12_nist_ftc_11_asme1_ap242-e3", + "sha256": "2d05bd399463a9ced7b84a479872a759f170fe92f7a62f8194e83df77f86f117", + "critical_records": 14, + "valid_entity_links": 44 + }, + { + "case": "13_nist_stc_06_asme1_ap242-e3", + "sha256": "71777c28da76da0e8a667e4cbe792d5f72c09b5c56440c9744d3d50ca96ecc8d", + "critical_records": 50, + "valid_entity_links": 162 + }, + { + "case": "14_nist_stc_07_asme1_ap242-e3", + "sha256": "2dddf9b8894bc241f7ffddf3dc4502baa3d49c374e8784039d14b86473d54832", + "critical_records": 74, + "valid_entity_links": 258 + }, + { + "case": "15_nist_stc_08_asme1_ap242-e3", + "sha256": "64f24b914910ce8e20c9e4bd59637b4fd155715c7c7b51689466534ed7db1442", + "critical_records": 47, + "valid_entity_links": 131 + }, + { + "case": "16_nist_stc_09_asme1_ap242-e4", + "sha256": "41026b1f0d81830c6092b5147e0e084d2fa163169161c31af4ce06493d3c7d33", + "critical_records": 58, + "valid_entity_links": 202 + }, + { + "case": "17_nist_stc_10_asme1_ap242-e2", + "sha256": "fba4f46cab1ce1402362038036884631b4a41afe1c9efc5681d358c39db7ed5f", + "critical_records": 75, + "valid_entity_links": 248 + }, + { + "case": "18_nist_ctc_04_asme1_ap242-e1", + "sha256": "20b43b54ce25d4ed17cff794084c406e831c687f5b62471d3371eef33669e355", + "critical_records": 28, + "valid_entity_links": 90 + }, + { + "case": "19_nist_ftc_08_asme1_ap242-e1-tg", + "sha256": "841a9ac51a32fe25b872f283b0b8770c77fee4e34adc8499f88a6e1bafd8e578", + "critical_records": 2, + "valid_entity_links": 6 + }, + { + "case": "20_nist_ftc_11_asme1_ap242-e2", + "sha256": "20a92edf514ae0989d556f9c7b9f065aed741cfbb361b7fe4cb7938a1eb5c232", + "critical_records": 14, + "valid_entity_links": 44 + }, + { + "case": "21_assembly_two_parts", + "sha256": "ae793550181e3b972493d98ecab3c5b481c4b4aceff5a90d98d09d505049ae11", + "critical_records": 6, + "valid_entity_links": 30 + }, + { + "case": "22_assembly_properties", + "sha256": "4fe9bc014f9ede4f19d308c62d7285911ec9dd0ecadcdacec5a45f9777213320", + "critical_records": 6, + "valid_entity_links": 30 + }, + { + "case": "23_dimension_basics", + "sha256": "5ddeb6b541bbcee206832a1f1c91a298fe17ed24096cc8136e1ac63089a44aff", + "critical_records": 7, + "valid_entity_links": 25 + }, + { + "case": "24_plate_one_hole", + "sha256": "eb3c5fb4ed729675cbc87c28346e06684f1762c83a2ab89a455f67a3e92450b6", + "critical_records": 2, + "valid_entity_links": 6 + }, + { + "case": "25_property_basics", + "sha256": "94de94d3f72d1f8c8ef34ef9c2e3fd673f11a292a47b27fc0b6778d42406acba", + "critical_records": 3, + "valid_entity_links": 8 + }, + { + "case": "26_tolerance_datum_basics", + "sha256": "f346ee58aea184e417918cdc1d3189e1b1741eee12f164dc1324ac85c58e20d9", + "critical_records": 11, + "valid_entity_links": 34 + } + ], + "critical_records": 860, + "files": 26 +} diff --git a/cad_evidence/wo-cad-003/windows-legion.log b/cad_evidence/wo-cad-003/windows-legion.log new file mode 100644 index 0000000..2ee3539 --- /dev/null +++ b/cad_evidence/wo-cad-003/windows-legion.log @@ -0,0 +1,105 @@ +test_direct_retail_without_discovery_consent (test_demand_first.BuyerEntryAlternatives.test_direct_retail_without_discovery_consent) ... ok +test_existing_supplier_batch_80_plus_20 (test_demand_first.BuyerEntryAlternatives.test_existing_supplier_batch_80_plus_20) ... ok +test_no_live_direct_unauthorized_quote (test_demand_first.BuyerEntryAlternatives.test_no_live_direct_unauthorized_quote) ... ok +test_retail_more_expensive_than_coalition (test_demand_first.BuyerEntryAlternatives.test_retail_more_expensive_than_coalition) ... ok +test_csv_quantity_aggregation (test_demand_first.CADIntake.test_csv_quantity_aggregation) ... ok +test_drawing_digest_stable (test_demand_first.CADIntake.test_drawing_digest_stable) ... ok +test_dxf_blocks_not_placements (test_demand_first.CADIntake.test_dxf_blocks_not_placements) ... ok +test_dxf_multiple_components (test_demand_first.CADIntake.test_dxf_multiple_components) ... ok +test_empty_dxf_never_invents_bom (test_demand_first.CADIntake.test_empty_dxf_never_invents_bom) ... ok +test_json_bom_20 (test_demand_first.CADIntake.test_json_bom_20) ... ok +test_real_dxf_insert_count (test_demand_first.CADIntake.test_real_dxf_insert_count) ... ok +test_reject_bad_quantity (test_demand_first.CADIntake.test_reject_bad_quantity) ... ok +test_reject_external_xml_entity_no_expansion (test_demand_first.CADIntake.test_reject_external_xml_entity_no_expansion) ... ok +test_reject_oversized_file (test_demand_first.CADIntake.test_reject_oversized_file) ... ok +test_reject_path_traversal (test_demand_first.CADIntake.test_reject_path_traversal) ... ok +test_step_never_claims_bom (test_demand_first.CADIntake.test_step_never_claims_bom) ... ok +test_svg_explicit_annotations (test_demand_first.CADIntake.test_svg_explicit_annotations) ... ok +test_amounts_are_cents_and_exact (test_demand_first.DemandFirst.test_amounts_are_cents_and_exact) ... ok +test_budget_cap_prevents_confirmation (test_demand_first.DemandFirst.test_budget_cap_prevents_confirmation) ... ok +test_fixture_status_never_real_authority (test_demand_first.DemandFirst.test_fixture_status_never_real_authority) ... ok +test_material_mismatch_cannot_group (test_demand_first.DemandFirst.test_material_mismatch_cannot_group) ... ok +test_missing_payment_fee_holds (test_demand_first.DemandFirst.test_missing_payment_fee_holds) ... ok +test_missing_taxes_holds (test_demand_first.DemandFirst.test_missing_taxes_holds) ... ok +test_multi_component_bom_cannot_complete (test_demand_first.DemandFirst.test_multi_component_bom_cannot_complete) ... ok +test_optin_is_explicit_and_revocable (test_demand_first.DemandFirst.test_optin_is_explicit_and_revocable) ... ok +test_part_number_missing_in_bom_rejected (test_demand_first.DemandFirst.test_part_number_missing_in_bom_rejected) ... ok +test_positive_buyer_intake_to_demand_pool (test_demand_first.DemandFirst.test_positive_buyer_intake_to_demand_pool) ... ok +test_real_claim_cannot_use_demo_peers (test_demand_first.DemandFirst.test_real_claim_cannot_use_demo_peers) ... ok +test_real_paypal_cannot_be_bound_to_new_contract (test_demand_first.DemandFirst.test_real_paypal_cannot_be_bound_to_new_contract) ... ok +test_revision_mismatch_cannot_group (test_demand_first.DemandFirst.test_revision_mismatch_cannot_group) ... ok +test_supplier_listing_never_accepted_quote (test_demand_first.DemandFirst.test_supplier_listing_never_accepted_quote) ... ok +test_unknown_shipping_holds (test_demand_first.DemandFirst.test_unknown_shipping_holds) ... ok +test_unsupported_geometry_no_fabricated_bom (test_demand_first.DemandFirst.test_unsupported_geometry_no_fabricated_bom) ... ok +test_cross_contract_idempotency_fails (test_demand_first.DemoIntent.test_cross_contract_idempotency_fails) ... ok +test_customer_can_confirm_demo_review (test_demand_first.DemoIntent.test_customer_can_confirm_demo_review) ... ok +test_hash_mutant_fails (test_demand_first.DemoIntent.test_hash_mutant_fails) ... ok +test_idempotent_retry (test_demand_first.DemoIntent.test_idempotent_retry) ... ok +test_price_changed_fails (test_demand_first.DemoIntent.test_price_changed_fails) ... ok +test_requires_click (test_demand_first.DemoIntent.test_requires_click) ... ok +test_wrong_buyer_fails (test_demand_first.DemoIntent.test_wrong_buyer_fails) ... ok +test_100_metadata_preflight_tasks (test_demand_first.Dispatch.test_100_metadata_preflight_tasks) ... ok +test_actual_100_preflight_receipts_no_agents (test_demand_first.Dispatch.test_actual_100_preflight_receipts_no_agents) ... ok +test_bad_spec_F (test_demand_first.ProviderContracts.test_bad_spec_F) ... ok +test_capacity_F (test_demand_first.ProviderContracts.test_capacity_F) ... ok +test_external_quote_rejected_on_self_attestation (test_demand_first.ProviderContracts.test_external_quote_rejected_on_self_attestation) ... ok +test_moq_F (test_demand_first.ProviderContracts.test_moq_F) ... ok +test_quote_can_earn_T_from_independent_verifier (test_demand_first.ProviderContracts.test_quote_can_earn_T_from_independent_verifier) ... ok +test_unknown_shipping_Z (test_demand_first.ProviderContracts.test_unknown_shipping_Z) ... ok +test_unusable_expiry_F (test_demand_first.ProviderContracts.test_unusable_expiry_F) ... ok +test_wrong_destination_F (test_demand_first.ProviderContracts.test_wrong_destination_F) ... ok +test_1_missing_Z (test_demand_first.RealAdmissionContract.test_1_missing_Z) ... ok +test_changed_epoch_F (test_demand_first.RealAdmissionContract.test_changed_epoch_F) ... ok +test_earns_T_only_with_all_ten_independently_accepted_receipts (test_demand_first.RealAdmissionContract.test_earns_T_only_with_all_ten_independently_accepted_receipts) ... ok +test_no_paypal_call_for_even_T (test_demand_first.RealAdmissionContract.test_no_paypal_call_for_even_T) ... ok +test_no_verifier_never_T (test_demand_first.RealAdmissionContract.test_no_verifier_never_T) ... ok +test_one_independently_denied_F (test_demand_first.RealAdmissionContract.test_one_independently_denied_F) ... ok +test_price_receipt_mismatch_F (test_demand_first.RealAdmissionContract.test_price_receipt_mismatch_F) ... ok +test_revoked_F (test_demand_first.RealAdmissionContract.test_revoked_F) ... ok +test_verifier_unavailable_Z (test_demand_first.RealAdmissionContract.test_verifier_unavailable_Z) ... ok +test_wrong_buyer_F (test_demand_first.RealAdmissionContract.test_wrong_buyer_F) ... ok +test_wrong_evidence_F (test_demand_first.RealAdmissionContract.test_wrong_evidence_F) ... ok +test_demo_opt_in_is_not_live_authority (test_industrial.Demand.test_demo_opt_in_is_not_live_authority) ... ok +test_duplicate_buyer_is_denied (test_industrial.Demand.test_duplicate_buyer_is_denied) ... ok +test_invalid_qty_budget_fails (test_industrial.Demand.test_invalid_qty_budget_fails) ... ok +test_material_process_or_hash_prevents_merge (test_industrial.Demand.test_material_process_or_hash_prevents_merge) ... ok +test_missing_fields_hold (test_industrial.Demand.test_missing_fields_hold) ... ok +test_real_unverified_optin_unknown (test_industrial.Demand.test_real_unverified_optin_unknown) ... ok +test_revocation_and_consent_scope (test_industrial.Demand.test_revocation_and_consent_scope) ... ok +test_self_attested_real_optin_does_not_pass (test_industrial.Demand.test_self_attested_real_optin_does_not_pass) ... ok +test_spec_revision_prevents_superficial_merge (test_industrial.Demand.test_spec_revision_prevents_superficial_merge) ... ok +test_changed_revision_no_false_coalition (test_industrial.EndToEnd.test_changed_revision_no_false_coalition) ... ok +test_coalition_route_numerical_on_demo_fixture (test_industrial.EndToEnd.test_coalition_route_numerical_on_demo_fixture) ... ok +test_direct_route_must_win_when_cheaper (test_industrial.EndToEnd.test_direct_route_must_win_when_cheaper) ... ok +test_missing_case_rejected (test_industrial.EndToEnd.test_missing_case_rejected) ... ok +test_no_z_to_t_and_no_payment_transfer (test_industrial.EndToEnd.test_no_z_to_t_and_no_payment_transfer) ... ok +test_passport_deterministic (test_industrial.EndToEnd.test_passport_deterministic) ... ok +test_rfq_excludes_private_buyer_identity_or_cad (test_industrial.EndToEnd.test_rfq_excludes_private_buyer_identity_or_cad) ... ok +test_claimed_proof_without_independent_verifier_is_Z (test_industrial.Proofs.test_claimed_proof_without_independent_verifier_is_Z) ... ok +test_external_rejection_cannot_be_faked (test_industrial.Proofs.test_external_rejection_cannot_be_faked) ... ok +test_forged_request_digest_F (test_industrial.Proofs.test_forged_request_digest_F) ... ok +test_no_ztl_receipt_is_Z (test_industrial.Proofs.test_no_ztl_receipt_is_Z) ... ok +test_stubbed_positive_isolated_contract_only (test_industrial.Proofs.test_stubbed_positive_isolated_contract_only) ... ok +test_wrong_verifier_pin_F (test_industrial.Proofs.test_wrong_verifier_pin_F) ... ok +test_capacity_and_moq_negative (test_industrial.Quotations.test_capacity_and_moq_negative) ... ok +test_due_date_critical (test_industrial.Quotations.test_due_date_critical) ... ok +test_fixture_only_not_actual_supplier_quote (test_industrial.Quotations.test_fixture_only_not_actual_supplier_quote) ... ok +test_missing_quote_fields_do_not_pass (test_industrial.Quotations.test_missing_quote_fields_do_not_pass) ... ok +test_nonbinding_budget_blocks (test_industrial.Quotations.test_nonbinding_budget_blocks) ... ok +test_quotes_research_only_when_unconfirmed (test_industrial.Quotations.test_quotes_research_only_when_unconfirmed) ... ok +test_self_attested_supplier_quote_does_not_pass (test_industrial.Quotations.test_self_attested_supplier_quote_does_not_pass) ... ok +test_wrong_revision_digest_material_rejected (test_industrial.Quotations.test_wrong_revision_digest_material_rejected) ... ok +test_87_discovery_entries_not_quoted (test_industrial.Registry.test_87_discovery_entries_not_quoted) ... ok +test_hp_48_member_index_exact_and_no_double_claim (test_industrial.Registry.test_hp_48_member_index_exact_and_no_double_claim) ... ok +test_no_filename_traversal (test_industrial.Registry.test_no_filename_traversal) ... ok +test_shortlist_unknown_capability (test_industrial.Registry.test_shortlist_unknown_capability) ... ok +test_build_and_audit_pass (test_release.ReleaseTests.test_build_and_audit_pass) ... ok +test_economics_honest (test_release.ReleaseTests.test_economics_honest) ... ok +test_judge_and_scenario_facts (test_release.ReleaseTests.test_judge_and_scenario_facts) ... ok +test_negative_matrix (test_release.ReleaseTests.test_negative_matrix) ... ok +test_paypal_truth (test_release.ReleaseTests.test_paypal_truth) ... ok + +---------------------------------------------------------------------- +Ran 100 tests in 2.976s + +OK diff --git a/cad_evidence/wo-cad-003/windows-negative.log b/cad_evidence/wo-cad-003/windows-negative.log new file mode 100644 index 0000000..03ea33a --- /dev/null +++ b/cad_evidence/wo-cad-003/windows-negative.log @@ -0,0 +1 @@ +{"N07": true, "N09": true, "N10": true, "N14": true, "all_pass": true} diff --git a/cad_evidence/wo-cad-003/windows-paypal.log b/cad_evidence/wo-cad-003/windows-paypal.log new file mode 100644 index 0000000..d7965bf --- /dev/null +++ b/cad_evidence/wo-cad-003/windows-paypal.log @@ -0,0 +1,70 @@ +test_approved_callback_captures_and_reads_back (tests.test_approval.ApprovalTests.test_approved_callback_captures_and_reads_back) ... ok +test_callback_does_not_replace_buyer_approval (tests.test_approval.ApprovalTests.test_callback_does_not_replace_buyer_approval) ... ok +test_foreign_host_rejected (tests.test_approval.ApprovalTests.test_foreign_host_rejected) ... \AppData\Local\Python\pythoncore-3.14-64\Lib\tempfile.py:484: ResourceWarning: Implicitly cleaning up + _warnings.warn(self.warn_message, ResourceWarning) +ok +test_forged_callback_no_capture (tests.test_approval.ApprovalTests.test_forged_callback_no_capture) ... ok +test_acceptance_missing_bad_signature_or_hash (tests.test_gateway.GatewayTests.test_acceptance_missing_bad_signature_or_hash) ... ok +test_control_replay (tests.test_gateway.GatewayTests.test_control_replay) ... ok +test_duplicate_provider_capture_rejected (tests.test_gateway.GatewayTests.test_duplicate_provider_capture_rejected) ... ok +test_empty_original_obligations (tests.test_gateway.GatewayTests.test_empty_original_obligations) ... ok +test_expired_after_reserve_no_calls (tests.test_gateway.GatewayTests.test_expired_after_reserve_no_calls) ... ok +test_fake_stored_receipt_not_ground_truth (tests.test_gateway.GatewayTests.test_fake_stored_receipt_not_ground_truth) ... ok +test_provider_amount_change_pre_capture (tests.test_gateway.GatewayTests.test_provider_amount_change_pre_capture) ... ok +test_recover_unknown_create_by_independent_get (tests.test_gateway.GatewayTests.test_recover_unknown_create_by_independent_get) ... ok +test_refund_does_not_restore_spend (tests.test_gateway.GatewayTests.test_refund_does_not_restore_spend) ... ok +test_stale_quote_epoch_expiry (tests.test_gateway.GatewayTests.test_stale_quote_epoch_expiry) ... ok +test_t01_approved_capture_requires_two_gets (tests.test_gateway.GatewayTests.test_t01_approved_capture_requires_two_gets) +A04-T01 mechanism only; A05 no mission closure from payment. ... ok +test_t02_denied_no_calls (tests.test_gateway.GatewayTests.test_t02_denied_no_calls) +A04-T02 all independent authority gates, including UNKNOWN. ... ok +test_t03_parallel_320_260 (tests.test_gateway.GatewayTests.test_t03_parallel_320_260) +A04-T03 actual SQLite concurrent writer contention (single host). ... ok +test_t03_separate_process_reservations (tests.test_gateway.GatewayTests.test_t03_separate_process_reservations) +A04-T03 competing OS processes, both bound to the same signed mission. ... ok +test_t04_same_effect_retry_after_timeout (tests.test_gateway.GatewayTests.test_t04_same_effect_retry_after_timeout) +A04-T04 timeout retains identity and does not blindly retry create. ... ok +test_t05_lost_success_reconcile_no_second_capture (tests.test_gateway.GatewayTests.test_t05_lost_success_reconcile_no_second_capture) +A04-T05 mock lost reply after success; live required separately. ... ok +test_t06_created_is_not_paid (tests.test_gateway.GatewayTests.test_t06_created_is_not_paid) +A04-T06 no buyer approval: no capture POST. ... ok +test_t07_declined (tests.test_gateway.GatewayTests.test_t07_declined) +A04-T07 DECLINED never counts completed. ... ok +test_t07_pending (tests.test_gateway.GatewayTests.test_t07_pending) +A04-T07 PENDING holds reservation, never confirms. ... ok +test_t08_unsigned_changed_amount_merchant (tests.test_gateway.GatewayTests.test_t08_unsigned_changed_amount_merchant) +A04-T08 tampering rejected before any network. ... ok +test_t09_revoke_after_reserve (tests.test_gateway.GatewayTests.test_t09_revoke_after_reserve) +A04-T09 revocation committed before capture => zero further calls. ... ok +test_t10_same_permit_concurrent (tests.test_gateway.GatewayTests.test_t10_same_permit_concurrent) +A04-T10 idempotent same-effect join; exactly one create/capture. ... ok +test_t10_same_permit_for_different_effect_refused (tests.test_gateway.GatewayTests.test_t10_same_permit_for_different_effect_refused) ... ok +test_t11_process_crash_restart_wal (tests.test_gateway.GatewayTests.test_t11_process_crash_restart_wal) +A04-T11 abrupt separate-process exit preserves committed reserve. ... ok +test_t12_altered_readback (tests.test_gateway.GatewayTests.test_t12_altered_readback) +A04-T12 mismatch is discrepancy and no completed payment. ... ok +test_t12_missing_readback (tests.test_gateway.GatewayTests.test_t12_missing_readback) +A04-T12 missing provider truth cannot close payment. ... ok +test_t13_exact_boundaries (tests.test_gateway.GatewayTests.test_t13_exact_boundaries) +A04-T13 exact 1 / 49999 accepted in isolation, 50001 rejected. ... ok +test_t14_errors (tests.test_gateway.GatewayTests.test_t14_errors) +A04-T14 401/403/500 fail closed, classified, reservation retained. ... ok +test_tampered_capture_readback (tests.test_gateway.GatewayTests.test_tampered_capture_readback) ... ok +test_unknown_capture_approved_readback_does_not_retry (tests.test_gateway.GatewayTests.test_unknown_capture_approved_readback_does_not_retry) ... ok +test_wrong_capture_order_rejected (tests.test_gateway.GatewayTests.test_wrong_capture_order_rejected) ... ok +test_n07_duplicate_capture_single_post (tests.test_release_negatives.ReleaseNegatives.test_n07_duplicate_capture_single_post) ... ok +test_n10_approved_without_payer_identity_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_approved_without_payer_identity_no_capture) ... ok +test_n10_payee_swapped_at_provider_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n10_payee_swapped_at_provider_no_capture) ... ok +test_n14_capture_without_provider_approval_no_capture (tests.test_release_negatives.ReleaseNegatives.test_n14_capture_without_provider_approval_no_capture) ... ok +test_401_invalidates_without_post_retry (tests.test_transport.TransportTests.test_401_invalidates_without_post_retry) ... ok +test_cli_preflight_missing_config_no_network (tests.test_transport.TransportTests.test_cli_preflight_missing_config_no_network) ... ok +test_http_errors_redacted (tests.test_transport.TransportTests.test_http_errors_redacted) ... ok +test_oauth_cache_and_renewal (tests.test_transport.TransportTests.test_oauth_cache_and_renewal) ... ok +test_path_injection_disallowed (tests.test_transport.TransportTests.test_path_injection_disallowed) ... ok +test_read_only_disallows_post_before_credentials (tests.test_transport.TransportTests.test_read_only_disallows_post_before_credentials) ... ok +test_redirect_never_forwards_auth (tests.test_transport.TransportTests.test_redirect_never_forwards_auth) ... ok + +---------------------------------------------------------------------- +Ran 46 tests in 6.938s + +OK diff --git a/deal_rescue/industrial/cad_bom.py b/deal_rescue/industrial/cad_bom.py index d29a76d..e095501 100644 --- a/deal_rescue/industrial/cad_bom.py +++ b/deal_rescue/industrial/cad_bom.py @@ -2,7 +2,7 @@ Supported: CSV, JSON BOM, DXF ASCII BLOCK INSERT occurrences, SVG structured BOM annotations, text-only PDF BOM lines when pypdf is installed. -STEP/STL geometry, scanned PDFs and unsupported DXF yield Z and require user BOM. +STEP uses pinned, sandboxed pmix. STL, scanned PDFs and unsupported DXF yield Z. All formats are strictly bounded; no user files are retained or sent to suppliers. """ from __future__ import annotations @@ -96,10 +96,30 @@ def _pdf_text(data): except Exception:raise IntakeError('UNREADABLE_PDF') def extract(filename: str, data: bytes): - if not isinstance(data,bytes) or not data or len(data)>MAX_BYTES:raise IntakeError('INVALID_SIZE_MAX_2MB') + if not isinstance(filename,str):raise IntakeError('INVALID_FILENAME') if '/' in filename or '\\' in filename or '\x00' in filename or len(filename)>200:raise IntakeError('INVALID_FILENAME') ext='.'+filename.rsplit('.',1)[-1].lower() if '.' in filename else '' if ext not in ALLOW:raise IntakeError('UNSUPPORTED_EXTENSION') + if ext in ('.step','.stp'): + from . import pmix_adapter + if not isinstance(data,bytes) or not 0MAX_BYTES:raise IntakeError('INVALID_SIZE_MAX_2MB') sha=hashlib.sha256(data).hexdigest();rows=[] if ext=='.csv': try:rows=_rows(csv.DictReader(io.StringIO(data.decode('utf-8-sig'))),'CSV_BOM') @@ -112,7 +132,7 @@ def extract(filename: str, data: bytes): try:rows=_svg_annotations(data) except ET.ParseError as e:raise IntakeError('INVALID_SVG') from e elif ext=='.pdf':rows=_pdf_text(data) - # STEP/STL are geometry, not part/BOM evidence. No fictitious CAD understanding. + # STL geometry is not part/BOM evidence. status='T' if rows else 'Z' return {'schema':'legion.cad-bom-intake.v1','filename':filename,'file_sha256':sha, 'format':ext[1:].upper(),'extraction':status,'bom':rows, diff --git a/deal_rescue/industrial/pmix_adapter.py b/deal_rescue/industrial/pmix_adapter.py new file mode 100644 index 0000000..ec54126 --- /dev/null +++ b/deal_rescue/industrial/pmix_adapter.py @@ -0,0 +1,239 @@ +"""Pinned pmix JSON bridge, not a CAD parser or engineering authority. + +Linux x86-64 only. bubblewrap is mandatory: no network, no host data mounts, +private scratch, read-only runtime/binary, CPU/address-space/file limits. A +missing dependency or failed sandbox yields visible Z; never an unsafe fallback. +""" +from __future__ import annotations + +from collections import Counter, defaultdict +import hashlib +import json +import os +from pathlib import Path +import platform +import re +import shutil +import signal +import subprocess +import tempfile +import threading + +VERSION = '0.16.1' +BINARY_SHA256 = 'cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43' +MAX_BYTES = 16 * 1024 * 1024 +MAX_OUTPUT = 32 * 1024 * 1024 +TIMEOUT = 20 +MAX_PARTS = 300 +MAX_OCCURRENCES = 100000 +_SLOTS = threading.BoundedSemaphore(2) +_REF = re.compile(r'#\d+\Z') + + +class PmixError(ValueError): + pass + + +def _binary(): + if platform.system() != 'Linux' or platform.machine() not in ('x86_64', 'amd64'): + raise PmixError('PMIX_REQUIRES_LINUX_X86_64_SANDBOX') + path = Path(os.environ.get('LEGION_PMIX_BINARY', 'external/pmix/pmix')).resolve() + if not path.is_file(): + raise PmixError('PMIX_BINARY_MISSING') + if path.stat().st_size > 64 * 1024 * 1024: + raise PmixError('PMIX_BINARY_SIZE_INVALID') + if hashlib.sha256(path.read_bytes()).hexdigest() != BINARY_SHA256: + raise PmixError('PMIX_BINARY_CHECKSUM_MISMATCH') + return path + + +def _run(binary, folder, command): + """No shell; file outputs and stderr are OS-bounded before JSON decoding.""" + bwrap, prlimit = shutil.which('bwrap'), shutil.which('prlimit') + if not bwrap or not prlimit: + raise PmixError('PMIX_SANDBOX_DEPENDENCY_MISSING') + output = folder / (command + '.json') + argv = [prlimit, '--as=1073741824', '--cpu=10', f'--fsize={MAX_OUTPUT}', + '--nofile=64', '--core=0', '--', bwrap, '--die-with-parent', + '--unshare-all', '--new-session', '--cap-drop', 'ALL', + '--ro-bind', '/usr', '/usr', '--ro-bind', '/lib', '/lib', + '--ro-bind-try', '/lib64', '/lib64', '--proc', '/proc', + '--dev', '/dev', '--tmpfs', '/tmp', '--dir', '/app', + '--ro-bind', str(binary), '/app/pmix', + '--bind', str(folder), '/work', '--chdir', '/work', + '--clearenv', '--setenv', 'HOME', '/tmp', '--setenv', 'LANG', 'C', + '/app/pmix', command, '/work/input.stp'] + if command == 'product': + argv.append('--json') + argv += ['--output', '/work/' + output.name] + with (folder / (command + '.stderr')).open('wb') as err: + proc = subprocess.Popen(argv, stdin=subprocess.DEVNULL, + stdout=err, stderr=err, start_new_session=True, + env={'PATH': '/usr/bin:/bin', 'LANG': 'C'}) + try: + proc.wait(timeout=TIMEOUT) + except subprocess.TimeoutExpired as exc: + os.killpg(proc.pid, signal.SIGKILL) + proc.wait() + raise PmixError('PMIX_TIMEOUT') from exc + stderr = (folder / (command + '.stderr')).read_bytes()[:8192].decode('utf-8', 'replace') + if proc.returncode != 0: + raise PmixError('PMIX_' + command.upper() + '_FAILED: ' + stderr[:2000]) + if not output.is_file() or output.stat().st_size > MAX_OUTPUT: + raise PmixError('PMIX_OUTPUT_LIMIT_OR_MISSING') + try: + doc = json.loads(output.read_bytes(), parse_constant=lambda x: (_ for _ in ()).throw(ValueError(x))) + except (ValueError, RecursionError) as exc: + raise PmixError('PMIX_INVALID_JSON') from exc + if not isinstance(doc, dict) or doc.get('schema_version') != 1: + raise PmixError('PMIX_UNSUPPORTED_OUTPUT_SCHEMA') + return doc, stderr + + +def _field(value=None, refs=(), sha=None): + return {'value': value, 'extraction': 'T' if value is not None and refs else 'Z', + 'engineering_verdict': 'Z', 'file_sha256': sha, 'source_refs': list(refs)} + + +def adapt(raw, extracted, product): + """Map pmix-owned semantics; never parse or infer engineering from STEP text. + + The only STEP scan checks that pmix's #entity references exist. PMI remains + document-scoped unless pmix supplies an unambiguous part/occurrence label. + """ + sha = hashlib.sha256(raw).hexdigest() + declared = {'#' + n.decode() for n in re.findall(rb'(?:^|\n)\s*#(\d+)\s*=', raw)} + + def provenance(record): + refs = record.get('source_refs') or [] + if not isinstance(refs, list) or any(not isinstance(r, str) for r in refs): + raise PmixError('INVALID_SOURCE_REFERENCES') + if any(_REF.fullmatch(r) and r not in declared for r in refs): + raise PmixError('SOURCE_ENTITY_NOT_DECLARED') + return refs + + def annotate(obj): + if isinstance(obj, dict): + out = {k: annotate(v) for k, v in obj.items()} + if 'source_refs' in obj: + provenance(obj) + out.update(file_sha256=sha, engineering_verdict='Z') + return out + if isinstance(obj, list): + return [annotate(x) for x in obj] + return obj + + extracted, product = annotate(extracted), annotate(product) + parts = product.get('parts') or [] + if len(parts) > MAX_PARTS: + raise PmixError('TOO_MANY_PARTS') + indexed = {p['id']: p for p in parts} + if len(indexed) != len(parts): + raise PmixError('DUPLICATE_PART_ID') + relations = product.get('relations') or [] + children = defaultdict(list) + occurrence_names = defaultdict(set) + for rel in relations: + if rel.get('parent') not in indexed or rel.get('child') not in indexed: + raise PmixError('ASSEMBLY_PART_NOT_DECLARED') + children[rel['parent']].append(rel) + if rel.get('name'): + occurrence_names[rel['child']].add(rel['name']) + roots = product.get('roots') or [p for p in indexed if not any(r['child'] == p for r in relations)] + if indexed and not roots: + raise PmixError('CYCLE_OR_MISSING_ASSEMBLY_ROOT') + memo = {} + + def leaves(pid, stack=()): + if pid not in indexed: + raise PmixError('ASSEMBLY_PART_NOT_DECLARED') + if pid in stack or len(stack) > 64: + raise PmixError('CYCLE_OR_ASSEMBLY_DEPTH_LIMIT') + if pid in memo: + return memo[pid] + counts = Counter() + if not children[pid]: + counts[pid] = 1 + for rel in children[pid]: + counts.update(leaves(rel['child'], stack + (pid,))) + if sum(counts.values()) > MAX_OCCURRENCES: + raise PmixError('ASSEMBLY_QUANTITY_LIMIT') + memo[pid] = counts + return counts + + # Validate disconnected subgraphs as well; never conceal a missing/cyclic use. + for pid in indexed: + leaves(pid) + quantities = Counter() + for root in roots: + quantities.update(leaves(root)) + if sum(quantities.values()) > MAX_OCCURRENCES: + raise PmixError('ASSEMBLY_QUANTITY_LIMIT') + properties = extracted.get('properties') or [] + lines = [] + for pid, qty in sorted(quantities.items()): + part = indexed[pid] + refs = provenance(part) + labels = {pid, part.get('name'), part.get('number')} | occurrence_names[pid] + # Labels shared across distinct parts are not sufficient association evidence. + labels -= {label for other in parts if other['id'] != pid + for label in ({other.get('name'), other.get('number')} | occurrence_names[other['id']]) + if label in labels} + props = [p for p in properties if p.get('part') in labels and p.get('part') is not None] + + def explicit(names, fallback=None): + matches = [p for p in props if str(p.get('name', '')).casefold() in names + and provenance(p) and (p.get('value') or {}).get('value') is not None] + values = {json.dumps(p['value']['value'], sort_keys=True) for p in matches} + if len(values) == 1: + return _field(matches[0]['value']['value'], + sorted({r for p in matches for r in provenance(p)}), sha) + return _field(fallback, refs if fallback is not None else (), sha) + + revision = explicit({'revision', 'rev', 'revision_id'}, part.get('revision')) + material = explicit({'material', 'material_name'}) + process = explicit({'process', 'manufacturing_process'}) + quantity_refs = sorted(set(refs + [r for rel in relations + for r in provenance(rel)])) + fields = {'part_no': _field(part.get('number'), refs, sha), + 'revision': revision, 'material': material, 'process': process, + 'quantity': _field(qty, quantity_refs, sha)} + lines.append({'part_id': pid, 'part_no': part.get('number'), + 'description': part.get('name'), 'quantity': qty, + 'revision': revision['value'], 'material': material['value'], + 'process': process['value'], 'fields': fields, + 'properties': props, 'source_refs': refs, 'file_sha256': sha, + 'origin': 'PMIX_STEP_PRODUCT', 'verification': 'EXTRACTED_NOT_ENGINEERING_PROVED', + 'engineering_verdict': 'Z', 'procurement_eligible': False}) + return {'schema': 'legion.pmix-engineering.v1', 'parser': 'pmix ' + VERSION, + 'parser_sha256': BINARY_SHA256, 'file_sha256': sha, + 'bom': lines, 'assembly': product, 'engineering': extracted, + 'units': extracted.get('units') or {}, + 'pmi_association': 'DOCUMENT_SCOPE_NOT_AUTOMATIC_PART_QUALIFICATION', + 'engineering_verdict': 'Z', 'production_qualification': 'Z', + 'procurement_eligible': False, 'checkout_enabled': False, + 'payment_effects': 0, 'supplier_effects': 0, + 'source_ref_scheme': 'STEP_P21_ENTITY_NUMBER_IN_ORIGINAL_FILE'} + + +def extract(data): + if not isinstance(data, bytes) or not 0 < len(data) <= MAX_BYTES: + raise PmixError('INVALID_STEP_SIZE_MAX_16MB') + if not _SLOTS.acquire(blocking=False): + raise PmixError('PMIX_BUSY') + try: + binary = _binary() + with tempfile.TemporaryDirectory(prefix='legion-pmix-') as tmp: + folder = Path(tmp) + (folder / 'input.stp').write_bytes(data) + engineering, extract_log = _run(binary, folder, 'extract') + product, product_log = _run(binary, folder, 'product') + result = adapt(data, engineering, product) + result['parser_stderr'] = {'extract': extract_log, 'product': product_log} + return result + except OSError as exc: + raise PmixError('PMIX_OS_EXECUTION_ERROR_' + str(exc.errno)) from exc + except (KeyError, TypeError, RecursionError) as exc: + raise PmixError('INVALID_PMIX_STRUCTURE') from exc + finally: + _SLOTS.release() diff --git a/deal_rescue/industrial/workflow.py b/deal_rescue/industrial/workflow.py index cd62639..ec17954 100644 --- a/deal_rescue/industrial/workflow.py +++ b/deal_rescue/industrial/workflow.py @@ -226,14 +226,87 @@ def _one_line(intake,part,claim): 'supplier_quote_verified':False,'paypal_payment_authorized':False, 'supplier_verified_shipping':False,'assumed_same_fixture_shipping_for_all_routes':True} +def engineering_compatibility(left, right): + """Exact evidence equality is screening only, never engineering approval.""" + keys=('part_no','revision','material','process','file_sha256','engineering_digest') + missing=[k for k in keys if left.get(k) in (None,'','Z') or right.get(k) in (None,'','Z')] + if missing:return {'verdict':Z,'why':'ENGINEERING_FIELDS_MISSING','fields':missing} + return {'verdict':T if all(left[k]==right[k] for k in keys) else F, + 'why':'EXACT_ENGINEERING_EVIDENCE_COMPARISON','procurement_eligible':False} + + +def _engineering_intake(intake, claim): + """Review selected STEP leaves, without invoking demo quotes or coalition code. + + A buyer selection is intent only. This path cannot dispatch RFQs, admit a + coalition, mint a demo payment session, or enter the payment adapter. + """ + evidence=intake.get('engineering_evidence') or {} + digest=core.digest(evidence.get('engineering',{})) + selected=claim.get('selected_parts') or [] + confirmed=(claim.get('parts_confirmed') is True and + claim.get('drawing_sha256')==intake['file_sha256']) + results=[] + known={p['part_id']:p for p in intake['bom']} + if not isinstance(selected,list) or any(not isinstance(p,dict) for p in selected): + raise ValueError('INVALID_PART_SELECTION') + seen=set() + for selection in selected: + pid=selection.get('part_id') + if pid not in known or pid in seen:raise ValueError('UNKNOWN_OR_DUPLICATE_PART_SELECTION') + seen.add(pid) + p=known[pid] + if type(selection.get('quantity')) is not int or selection['quantity']!=p['quantity']: + raise ValueError('SELECTION_QUANTITY_MISMATCH') + candidate=dict(p,engineering_digest=digest) + supplied=dict(claim.get('requirements') or {}, + revision=(claim.get('requirements') or {}).get('spec_revision'), + file_sha256=claim.get('drawing_sha256'), + engineering_digest=claim.get('engineering_digest')) + comparison=engineering_compatibility(candidate,supplied) + results.append({'part_id':pid,'part_no':p['part_no'],'quantity':p['quantity'], + 'engineering_digest':digest,'engineering_compatibility':comparison, + 'status':'HOLD_ENGINEERING_PROOF_REQUIRED' if confirmed else 'AWAITING_PART_CONFIRMATION', + 'specifications':p['fields'],'engineering_evidence':p, + 'candidate_sources':core.shortlist_sources(p['process']) if + confirmed and comparison['verdict']==T else [], + 'supplier_quote_verified':False,'paypal_payment_authorized':False, + 'execution_gate':Z}) + return {'schema':'legion.demand-first.v1','intake':intake,'lines':results, + 'overall':'HOLD_ENGINEERING_PROOF_REQUIRED' if confirmed and results else 'CONFIRM_PARTS_REQUIRED', + 'parts_confirmed':confirmed and bool(results),'engineering_digest':digest, + 'engineering_verdict':Z,'production_qualification':Z, + 'live_execution_gate':Z,'new_paypal_captures':0,'supplier_requests_sent':0, + 'customer_call_to_action':'INDEPENDENT_ENGINEERING_REVIEW_REQUIRED', + 'existing_historic_paypal_payments_reused':False, + 'evidence_sha256':core.digest({'intake':intake,'claim':claim,'lines':results})} + + def run_intake(filename,data,claim): + if not isinstance(claim,dict):raise ValueError('INVALID_CLAIM') intake=cad_bom.extract(filename,data) if intake['extraction']!=T: return {'schema':'legion.demand-first.v1','intake':intake,'lines':[], 'overall':'NEEDS_HUMAN_BOM','live_execution_gate':Z,'new_paypal_captures':0} + if intake['format']=='STEP':return _engineering_intake(intake,claim) # A full BOM cannot be admitted if only one line is checked. results=[] - for p in intake['bom']: + to_plan=intake['bom'] + if 'parts_confirmed' in claim: + if claim.get('parts_confirmed') is not True or claim.get('drawing_sha256')!=intake['file_sha256']: + raise ValueError('PART_CONFIRMATION_NOT_BOUND_TO_DRAWING') + selected=claim.get('selected_parts') + if not isinstance(selected,list) or not selected:raise ValueError('NO_PARTS_SELECTED') + known={p['part_no']:p for p in to_plan};seen=set();chosen=[] + for s in selected: + if not isinstance(s,dict) or s.get('part_no') not in known or s['part_no'] in seen: + raise ValueError('UNKNOWN_OR_DUPLICATE_PART_SELECTION') + p=known[s['part_no']] + if type(s.get('quantity')) is not int or s['quantity']!=p['quantity']: + raise ValueError('SELECTION_QUANTITY_MISMATCH') + seen.add(s['part_no']);chosen.append(p) + to_plan=chosen + for p in to_plan: spec=(claim.get('requirements') or {}).get('part_no') if p['part_no']!=spec: results.append({'part_no':p['part_no'],'status':'NEEDS_PART_REQUIREMENTS', diff --git a/deal_rescue/server.py b/deal_rescue/server.py index f775a23..1ec7184 100644 --- a/deal_rescue/server.py +++ b/deal_rescue/server.py @@ -13,7 +13,7 @@ import base64 import binascii import secrets -from deal_rescue.industrial import core as industrial, workflow as industrial_flow, demo_intent +from deal_rescue.industrial import core as industrial, workflow as industrial_flow, demo_intent, cad_bom from urllib.parse import parse_qs, urlparse WEB = Path(__file__).parent / "web" @@ -46,6 +46,7 @@ def send(self, code, body, ctype="application/json", extra=None): b = body if isinstance(body, bytes) else json.dumps(body, indent=1).encode() self.send_response(code) self.send_header("Content-Type", ctype) + self.send_header("Content-Length", str(len(b))) self.send_header("Cache-Control", "no-store") for k, v in (extra or {}).items(): self.send_header(k, v) @@ -55,7 +56,7 @@ def send(self, code, body, ctype="application/json", extra=None): def do_POST(self): """Only bounded in-memory CAD intake + optional DEMO intent. No provider POST.""" u = urlparse(self.path) - if u.path not in ("/api/industrial/intake", "/api/industrial/demo-confirm"): + if u.path not in ("/api/industrial/intake", "/api/industrial/engineering-extract", "/api/industrial/demo-confirm"): return self.send(405, {"error":"METHOD_NOT_ALLOWED"}) if self.headers.get("Content-Type", "").split(";")[0].strip().lower() != "application/json": return self.send(415, {"error":"JSON_ONLY"}) @@ -65,12 +66,18 @@ def do_POST(self): return self.send(403, {"error":"CROSS_ORIGIN_POST_DENIED"}) try: size=int(self.headers.get("Content-Length", "-1")) - if not 02097152:return self.send(413,{"error":"FILE_TOO_LARGE"}) + filename=body.get('filename','') + is_step=isinstance(filename,str) and filename.lower().endswith(('.step','.stp')) + if len(raw)>(16777216 if is_step else 2097152):return self.send(413,{"error":"FILE_TOO_LARGE"}) + if u.path=="/api/industrial/engineering-extract": + return self.send(200,cad_bom.extract(filename,raw)) result=industrial_flow.run_intake(body.get("filename",""),raw,body.get("claim",{})) if result['overall']=="DEMO_FEASIBLE_NEEDS_ACTUAL_AUTHORITY": session=secrets.token_urlsafe(24) diff --git a/deal_rescue/web/demand.js b/deal_rescue/web/demand.js index 6cdbcc7..2b071b5 100644 --- a/deal_rescue/web/demand.js +++ b/deal_rescue/web/demand.js @@ -6,8 +6,13 @@ const E=s=>String(s??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const $=s=>document.querySelector(s); const fmt=n=>typeof n==='number'?('$'+(n/100).toFixed(2)):'Unknown'; - let panel=null,result=null,session=null; - const style=`position:fixed;inset:2vh 2vw;background:#f6f8fb;color:#152033;z-index:10001;overflow:auto;padding:24px 4vw;border:1px solid #dce4f1;border-radius:16px;box-shadow:0 20px 80px #091c4059;font:15px/1.5 system-ui`; + let panel=null,result=null,session=null,pending=null; + const stages=['DRAWING','PARTS','LEGION AT WORK','REVIEW','PAYPAL']; + function stage(name){ + const nav=$('#df-stages');if(nav)nav.innerHTML=stages.map(s=>`${E(s)}`).join(' → '); + panel.dataset.screen=name; + } + const style=`position:fixed;inset:2vh 2vw;background:#f6f8fb;color:#152033;z-index:10001;overflow:auto;overflow-wrap:anywhere;padding:24px 4vw;border:1px solid #dce4f1;border-radius:16px;box-shadow:0 20px 80px #091c4059;font:15px/1.5 system-ui`; function mount(){ if($('#legion-start-drawing'))return; const btn=document.createElement('button');btn.id='legion-start-drawing';btn.textContent='Start with a drawing / BOM'; @@ -21,8 +26,9 @@ function open(){mount();panel.hidden=false;renderForm();} function close(){if(panel)panel.hidden=true;} function renderForm(){ - panel.innerHTML=`

LEGION · Industrial Orders

Upload drawing → Review parts → Find suppliers and peers → Validate cost & MOQ → Confirm feasibility → PayPal authorization

-

Actual engineering proof, external RFQs, buyer signatures and PayPal remain disabled until independently verified. Demo inputs are clearly marked synthetic.

+ panel.innerHTML=`

LEGION · Industrial Orders

Review drawing evidence and confirm the components you intend to purchase before sourcing.

+ +

Extraction is not engineering approval. Missing information remains Z. External RFQs, supplier orders and PayPal remain disabled. Demo inputs are clearly marked synthetic.

@@ -37,7 +43,7 @@
-
+
`; $('#df-close').onclick=close; $('#df-sample').onclick=async()=>{ @@ -45,11 +51,13 @@ const dt=new DataTransfer();dt.items.add(file);$('#df-file').files=dt.files;$('#df-consent').checked=true; }; $('#df-form').onsubmit=submit; + stage('DRAWING');pending=null; } const cents=id=>Math.round(Number($(id).value)*100); async function submit(ev){ ev.preventDefault();result=null;session=null; - const file=$('#df-file').files[0];if(!file||file.size>2097152){$('#df-result').textContent='File must be 2 MB or less.';return;} + const file=$('#df-file').files[0];const max=file&&/\.(step|stp)$/i.test(file.name)?16777216:2097152; + if(!file||file.size>max){$('#df-result').textContent='File exceeds limit: STEP 16 MB; other formats 2 MB.';return;} const raw=new Uint8Array(await file.arrayBuffer());let binary='';for(let i=0;iPARTS · Confirm purchase intent +

Source SHA-256: ${E(intake.file_sha256)}

+

Engineering qualification: Z · Extraction: ${E(intake.extraction)}. Select the components you intend to purchase; this does not approve engineering or authorize an order.

+ ${intake.bom.map((p,i)=>`
+

Quantity: ${E(p.quantity)} · Revision: ${E(p.revision??'Z')} · Material: ${E(p.material??'Z')} · Process: ${E(p.process??'Z')}

+

STEP source entities: ${E((p.source_refs||[]).join(', ')||p.origin||'Z')}

+
Component specifications and provenance
${E(JSON.stringify(p.fields||p,null,2))}
`).join('')||'

No extractable BOM. Provide a structured BOM or resolve parser diagnostics.

'} +

Drawing-level dimensions: ${E(eng.semantic?.dimensions?.length??0)} · GD&T: ${E(eng.semantic?.tolerances?.length??0)} · Units: ${E(JSON.stringify(evidence.units||{}))}. PMI association with a specific component requires engineering review.

+

Unsupported entities: ${E(eng.unknown?.length??0)} ${E([...new Set((eng.unknown||[]).map(x=>x.kind))].filter(Boolean).join(', '))} · Diagnostics: ${E((eng.diagnostics?.length??0)+(evidence.assembly?.diagnostics?.length??0)+(intake.diagnostics?.length??0))}. ${E((intake.diagnostics||[]).join('; '))}

+
Engineering evidence, unsupported features and parser diagnostics
${E(JSON.stringify(intake,null,2))}
+ +

`; + const update=()=>{$('#df-source').disabled=!$('#df-parts-consent').checked||!document.querySelector('.df-select:checked')}; + document.querySelectorAll('.df-select,#df-parts-consent').forEach(el=>el.onchange=update); + $('#df-back').onclick=renderForm; + $('#df-source').onclick=async()=>{ + const selected=[...document.querySelectorAll('.df-select:checked')].map(el=>intake.bom[Number(el.dataset.index)]); + const claim={...pending.claim,parts_confirmed:true,drawing_sha256:intake.file_sha256, + selected_parts:selected.map(p=>({part_id:p.part_id,part_no:p.part_no,quantity:p.quantity}))}; + stage('LEGION AT WORK');$('#df-result').textContent='Checking exact component requirements. No supplier requests or payments…'; + try{ + const response=await fetch('/api/industrial/intake',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({...pending,claim})}); + const x=await response.json();if(!response.ok)throw Error(x.code||x.error); + result=x;session=x.demo_session; + stage('REVIEW');renderResult(x); + }catch(e){$('#df-result').textContent='Blocked: '+e.message;} + }; + } function renderResult(r){ const lines=r.lines.map(l=>{ const p=l.demand_pool||{};const a=l.allocation||{}; @@ -80,7 +120,8 @@

Detected component list

${r.intake.bom.map(p=>``).join('')}
PartQtyOrigin
${E(p.part_no)}${E(p.quantity)}${E(p.origin)}

Procurement decisions

${lines||'

Missing machine-readable BOM. Upload CSV/JSON or provide BOM manually.

'} ${r.customer_call_to_action==='REVIEW_AND_CONFIRM_DEMO_ONLY'?``:''} -
`; +
`; + $('#df-payment-review').onclick=()=>{stage('PAYPAL');$('#df-confirm-result').textContent='PayPal authorization: Z. No payment or supplier order is enabled by extraction or purchase-intent confirmation.'}; $('#df-passport').onclick=()=>{ const obj=new Blob([JSON.stringify(r,null,2)],{type:'application/json'}),url=URL.createObjectURL(obj),a=document.createElement('a'); a.href=url;a.download='LEGION_DEMAND_FIRST_PASSPORT.json';a.click();setTimeout(()=>URL.revokeObjectURL(url),2000); diff --git a/docs/PMIX_INSTALL.md b/docs/PMIX_INSTALL.md new file mode 100644 index 0000000..d4e7eff --- /dev/null +++ b/docs/PMIX_INSTALL.md @@ -0,0 +1,138 @@ +# STEP engineering extraction (WO-CAD-002) + +This is an adapter for existing pmix, not a new CAD parser. Extraction and buyer +intent never constitute engineering approval, sourcing authorization or payment +authorization. Independent held-out manufacturing qualification remains **Z**. +No change is made to ZTL, Federation or PayPal authorization rules. + +## Pins and installation + +* pmix **v0.16.1**, upstream tag object `ab3ad1891b969d34b412b5fdb4b52bdf961102a0`, + commit `7fdaed5404678bdda689aa879c27b36441b1fc55` (MIT). +* Linux x86-64 official CI artifact `10306453408`, release workflow `34722565424`. +* Binary SHA-256 `cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43`. +* Experiment ZIP SHA-256 `02afba7871dbad8d2f41c913d952cf5857378b41ee3e50a030b217fce51e5871`. +* Fixture artifact `10306463705`; this is pmix's published test corpus, **not held-out**. +* Python 3.11+; Linux `bubblewrap` and `util-linux` (`prlimit`) are mandatory. + Use OS-maintained packages. User/network/PID namespaces must work under the + deployment policy. If blocked, extraction returns Z with diagnostics: do not + disable isolation or run the purchasing server as privileged root to bypass it. + +The repository includes the immutable original release under `vendor/pmix/`. +The installer checks the archive, executable and every manifest member before +Linux test execution. CI uses the same local archive and needs no file-storage +credential or temporary download URL. + +```sh +sudo apt-get update +sudo apt-get install -y bubblewrap util-linux +python3 -B scripts/install_pmix.py vendor/pmix/PAYPAL_CAD_001_RELEASE_20261110.zip +PYTHONPATH=tests python3 -B -m unittest -v test_pmix_integration.PmixIntegration.test_successful_extraction_and_bom_reconciliation +cd external/cad-experiment +python3 run_benchmark.py +python3 cad_adapter_prototype.py +cd ../.. +python3 -B -m unittest discover -s tests -v +PYTHONPATH=. python3 -B scripts/audit_pmix_provenance.py +python3 -B scripts/build_and_serve.py --evidence demo_evidence --no-serve +``` + +Run the unchanged PayPal suite on **Windows**, its existing supported DPAPI host; +do not remove `WINDOWS_HOST_REQUIRED` to run it on Linux: + +```powershell +cd paypal_adapter +python -m pip install -r requirements.lock +python -B -m unittest discover -s tests -t . -v +``` + +The accepted run used Windows Python 3.14 and the unchanged lock: +`cryptography==46.0.3`, `cffi==2.1.1`, `pycparser==3.12`. +For browser tests use Playwright **1.62.1** and its supported Chromium, or set +`CHROME_EXECUTABLE` to an existing Chrome. `PYTHON` selects the test server's Python. + +```sh +npm ci --prefix scripts/pmix-browser --ignore-scripts +# If no existing Chrome is selected, install this Playwright version's Chromium: +scripts/pmix-browser/node_modules/.bin/playwright install chromium +node scripts/test_pmix_browser.cjs +``` + +Windows browser tests may target the Linux server through localhost forwarding: +start `python3 -B -m deal_rescue.server --evidence demo_evidence --port 18896` in +the Linux checkout with the verified binary installed, then set +`LEGION_CAD_BASE_URL=http://127.0.0.1:18896` before the browser test. Without this +variable the test driver starts and cleans up its own server. + +For an external verified install set `LEGION_PMIX_BINARY` and +`LEGION_CAD_EXPERIMENT`. The binary digest is checked on every extraction. + +## API and bounds + +`POST /api/industrial/engineering-extract` accepts existing JSON transport +`{"filename":"assembly.step","file_b64":"..."}`. It only extracts; it ignores +commerce claims, creates no intent/payment session and sends no supplier request. +Existing intake and demo-confirm APIs remain available with their existing gates. + +STEP limit 16 MiB; legacy formats retain 2 MiB. JSON envelope is at most 23 MB, +socket read deadline 10 s. At most two parser jobs run simultaneously; each pmix +command has 20 s wall time, 10 s CPU, 1 GiB address space, 32 MiB output file, +64 open descriptors, zero core dumps. There are two commands per extraction. +Timeout kills the process group. Scratch input/output is deleted after extraction. +Network/PID/IPC/UTS/user namespaces are isolated; only runtime directories and +the pinned executable are read-only mounted, with private scratch writable. +Host project data, credentials and user home are not mounted into the parser. + +All quantities derive from pmix's assembly relations. Missing references, cycles, +depth >64, >300 parts or >100,000 leaf occurrences fail closed. Repeated leaf +instances reconcile into quantities; distinct part IDs/revisions are not merged. +Properties bind only by pmix-provided part/occurrence labels. Conflicting or +ambiguous material/process values remain Z. PMI is retained in document scope; +no automatic assertion of its association to a purchasable part is made. +Raw pmix JSON, unknown features, diagnostics, normalized/declared units, original +STEP entity references and input SHA-256 are exposed for review. Missing field +values remain null/Z, including unspecified process and revision. + +The five-screen flow is DRAWING → PARTS → LEGION AT WORK → REVIEW → PAYPAL. +PARTS requires explicit selection and intent confirmation before the read-only +planner. STEP results always hold for independent engineering proof. Exact +part/revision/material/process/file/engineering-digest comparisons are screening +only; no extracted field can authorize a coalition, quote, commitment or payment. + +## Qualification boundary and next evidence + +The required 26 reference parses and 22+7 checks establish only this corpus and +mechanism. Production qualification stays Z until an independently curated, +held-out dataset supplies engineer-adjudicated part/PMI associations, materials, +processes, units, revisions and expected quantities. Run the same adapter against +those immutable inputs, score every critical field and false approval, and retain +source digests/annotations. PASS requires the agreed field accuracy threshold, +complete provenance and zero unsupported approvals/effects; mismatches FAIL, +missing ground truth PARTIAL. Without that dataset keep Z and hold procurement. + + +## Hosted verification + +Both `release-checks` matrix jobs must pass on the exact PR head. The Linux job uses +Ubuntu 24.04 with the verified bubblewrap package in `vendor/ubuntu-noble/` and +checks the runner-provided util-linux/prlimit. Ubuntu runs +all 129 tests, the original benchmark and prototype, the independent reference +provenance audit and the real browser flow at both supported widths. Windows +runs the three supported LEGION modules (100 tests), all 46 PayPal adapter +tests and N07/N09/N10/N14. Both jobs retain the dossier audit, evidence +immutability check, payment runtime pin check and secret scan. Ubuntu also +runs the existing server smoke test. + +The browser driver records actual API responses and verifies the exact five +screen transitions, buyer confirmation and Z payment and engineering gates. +Find the screenshots, API traces and test logs in the Linux Actions artifact. +The verified release package carries the final exact-head CI attestation. + + +On Ubuntu 24.04 with AppArmor user namespace restrictions enabled, configure +an executable-specific user namespace policy for the installed bwrap. CI +loads `.github/apparmor/pmix-bwrap` on its disposable runner. It keeps the +system-wide restriction and the adapter's namespace, capability and resource +limits in place. For deployment, use a policy approved for the installed +binary and run the ordinary-user extraction smoke test before serving uploads. +See the [Ubuntu 24.04 release notes](https://documentation.ubuntu.com/release-notes/24.04/#unprivileged-user-namespace-restrictions). diff --git a/docs/pmix.lock.json b/docs/pmix.lock.json new file mode 100644 index 0000000..063a286 --- /dev/null +++ b/docs/pmix.lock.json @@ -0,0 +1,14 @@ +{ + "parser": "pmix", + "version": "0.16.1", + "upstream": "https://github.com/jchultarsky101/pmix", + "commit": "7fdaed5404678bdda689aa879c27b36441b1fc55", + "platform": "x86_64-unknown-linux-gnu", + "artifact_id": 10306453408, + "binary_sha256": "cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43", + "release_zip_sha256": "02afba7871dbad8d2f41c913d952cf5857378b41ee3e50a030b217fce51e5871", + "browser_test_dependency": "playwright==1.62.1", + "required_os_tools": ["bubblewrap", "util-linux/prlimit"], + "tested_os_packages": {"bubblewrap": "0.9.0-1ubuntu0.3", "util-linux": "2.39.3-9ubuntu6.6"}, + "os_dependency_execution_status": "VERIFIED_UNPRIVILEGED_WSL_LINUX" +} diff --git a/scripts/audit_pmix_provenance.py b/scripts/audit_pmix_provenance.py new file mode 100644 index 0000000..63ca7aa --- /dev/null +++ b/scripts/audit_pmix_provenance.py @@ -0,0 +1,25 @@ +import hashlib,json,re +from pathlib import Path +from deal_rescue.industrial.pmix_adapter import extract +experiment=Path('external/cad-experiment') +cases=json.loads((experiment/'BENCHMARK_RESULTS.json').read_bytes())['cases'] +rows=[] +for case in cases: + raw=(experiment/case['source_path']).read_bytes() + source_hash=hashlib.sha256(raw).hexdigest() + assert source_hash==case['sha256'] + declared={int(x) for x in re.findall(rb'^\s*#(\d+)\s*=',raw,re.M)} + data=extract(raw) + records=[field for part in data['bom'] for field in part['fields'].values() if field['value'] is not None] + for kind in ('dimensions','tolerances','datums'): + records.extend(data['engineering']['semantic'][kind]) + for record in records: + assert record['file_sha256']==source_hash and record['engineering_verdict']=='Z',case['case'] + assert record['source_refs'],case['case'] + for ref in record['source_refs']: + assert re.fullmatch(r'#[0-9]+',ref) and int(ref[1:]) in declared,(case['case'],ref) + assert data['checkout_enabled'] is False and data['procurement_eligible'] is False + assert data['payment_effects']==data['supplier_effects']==0 + rows.append({'case':case['case'],'sha256':source_hash,'critical_records':len(records),'valid_entity_links':sum(len(x['source_refs']) for x in records)}) +assert len(rows)==26 and sum(x['critical_records'] for x in rows)==860 +print(json.dumps({'result':'PASS','cases':rows,'critical_records':860,'files':26},indent=2)) diff --git a/scripts/install_pmix.py b/scripts/install_pmix.py new file mode 100644 index 0000000..ecdbe4d --- /dev/null +++ b/scripts/install_pmix.py @@ -0,0 +1,47 @@ +"""Install ONLY the hash-pinned pmix from an already downloaded WO-CAD-001 ZIP. + +python -B scripts/install_pmix.py /path/PAYPAL_CAD_001_RELEASE_20261110.zip +No network, archive path extraction or execution of unverified code. +""" +import argparse +import hashlib +from pathlib import Path +import zipfile + +ZIP_SHA256='02afba7871dbad8d2f41c913d952cf5857378b41ee3e50a030b217fce51e5871' +BIN_SHA256='cc44b80916fd03c03b74bfa5b011061583c2b96cfc0ca0685ca93cfe1ca0ae43' +ROOT=Path(__file__).resolve().parents[1] + + +def install(archive): + if archive.stat().st_size > 32*1024*1024: + raise ValueError('RELEASE_ARCHIVE_SIZE_LIMIT') + if hashlib.sha256(archive.read_bytes()).hexdigest()!=ZIP_SHA256: + raise ValueError('RELEASE_ARCHIVE_CHECKSUM_MISMATCH') + with zipfile.ZipFile(archive) as z: + binary=z.read('tools/pmix-x86_64-unknown-linux-gnu/pmix') + if hashlib.sha256(binary).hexdigest()!=BIN_SHA256: + raise ValueError('BINARY_CHECKSUM_MISMATCH') + dest=ROOT/'external/pmix';dest.mkdir(parents=True,exist_ok=True) + (dest/'pmix').write_bytes(binary);(dest/'pmix').chmod(0o755) + (dest/'LICENSE.md').write_bytes(z.read('tools/pmix-0.16.1/LICENSE.md')) + # Fixed manifest-defined paths, never ZipFile.extractall on user content. + manifest=z.read('SHA256SUMS').decode() + for line in manifest.splitlines(): + digest,name=line.split(' ',1) + path=Path(name) + if path.is_absolute() or '..' in path.parts or '\\' in name: + raise ValueError('INVALID_MANIFEST_PATH') + data=z.read(name) + if hashlib.sha256(data).hexdigest()!=digest: + raise ValueError('RELEASE_MEMBER_CHECKSUM_MISMATCH') + target=ROOT/'external/cad-experiment'/path + target.parent.mkdir(parents=True,exist_ok=True);target.write_bytes(data) + (ROOT/'external/cad-experiment/SHA256SUMS').write_text(manifest) + (ROOT/'external/cad-experiment/tools/pmix-x86_64-unknown-linux-gnu/pmix').chmod(0o755) + print('Verified pmix 0.16.1 and original experiment installed; no binary executed.') + + +if __name__=='__main__': + p=argparse.ArgumentParser();p.add_argument('archive',type=Path) + install(p.parse_args().archive) diff --git a/scripts/pmix-browser/package-lock.json b/scripts/pmix-browser/package-lock.json new file mode 100644 index 0000000..09533d7 --- /dev/null +++ b/scripts/pmix-browser/package-lock.json @@ -0,0 +1,59 @@ +{ + "name": "legion-pmix-browser-tests", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "legion-pmix-browser-tests", + "version": "1.0.0", + "dependencies": { + "playwright": "1.62.1" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + } + } +} diff --git a/scripts/pmix-browser/package.json b/scripts/pmix-browser/package.json new file mode 100644 index 0000000..e4eee9e --- /dev/null +++ b/scripts/pmix-browser/package.json @@ -0,0 +1,6 @@ +{ + "name": "legion-pmix-browser-tests", + "version": "1.0.0", + "private": true, + "dependencies": {"playwright": "1.62.1"} +} diff --git a/scripts/test_pmix_browser.cjs b/scripts/test_pmix_browser.cjs new file mode 100644 index 0000000..b22f036 --- /dev/null +++ b/scripts/test_pmix_browser.cjs @@ -0,0 +1,94 @@ +/* Real local endpoint E2E. No mocked extraction, quotes, supplier or payment calls. */ +const fs=require('fs'),path=require('path'),assert=require('assert'); +const {createHash}=require('crypto'); +const {spawn}=require('child_process'); +const {chromium}=require(process.env.PLAYWRIGHT_MODULE||require.resolve('playwright',{paths:[path.join(__dirname,'pmix-browser')]})); +const root=path.resolve(__dirname,'..'); +const out=path.resolve(process.env.LEGION_CAD_EVIDENCE||path.join(root,'cad_evidence')); +fs.mkdirSync(out,{recursive:true}); +const fixture=path.join(process.env.LEGION_CAD_EXPERIMENT||path.join(root,'external/cad-experiment'),'tools/pmix-0.16.1/tests/fixtures/synthetic/assembly_properties.stp'); +const logfile=fs.openSync(path.join(out,'browser-server.log'),'w'); +const port=Number(process.env.LEGION_CAD_TEST_PORT||18896); +const server=process.env.LEGION_CAD_BASE_URL?null:spawn(process.env.PYTHON||'python3',['-B','-m','deal_rescue.server','--evidence','demo_evidence','--port',String(port)],{cwd:root,env:process.env,windowsHide:true,stdio:['ignore',logfile,logfile]}); +const base=process.env.LEGION_CAD_BASE_URL||`http://127.0.0.1:${port}`; +(async()=>{ + let browser;const results=[]; + try{ + const ready=()=>new Promise(resolve=>{const req=require('http').get(base,r=>{r.resume();resolve(r.statusCode===200)});req.on('error',()=>resolve(false));req.setTimeout(1000,()=>{req.destroy();resolve(false)})}); + let started=false;for(let i=0;i<50;i++){if(await ready()){started=true;break}await new Promise(r=>setTimeout(r,100));} + assert(started,'test server must start'); + browser=await chromium.launch({headless:true,...(process.env.CHROME_EXECUTABLE?{executablePath:process.env.CHROME_EXECUTABLE}:{})}); + for(const width of [1440,390]){ + const page=await browser.newPage({viewport:{width,height:950}});const calls=[];const errors=[];const api=[]; + await page.addInitScript(()=>{ + window.cadScreens=[]; + new MutationObserver(records=>{ + for(const record of records){ + if(record.target.id!=='legion-demand-intake')continue; + const current=record.target.dataset.screen; + if(current!==window.cadScreens.at(-1))window.cadScreens.push(current); + } + }).observe(document,{subtree:true,attributes:true,attributeFilter:['data-screen']}); + }); + page.on('pageerror',e=>errors.push(String(e))); + page.on('request',r=>{if(r.method()==='POST')calls.push(new URL(r.url()).pathname)}); + const recordResponse=async promise=>{ + const response=await promise; + const request=response.request(); + const payload=request.postDataJSON(); + const uploaded=payload.file_b64; + if(uploaded){ + payload.uploaded_sha256=createHash('sha256').update(Buffer.from(uploaded,'base64')).digest('hex'); + delete payload.file_b64; + } + const body=await response.json(); + api.push({method:request.method(),url:response.url(),status:response.status(),request:payload,response:body}); + assert(response.ok()); + assert.equal(new URL(response.url()).origin,new URL(base).origin); + return body; + }; + try{ + await page.goto(base);await page.locator('#legion-start-drawing').click(); + await page.screenshot({path:path.join(out,`drawing-${width}.png`)}); + await page.locator('#df-file').setInputFiles(fixture); + const extractedResponse=page.waitForResponse(r=>new URL(r.url()).pathname==='/api/industrial/engineering-extract'); + await page.locator('#df-form button[type=submit]').click(); + const extraction=await recordResponse(extractedResponse); + assert.equal(extraction.file_sha256,createHash('sha256').update(fs.readFileSync(fixture)).digest('hex')); + assert.deepEqual(Object.fromEntries(extraction.bom.map(p=>[p.part_no,p.quantity])),{'SYN-BRACKET':1,'SYN-PIN':2}); + await page.waitForSelector('[data-screen="PARTS"]',{timeout:60000}); + await page.screenshot({path:path.join(out,`parts-${width}.png`)}); + assert.deepEqual(calls,['/api/industrial/engineering-extract']); + assert(await page.locator('#df-source').isDisabled()); + assert.equal(await page.locator('.df-select').count(),2,'real pmix must extract both components'); + assert((await page.locator('#df-result').innerText()).includes('SYN-STEEL-4')); + assert((await page.locator('#df-result').innerText()).includes('SYN-ALLOY-17')); + assert(await page.locator('#legion-demand-intake').evaluate(el=>el.scrollWidth<=el.clientWidth+1),'PARTS must fit the supported viewport'); + assert(await page.locator('#df-form').isHidden()); + await page.locator('.df-select').first().check();assert(await page.locator('#df-source').isDisabled()); + await page.locator('#df-parts-consent').check();assert(await page.locator('#df-source').isEnabled()); + // No sourcing until explicit confirmation. Continue is still read-only. + const reviewResponse=page.waitForResponse(r=>new URL(r.url()).pathname==='/api/industrial/intake'); + await page.locator('#df-source').click();await page.waitForSelector('[data-screen="REVIEW"]',{timeout:60000}); + const review=await recordResponse(reviewResponse); + await page.screenshot({path:path.join(out,`review-${width}.png`)}); + assert.equal(review.new_paypal_captures,0);assert.equal(review.supplier_requests_sent,0); + assert.equal(review.live_execution_gate,'Z');assert.equal(review.engineering_verdict,'Z'); + assert.equal(review.parts_confirmed,true); + await page.locator('#df-payment-review').click(); + assert((await page.locator('#df-confirm-result').innerText()).includes('PayPal authorization: Z')); + await page.screenshot({path:path.join(out,`paypal-${width}.png`)}); + const stages=await page.evaluate(()=>window.cadScreens); + assert.deepEqual(stages,['DRAWING','PARTS','LEGION AT WORK','REVIEW','PAYPAL']); + assert(calls.every(p=>['/api/industrial/intake','/api/industrial/engineering-extract'].includes(p))); + assert.equal(errors.length,0); + results.push({width,status:'PASS',stages,post_requests:calls,errors,parts_confirmed:review.parts_confirmed, + engineering_verdict:review.engineering_verdict,payment_effects:review.new_paypal_captures, + supplier_requests_sent:review.supplier_requests_sent,horizontal_overflow:false}); + }catch(e){results.push({width,status:'FAIL',error:String(e),post_requests:calls,errors});} + finally{fs.writeFileSync(path.join(out,`api-${width}.json`),JSON.stringify(api,null,2));await page.close();} + } + }catch(e){results.push({status:'FAIL',error:String(e)});} + finally{if(browser)await browser.close();if(server)server.kill();fs.closeSync(logfile);fs.writeFileSync(path.join(out,'BROWSER_RESULTS.json'),JSON.stringify(results,null,2));} + console.log(JSON.stringify(results,null,2));if(results.length!==2||results.some(r=>r.status!=='PASS'))process.exitCode=1; +})(); diff --git a/tests/test_pmix_integration.py b/tests/test_pmix_integration.py new file mode 100644 index 0000000..8bae56f --- /dev/null +++ b/tests/test_pmix_integration.py @@ -0,0 +1,273 @@ +"""Real pinned binary integration + adversarial gate and HTTP tests; no skips. + +Set LEGION_CAD_EXPERIMENT to the verified WO-CAD-001 extraction directory. +Tests fail if required reference inputs/binary/sandbox are unavailable. +""" +import base64 +import copy +import hashlib +import http.client +import json +import os +from pathlib import Path +import subprocess +import tempfile +import threading +import unittest +from unittest.mock import patch + +from deal_rescue.industrial import pmix_adapter as pmix, cad_bom, workflow +from deal_rescue import server + +ROOT = Path(__file__).resolve().parents[1] +EXPERIMENT = Path(os.environ.get('LEGION_CAD_EXPERIMENT', ROOT/'external/cad-experiment')).resolve() +FIXTURES = EXPERIMENT/'tools/pmix-0.16.1/tests/fixtures' + + +def raw(name, family='synthetic'): + return (FIXTURES/family/name).read_bytes() + + +class PmixIntegration(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.raw = raw('assembly_properties.stp') + cls.extraction = pmix.extract(cls.raw) + + def test_pinned_binary_checksum(self): + self.assertEqual(hashlib.sha256(pmix._binary().read_bytes()).hexdigest(), pmix.BINARY_SHA256) + + def test_successful_extraction_and_bom_reconciliation(self): + self.assertEqual({p['part_no']:p['quantity'] for p in self.extraction['bom']}, + {'SYN-BRACKET':1,'SYN-PIN':2}) + self.assertEqual(sum(p['quantity'] for p in self.extraction['bom']),3) + + def test_explicit_material_by_occurrence(self): + self.assertEqual({p['part_no']:p['material'] for p in self.extraction['bom']}, + {'SYN-BRACKET':'SYN-ALLOY-17','SYN-PIN':'SYN-STEEL-4'}) + + def test_all_26_reference_steps_parse_in_sandbox(self): + benchmark=json.loads((EXPERIMENT/'BENCHMARK_RESULTS.json').read_text()) + self.assertEqual(len(benchmark['cases']),26) + audit=[] + for case in benchmark['cases']: + with self.subTest(case=case['case']): + data=(EXPERIMENT/case['source_path']).read_bytes() + self.assertEqual(hashlib.sha256(data).hexdigest(),case['sha256']) + result=pmix.extract(data) + self.assertTrue(result['bom']) + self.assertEqual(result['engineering_verdict'],'Z') + self.assertFalse(result['checkout_enabled']) + critical=0 + for part in result['bom']: + for field in part['fields'].values(): + self.assertEqual(field['file_sha256'],case['sha256']) + self.assertEqual(field['engineering_verdict'],'Z') + if field['value'] is not None: + self.assertTrue(field['source_refs']) + self.assertEqual(field['extraction'],'T') + critical+=1 + else:self.assertEqual(field['extraction'],'Z') + engineering=result['engineering'] + for category in ('dimensions','tolerances','datums'): + for record in engineering['semantic'][category]: + self.assertTrue(record['source_refs']) + self.assertEqual(record['file_sha256'],case['sha256']) + self.assertEqual(record['engineering_verdict'],'Z') + critical+=1 + audit.append({'case':case['case'],'sha256':case['sha256'], + 'critical_fields_with_provenance':critical, + 'dimensions':len(engineering['semantic']['dimensions']), + 'gdt':len(engineering['semantic']['tolerances']), + 'datums':len(engineering['semantic']['datums']), + 'unsupported':len(engineering['unknown']), + 'diagnostics':len(engineering['diagnostics']), + 'engineering_verdict':'Z','checkout_enabled':False}) + print('PMIX_REFERENCE_AUDIT '+json.dumps(audit),flush=True) + + def test_gdt_dimension_units_source_refs(self): + x=pmix.extract(raw('nist_ctc_01_asme1_ap242-e1.stp','nist')) + dims=x['engineering']['semantic']['dimensions'] + dim=next(d for d in dims if '#120' in d['source_refs']) + self.assertEqual(dim['value'],{'value':35.0,'unit':'mm'}) + self.assertEqual(dim['file_sha256'],x['file_sha256']) + tol=next(t for t in x['engineering']['semantic']['tolerances'] if '#21' in t['source_refs']) + self.assertEqual(tol['value']['value'],0.75) + + def test_units_preserved_without_geometry_inference(self): + x=pmix.extract(raw('plate_one_hole_inches.stp')) + self.assertTrue(x['units']) + self.assertEqual(x['assembly']['units']['declared_length'],'in') + self.assertFalse(x['procurement_eligible']) + + def test_missing_fields_remain_z(self): + for p in self.extraction['bom']: + for name in ('revision','process'): + self.assertIsNone(p[name]) + self.assertEqual(p['fields'][name]['extraction'],'Z') + self.assertFalse(p['procurement_eligible']) + + def test_critical_field_provenance(self): + for p in self.extraction['bom']: + for f in p['fields'].values(): + self.assertEqual(f['file_sha256'],self.extraction['file_sha256']) + self.assertEqual(f['engineering_verdict'],'Z') + if f['value'] is not None:self.assertTrue(f['source_refs']) + + def test_revision_difference_preserved(self): + # Controlled STEP mutation is parsed by pmix, not by adapter string logic. + data=raw('assembly_two_parts.stp') + self.assertIn(b"PRODUCT_DEFINITION_FORMATION('A',",data) + self.assertIn(b"PRODUCT_DEFINITION_FORMATION('B',",data) + def revised(revision): + # This fixture explicitly contains both A and B formations. Replace + # both in the controlled variants, rather than assuming all were A. + changed=data + for original in (b'A',b'B'): + changed=changed.replace(b"PRODUCT_DEFINITION_FORMATION('"+original+b"',", + b"PRODUCT_DEFINITION_FORMATION('"+revision+b"',") + return pmix.extract(changed) + a=revised(b'REV-A') + b=revised(b'REV-B') + self.assertEqual({p['revision'] for p in a['bom']},{'REV-A'}) + self.assertEqual({p['revision'] for p in b['bom']},{'REV-B'}) + self.assertNotEqual(a['file_sha256'],b['file_sha256']) + + def test_malformed_rejected_and_visible(self): + r=cad_bom.extract('bad.step',b'not a STEP document') + self.assertEqual(r['extraction'],'Z');self.assertEqual(r['bom'],[]) + self.assertTrue(r['diagnostics']) + + def test_missing_assembly_reference(self): + product=copy.deepcopy(self.extraction['assembly']) + product['relations'][0]['child']='part:missing' + with self.assertRaisesRegex(pmix.PmixError,'ASSEMBLY_PART_NOT_DECLARED'): + pmix.adapt(self.raw,self.extraction['engineering'],product) + + def test_cycle_rejected(self): + product=copy.deepcopy(self.extraction['assembly']) + product['relations'].append(dict(product['relations'][0],parent=product['relations'][0]['child'],child=product['roots'][0])) + with self.assertRaises(pmix.PmixError):pmix.adapt(self.raw,self.extraction['engineering'],product) + + def test_fabricated_entity_reference_rejected(self): + product=copy.deepcopy(self.extraction['assembly']) + product['parts'][0]['source_refs']=['#999999999'] + with self.assertRaisesRegex(pmix.PmixError,'SOURCE_ENTITY_NOT_DECLARED'): + pmix.adapt(self.raw,self.extraction['engineering'],product) + + def test_diagnostics_and_unsupported_retained(self): + x=pmix.extract(raw('nist_stc_09_asme1_ap242-e4.stp','nist')) + self.assertEqual(len(x['engineering']['unknown']),17) + self.assertEqual(x['engineering_verdict'],'Z') + + def test_missing_binary_fail_closed(self): + with patch.dict(os.environ,{'LEGION_PMIX_BINARY':'/nonexistent/pmix'}): + r=cad_bom.extract('x.step',self.raw) + self.assertEqual(r['extraction'],'Z');self.assertIn('PMIX_BINARY_MISSING',r['diagnostics'][0]) + + def test_wrong_checksum_never_executes(self): + with tempfile.NamedTemporaryFile() as f: + f.write(b'wrong binary');f.flush() + with patch.dict(os.environ,{'LEGION_PMIX_BINARY':f.name}),patch.object(subprocess,'Popen') as call: + r=cad_bom.extract('x.step',self.raw) + call.assert_not_called() + self.assertIn('CHECKSUM_MISMATCH',r['diagnostics'][0]) + + def test_sandbox_missing_no_fallback(self): + with patch.object(pmix.shutil,'which',return_value=None): + r=cad_bom.extract('x.step',self.raw) + self.assertEqual(r['extraction'],'Z');self.assertIn('SANDBOX_DEPENDENCY_MISSING',r['diagnostics'][0]) + + def test_timeout_kills_group(self): + with tempfile.TemporaryDirectory() as tmp: + p=Path(tmp);(p/'input.stp').write_bytes(self.raw) + with patch.object(pmix,'TIMEOUT',0.000001): + with self.assertRaisesRegex(pmix.PmixError,'TIMEOUT'): + pmix._run(pmix._binary(),p,'extract') + + def test_upload_size(self): + with self.assertRaises(cad_bom.IntakeError):cad_bom.extract('big.step',b'x'*(pmix.MAX_BYTES+1)) + + def test_read_only_extract_never_changes_authority(self): + r=cad_bom.extract('x.step',self.raw) + self.assertEqual(r['extraction'],'T');self.assertEqual(r['engineering_verdict'],'Z') + self.assertFalse(r['sent_to_suppliers']);self.assertFalse(r['raw_file_retained']) + self.assertEqual(r['engineering_evidence']['payment_effects'],0) + + def test_confirmation_required_before_matching(self): + with patch.object(workflow.core,'group_demand') as grouped,patch.object(workflow.core,'shortlist_sources') as sources: + r=workflow.run_intake('x.step',self.raw,{'demo':True}) + grouped.assert_not_called();sources.assert_not_called() + self.assertEqual(r['overall'],'CONFIRM_PARTS_REQUIRED') + self.assertEqual(r['live_execution_gate'],'Z') + + def test_confirmed_extraction_cannot_trigger_payment_or_coalition(self): + p=self.extraction['bom'][0] + claim={'demo':True,'parts_confirmed':True,'drawing_sha256':self.extraction['file_sha256'], + 'selected_parts':[{'part_id':p['part_id'],'quantity':p['quantity']}], + 'engineering_verdict':'T','payment_authority':'T','checkout_enabled':True} + with patch.object(workflow.core,'group_demand') as grouped: + r=workflow.run_intake('x.step',self.raw,claim);grouped.assert_not_called() + self.assertEqual(r['new_paypal_captures'],0);self.assertEqual(r['supplier_requests_sent'],0) + self.assertEqual(r['engineering_verdict'],'Z');self.assertEqual(r['live_execution_gate'],'Z') + self.assertNotIn('demo_session',r) + + def test_selection_quantity_cannot_be_changed(self): + p=self.extraction['bom'][0] + with self.assertRaisesRegex(ValueError,'QUANTITY_MISMATCH'): + workflow.run_intake('x.step',self.raw,{'selected_parts':[{'part_id':p['part_id'],'quantity':999}]}) + + def test_incompatible_parts_never_match(self): + a={'part_no':'PIN','revision':'A','material':'Steel','process':'CNC', + 'file_sha256':'a'*64,'engineering_digest':'b'*64} + for field in a: + with self.subTest(field=field): + b=dict(a);b[field]='different' + self.assertEqual(workflow.engineering_compatibility(a,b)['verdict'],'F') + + def test_unknown_never_becomes_approved(self): + a={'part_no':'PIN','revision':'A','material':'Steel','process':'CNC', + 'file_sha256':'a'*64,'engineering_digest':'b'*64} + for field in a: + with self.subTest(field=field): + b=dict(a);b[field]=None + self.assertEqual(workflow.engineering_compatibility(a,b)['verdict'],'Z') + self.assertFalse(workflow.engineering_compatibility(a,a)['procurement_eligible']) + + +class EngineeringHTTP(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.http=server.ThreadingHTTPServer(('127.0.0.1',0),server.H) + cls.thread=threading.Thread(target=cls.http.serve_forever,daemon=True);cls.thread.start() + + @classmethod + def tearDownClass(cls):cls.http.shutdown();cls.http.server_close();cls.thread.join() + + def post(self,path,body,headers=None): + c=http.client.HTTPConnection('127.0.0.1',self.http.server_port,timeout=60) + c.request('POST',path,json.dumps(body),headers or {'Content-Type':'application/json'}) + r=c.getresponse();result=(r.status,json.loads(r.read()));c.close();return result + + def test_endpoint_real_extraction_no_session(self): + sessions=dict(server.DEMO_SESSIONS) + status,result=self.post('/api/industrial/engineering-extract',{ + 'filename':'x.step','file_b64':base64.b64encode(raw('assembly_two_parts.stp')).decode(), + 'claim':{'checkout_enabled':True,'payment_authority':'T'}}) + self.assertEqual(status,200);self.assertEqual(result['extraction'],'T') + self.assertEqual(server.DEMO_SESSIONS,sessions) + + def test_cross_origin_denied(self): + self.assertEqual(self.post('/api/industrial/engineering-extract',{}, + {'Content-Type':'application/json','Origin':'https://attacker.invalid'})[0],403) + + def test_bad_base64_rejected(self): + self.assertEqual(self.post('/api/industrial/engineering-extract',{'filename':'x.step','file_b64':'!!!'})[0],422) + + def test_legacy_csv_endpoint_preserved(self): + code,result=self.post('/api/industrial/engineering-extract',{ + 'filename':'x.csv','file_b64':base64.b64encode(b'part_no,qty\nPIN,2\n').decode()}) + self.assertEqual(code,200);self.assertEqual(result['bom'][0]['quantity'],2) + + +if __name__=='__main__':unittest.main() diff --git a/third_party/pmix.LICENSE.md b/third_party/pmix.LICENSE.md new file mode 100644 index 0000000..9426d9b --- /dev/null +++ b/third_party/pmix.LICENSE.md @@ -0,0 +1,21 @@ +# MIT License + +Copyright (c) 2026 Julian Chultarsky + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/pmix/PAYPAL_CAD_001_RELEASE_20261110.zip b/vendor/pmix/PAYPAL_CAD_001_RELEASE_20261110.zip new file mode 100644 index 0000000..6f84e64 Binary files /dev/null and b/vendor/pmix/PAYPAL_CAD_001_RELEASE_20261110.zip differ diff --git a/vendor/ubuntu-noble/BUBBLEWRAP_COPYRIGHT b/vendor/ubuntu-noble/BUBBLEWRAP_COPYRIGHT new file mode 100644 index 0000000..74c43c0 --- /dev/null +++ b/vendor/ubuntu-noble/BUBBLEWRAP_COPYRIGHT @@ -0,0 +1,89 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: bubblewrap +Source: https://github.com/containers/bubblewrap/ + +Files: * +Copyright: + 2016 Alexander Larsson + 2021 Simon McVittie + 2022 Collabora Ltd. +License: LGPL-2+ + +Files: bubblewrap.jpg +Copyright: none +License: pd-bubblewrap.jpg + Placed in the public domain by the photographer "dancing_stupidity". + +Files: debian/* +Copyright: + 2016 Laszlo Boszormenyi (GCS) + 2016-2024 Simon McVittie + 2016-2024 Collabora Ltd. +License: LGPL-2+ + +Files: + git.mk +Copyright: + 2009, Red Hat, Inc. + 2010-2013 Behdad Esfahbod +License: permissive-git.mk + Copying and distribution of this file, with or without modification, + is permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +Files: m4/attributes.m4 +Copyright: + 2006-2008 Diego Pettenò + 2006-2008 xine project + 2012 Lucas De Marchi +License: GPL-2+ with Autoconf exception + +License: LGPL-2+ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + . + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + . + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA. + . + On Debian systems, the full text of the GNU Library General Public License + version 2 can be found in the file `/usr/share/common-licenses/LGPL-2'. + +License: GPL-2+ with Autoconf exception + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + . + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + . + As a special exception, the copyright owners of the + macro gives unlimited permission to copy, distribute and modify the + configure scripts that are the output of Autoconf when processing the + Macro. You need not follow the terms of the GNU General Public + License when using or distributing such scripts, even though portions + of the text of the Macro appear in them. The GNU General Public + License (GPL) does govern all other use of the material that + constitutes the Autoconf Macro. + . + This special exception to the GPL applies to versions of the + Autoconf Macro released by this project. When you make and + distribute a modified version of the Autoconf Macro, you may extend + this special exception to the GPL to apply to your modified version as + well. diff --git a/vendor/ubuntu-noble/README.md b/vendor/ubuntu-noble/README.md new file mode 100644 index 0000000..8af4a58 --- /dev/null +++ b/vendor/ubuntu-noble/README.md @@ -0,0 +1,11 @@ +# Ubuntu 24.04 amd64 CI dependency + +The checked-in package is the Ubuntu Noble updates/security binary for bubblewrap +0.9.0-1ubuntu0.3. Its SHA-256 matches the package index authenticated by Ubuntu +APT. The package and source are published in the official Ubuntu archive. + +- Binary: https://archive.ubuntu.com/ubuntu/pool/main/b/bubblewrap/bubblewrap_0.9.0-1ubuntu0.3_amd64.deb +- Source package: https://launchpad.net/ubuntu/+source/bubblewrap/0.9.0-1ubuntu0.3 + +CI verifies SHA-256 before installing the package. The Ubuntu runner image +supplies util-linux/prlimit. The smoke test requires unprivileged sandbox execution. diff --git a/vendor/ubuntu-noble/SHA256SUMS b/vendor/ubuntu-noble/SHA256SUMS new file mode 100644 index 0000000..0917ef5 --- /dev/null +++ b/vendor/ubuntu-noble/SHA256SUMS @@ -0,0 +1 @@ +2461f1beee9cb04c8942739fe1a2b37e7b7c2a3d518f0779dc75f9245baa3094 bubblewrap_0.9.0-1ubuntu0.3_amd64.deb diff --git a/vendor/ubuntu-noble/bubblewrap_0.9.0-1ubuntu0.3_amd64.deb b/vendor/ubuntu-noble/bubblewrap_0.9.0-1ubuntu0.3_amd64.deb new file mode 100644 index 0000000..1dca374 Binary files /dev/null and b/vendor/ubuntu-noble/bubblewrap_0.9.0-1ubuntu0.3_amd64.deb differ