diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a3faad..48b373f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,8 @@ name: Continuous verification +env: + PYTHONUTF8: "1" + on: push: branches: [main] @@ -46,8 +49,15 @@ jobs: - name: Compile Python sources run: uv run python -m compileall -q src app.py tools - - name: Validate release evidence - run: | - uv run python tools/check_release_consistency.py - uv run python tools/check_website_data.py - uv run python tools/check_release_assets.py + # Keep native commands in separate steps. On PowerShell a failed native + # command in a multiline block does not necessarily terminate the step, + # so a later success could otherwise turn a release validation red into + # a misleading green check. + - name: Validate submission evidence + run: uv run python tools/check_release_consistency.py + + - name: Validate reviewer website projection + run: uv run python tools/check_website_data.py + + - name: Validate detached release assets + run: uv run python tools/check_release_assets.py diff --git a/.gitignore b/.gitignore index 823bf8a..b587030 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ deliverables/* !deliverables/GOAI_VisionDataGate_BoundlessAgents_20260816.pdf !deliverables/GOAI_VisionDataGate_BoundlessAgents_20260816.pptx !deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.receipt.json +!deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json !deliverables/VisionDataGate_GOAI_FinalDemo_20260813.mp4 09_assets/ui_qa_frozen_*/ deliverables/_qa/ diff --git a/10_reports/FINAL_QA_REPORT_20260816.json b/10_reports/FINAL_QA_REPORT_20260816.json index b4692c1..c1a4374 100644 --- a/10_reports/FINAL_QA_REPORT_20260816.json +++ b/10_reports/FINAL_QA_REPORT_20260816.json @@ -1,5 +1,5 @@ { - "schema_version": "visiondata-gate.final-qa.v5", + "schema_version": "visiondata-gate.final-qa.v6", "status": "LOCAL_RC_READY_ACCOUNT_ACTIONS_PENDING", "release_id": "vdg-20260816-rc1", "report_filename_date": "2026-08-16", @@ -13,9 +13,9 @@ "infra_role": "动态补证、失败关闭、证据追踪、API 与复用后台" }, "engineering": { - "verified_at": "2026-08-15T12:56:51+08:00", + "verified_at": "2026-08-15T23:48:00+08:00", "python": "3.12.5", - "pytest_passed": 164, + "pytest_passed": 166, "pytest_skipped": 1, "pytest_failed": 0, "pytest_warning_count": 1, @@ -85,13 +85,13 @@ }, "submission_package": { "status": "PREFLIGHT_AUDIT_PASS_FINAL_EXACT_RESULT_DETACHED", - "path": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip", + "path": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip", "deterministic_builder": true, "zip_sha256_embedded": false, - "detached_receipt": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.receipt.json", + "detached_receipt": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json", "preflight_audit": { - "entry_count": 525, - "verified_file_count": 524, + "entry_count": 532, + "verified_file_count": 531, "clean_extract_verified": true, "issue_count": 0 } @@ -109,7 +109,8 @@ "production_deployment_validated": false, "full_omni_gate_certified": false, "official_submission_receipt_received": false, - "top_level_license_confirmed": false, - "formal_notice_confirmed": false + "top_level_license_confirmed": true, + "formal_notice_confirmed": true, + "third_party_review_required_count": 0 } } diff --git a/10_reports/FINAL_QA_REPORT_20260816.md b/10_reports/FINAL_QA_REPORT_20260816.md index cbdf016..b7107ed 100644 --- a/10_reports/FINAL_QA_REPORT_20260816.md +++ b/10_reports/FINAL_QA_REPORT_20260816.md @@ -1,6 +1,6 @@ # VisionData Gate|GOAI 初赛终版 QA 报告 -报告对象:`vdg-20260816-rc1`。本文件名对应初赛截止版本;所有时间均使用 Asia/Shanghai。 +报告对象:提交包 `v0.1.0-goai-rc2`,冻结证据 `vdg-20260816-rc1`。本文件名对应初赛截止版本;所有时间均使用 Asia/Shanghai。 ## 当前结论 @@ -8,7 +8,7 @@ VisionData Gate 的参赛主叙事为 GOAI 赛道二“无界应用 Boundless Agents”中的 AI+工业制造应用:工业视觉数据治理与发布 Agent。Agent Infra 仅作为动态补证、工具失败关闭、证据追踪、API 接入和组件复用的可信后台。 -核心应用、公开证据 release、在线评委网站、Reviewer Mode、PPT 与 PDF 已存在。2026-08-15 12:56(Asia/Shanghai)完成终版工程门禁:pytest 为 `164 passed / 1 skipped / 1 warning / 0 failed`;Ruff rules、Ruff format、compileall 与 `uv lock --check` 均通过。跳过项是当前 Windows 环境不可创建文件 symlink;警告来自 Starlette TestClient 的依赖弃用提示,不是业务测试失败。完整候选包已在新 cleanroom 中按 `uv.lock` 安装 55 个包并得到相同测试结果。 +核心应用、公开证据 release、在线评委网站、Reviewer Mode、PPT 与 PDF 已存在。2026-08-15 23:48(Asia/Shanghai)完成 RC2 本地工程门禁:pytest 为 `166 passed / 1 skipped / 1 warning / 0 failed`;Ruff rules、Ruff format、compileall 与 `uv lock --check` 均通过。新增回归测试覆盖 Windows `cp1252` 输出和 CI 原生命令失败传播。跳过项是当前 Windows 环境不可创建文件 symlink;警告来自 Starlette TestClient 的依赖弃用提示,不是业务测试失败。GitHub Windows/Linux CI 结果以 RC2 tag 对应工作流为最终跨平台凭证。 在线评委网站已通过 Playwright Chromium 在 1440×1000 与 390×844 两个视口验收:横向溢出均为 0,page/console error 与失败资源请求均为 0;Canvas 具备有效像素尺寸,点击 metadata 动态 Worker 后证据面板正确更新,移动导航与 8 项规则列表可用。终版 PPT/PDF 已完成 12 页逐页目检:模板 fidelity `PASS / 0 issues`、PPT 无画布溢出、12/12 页均含 `[Sources]` notes、无空结构占位符;PDF 为 12 页、960×540 pt,全页渲染无裁切、重叠、乱码或黑块。 @@ -30,4 +30,4 @@ VisionData Gate 的参赛主叙事为 GOAI 赛道二“无界应用 Boundless Ag ## 不在本地工程可证明范围内 -当前不声称客户验收、真实工厂现场验证、生产部署或 IAM、外部 LLM 执行、完整 Omni 数据集 Gate、hosted AgentTeams/Matrix 连接、官网提交、作品 ID 或获奖。顶层 LICENSE 与 NOTICE 仍需权利主体确认。 +当前不声称客户验收、真实工厂现场验证、生产部署或 IAM、外部 LLM 执行、完整 Omni 数据集 Gate、hosted AgentTeams/Matrix 连接、官网提交、作品 ID 或获奖。代码已由权利主体确认按 Apache-2.0 开源;顶层 LICENSE、NOTICE、第三方声明与 `REVIEW_REQUIRED=0` 的 SBOM 清单进入 RC2 构包硬门禁。该代码许可不代表外部数据、模型或客户资产已授权。 diff --git a/10_reports/SUBMISSION_DELIVERY_RECEIPT_20260816.json b/10_reports/SUBMISSION_DELIVERY_RECEIPT_20260816.json index 79c87f0..588f7fb 100644 --- a/10_reports/SUBMISSION_DELIVERY_RECEIPT_20260816.json +++ b/10_reports/SUBMISSION_DELIVERY_RECEIPT_20260816.json @@ -1,11 +1,11 @@ { - "schema_version": "visiondata-gate.submission-delivery-receipt.v2", + "schema_version": "visiondata-gate.submission-delivery-receipt.v3", "status": "LOCAL_RC_READY_ACCOUNT_ACTIONS_PENDING", "release_id": "vdg-20260816-rc1", "track": "GOAI 赛道二 无界应用 Boundless Agents", "industry_direction": "AI+工业制造", "candidate_zip": { - "path": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip", + "path": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip", "built": true, "audited": true, "sha256": null, @@ -13,12 +13,13 @@ "self_reference_policy": "The ZIP SHA-256 is recorded outside the archive after the final immutable build." }, "preflight_package_audit": { - "entry_count": 525, - "verified_file_count": 524, + "entry_count": 532, + "verified_file_count": 531, "clean_extract_verified": true, "issue_count": 0 }, - "local_engineering_gates": "PASS_164_PASSED_1_SKIPPED_1_WARNING_0_FAILED", + "local_engineering_gates": "PASS_166_PASSED_1_SKIPPED_1_WARNING_0_FAILED", + "open_source_release": "PASS_APACHE_2_0_NOTICE_SBOM_REVIEW_REQUIRED_0", "public_release_consistency": "PASS", "browser_qa": "PASS_STATIC_JUDGE_SITE_DESKTOP_MOBILE_CANVAS_INTERACTION", "presentation_qa": "PASS_12_PAGES_VISUALLY_REVIEWED", @@ -31,7 +32,6 @@ "platform_receipt": null }, "owner_actions_remaining": [ - "Confirm the top-level LICENSE and NOTICE as the rights holder.", "Upload through the competition account and retain the official platform receipt." ] } diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0259ba3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 VisionData Gate contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..d3f7fcf --- /dev/null +++ b/NOTICE @@ -0,0 +1,9 @@ +VisionData Gate +Copyright 2026 VisionData Gate contributors + +This product is licensed under the Apache License, Version 2.0. + +Third-party Python packages are resolved by uv.lock and installed separately; +they remain subject to their respective licenses. See +docs/THIRD_PARTY_NOTICES.md and docs/SBOM.cdx.json for the locked dependency +inventory and attribution details. diff --git a/README.md b/README.md index cec258b..7a8bff4 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [](https://github.com/dukeandBaron/visiondata-gate/actions/workflows/ci.yml) [](https://dukeandbaron.github.io/visiondata-gate/) +[](LICENSE) GOAI 世界人工智能开源大赛赛道二“无界应用 Boundless Agents”作品,行业方向为 AI+工业制造。 @@ -22,7 +23,7 @@ VisionData Gate 面向工业视觉算法工程师和数据治理团队,把“ 评委建议从[在线 Demo](https://dukeandbaron.github.io/visiondata-gate/)开始,再按 [`docs/00_OVERVIEW.md`](docs/00_OVERVIEW.md) 的五分钟路径抽查代码与证据。 -冻结发布入口为 [`v0.1.0-goai-rc1`](https://github.com/dukeandBaron/visiondata-gate/releases/tag/v0.1.0-goai-rc1),五个作品附件的独立摘要见 [`release/SHA256SUMS.txt`](release/SHA256SUMS.txt)。已发布 tag 保持不移动;`main` 上的后续变更只用于验证、文档与评委入口加固,不静默覆盖 8,250,230 bytes 的冻结候选 ZIP。 +当前提交发布入口为 [`v0.1.0-goai-rc2`](https://github.com/dukeandBaron/visiondata-gate/releases/tag/v0.1.0-goai-rc2),五个作品附件的独立摘要见 [`release/SHA256SUMS.txt`](release/SHA256SUMS.txt)。RC2 只关闭跨平台发布门禁与开源许可,不改变冻结的 `vdg-20260816-rc1` 实验数据、结论和证据哈希;历史 RC1 tag 与 ZIP 保持不移动、不覆盖。 ## 业务闭环 @@ -173,6 +174,15 @@ uv run python tools/check_release_assets.py --require-all 最终测试数量写入 `release_manifest.json`,不在 README 中硬编码,以避免新增测试后材料失真。 +## 开源许可 + +项目代码采用 [Apache License 2.0](LICENSE)。版权与项目 NOTICE 见 +[`NOTICE`](NOTICE);54 个锁定第三方依赖的 SPDX 表达式、精确版本与人工 +复核哈希见 [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md)、 +[`docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md`](docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md) +和 [`docs/SBOM.cdx.json`](docs/SBOM.cdx.json)。源码候选包不内嵌第三方 +Python distributions、模型权重或外部数据集。 + ## AgentTeams 状态 项目提供 AgentTeams v1.2.2 Worker/Team 资源、Skill 分发计划、静态 conformance receipt 和真实运行回执校验器。当前状态为: diff --git a/deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json b/deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json new file mode 100644 index 0000000..f47ec9c --- /dev/null +++ b/deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json @@ -0,0 +1,106 @@ +{ + "schema_version": "visiondata-gate.detached-submission-receipt.v7", + "status": "LOCAL_RC2_PASS_OFFICIAL_SUBMISSION_PENDING", + "verified_at": "2026-08-15T23:51:41+08:00", + "timezone": "Asia/Shanghai", + "software_release": "v0.1.0-goai-rc2", + "evidence_release": "vdg-20260816-rc1", + "positioning": { + "track": "GOAI 赛道二 无界应用 Boundless Agents", + "industry_direction": "AI+工业制造", + "application": "工业视觉数据治理与发布 Agent", + "infra_role": "证据触发动态补证、失败关闭、可追踪 API 与复用后台" + }, + "candidate": { + "path": "deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip", + "bytes": 8290088, + "sha256": "560d4216be63ebc75210cf516431d23aec6e88d4c153eb16f755affd3b9382bf", + "entry_count": 532, + "payload_file_count": 531, + "audit_ok": true, + "clean_extract_verified": true, + "audit_issue_count": 0 + }, + "determinism": { + "independent_build_count": 3, + "all_sha256_equal": true, + "sha256": "560d4216be63ebc75210cf516431d23aec6e88d4c153eb16f755affd3b9382bf", + "comparison_builds": [ + "output/rc2_repro_c_20260815.zip", + "output/rc2_repro_d_20260815.zip" + ] + }, + "engineering": { + "python": "3.12", + "pytest_passed": 166, + "pytest_skipped": 1, + "pytest_failed": 0, + "pytest_warning_count": 1, + "pytest_skip_reason": "file symlinks are unavailable in this Windows environment", + "pytest_warning_boundary": "Starlette TestClient dependency deprecation; no business test failure", + "ruff_check": "PASS", + "ruff_format_check": "PASS_70_FILES", + "compileall": "PASS", + "uv_lock_check": "PASS", + "windows_legacy_codec_regression": "PASS", + "ci_native_failure_propagation_contract": "PASS" + }, + "open_source": { + "project_license": "Apache-2.0", + "rights_holder_confirmation": true, + "top_level_license_present": true, + "notice_present": true, + "third_party_notices_present": true, + "cyclonedx_component_count_including_root": 55, + "locked_third_party_component_count": 54, + "review_required_count": 0, + "vendored_python_distributions": 0, + "bundled_model_weights": 0, + "bundled_external_datasets": 0, + "boundary": "The code license does not grant rights to external data, models, customer assets, names, or trademarks." + }, + "frozen_evidence": { + "architecture_records": 288, + "omni_fixed_denominator": 180, + "replan_count": 1, + "dynamic_worker_count": 3, + "finding_count": 45, + "work_order_count": 45, + "rule_check_count": 8, + "decision": "RECAPTURE", + "meaning": "RC2 changes release verification and licensing only; it does not mutate the RC1 experiment evidence." + }, + "review_artifacts": [ + { + "path": "deliverables/GOAI_VisionDataGate_BoundlessAgents_20260816.pptx", + "bytes": 965583, + "sha256": "d900dd0cdf87fdf115d7ed65e03fe34a1dab380f6e6e18ec5bd6ca4a013f4d24", + "qa": "PASS_12_SLIDES" + }, + { + "path": "deliverables/GOAI_VisionDataGate_BoundlessAgents_20260816.pdf", + "bytes": 573601, + "sha256": "29135083cd5792b870342eebe7acdbf1aee1a864b7294dfe0ba489692aeeb282", + "qa": "PASS_12_PAGES_FULL_VISUAL_REVIEW" + }, + { + "path": "deliverables/VisionDataGate_GOAI_FinalDemo_20260813.mp4", + "bytes": 12826648, + "sha256": "399cc2f26e1eb07634ec7a9e41dd499a43452d50c2f08d36245f1e956d8b2ad2", + "qa": "HISTORICAL_PRE_RC_VIDEO_RETAINED_AS_SEPARATE_OPTIONAL_ASSET" + } + ], + "boundaries": { + "engineering_candidate_is_official_submission": false, + "official_submission_receipt_received": false, + "actual_model_call_count": 0, + "agentteams_connection_status": "mapped_not_connected", + "real_customer_validation": false, + "factory_site_validation": false, + "production_deployment_validated": false, + "full_omni_gate_certified": false + }, + "owner_actions_remaining": [ + "Upload through the competition account and retain the official work ID and platform receipt." + ] +} diff --git a/docs/00_OVERVIEW.md b/docs/00_OVERVIEW.md index d67c78d..c88448b 100644 --- a/docs/00_OVERVIEW.md +++ b/docs/00_OVERVIEW.md @@ -7,7 +7,8 @@ VisionData Gate 是 GOAI 赛道二“无界应用 Boundless Agents”中 AI+工业制造方向的应用作品。目标用户是工业视觉算法工程师和数据治理团队;核心任务是判断一个数据批次能否进入实验训练池,并把发现、整改、复验和交付串成闭环。 - 在线评委入口: -- 冻结 RC1: +- 当前提交 RC2: +- 冻结实验与证据命名空间:`vdg-20260816-rc1`(RC2 不改实验结论) - 附件摘要:[`../release/SHA256SUMS.txt`](../release/SHA256SUMS.txt) - 小白技术路线:[`BOUNDLESS_AGENTS_TECHNICAL_ROUTE.md`](BOUNDLESS_AGENTS_TECHNICAL_ROUTE.md) - 一页纸:[`one_pager.md`](one_pager.md) diff --git a/docs/CLAIM_SCOPE.md b/docs/CLAIM_SCOPE.md index d7537a4..f0f0551 100644 --- a/docs/CLAIM_SCOPE.md +++ b/docs/CLAIM_SCOPE.md @@ -30,7 +30,7 @@ Omni 源树的 4,464 张图像与 1,439 个 masks 只完成结构/解码审计 - Omni 4,464 张图像全量 Policy Gate; - hosted AgentTeams/Matrix transport;当前静态契约为 `PASS`,transport 为 `OPEN`,连接状态为 `mapped_not_connected`; - 大赛官网作品 ID、上传回执、晋级或获奖; -- 顶层 LICENSE 与 NOTICE 的权利主体确认。 +- 官网上传、作品 ID 与平台回执(Apache-2.0 LICENSE、NOTICE 和第三方声明已由权利主体确认并纳入 RC2)。 第三层是扩大采用范围所需的下一批证据,不反向否定第一、二层已经完成的工程实现与固定公开数据实跑。 diff --git a/docs/GOAI_requirements_matrix.md b/docs/GOAI_requirements_matrix.md index e8d5577..3120f54 100644 --- a/docs/GOAI_requirements_matrix.md +++ b/docs/GOAI_requirements_matrix.md @@ -63,7 +63,8 @@ Omni 源树 4,464 张图像与 1,439 个 masks 只完成结构/解码审计, ## 上传前仍需闭合 -1. 最终全量测试、Ruff、compileall、PPT/PDF 视觉 QA 和候选 ZIP clean-extract 审计; -2. 由权利主体确认顶层 LICENSE 与 NOTICE; -3. 由账号持有人在赛道二页面上传材料并保存作品 ID 与平台回执; -4. 如进入复赛,再补真实用户访谈、授权工业 shadow test 与 hosted AgentTeams transport 回执;这些不是初赛本地工程已完成项。 +1. RC2 全量测试、Ruff、compileall、PPT/PDF 视觉 QA 和候选 ZIP clean-extract 审计; +2. 由账号持有人在赛道二页面上传材料并保存作品 ID 与平台回执; +3. 如进入复赛,再补真实用户访谈、授权工业 shadow test 与 hosted AgentTeams transport 回执;这些不是初赛本地工程已完成项。 + +Apache-2.0、NOTICE、第三方声明和 SBOM 已由权利主体确认并纳入 RC2 构包硬门禁。 diff --git a/docs/REVIEWER_READINESS_MATRIX.md b/docs/REVIEWER_READINESS_MATRIX.md index 2b57be9..b40b35c 100644 --- a/docs/REVIEWER_READINESS_MATRIX.md +++ b/docs/REVIEWER_READINESS_MATRIX.md @@ -19,7 +19,7 @@ | Agent 能力与任务闭环 | 5 个静态工具任务;Omni 证据触发 1 replan / 3 Workers;Policy Judge 与工单 | `PASS`(本地/固定 pilot) | 更多行业批次与非确定性模型辅助对照 | | 产品体验与 Demo | 公网评委站点、企业工作台、Reviewer Mode、Canvas、项目/任务/记录/API/权限 | `PASS`(公网静态评委入口 / 本地完整 Runtime) | 完整 Runtime 外部托管与真实用户可用性测试 | | 技术深度与复现 | ArchBench-v2、typed task、tool contract、reason trace、同合同复验、确定性构包 | `PASS` | 独立环境/第三方复现回执 | -| 安全、合规与开放复用 | fail closed、Claim Scope、redaction receipt、Skills、SBOM、AgentTeams adapter | `PARTIAL` | 顶层 LICENSE/NOTICE、数据主体书面授权、hosted transport | +| 安全、合规与开放复用 | fail closed、Claim Scope、redaction receipt、Apache-2.0、NOTICE、Skills、SBOM、AgentTeams adapter | `PASS_WITH_EXTERNAL_BOUNDARY` | 真实数据书面授权与 hosted transport 仍属外部阶段 | ## 评委建议读取顺序 diff --git a/docs/RUNNING.md b/docs/RUNNING.md index 9de4b96..8391f7e 100644 --- a/docs/RUNNING.md +++ b/docs/RUNNING.md @@ -148,7 +148,7 @@ uv run python -m pytest -q tests\test_release_artifacts.py uv run python tools\generate_supply_chain_artifacts.py ``` -生成器只枚举 `uv.lock` 中的 55 个组件,并忽略环境中不在锁内的临时包。清单中的 `REVIEW_REQUIRED` 是待权利主体复核标志,不构成法律结论,也不替代顶层 `LICENSE` / 正式 `NOTICE`。 +生成器只枚举 `uv.lock` 中的 55 个组件,并忽略环境中不在锁内的临时包。RC2 对 Core Metadata 含糊的精确版本额外冻结 wheel 许可证文件哈希;当前 `REVIEW_REQUIRED` 为 0。结果仍是工程清单而非独立法律意见,顶层授权以 `LICENSE` / `NOTICE` 为准。 ## 从 GateResult 生成证据文件 @@ -171,7 +171,7 @@ write_offline_html(output / "report.html", gate_result, evaluation_result) ```powershell uv run python tools\build_submission_package.py ` - --output deliverables\VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip + --output deliverables\VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip ``` 若目标已存在,命令默认拒绝覆盖;只有确认目标后才使用 `--force`。默认构包会: @@ -186,7 +186,7 @@ uv run python tools\build_submission_package.py ` ```powershell uv run python tools\audit_submission_package.py ` - deliverables\VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip + deliverables\VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip ``` ## 字节复现检查 @@ -203,7 +203,6 @@ Get-FileHash -Algorithm SHA256 output\release\a.zip,output\release\b.zip ## 仍未闭合 -- 顶层 LICENSE 与正式 NOTICE 的权利主体确认 - 真实客户/真实工业数据验证 - 官网上传与提交回执 diff --git a/docs/SBOM.cdx.json b/docs/SBOM.cdx.json index d4421d7..cf8ab13 100644 --- a/docs/SBOM.cdx.json +++ b/docs/SBOM.cdx.json @@ -1 +1 @@ -{"$schema":"https://cyclonedx.org/schema/bom-1.6.schema.json","bomFormat":"CycloneDX","components":[{"bom-ref":"pkg:pypi/altair@6.2.2","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"altair","properties":[{"name":"visiondata-gate:license-evidence","value":"License: long text; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/altair-6.2.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/altair@6.2.2","scope":"optional","type":"library","version":"6.2.2"},{"bom-ref":"pkg:pypi/annotated-doc@0.0.5","licenses":[{"expression":"MIT"}],"name":"annotated-doc","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/annotated_doc-0.0.5.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/annotated-doc@0.0.5","scope":"optional","type":"library","version":"0.0.5"},{"bom-ref":"pkg:pypi/annotated-types@0.8.0","licenses":[{"expression":"MIT"}],"name":"annotated-types","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/annotated_types-0.8.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/annotated-types@0.8.0","scope":"required","type":"library","version":"0.8.0"},{"bom-ref":"pkg:pypi/anyio@4.14.2","licenses":[{"expression":"MIT"}],"name":"anyio","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/anyio-4.14.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/anyio@4.14.2","scope":"optional","type":"library","version":"4.14.2"},{"bom-ref":"pkg:pypi/attrs@26.1.0","licenses":[{"expression":"MIT"}],"name":"attrs","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/attrs-26.1.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/attrs@26.1.0","scope":"optional","type":"library","version":"26.1.0"},{"bom-ref":"pkg:pypi/blinker@1.9.0","licenses":[{"expression":"MIT"}],"name":"blinker","properties":[{"name":"visiondata-gate:license-evidence","value":"Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/blinker-1.9.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/blinker@1.9.0","scope":"optional","type":"library","version":"1.9.0"},{"bom-ref":"pkg:pypi/certifi@2026.7.22","licenses":[{"expression":"MPL-2.0"}],"name":"certifi","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MPL-2.0; Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/certifi-2026.7.22.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/certifi@2026.7.22","scope":"optional","type":"library","version":"2026.7.22"},{"bom-ref":"pkg:pypi/charset-normalizer@3.4.9","licenses":[{"expression":"MIT"}],"name":"charset-normalizer","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/charset_normalizer-3.4.9.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/charset-normalizer@3.4.9","scope":"optional","type":"library","version":"3.4.9"},{"bom-ref":"pkg:pypi/click@8.4.2","licenses":[{"expression":"BSD-3-Clause"}],"name":"click","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/click-8.4.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/click@8.4.2","scope":"optional","type":"library","version":"8.4.2"},{"bom-ref":"pkg:pypi/colorama@0.4.6","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"colorama","properties":[{"name":"visiondata-gate:license-evidence","value":"conditional dependency; installed METADATA intentionally not used"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"uv.lock conditional edge"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/colorama@0.4.6","scope":"optional","type":"library","version":"0.4.6"},{"bom-ref":"pkg:pypi/fastapi@0.141.1","licenses":[{"expression":"MIT"}],"name":"fastapi","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:api"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/fastapi-0.141.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/fastapi@0.141.1","scope":"optional","type":"library","version":"0.141.1"},{"bom-ref":"pkg:pypi/h11@0.16.0","licenses":[{"expression":"MIT"}],"name":"h11","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/h11-0.16.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/h11@0.16.0","scope":"optional","type":"library","version":"0.16.0"},{"bom-ref":"pkg:pypi/httpcore@1.0.9","licenses":[{"expression":"BSD-3-Clause"}],"name":"httpcore","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/httpcore-1.0.9.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/httpcore@1.0.9","scope":"optional","type":"library","version":"1.0.9"},{"bom-ref":"pkg:pypi/httptools@0.8.0","licenses":[{"expression":"MIT"}],"name":"httptools","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/httptools-0.8.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/httptools@0.8.0","scope":"optional","type":"library","version":"0.8.0"},{"bom-ref":"pkg:pypi/httpx@0.28.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"httpx","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:qa"},{"name":"visiondata-gate:license-evidence","value":"License: BSD-3-Clause; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/httpx-0.28.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/httpx@0.28.1","scope":"optional","type":"library","version":"0.28.1"},{"bom-ref":"pkg:pypi/idna@3.18","licenses":[{"expression":"BSD-3-Clause"}],"name":"idna","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/idna-3.18.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/idna@3.18","scope":"optional","type":"library","version":"3.18"},{"bom-ref":"pkg:pypi/iniconfig@2.3.0","licenses":[{"expression":"MIT"}],"name":"iniconfig","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/iniconfig-2.3.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/iniconfig@2.3.0","scope":"optional","type":"library","version":"2.3.0"},{"bom-ref":"pkg:pypi/itsdangerous@2.2.0","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"itsdangerous","properties":[{"name":"visiondata-gate:license-evidence","value":"Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/itsdangerous-2.2.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/itsdangerous@2.2.0","scope":"optional","type":"library","version":"2.2.0"},{"bom-ref":"pkg:pypi/jinja2@3.1.6","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"jinja2","properties":[{"name":"visiondata-gate:license-evidence","value":"Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/jinja2-3.1.6.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/jinja2@3.1.6","scope":"optional","type":"library","version":"3.1.6"},{"bom-ref":"pkg:pypi/jsonschema@4.26.0","licenses":[{"expression":"MIT"}],"name":"jsonschema","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/jsonschema-4.26.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/jsonschema@4.26.0","scope":"optional","type":"library","version":"4.26.0"},{"bom-ref":"pkg:pypi/jsonschema-specifications@2025.9.1","licenses":[{"expression":"MIT"}],"name":"jsonschema-specifications","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/jsonschema-specifications@2025.9.1","scope":"optional","type":"library","version":"2025.9.1"},{"bom-ref":"pkg:pypi/markupsafe@3.0.3","licenses":[{"expression":"BSD-3-Clause"}],"name":"markupsafe","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/markupsafe-3.0.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/markupsafe@3.0.3","scope":"optional","type":"library","version":"3.0.3"},{"bom-ref":"pkg:pypi/narwhals@2.24.0","licenses":[{"expression":"MIT"}],"name":"narwhals","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/narwhals-2.24.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/narwhals@2.24.0","scope":"optional","type":"library","version":"2.24.0"},{"bom-ref":"pkg:pypi/numpy@2.2.6","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"numpy","properties":[{"name":"visiondata-gate:direct-groups","value":"required"},{"name":"visiondata-gate:license-evidence","value":"License: long text; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/numpy-2.2.6.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/numpy@2.2.6","scope":"required","type":"library","version":"2.2.6"},{"bom-ref":"pkg:pypi/packaging@26.3","licenses":[{"expression":"Apache-2.0 OR BSD-2-Clause"}],"name":"packaging","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0 OR BSD-2-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/packaging-26.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/packaging@26.3","scope":"optional","type":"library","version":"26.3"},{"bom-ref":"pkg:pypi/pandas@2.3.3","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"pandas","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:ui"},{"name":"visiondata-gate:license-evidence","value":"License: long text; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pandas-2.3.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pandas@2.3.3","scope":"optional","type":"library","version":"2.3.3"},{"bom-ref":"pkg:pypi/pillow@12.3.0","licenses":[{"expression":"MIT-CMU"}],"name":"pillow","properties":[{"name":"visiondata-gate:direct-groups","value":"required"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT-CMU"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pillow-12.3.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pillow@12.3.0","scope":"required","type":"library","version":"12.3.0"},{"bom-ref":"pkg:pypi/pluggy@1.6.0","licenses":[{"expression":"MIT"}],"name":"pluggy","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pluggy-1.6.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pluggy@1.6.0","scope":"optional","type":"library","version":"1.6.0"},{"bom-ref":"pkg:pypi/protobuf@7.35.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"protobuf","properties":[{"name":"visiondata-gate:license-evidence","value":"License: 3-Clause BSD License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/protobuf-7.35.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/protobuf@7.35.1","scope":"optional","type":"library","version":"7.35.1"},{"bom-ref":"pkg:pypi/pyarrow@24.0.0","licenses":[{"expression":"Apache-2.0"}],"name":"pyarrow","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pyarrow-24.0.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pyarrow@24.0.0","scope":"optional","type":"library","version":"24.0.0"},{"bom-ref":"pkg:pypi/pydantic@2.13.4","licenses":[{"expression":"MIT"}],"name":"pydantic","properties":[{"name":"visiondata-gate:direct-groups","value":"required"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pydantic-2.13.4.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pydantic@2.13.4","scope":"required","type":"library","version":"2.13.4"},{"bom-ref":"pkg:pypi/pydantic-core@2.46.4","licenses":[{"expression":"MIT"}],"name":"pydantic-core","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pydantic_core-2.46.4.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pydantic-core@2.46.4","scope":"required","type":"library","version":"2.46.4"},{"bom-ref":"pkg:pypi/pydeck@0.9.3","licenses":[{"expression":"Apache-2.0"}],"name":"pydeck","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache License 2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pydeck-0.9.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pydeck@0.9.3","scope":"optional","type":"library","version":"0.9.3"},{"bom-ref":"pkg:pypi/pygments@2.20.0","licenses":[{"expression":"BSD-2-Clause"}],"name":"pygments","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-2-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pygments-2.20.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pygments@2.20.0","scope":"optional","type":"library","version":"2.20.0"},{"bom-ref":"pkg:pypi/pytest@8.4.2","licenses":[{"expression":"MIT"}],"name":"pytest","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:qa"},{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pytest-8.4.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pytest@8.4.2","scope":"optional","type":"library","version":"8.4.2"},{"bom-ref":"pkg:pypi/python-dateutil@2.9.0.post0","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"python-dateutil","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Dual License; Classifier: License :: OSI Approved :: Apache Software License; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/python-dateutil@2.9.0.post0","scope":"optional","type":"library","version":"2.9.0.post0"},{"bom-ref":"pkg:pypi/python-multipart@0.0.32","licenses":[{"expression":"Apache-2.0"}],"name":"python-multipart","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0; Classifier: License :: OSI Approved :: Apache Software License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/python_multipart-0.0.32.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/python-multipart@0.0.32","scope":"optional","type":"library","version":"0.0.32"},{"bom-ref":"pkg:pypi/pytz@2026.3.post1","licenses":[{"expression":"MIT"}],"name":"pytz","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pytz-2026.3.post1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pytz@2026.3.post1","scope":"optional","type":"library","version":"2026.3.post1"},{"bom-ref":"pkg:pypi/referencing@0.37.0","licenses":[{"expression":"MIT"}],"name":"referencing","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/referencing-0.37.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/referencing@0.37.0","scope":"optional","type":"library","version":"0.37.0"},{"bom-ref":"pkg:pypi/requests@2.34.2","licenses":[{"expression":"Apache-2.0"}],"name":"requests","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache-2.0; Classifier: License :: OSI Approved :: Apache Software License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/requests-2.34.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/requests@2.34.2","scope":"optional","type":"library","version":"2.34.2"},{"bom-ref":"pkg:pypi/rpds-py@2026.6.3","licenses":[{"expression":"MIT"}],"name":"rpds-py","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/rpds_py-2026.6.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/rpds-py@2026.6.3","scope":"optional","type":"library","version":"2026.6.3"},{"bom-ref":"pkg:pypi/ruff@0.15.22","licenses":[{"expression":"MIT"}],"name":"ruff","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:qa"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/ruff-0.15.22.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/ruff@0.15.22","scope":"optional","type":"library","version":"0.15.22"},{"bom-ref":"pkg:pypi/six@1.17.0","licenses":[{"expression":"MIT"}],"name":"six","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/six-1.17.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/six@1.17.0","scope":"optional","type":"library","version":"1.17.0"},{"bom-ref":"pkg:pypi/starlette@1.3.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"starlette","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/starlette-1.3.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/starlette@1.3.1","scope":"optional","type":"library","version":"1.3.1"},{"bom-ref":"pkg:pypi/streamlit@1.61.1","licenses":[{"expression":"Apache-2.0"}],"name":"streamlit","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:ui"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/streamlit-1.61.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/streamlit@1.61.1","scope":"optional","type":"library","version":"1.61.1"},{"bom-ref":"pkg:pypi/tenacity@9.1.4","licenses":[{"expression":"Apache-2.0"}],"name":"tenacity","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache 2.0; Classifier: License :: OSI Approved :: Apache Software License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/tenacity-9.1.4.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/tenacity@9.1.4","scope":"optional","type":"library","version":"9.1.4"},{"bom-ref":"pkg:pypi/toml@0.10.2","licenses":[{"expression":"MIT"}],"name":"toml","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/toml-0.10.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/toml@0.10.2","scope":"optional","type":"library","version":"0.10.2"},{"bom-ref":"pkg:pypi/typing-extensions@4.16.0","licenses":[{"expression":"PSF-2.0"}],"name":"typing-extensions","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: PSF-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/typing_extensions-4.16.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/typing-extensions@4.16.0","scope":"required","type":"library","version":"4.16.0"},{"bom-ref":"pkg:pypi/typing-inspection@0.4.2","licenses":[{"expression":"MIT"}],"name":"typing-inspection","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/typing_inspection-0.4.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/typing-inspection@0.4.2","scope":"required","type":"library","version":"0.4.2"},{"bom-ref":"pkg:pypi/tzdata@2026.3","licenses":[{"expression":"Apache-2.0"}],"name":"tzdata","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/tzdata-2026.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/tzdata@2026.3","scope":"optional","type":"library","version":"2026.3"},{"bom-ref":"pkg:pypi/urllib3@2.7.0","licenses":[{"expression":"MIT"}],"name":"urllib3","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/urllib3-2.7.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/urllib3@2.7.0","scope":"optional","type":"library","version":"2.7.0"},{"bom-ref":"pkg:pypi/uvicorn@0.52.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"uvicorn","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:api"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/uvicorn-0.52.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/uvicorn@0.52.1","scope":"optional","type":"library","version":"0.52.1"},{"bom-ref":"pkg:pypi/watchdog@6.0.0","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"watchdog","properties":[{"name":"visiondata-gate:license-evidence","value":"conditional dependency; installed METADATA intentionally not used"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"uv.lock conditional edge"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/watchdog@6.0.0","scope":"optional","type":"library","version":"6.0.0"},{"bom-ref":"pkg:pypi/websockets@16.1.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"websockets","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/websockets-16.1.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/websockets@16.1.1","scope":"optional","type":"library","version":"16.1.1"}],"dependencies":[{"dependsOn":["pkg:pypi/jinja2@3.1.6","pkg:pypi/jsonschema@4.26.0","pkg:pypi/narwhals@2.24.0","pkg:pypi/packaging@26.3","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/altair@6.2.2"},{"dependsOn":[],"ref":"pkg:pypi/annotated-doc@0.0.5"},{"dependsOn":[],"ref":"pkg:pypi/annotated-types@0.8.0"},{"dependsOn":["pkg:pypi/idna@3.18","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/anyio@4.14.2"},{"dependsOn":[],"ref":"pkg:pypi/attrs@26.1.0"},{"dependsOn":[],"ref":"pkg:pypi/blinker@1.9.0"},{"dependsOn":[],"ref":"pkg:pypi/certifi@2026.7.22"},{"dependsOn":[],"ref":"pkg:pypi/charset-normalizer@3.4.9"},{"dependsOn":["pkg:pypi/colorama@0.4.6"],"ref":"pkg:pypi/click@8.4.2"},{"dependsOn":[],"ref":"pkg:pypi/colorama@0.4.6"},{"dependsOn":["pkg:pypi/annotated-doc@0.0.5","pkg:pypi/pydantic@2.13.4","pkg:pypi/starlette@1.3.1","pkg:pypi/typing-extensions@4.16.0","pkg:pypi/typing-inspection@0.4.2"],"ref":"pkg:pypi/fastapi@0.141.1"},{"dependsOn":[],"ref":"pkg:pypi/h11@0.16.0"},{"dependsOn":["pkg:pypi/certifi@2026.7.22","pkg:pypi/h11@0.16.0"],"ref":"pkg:pypi/httpcore@1.0.9"},{"dependsOn":[],"ref":"pkg:pypi/httptools@0.8.0"},{"dependsOn":["pkg:pypi/anyio@4.14.2","pkg:pypi/certifi@2026.7.22","pkg:pypi/httpcore@1.0.9","pkg:pypi/idna@3.18"],"ref":"pkg:pypi/httpx@0.28.1"},{"dependsOn":[],"ref":"pkg:pypi/idna@3.18"},{"dependsOn":[],"ref":"pkg:pypi/iniconfig@2.3.0"},{"dependsOn":[],"ref":"pkg:pypi/itsdangerous@2.2.0"},{"dependsOn":["pkg:pypi/markupsafe@3.0.3"],"ref":"pkg:pypi/jinja2@3.1.6"},{"dependsOn":["pkg:pypi/attrs@26.1.0","pkg:pypi/jsonschema-specifications@2025.9.1","pkg:pypi/referencing@0.37.0","pkg:pypi/rpds-py@2026.6.3"],"ref":"pkg:pypi/jsonschema@4.26.0"},{"dependsOn":["pkg:pypi/referencing@0.37.0"],"ref":"pkg:pypi/jsonschema-specifications@2025.9.1"},{"dependsOn":[],"ref":"pkg:pypi/markupsafe@3.0.3"},{"dependsOn":[],"ref":"pkg:pypi/narwhals@2.24.0"},{"dependsOn":[],"ref":"pkg:pypi/numpy@2.2.6"},{"dependsOn":[],"ref":"pkg:pypi/packaging@26.3"},{"dependsOn":["pkg:pypi/numpy@2.2.6","pkg:pypi/python-dateutil@2.9.0.post0","pkg:pypi/pytz@2026.3.post1","pkg:pypi/tzdata@2026.3"],"ref":"pkg:pypi/pandas@2.3.3"},{"dependsOn":[],"ref":"pkg:pypi/pillow@12.3.0"},{"dependsOn":[],"ref":"pkg:pypi/pluggy@1.6.0"},{"dependsOn":[],"ref":"pkg:pypi/protobuf@7.35.1"},{"dependsOn":[],"ref":"pkg:pypi/pyarrow@24.0.0"},{"dependsOn":["pkg:pypi/annotated-types@0.8.0","pkg:pypi/pydantic-core@2.46.4","pkg:pypi/typing-extensions@4.16.0","pkg:pypi/typing-inspection@0.4.2"],"ref":"pkg:pypi/pydantic@2.13.4"},{"dependsOn":["pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/pydantic-core@2.46.4"},{"dependsOn":["pkg:pypi/jinja2@3.1.6","pkg:pypi/numpy@2.2.6"],"ref":"pkg:pypi/pydeck@0.9.3"},{"dependsOn":[],"ref":"pkg:pypi/pygments@2.20.0"},{"dependsOn":["pkg:pypi/colorama@0.4.6","pkg:pypi/iniconfig@2.3.0","pkg:pypi/packaging@26.3","pkg:pypi/pluggy@1.6.0","pkg:pypi/pygments@2.20.0"],"ref":"pkg:pypi/pytest@8.4.2"},{"dependsOn":["pkg:pypi/six@1.17.0"],"ref":"pkg:pypi/python-dateutil@2.9.0.post0"},{"dependsOn":[],"ref":"pkg:pypi/python-multipart@0.0.32"},{"dependsOn":[],"ref":"pkg:pypi/pytz@2026.3.post1"},{"dependsOn":["pkg:pypi/attrs@26.1.0","pkg:pypi/rpds-py@2026.6.3","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/referencing@0.37.0"},{"dependsOn":["pkg:pypi/certifi@2026.7.22","pkg:pypi/charset-normalizer@3.4.9","pkg:pypi/idna@3.18","pkg:pypi/urllib3@2.7.0"],"ref":"pkg:pypi/requests@2.34.2"},{"dependsOn":[],"ref":"pkg:pypi/rpds-py@2026.6.3"},{"dependsOn":[],"ref":"pkg:pypi/ruff@0.15.22"},{"dependsOn":[],"ref":"pkg:pypi/six@1.17.0"},{"dependsOn":["pkg:pypi/anyio@4.14.2","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/starlette@1.3.1"},{"dependsOn":["pkg:pypi/altair@6.2.2","pkg:pypi/anyio@4.14.2","pkg:pypi/blinker@1.9.0","pkg:pypi/click@8.4.2","pkg:pypi/httptools@0.8.0","pkg:pypi/itsdangerous@2.2.0","pkg:pypi/numpy@2.2.6","pkg:pypi/packaging@26.3","pkg:pypi/pandas@2.3.3","pkg:pypi/pillow@12.3.0","pkg:pypi/protobuf@7.35.1","pkg:pypi/pyarrow@24.0.0","pkg:pypi/pydeck@0.9.3","pkg:pypi/python-multipart@0.0.32","pkg:pypi/requests@2.34.2","pkg:pypi/starlette@1.3.1","pkg:pypi/tenacity@9.1.4","pkg:pypi/toml@0.10.2","pkg:pypi/typing-extensions@4.16.0","pkg:pypi/uvicorn@0.52.1","pkg:pypi/watchdog@6.0.0","pkg:pypi/websockets@16.1.1"],"ref":"pkg:pypi/streamlit@1.61.1"},{"dependsOn":[],"ref":"pkg:pypi/tenacity@9.1.4"},{"dependsOn":[],"ref":"pkg:pypi/toml@0.10.2"},{"dependsOn":[],"ref":"pkg:pypi/typing-extensions@4.16.0"},{"dependsOn":["pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/typing-inspection@0.4.2"},{"dependsOn":[],"ref":"pkg:pypi/tzdata@2026.3"},{"dependsOn":[],"ref":"pkg:pypi/urllib3@2.7.0"},{"dependsOn":["pkg:pypi/click@8.4.2","pkg:pypi/h11@0.16.0"],"ref":"pkg:pypi/uvicorn@0.52.1"},{"dependsOn":["pkg:pypi/fastapi@0.141.1","pkg:pypi/httpx@0.28.1","pkg:pypi/numpy@2.2.6","pkg:pypi/pandas@2.3.3","pkg:pypi/pillow@12.3.0","pkg:pypi/pydantic@2.13.4","pkg:pypi/pytest@8.4.2","pkg:pypi/ruff@0.15.22","pkg:pypi/streamlit@1.61.1","pkg:pypi/uvicorn@0.52.1"],"ref":"pkg:pypi/visiondata-gate@0.1.0"},{"dependsOn":[],"ref":"pkg:pypi/watchdog@6.0.0"},{"dependsOn":[],"ref":"pkg:pypi/websockets@16.1.1"}],"metadata":{"component":{"bom-ref":"pkg:pypi/visiondata-gate@0.1.0","licenses":[{"license":{"name":"REVIEW_REQUIRED"}}],"name":"visiondata-gate","properties":[{"name":"visiondata-gate:license-evidence","value":"no license metadata"},{"name":"visiondata-gate:license-review","value":"REVIEW_REQUIRED"},{"name":"visiondata-gate:lock-source","value":"local-project"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/visiondata_gate-0.1.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"internal-root"}],"purl":"pkg:pypi/visiondata-gate@0.1.0","scope":"required","type":"application","version":"0.1.0"},"properties":[{"name":"visiondata-gate:generated-from","value":"uv.lock + .venv installed METADATA"},{"name":"visiondata-gate:legal-review","value":"NOT_PERFORMED"},{"name":"visiondata-gate:offline-rebuild","value":"true"},{"name":"visiondata-gate:top-level-license-notice","value":"NOT_REPLACED"}]},"specVersion":"1.6","version":1} +{"$schema":"https://cyclonedx.org/schema/bom-1.6.schema.json","bomFormat":"CycloneDX","components":[{"bom-ref":"pkg:pypi/altair@6.2.2","licenses":[{"expression":"BSD-3-Clause"}],"name":"altair","properties":[{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE SHA-256 648332da6631555f71f18305b96e9a2c409e73d73613b6c96587cdc0a449e054"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:altair-6.2.2.dist-info/licenses/LICENSE"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/altair@6.2.2","scope":"optional","type":"library","version":"6.2.2"},{"bom-ref":"pkg:pypi/annotated-doc@0.0.5","licenses":[{"expression":"MIT"}],"name":"annotated-doc","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/annotated_doc-0.0.5.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/annotated-doc@0.0.5","scope":"optional","type":"library","version":"0.0.5"},{"bom-ref":"pkg:pypi/annotated-types@0.8.0","licenses":[{"expression":"MIT"}],"name":"annotated-types","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/annotated_types-0.8.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/annotated-types@0.8.0","scope":"required","type":"library","version":"0.8.0"},{"bom-ref":"pkg:pypi/anyio@4.14.2","licenses":[{"expression":"MIT"}],"name":"anyio","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/anyio-4.14.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/anyio@4.14.2","scope":"optional","type":"library","version":"4.14.2"},{"bom-ref":"pkg:pypi/attrs@26.1.0","licenses":[{"expression":"MIT"}],"name":"attrs","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/attrs-26.1.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/attrs@26.1.0","scope":"optional","type":"library","version":"26.1.0"},{"bom-ref":"pkg:pypi/blinker@1.9.0","licenses":[{"expression":"MIT"}],"name":"blinker","properties":[{"name":"visiondata-gate:license-evidence","value":"Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/blinker-1.9.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/blinker@1.9.0","scope":"optional","type":"library","version":"1.9.0"},{"bom-ref":"pkg:pypi/certifi@2026.7.22","licenses":[{"expression":"MPL-2.0"}],"name":"certifi","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MPL-2.0; Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/certifi-2026.7.22.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/certifi@2026.7.22","scope":"optional","type":"library","version":"2026.7.22"},{"bom-ref":"pkg:pypi/charset-normalizer@3.4.9","licenses":[{"expression":"MIT"}],"name":"charset-normalizer","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/charset_normalizer-3.4.9.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/charset-normalizer@3.4.9","scope":"optional","type":"library","version":"3.4.9"},{"bom-ref":"pkg:pypi/click@8.4.2","licenses":[{"expression":"BSD-3-Clause"}],"name":"click","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/click-8.4.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/click@8.4.2","scope":"optional","type":"library","version":"8.4.2"},{"bom-ref":"pkg:pypi/colorama@0.4.6","licenses":[{"expression":"BSD-3-Clause"}],"name":"colorama","properties":[{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE SHA-256 cac35c02686e5d04a5a7140bfb3b36e73aed496656e891102e428886d7930318"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:colorama-0.4.6.dist-info/licenses/LICENSE.txt"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/colorama@0.4.6","scope":"optional","type":"library","version":"0.4.6"},{"bom-ref":"pkg:pypi/fastapi@0.141.1","licenses":[{"expression":"MIT"}],"name":"fastapi","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:api"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/fastapi-0.141.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/fastapi@0.141.1","scope":"optional","type":"library","version":"0.141.1"},{"bom-ref":"pkg:pypi/h11@0.16.0","licenses":[{"expression":"MIT"}],"name":"h11","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/h11-0.16.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/h11@0.16.0","scope":"optional","type":"library","version":"0.16.0"},{"bom-ref":"pkg:pypi/httpcore@1.0.9","licenses":[{"expression":"BSD-3-Clause"}],"name":"httpcore","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/httpcore-1.0.9.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/httpcore@1.0.9","scope":"optional","type":"library","version":"1.0.9"},{"bom-ref":"pkg:pypi/httptools@0.8.0","licenses":[{"expression":"MIT"}],"name":"httptools","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/httptools-0.8.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/httptools@0.8.0","scope":"optional","type":"library","version":"0.8.0"},{"bom-ref":"pkg:pypi/httpx@0.28.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"httpx","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:qa"},{"name":"visiondata-gate:license-evidence","value":"License: BSD-3-Clause; Classifier: License :: OSI Approved :: BSD License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/httpx-0.28.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/httpx@0.28.1","scope":"optional","type":"library","version":"0.28.1"},{"bom-ref":"pkg:pypi/idna@3.18","licenses":[{"expression":"BSD-3-Clause"}],"name":"idna","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/idna-3.18.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/idna@3.18","scope":"optional","type":"library","version":"3.18"},{"bom-ref":"pkg:pypi/iniconfig@2.3.0","licenses":[{"expression":"MIT"}],"name":"iniconfig","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/iniconfig-2.3.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/iniconfig@2.3.0","scope":"optional","type":"library","version":"2.3.0"},{"bom-ref":"pkg:pypi/itsdangerous@2.2.0","licenses":[{"expression":"BSD-3-Clause"}],"name":"itsdangerous","properties":[{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE SHA-256 63af09891b6be8ad1a4252ed43af0f4efba7fc948e228367bed7f3c5ae0b09d7"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:itsdangerous-2.2.0.dist-info/LICENSE.txt"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/itsdangerous@2.2.0","scope":"optional","type":"library","version":"2.2.0"},{"bom-ref":"pkg:pypi/jinja2@3.1.6","licenses":[{"expression":"BSD-3-Clause"}],"name":"jinja2","properties":[{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE SHA-256 3b49dcee4105eb37bac10faf1be260408fe85d252b8e9df2e0979fc1e094437b"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:jinja2-3.1.6.dist-info/licenses/LICENSE.txt"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/jinja2@3.1.6","scope":"optional","type":"library","version":"3.1.6"},{"bom-ref":"pkg:pypi/jsonschema@4.26.0","licenses":[{"expression":"MIT"}],"name":"jsonschema","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/jsonschema-4.26.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/jsonschema@4.26.0","scope":"optional","type":"library","version":"4.26.0"},{"bom-ref":"pkg:pypi/jsonschema-specifications@2025.9.1","licenses":[{"expression":"MIT"}],"name":"jsonschema-specifications","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/jsonschema-specifications@2025.9.1","scope":"optional","type":"library","version":"2025.9.1"},{"bom-ref":"pkg:pypi/markupsafe@3.0.3","licenses":[{"expression":"BSD-3-Clause"}],"name":"markupsafe","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/markupsafe-3.0.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/markupsafe@3.0.3","scope":"optional","type":"library","version":"3.0.3"},{"bom-ref":"pkg:pypi/narwhals@2.24.0","licenses":[{"expression":"MIT"}],"name":"narwhals","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/narwhals-2.24.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/narwhals@2.24.0","scope":"optional","type":"library","version":"2.24.0"},{"bom-ref":"pkg:pypi/numpy@2.2.6","licenses":[{"expression":"BSD-3-Clause"}],"name":"numpy","properties":[{"name":"visiondata-gate:direct-groups","value":"required"},{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE and bundled notices SHA-256 14256cc3a2c9d32ac284da96b937feb44f72dd90bee2317ac3020166846ad99d"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:numpy-2.2.6.dist-info/LICENSE.txt"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/numpy@2.2.6","scope":"required","type":"library","version":"2.2.6"},{"bom-ref":"pkg:pypi/packaging@26.3","licenses":[{"expression":"Apache-2.0 OR BSD-2-Clause"}],"name":"packaging","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0 OR BSD-2-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/packaging-26.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/packaging@26.3","scope":"optional","type":"library","version":"26.3"},{"bom-ref":"pkg:pypi/pandas@2.3.3","licenses":[{"expression":"BSD-3-Clause"}],"name":"pandas","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:ui"},{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE SHA-256 533eb6d0b98e5be3ddd12dce97be35dd11282f5c47cdf8d08c81756fd5d70a26"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:pandas-2.3.3.dist-info/LICENSE"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pandas@2.3.3","scope":"optional","type":"library","version":"2.3.3"},{"bom-ref":"pkg:pypi/pillow@12.3.0","licenses":[{"expression":"MIT-CMU"}],"name":"pillow","properties":[{"name":"visiondata-gate:direct-groups","value":"required"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT-CMU"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pillow-12.3.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pillow@12.3.0","scope":"required","type":"library","version":"12.3.0"},{"bom-ref":"pkg:pypi/pluggy@1.6.0","licenses":[{"expression":"MIT"}],"name":"pluggy","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pluggy-1.6.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pluggy@1.6.0","scope":"optional","type":"library","version":"1.6.0"},{"bom-ref":"pkg:pypi/protobuf@7.35.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"protobuf","properties":[{"name":"visiondata-gate:license-evidence","value":"License: 3-Clause BSD License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/protobuf-7.35.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/protobuf@7.35.1","scope":"optional","type":"library","version":"7.35.1"},{"bom-ref":"pkg:pypi/pyarrow@24.0.0","licenses":[{"expression":"Apache-2.0"}],"name":"pyarrow","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pyarrow-24.0.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pyarrow@24.0.0","scope":"optional","type":"library","version":"24.0.0"},{"bom-ref":"pkg:pypi/pydantic@2.13.4","licenses":[{"expression":"MIT"}],"name":"pydantic","properties":[{"name":"visiondata-gate:direct-groups","value":"required"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pydantic-2.13.4.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pydantic@2.13.4","scope":"required","type":"library","version":"2.13.4"},{"bom-ref":"pkg:pypi/pydantic-core@2.46.4","licenses":[{"expression":"MIT"}],"name":"pydantic-core","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pydantic_core-2.46.4.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pydantic-core@2.46.4","scope":"required","type":"library","version":"2.46.4"},{"bom-ref":"pkg:pypi/pydeck@0.9.3","licenses":[{"expression":"Apache-2.0"}],"name":"pydeck","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache License 2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pydeck-0.9.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pydeck@0.9.3","scope":"optional","type":"library","version":"0.9.3"},{"bom-ref":"pkg:pypi/pygments@2.20.0","licenses":[{"expression":"BSD-2-Clause"}],"name":"pygments","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-2-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pygments-2.20.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pygments@2.20.0","scope":"optional","type":"library","version":"2.20.0"},{"bom-ref":"pkg:pypi/pytest@8.4.2","licenses":[{"expression":"MIT"}],"name":"pytest","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:qa"},{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pytest-8.4.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/pytest@8.4.2","scope":"optional","type":"library","version":"8.4.2"},{"bom-ref":"pkg:pypi/python-dateutil@2.9.0.post0","licenses":[{"expression":"Apache-2.0 OR BSD-3-Clause"}],"name":"python-dateutil","properties":[{"name":"visiondata-gate:license-evidence","value":"wheel dual-license file SHA-256 ba00f51a0d92823b5a1cde27d8b5b9d2321e67ed8da9bc163eff96d5e17e577e"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:python_dateutil-2.9.0.post0.dist-info/LICENSE"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/python-dateutil@2.9.0.post0","scope":"optional","type":"library","version":"2.9.0.post0"},{"bom-ref":"pkg:pypi/python-multipart@0.0.32","licenses":[{"expression":"Apache-2.0"}],"name":"python-multipart","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0; Classifier: License :: OSI Approved :: Apache Software License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/python_multipart-0.0.32.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/python-multipart@0.0.32","scope":"optional","type":"library","version":"0.0.32"},{"bom-ref":"pkg:pypi/pytz@2026.3.post1","licenses":[{"expression":"MIT"}],"name":"pytz","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/pytz-2026.3.post1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/pytz@2026.3.post1","scope":"optional","type":"library","version":"2026.3.post1"},{"bom-ref":"pkg:pypi/referencing@0.37.0","licenses":[{"expression":"MIT"}],"name":"referencing","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/referencing-0.37.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/referencing@0.37.0","scope":"optional","type":"library","version":"0.37.0"},{"bom-ref":"pkg:pypi/requests@2.34.2","licenses":[{"expression":"Apache-2.0"}],"name":"requests","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache-2.0; Classifier: License :: OSI Approved :: Apache Software License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/requests-2.34.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/requests@2.34.2","scope":"optional","type":"library","version":"2.34.2"},{"bom-ref":"pkg:pypi/rpds-py@2026.6.3","licenses":[{"expression":"MIT"}],"name":"rpds-py","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/rpds_py-2026.6.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/rpds-py@2026.6.3","scope":"optional","type":"library","version":"2026.6.3"},{"bom-ref":"pkg:pypi/ruff@0.15.22","licenses":[{"expression":"MIT"}],"name":"ruff","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:qa"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/ruff-0.15.22.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/ruff@0.15.22","scope":"optional","type":"library","version":"0.15.22"},{"bom-ref":"pkg:pypi/six@1.17.0","licenses":[{"expression":"MIT"}],"name":"six","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/six-1.17.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/six@1.17.0","scope":"optional","type":"library","version":"1.17.0"},{"bom-ref":"pkg:pypi/starlette@1.3.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"starlette","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/starlette-1.3.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/starlette@1.3.1","scope":"optional","type":"library","version":"1.3.1"},{"bom-ref":"pkg:pypi/streamlit@1.61.1","licenses":[{"expression":"Apache-2.0"}],"name":"streamlit","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:ui"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/streamlit-1.61.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/streamlit@1.61.1","scope":"optional","type":"library","version":"1.61.1"},{"bom-ref":"pkg:pypi/tenacity@9.1.4","licenses":[{"expression":"Apache-2.0"}],"name":"tenacity","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache 2.0; Classifier: License :: OSI Approved :: Apache Software License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/tenacity-9.1.4.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/tenacity@9.1.4","scope":"optional","type":"library","version":"9.1.4"},{"bom-ref":"pkg:pypi/toml@0.10.2","licenses":[{"expression":"MIT"}],"name":"toml","properties":[{"name":"visiondata-gate:license-evidence","value":"License: MIT; Classifier: License :: OSI Approved :: MIT License"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/toml-0.10.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/toml@0.10.2","scope":"optional","type":"library","version":"0.10.2"},{"bom-ref":"pkg:pypi/typing-extensions@4.16.0","licenses":[{"expression":"PSF-2.0"}],"name":"typing-extensions","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: PSF-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/typing_extensions-4.16.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/typing-extensions@4.16.0","scope":"required","type":"library","version":"4.16.0"},{"bom-ref":"pkg:pypi/typing-inspection@0.4.2","licenses":[{"expression":"MIT"}],"name":"typing-inspection","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/typing_inspection-0.4.2.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/typing-inspection@0.4.2","scope":"required","type":"library","version":"0.4.2"},{"bom-ref":"pkg:pypi/tzdata@2026.3","licenses":[{"expression":"Apache-2.0"}],"name":"tzdata","properties":[{"name":"visiondata-gate:license-evidence","value":"License: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/tzdata-2026.3.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/tzdata@2026.3","scope":"optional","type":"library","version":"2026.3"},{"bom-ref":"pkg:pypi/urllib3@2.7.0","licenses":[{"expression":"MIT"}],"name":"urllib3","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: MIT"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/urllib3-2.7.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/urllib3@2.7.0","scope":"optional","type":"library","version":"2.7.0"},{"bom-ref":"pkg:pypi/uvicorn@0.52.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"uvicorn","properties":[{"name":"visiondata-gate:direct-groups","value":"optional:api"},{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/uvicorn-0.52.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"direct"}],"purl":"pkg:pypi/uvicorn@0.52.1","scope":"optional","type":"library","version":"0.52.1"},{"bom-ref":"pkg:pypi/watchdog@6.0.0","licenses":[{"expression":"Apache-2.0"}],"name":"watchdog","properties":[{"name":"visiondata-gate:license-evidence","value":"wheel LICENSE SHA-256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":"manual-audit:watchdog-6.0.0.dist-info/LICENSE"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/watchdog@6.0.0","scope":"optional","type":"library","version":"6.0.0"},{"bom-ref":"pkg:pypi/websockets@16.1.1","licenses":[{"expression":"BSD-3-Clause"}],"name":"websockets","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: BSD-3-Clause"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"registry:https://pypi.org/simple"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/websockets-16.1.1.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"transitive"}],"purl":"pkg:pypi/websockets@16.1.1","scope":"optional","type":"library","version":"16.1.1"}],"dependencies":[{"dependsOn":["pkg:pypi/jinja2@3.1.6","pkg:pypi/jsonschema@4.26.0","pkg:pypi/narwhals@2.24.0","pkg:pypi/packaging@26.3","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/altair@6.2.2"},{"dependsOn":[],"ref":"pkg:pypi/annotated-doc@0.0.5"},{"dependsOn":[],"ref":"pkg:pypi/annotated-types@0.8.0"},{"dependsOn":["pkg:pypi/idna@3.18","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/anyio@4.14.2"},{"dependsOn":[],"ref":"pkg:pypi/attrs@26.1.0"},{"dependsOn":[],"ref":"pkg:pypi/blinker@1.9.0"},{"dependsOn":[],"ref":"pkg:pypi/certifi@2026.7.22"},{"dependsOn":[],"ref":"pkg:pypi/charset-normalizer@3.4.9"},{"dependsOn":["pkg:pypi/colorama@0.4.6"],"ref":"pkg:pypi/click@8.4.2"},{"dependsOn":[],"ref":"pkg:pypi/colorama@0.4.6"},{"dependsOn":["pkg:pypi/annotated-doc@0.0.5","pkg:pypi/pydantic@2.13.4","pkg:pypi/starlette@1.3.1","pkg:pypi/typing-extensions@4.16.0","pkg:pypi/typing-inspection@0.4.2"],"ref":"pkg:pypi/fastapi@0.141.1"},{"dependsOn":[],"ref":"pkg:pypi/h11@0.16.0"},{"dependsOn":["pkg:pypi/certifi@2026.7.22","pkg:pypi/h11@0.16.0"],"ref":"pkg:pypi/httpcore@1.0.9"},{"dependsOn":[],"ref":"pkg:pypi/httptools@0.8.0"},{"dependsOn":["pkg:pypi/anyio@4.14.2","pkg:pypi/certifi@2026.7.22","pkg:pypi/httpcore@1.0.9","pkg:pypi/idna@3.18"],"ref":"pkg:pypi/httpx@0.28.1"},{"dependsOn":[],"ref":"pkg:pypi/idna@3.18"},{"dependsOn":[],"ref":"pkg:pypi/iniconfig@2.3.0"},{"dependsOn":[],"ref":"pkg:pypi/itsdangerous@2.2.0"},{"dependsOn":["pkg:pypi/markupsafe@3.0.3"],"ref":"pkg:pypi/jinja2@3.1.6"},{"dependsOn":["pkg:pypi/attrs@26.1.0","pkg:pypi/jsonschema-specifications@2025.9.1","pkg:pypi/referencing@0.37.0","pkg:pypi/rpds-py@2026.6.3"],"ref":"pkg:pypi/jsonschema@4.26.0"},{"dependsOn":["pkg:pypi/referencing@0.37.0"],"ref":"pkg:pypi/jsonschema-specifications@2025.9.1"},{"dependsOn":[],"ref":"pkg:pypi/markupsafe@3.0.3"},{"dependsOn":[],"ref":"pkg:pypi/narwhals@2.24.0"},{"dependsOn":[],"ref":"pkg:pypi/numpy@2.2.6"},{"dependsOn":[],"ref":"pkg:pypi/packaging@26.3"},{"dependsOn":["pkg:pypi/numpy@2.2.6","pkg:pypi/python-dateutil@2.9.0.post0","pkg:pypi/pytz@2026.3.post1","pkg:pypi/tzdata@2026.3"],"ref":"pkg:pypi/pandas@2.3.3"},{"dependsOn":[],"ref":"pkg:pypi/pillow@12.3.0"},{"dependsOn":[],"ref":"pkg:pypi/pluggy@1.6.0"},{"dependsOn":[],"ref":"pkg:pypi/protobuf@7.35.1"},{"dependsOn":[],"ref":"pkg:pypi/pyarrow@24.0.0"},{"dependsOn":["pkg:pypi/annotated-types@0.8.0","pkg:pypi/pydantic-core@2.46.4","pkg:pypi/typing-extensions@4.16.0","pkg:pypi/typing-inspection@0.4.2"],"ref":"pkg:pypi/pydantic@2.13.4"},{"dependsOn":["pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/pydantic-core@2.46.4"},{"dependsOn":["pkg:pypi/jinja2@3.1.6","pkg:pypi/numpy@2.2.6"],"ref":"pkg:pypi/pydeck@0.9.3"},{"dependsOn":[],"ref":"pkg:pypi/pygments@2.20.0"},{"dependsOn":["pkg:pypi/colorama@0.4.6","pkg:pypi/iniconfig@2.3.0","pkg:pypi/packaging@26.3","pkg:pypi/pluggy@1.6.0","pkg:pypi/pygments@2.20.0"],"ref":"pkg:pypi/pytest@8.4.2"},{"dependsOn":["pkg:pypi/six@1.17.0"],"ref":"pkg:pypi/python-dateutil@2.9.0.post0"},{"dependsOn":[],"ref":"pkg:pypi/python-multipart@0.0.32"},{"dependsOn":[],"ref":"pkg:pypi/pytz@2026.3.post1"},{"dependsOn":["pkg:pypi/attrs@26.1.0","pkg:pypi/rpds-py@2026.6.3","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/referencing@0.37.0"},{"dependsOn":["pkg:pypi/certifi@2026.7.22","pkg:pypi/charset-normalizer@3.4.9","pkg:pypi/idna@3.18","pkg:pypi/urllib3@2.7.0"],"ref":"pkg:pypi/requests@2.34.2"},{"dependsOn":[],"ref":"pkg:pypi/rpds-py@2026.6.3"},{"dependsOn":[],"ref":"pkg:pypi/ruff@0.15.22"},{"dependsOn":[],"ref":"pkg:pypi/six@1.17.0"},{"dependsOn":["pkg:pypi/anyio@4.14.2","pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/starlette@1.3.1"},{"dependsOn":["pkg:pypi/altair@6.2.2","pkg:pypi/anyio@4.14.2","pkg:pypi/blinker@1.9.0","pkg:pypi/click@8.4.2","pkg:pypi/httptools@0.8.0","pkg:pypi/itsdangerous@2.2.0","pkg:pypi/numpy@2.2.6","pkg:pypi/packaging@26.3","pkg:pypi/pandas@2.3.3","pkg:pypi/pillow@12.3.0","pkg:pypi/protobuf@7.35.1","pkg:pypi/pyarrow@24.0.0","pkg:pypi/pydeck@0.9.3","pkg:pypi/python-multipart@0.0.32","pkg:pypi/requests@2.34.2","pkg:pypi/starlette@1.3.1","pkg:pypi/tenacity@9.1.4","pkg:pypi/toml@0.10.2","pkg:pypi/typing-extensions@4.16.0","pkg:pypi/uvicorn@0.52.1","pkg:pypi/watchdog@6.0.0","pkg:pypi/websockets@16.1.1"],"ref":"pkg:pypi/streamlit@1.61.1"},{"dependsOn":[],"ref":"pkg:pypi/tenacity@9.1.4"},{"dependsOn":[],"ref":"pkg:pypi/toml@0.10.2"},{"dependsOn":[],"ref":"pkg:pypi/typing-extensions@4.16.0"},{"dependsOn":["pkg:pypi/typing-extensions@4.16.0"],"ref":"pkg:pypi/typing-inspection@0.4.2"},{"dependsOn":[],"ref":"pkg:pypi/tzdata@2026.3"},{"dependsOn":[],"ref":"pkg:pypi/urllib3@2.7.0"},{"dependsOn":["pkg:pypi/click@8.4.2","pkg:pypi/h11@0.16.0"],"ref":"pkg:pypi/uvicorn@0.52.1"},{"dependsOn":["pkg:pypi/fastapi@0.141.1","pkg:pypi/httpx@0.28.1","pkg:pypi/numpy@2.2.6","pkg:pypi/pandas@2.3.3","pkg:pypi/pillow@12.3.0","pkg:pypi/pydantic@2.13.4","pkg:pypi/pytest@8.4.2","pkg:pypi/ruff@0.15.22","pkg:pypi/streamlit@1.61.1","pkg:pypi/uvicorn@0.52.1"],"ref":"pkg:pypi/visiondata-gate@0.1.0"},{"dependsOn":[],"ref":"pkg:pypi/watchdog@6.0.0"},{"dependsOn":[],"ref":"pkg:pypi/websockets@16.1.1"}],"metadata":{"component":{"bom-ref":"pkg:pypi/visiondata-gate@0.1.0","licenses":[{"expression":"Apache-2.0"}],"name":"visiondata-gate","properties":[{"name":"visiondata-gate:license-evidence","value":"License-Expression: Apache-2.0"},{"name":"visiondata-gate:license-review","value":"OK"},{"name":"visiondata-gate:lock-source","value":"local-project"},{"name":"visiondata-gate:metadata-source","value":".venv/site-packages/visiondata_gate-0.1.0.dist-info/METADATA"},{"name":"visiondata-gate:relationship","value":"internal-root"}],"purl":"pkg:pypi/visiondata-gate@0.1.0","scope":"required","type":"application","version":"0.1.0"},"properties":[{"name":"visiondata-gate:generated-from","value":"uv.lock + .venv installed METADATA + exact-version manual license resolutions"},{"name":"visiondata-gate:legal-review","value":"OWNER_CONFIRMED_NOT_LEGAL_ADVICE"},{"name":"visiondata-gate:offline-rebuild","value":"true"},{"name":"visiondata-gate:top-level-license-notice","value":"APACHE-2.0_AND_NOTICE_PRESENT"}]},"specVersion":"1.6","version":1} diff --git a/docs/SUBMISSION_CHECKLIST.md b/docs/SUBMISSION_CHECKLIST.md index d45f0fc..27cc763 100644 --- a/docs/SUBMISSION_CHECKLIST.md +++ b/docs/SUBMISSION_CHECKLIST.md @@ -3,7 +3,9 @@ 作品:VisionData Gate|工业视觉数据治理与发布 Agent 赛道:无界应用 Boundless Agents 方向:AI+工业制造 -Release:`vdg-20260816-rc1` +提交包:`v0.1.0-goai-rc2` + +冻结证据:`vdg-20260816-rc1`(RC2 未修改实验数据与结论) ## P0:任一失败即停止构包/上传 @@ -28,7 +30,7 @@ Release:`vdg-20260816-rc1` - [x] 方案 PPT:`deliverables/GOAI_VisionDataGate_BoundlessAgents_20260816.pptx`; - [x] 方案 PDF:`deliverables/GOAI_VisionDataGate_BoundlessAgents_20260816.pdf`; - [x] 可选演示视频策略:RC1 不带旧视频;如需上传,应基于新版 Reviewer Mode 重新录制并单独 QA; -- [x] 源码候选包:`deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip`; +- [x] 源码候选包:`deliverables/VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip`; - [x] 一页纸:`docs/one_pager.md`; - [x] 最终 QA:`10_reports/FINAL_QA_REPORT_20260816.md`; - [x] 包外交付回执:`10_reports/SUBMISSION_DELIVERY_RECEIPT_20260816.json`。 @@ -36,7 +38,7 @@ Release:`vdg-20260816-rc1` ## 账号持有人必须完成 - [ ] 确认报名主体、团队信息和作品名称; -- [ ] 由权利主体选择并确认顶层 LICENSE 与 NOTICE; +- [x] 权利主体确认 Apache-2.0,顶层 LICENSE、NOTICE、第三方声明和 SBOM 已纳入构包硬门禁; - [ ] 在官网上传简介、PPT/PDF、视频和源码链接/附件; - [ ] 提交前在预览页核对赛道为“赛道二 无界应用”; - [ ] 保存作品 ID、提交时间、页面截图或平台回执; diff --git a/docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md b/docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md index 8216152..51b3be9 100644 --- a/docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md +++ b/docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md @@ -1,17 +1,17 @@ # 第三方许可证元数据清单(自动生成) -> 本文件由 `uv.lock` 与项目 `.venv` 中已安装的 `METADATA` 离线生成,仅是可审计的元数据清单;不构成法律审查,也不替代项目顶层 `LICENSE` / `NOTICE`。 +> 本文件由 `uv.lock`、项目 `.venv` 中已安装的 `METADATA` 与精确版本许可证人工复核表离线生成;它是可审计的工程清单,不构成法律意见。项目授权见顶层 `LICENSE` / `NOTICE`,依赖说明见 `docs/THIRD_PARTY_NOTICES.md`。 - 锁定组件总数(含内部根项目):`55` -- `REVIEW_REQUIRED`:`9` +- `REVIEW_REQUIRED`:`0` - 数据范围:只枚举 `uv.lock` 中的项目及锁定依赖;`.venv` 中不在锁内的分发包不会进入本表。 - 条件依赖:仅通过 marker 入边引用的组件不读取当前平台安装 METADATA,避免跨平台借用许可证据。 - 重建方式:`python tools/generate_supply_chain_artifacts.py`;不需要联网。 | 关系 | 名称 | 版本 | PURL | 许可表达式 / classifiers | 元数据来源 | 复核状态 | |---|---|---|---|---|---|---| -| internal-root | visiondata-gate | 0.1.0 | pkg:pypi/visiondata-gate@0.1.0 | no license metadata | uv.lock; .venv/site-packages/visiondata_gate-0.1.0.dist-info/METADATA | REVIEW_REQUIRED | -| transitive | altair | 6.2.2 | pkg:pypi/altair@6.2.2 | License: long text; Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/altair-6.2.2.dist-info/METADATA | REVIEW_REQUIRED | +| internal-root | visiondata-gate | 0.1.0 | pkg:pypi/visiondata-gate@0.1.0 | License-Expression: Apache-2.0 | uv.lock; .venv/site-packages/visiondata_gate-0.1.0.dist-info/METADATA | OK | +| transitive | altair | 6.2.2 | pkg:pypi/altair@6.2.2 | wheel LICENSE SHA-256 648332da6631555f71f18305b96e9a2c409e73d73613b6c96587cdc0a449e054 | uv.lock; manual-audit:altair-6.2.2.dist-info/licenses/LICENSE | OK | | transitive | annotated-doc | 0.0.5 | pkg:pypi/annotated-doc@0.0.5 | License-Expression: MIT | uv.lock; .venv/site-packages/annotated_doc-0.0.5.dist-info/METADATA | OK | | transitive | annotated-types | 0.8.0 | pkg:pypi/annotated-types@0.8.0 | License-Expression: MIT; Classifier: License :: OSI Approved :: MIT License | uv.lock; .venv/site-packages/annotated_types-0.8.0.dist-info/METADATA | OK | | transitive | anyio | 4.14.2 | pkg:pypi/anyio@4.14.2 | License-Expression: MIT | uv.lock; .venv/site-packages/anyio-4.14.2.dist-info/METADATA | OK | @@ -20,7 +20,7 @@ | transitive | certifi | 2026.7.22 | pkg:pypi/certifi@2026.7.22 | License: MPL-2.0; Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) | uv.lock; .venv/site-packages/certifi-2026.7.22.dist-info/METADATA | OK | | transitive | charset-normalizer | 3.4.9 | pkg:pypi/charset-normalizer@3.4.9 | License: MIT | uv.lock; .venv/site-packages/charset_normalizer-3.4.9.dist-info/METADATA | OK | | transitive | click | 8.4.2 | pkg:pypi/click@8.4.2 | License-Expression: BSD-3-Clause | uv.lock; .venv/site-packages/click-8.4.2.dist-info/METADATA | OK | -| transitive | colorama | 0.4.6 | pkg:pypi/colorama@0.4.6 | conditional dependency; installed METADATA intentionally not used | uv.lock; uv.lock conditional edge | REVIEW_REQUIRED | +| transitive | colorama | 0.4.6 | pkg:pypi/colorama@0.4.6 | wheel LICENSE SHA-256 cac35c02686e5d04a5a7140bfb3b36e73aed496656e891102e428886d7930318 | uv.lock; manual-audit:colorama-0.4.6.dist-info/licenses/LICENSE.txt | OK | | direct | fastapi | 0.141.1 | pkg:pypi/fastapi@0.141.1 | License-Expression: MIT | uv.lock; .venv/site-packages/fastapi-0.141.1.dist-info/METADATA | OK | | transitive | h11 | 0.16.0 | pkg:pypi/h11@0.16.0 | License: MIT; Classifier: License :: OSI Approved :: MIT License | uv.lock; .venv/site-packages/h11-0.16.0.dist-info/METADATA | OK | | transitive | httpcore | 1.0.9 | pkg:pypi/httpcore@1.0.9 | License-Expression: BSD-3-Clause; Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/httpcore-1.0.9.dist-info/METADATA | OK | @@ -28,15 +28,15 @@ | direct | httpx | 0.28.1 | pkg:pypi/httpx@0.28.1 | License: BSD-3-Clause; Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/httpx-0.28.1.dist-info/METADATA | OK | | transitive | idna | 3.18 | pkg:pypi/idna@3.18 | License-Expression: BSD-3-Clause | uv.lock; .venv/site-packages/idna-3.18.dist-info/METADATA | OK | | transitive | iniconfig | 2.3.0 | pkg:pypi/iniconfig@2.3.0 | License-Expression: MIT | uv.lock; .venv/site-packages/iniconfig-2.3.0.dist-info/METADATA | OK | -| transitive | itsdangerous | 2.2.0 | pkg:pypi/itsdangerous@2.2.0 | Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/itsdangerous-2.2.0.dist-info/METADATA | REVIEW_REQUIRED | -| transitive | jinja2 | 3.1.6 | pkg:pypi/jinja2@3.1.6 | Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/jinja2-3.1.6.dist-info/METADATA | REVIEW_REQUIRED | +| transitive | itsdangerous | 2.2.0 | pkg:pypi/itsdangerous@2.2.0 | wheel LICENSE SHA-256 63af09891b6be8ad1a4252ed43af0f4efba7fc948e228367bed7f3c5ae0b09d7 | uv.lock; manual-audit:itsdangerous-2.2.0.dist-info/LICENSE.txt | OK | +| transitive | jinja2 | 3.1.6 | pkg:pypi/jinja2@3.1.6 | wheel LICENSE SHA-256 3b49dcee4105eb37bac10faf1be260408fe85d252b8e9df2e0979fc1e094437b | uv.lock; manual-audit:jinja2-3.1.6.dist-info/licenses/LICENSE.txt | OK | | transitive | jsonschema | 4.26.0 | pkg:pypi/jsonschema@4.26.0 | License-Expression: MIT | uv.lock; .venv/site-packages/jsonschema-4.26.0.dist-info/METADATA | OK | | transitive | jsonschema-specifications | 2025.9.1 | pkg:pypi/jsonschema-specifications@2025.9.1 | License-Expression: MIT | uv.lock; .venv/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA | OK | | transitive | markupsafe | 3.0.3 | pkg:pypi/markupsafe@3.0.3 | License-Expression: BSD-3-Clause | uv.lock; .venv/site-packages/markupsafe-3.0.3.dist-info/METADATA | OK | | transitive | narwhals | 2.24.0 | pkg:pypi/narwhals@2.24.0 | License-Expression: MIT | uv.lock; .venv/site-packages/narwhals-2.24.0.dist-info/METADATA | OK | -| direct | numpy | 2.2.6 | pkg:pypi/numpy@2.2.6 | License: long text; Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/numpy-2.2.6.dist-info/METADATA | REVIEW_REQUIRED | +| direct | numpy | 2.2.6 | pkg:pypi/numpy@2.2.6 | wheel LICENSE and bundled notices SHA-256 14256cc3a2c9d32ac284da96b937feb44f72dd90bee2317ac3020166846ad99d | uv.lock; manual-audit:numpy-2.2.6.dist-info/LICENSE.txt | OK | | transitive | packaging | 26.3 | pkg:pypi/packaging@26.3 | License-Expression: Apache-2.0 OR BSD-2-Clause | uv.lock; .venv/site-packages/packaging-26.3.dist-info/METADATA | OK | -| direct | pandas | 2.3.3 | pkg:pypi/pandas@2.3.3 | License: long text; Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/pandas-2.3.3.dist-info/METADATA | REVIEW_REQUIRED | +| direct | pandas | 2.3.3 | pkg:pypi/pandas@2.3.3 | wheel LICENSE SHA-256 533eb6d0b98e5be3ddd12dce97be35dd11282f5c47cdf8d08c81756fd5d70a26 | uv.lock; manual-audit:pandas-2.3.3.dist-info/LICENSE | OK | | direct | pillow | 12.3.0 | pkg:pypi/pillow@12.3.0 | License-Expression: MIT-CMU | uv.lock; .venv/site-packages/pillow-12.3.0.dist-info/METADATA | OK | | transitive | pluggy | 1.6.0 | pkg:pypi/pluggy@1.6.0 | License: MIT; Classifier: License :: OSI Approved :: MIT License | uv.lock; .venv/site-packages/pluggy-1.6.0.dist-info/METADATA | OK | | transitive | protobuf | 7.35.1 | pkg:pypi/protobuf@7.35.1 | License: 3-Clause BSD License | uv.lock; .venv/site-packages/protobuf-7.35.1.dist-info/METADATA | OK | @@ -46,7 +46,7 @@ | transitive | pydeck | 0.9.3 | pkg:pypi/pydeck@0.9.3 | License: Apache License 2.0 | uv.lock; .venv/site-packages/pydeck-0.9.3.dist-info/METADATA | OK | | transitive | pygments | 2.20.0 | pkg:pypi/pygments@2.20.0 | License-Expression: BSD-2-Clause | uv.lock; .venv/site-packages/pygments-2.20.0.dist-info/METADATA | OK | | direct | pytest | 8.4.2 | pkg:pypi/pytest@8.4.2 | License: MIT; Classifier: License :: OSI Approved :: MIT License | uv.lock; .venv/site-packages/pytest-8.4.2.dist-info/METADATA | OK | -| transitive | python-dateutil | 2.9.0.post0 | pkg:pypi/python-dateutil@2.9.0.post0 | License: Dual License; Classifier: License :: OSI Approved :: Apache Software License; Classifier: License :: OSI Approved :: BSD License | uv.lock; .venv/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA | REVIEW_REQUIRED | +| transitive | python-dateutil | 2.9.0.post0 | pkg:pypi/python-dateutil@2.9.0.post0 | wheel dual-license file SHA-256 ba00f51a0d92823b5a1cde27d8b5b9d2321e67ed8da9bc163eff96d5e17e577e | uv.lock; manual-audit:python_dateutil-2.9.0.post0.dist-info/LICENSE | OK | | transitive | python-multipart | 0.0.32 | pkg:pypi/python-multipart@0.0.32 | License-Expression: Apache-2.0; Classifier: License :: OSI Approved :: Apache Software License | uv.lock; .venv/site-packages/python_multipart-0.0.32.dist-info/METADATA | OK | | transitive | pytz | 2026.3.post1 | pkg:pypi/pytz@2026.3.post1 | License: MIT; Classifier: License :: OSI Approved :: MIT License | uv.lock; .venv/site-packages/pytz-2026.3.post1.dist-info/METADATA | OK | | transitive | referencing | 0.37.0 | pkg:pypi/referencing@0.37.0 | License-Expression: MIT | uv.lock; .venv/site-packages/referencing-0.37.0.dist-info/METADATA | OK | @@ -63,5 +63,5 @@ | transitive | tzdata | 2026.3 | pkg:pypi/tzdata@2026.3 | License: Apache-2.0 | uv.lock; .venv/site-packages/tzdata-2026.3.dist-info/METADATA | OK | | transitive | urllib3 | 2.7.0 | pkg:pypi/urllib3@2.7.0 | License-Expression: MIT | uv.lock; .venv/site-packages/urllib3-2.7.0.dist-info/METADATA | OK | | direct | uvicorn | 0.52.1 | pkg:pypi/uvicorn@0.52.1 | License-Expression: BSD-3-Clause | uv.lock; .venv/site-packages/uvicorn-0.52.1.dist-info/METADATA | OK | -| transitive | watchdog | 6.0.0 | pkg:pypi/watchdog@6.0.0 | conditional dependency; installed METADATA intentionally not used | uv.lock; uv.lock conditional edge | REVIEW_REQUIRED | +| transitive | watchdog | 6.0.0 | pkg:pypi/watchdog@6.0.0 | wheel LICENSE SHA-256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 | uv.lock; manual-audit:watchdog-6.0.0.dist-info/LICENSE | OK | | transitive | websockets | 16.1.1 | pkg:pypi/websockets@16.1.1 | License-Expression: BSD-3-Clause | uv.lock; .venv/site-packages/websockets-16.1.1.dist-info/METADATA | OK | diff --git a/docs/THIRD_PARTY_NOTICES.md b/docs/THIRD_PARTY_NOTICES.md new file mode 100644 index 0000000..a48a607 --- /dev/null +++ b/docs/THIRD_PARTY_NOTICES.md @@ -0,0 +1,119 @@ +# Third-party notices + +VisionData Gate is licensed under Apache-2.0. Its source submission ZIP does +not vendor the Python distributions listed below, model weights, or external +datasets. The packages are resolved by `uv.lock` and installed separately by +the user's package manager. Each installed distribution remains governed by +its own license and carries its authoritative license files. + +This notice records the 54 locked third-party packages in the RC2 environment. +The machine-readable inventory is `docs/SBOM.cdx.json`; metadata provenance, +manual-resolution evidence, and exact versions are recorded in +`docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md`. + +## Apache-2.0 + +- pyarrow 24.0.0 +- pydeck 0.9.3 +- python-multipart 0.0.32 +- requests 2.34.2 +- streamlit 1.61.1 +- tenacity 9.1.4 +- tzdata 2026.3 +- watchdog 6.0.0 + +## Apache-2.0 OR BSD-2-Clause + +- packaging 26.3 + +## Apache-2.0 OR BSD-3-Clause + +- python-dateutil 2.9.0.post0 + +## BSD-2-Clause + +- pygments 2.20.0 + +## BSD-3-Clause + +- altair 6.2.2 +- click 8.4.2 +- colorama 0.4.6 +- httpcore 1.0.9 +- httpx 0.28.1 +- idna 3.18 +- itsdangerous 2.2.0 +- jinja2 3.1.6 +- markupsafe 3.0.3 +- numpy 2.2.6 +- pandas 2.3.3 +- protobuf 7.35.1 +- starlette 1.3.1 +- uvicorn 0.52.1 +- websockets 16.1.1 + +## MIT + +- annotated-doc 0.0.5 +- annotated-types 0.8.0 +- anyio 4.14.2 +- attrs 26.1.0 +- blinker 1.9.0 +- charset-normalizer 3.4.9 +- fastapi 0.141.1 +- h11 0.16.0 +- httptools 0.8.0 +- iniconfig 2.3.0 +- jsonschema 4.26.0 +- jsonschema-specifications 2025.9.1 +- narwhals 2.24.0 +- pluggy 1.6.0 +- pydantic 2.13.4 +- pydantic-core 2.46.4 +- pytest 8.4.2 +- pytz 2026.3.post1 +- referencing 0.37.0 +- rpds-py 2026.6.3 +- ruff 0.15.22 +- six 1.17.0 +- toml 0.10.2 +- typing-inspection 0.4.2 +- urllib3 2.7.0 + +## MIT-CMU + +- pillow 12.3.0 + +## MPL-2.0 + +- certifi 2026.7.22 + +## PSF-2.0 + +- typing-extensions 4.16.0 + +## Exact-version manual resolutions + +Eight dependency records did not expose a single unambiguous SPDX expression +through cross-platform Core Metadata. Their wheel license files were reviewed +for the locked version; an upgrade deliberately returns the component to +`REVIEW_REQUIRED` until the new distribution is checked. + +| Package | Resolved expression | Distribution license-file SHA-256 | +|---|---|---| +| altair 6.2.2 | BSD-3-Clause | `648332da6631555f71f18305b96e9a2c409e73d73613b6c96587cdc0a449e054` | +| colorama 0.4.6 | BSD-3-Clause | `cac35c02686e5d04a5a7140bfb3b36e73aed496656e891102e428886d7930318` | +| itsdangerous 2.2.0 | BSD-3-Clause | `63af09891b6be8ad1a4252ed43af0f4efba7fc948e228367bed7f3c5ae0b09d7` | +| jinja2 3.1.6 | BSD-3-Clause | `3b49dcee4105eb37bac10faf1be260408fe85d252b8e9df2e0979fc1e094437b` | +| numpy 2.2.6 | BSD-3-Clause | `14256cc3a2c9d32ac284da96b937feb44f72dd90bee2317ac3020166846ad99d` | +| pandas 2.3.3 | BSD-3-Clause | `533eb6d0b98e5be3ddd12dce97be35dd11282f5c47cdf8d08c81756fd5d70a26` | +| python-dateutil 2.9.0.post0 | Apache-2.0 OR BSD-3-Clause | `ba00f51a0d92823b5a1cde27d8b5b9d2321e67ed8da9bc163eff96d5e17e577e` | +| watchdog 6.0.0 | Apache-2.0 | `cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30` | + +The NumPy wheel license file includes its bundled binary notices. VisionData +Gate does not redistribute that wheel; users receiving it through a package +index should retain the license files shipped with that distribution. + +This engineering inventory is not legal advice. If the dependency set, +distribution channel, or vendoring policy changes, regenerate the SBOM and +repeat the license review before release. diff --git a/docs/data_privacy_license_boundaries.md b/docs/data_privacy_license_boundaries.md index f14309b..43b11c4 100644 --- a/docs/data_privacy_license_boundaries.md +++ b/docs/data_privacy_license_boundaries.md @@ -34,15 +34,15 @@ ## 代码与依赖许可 -当前代码的“开放源码发布”在以下条件完成前保持 `NO-GO`;这不阻止形成带明确边界的比赛提交候选包: +当前代码开放源码状态为 `GO`,范围仅限本仓库与 RC2 源码候选包: -- [ ] 权利主体确认顶层 LICENSE -- [ ] 补齐正式第三方 NOTICE,并处理清单中 9 项 `REVIEW_REQUIRED` +- [x] 权利主体确认顶层 Apache-2.0 LICENSE 与 NOTICE +- [x] 补齐第三方 NOTICE;55 个锁定组件(含根项目)的 `REVIEW_REQUIRED` 为 0 - [x] 固化 `uv.lock` 与锁定依赖来源 - [x] 生成 CycloneDX 1.6 SBOM 与第三方许可证元数据清单 -- [ ] 在对外开源前核对图标、字体、截图和派生代码许可 +- [x] 当前网站使用本项目 SVG 与系统字体;未内嵌第三方模型权重、数据集或 Python distribution -比赛材料可以写“提供可复用 Agent schema、白名单工具接口、合成样例、SBOM 与 manifest 模板”,不能写“已完全开源”或“已经过法律审查”。 +比赛材料可以写“代码按 Apache-2.0 开源,并提供可复用 Agent schema、白名单工具接口、合成样例、SBOM 与 manifest 模板”;不能写“已经过独立法律审查”,也不能把代码许可扩大解释为数据、模型或客户资产授权。 ## 行业边界 diff --git a/docs/one_pager.md b/docs/one_pager.md index f9915f7..8e9ae31 100644 --- a/docs/one_pager.md +++ b/docs/one_pager.md @@ -60,4 +60,4 @@ Streamlit / REST API 本版本以 `local-deterministic` Runtime 完成上述应用闭环,actual model calls 与模型费用为 0。Omni 源树 4,464 张图像只完成结构/解码审计,Policy Gate 的已验证分母为 180。AgentTeams 静态契约为 `PASS`;将当前闭环扩展到客户、工厂、生产 IAM、全量 Omni、外部 LLM 或 hosted transport 时,需补相应外部验收回执,连接状态暂保持 `mapped_not_connected`。 -顶层 LICENSE/NOTICE 需由权利主体确认;官网上传和平台回执需由账号持有人完成。 +代码已按 Apache-2.0 开源,NOTICE、第三方声明和 SBOM 已纳入 RC2;官网上传和平台回执仍需由账号持有人完成。 diff --git a/docs/submission_form_copy.md b/docs/submission_form_copy.md index be3882a..3812e51 100644 --- a/docs/submission_form_copy.md +++ b/docs/submission_form_copy.md @@ -82,7 +82,7 @@ Omni 源树 4,464 张图像和 1,439 个 masks 只完成结构/解码审计, - 工具白名单、只读默认、失败关闭和证据哈希; - 公开 evidence 经过结构校验、交叉哈希和私有路径扫描; - Skills、Tool Contract、规则包和 AgentTeams adapter 可独立复用; -- 顶层 LICENSE/NOTICE 仍需权利主体确认,不在材料中伪造许可证结论。 +- 代码按 Apache-2.0 开源,NOTICE、第三方声明和 SBOM 随 RC2 交付;该许可不覆盖外部数据、模型或客户资产。 ## 三级证据状态 diff --git a/pyproject.toml b/pyproject.toml index a98dc72..5d582a6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,8 @@ name = "visiondata-gate" version = "0.1.0" description = "Auditable industrial-vision data release gate with an AI Expert Council" readme = "README.md" +license = "Apache-2.0" +license-files = ["LICENSE", "NOTICE"] requires-python = ">=3.12,<3.14" dependencies = [ "numpy>=2.2,<2.3", diff --git a/release/README.md b/release/README.md index e701e8f..28f2539 100644 --- a/release/README.md +++ b/release/README.md @@ -1,6 +1,6 @@ -# RC1 发布附件完整性 +# RC2 发布附件完整性 -[`SHA256SUMS.txt`](SHA256SUMS.txt) 列出 `v0.1.0-goai-rc1` Release 的五个作品附件;校验清单不包含自身,以避免递归摘要。 +[`SHA256SUMS.txt`](SHA256SUMS.txt) 列出 `v0.1.0-goai-rc2` Release 的五个作品附件;校验清单不包含自身,以避免递归摘要。 本地已保留全部附件时,运行: @@ -10,4 +10,4 @@ uv run python tools/check_release_assets.py --require-all 干净 Git checkout 默认不含被忽略的候选 ZIP。此时不带 `--require-all` 的 CI 会核验四个受版本控制的附件,并把 ZIP 条目与 detached receipt 中冻结的文件名、大小和 SHA-256 交叉比对。GitHub Release 上传后还需单独核对平台返回的 asset digest。 -`v0.1.0-goai-rc1` tag 是冻结发布快照;`main` 可以继续增加验证与文档加固,但不得静默移动已发布 tag 或覆盖冻结候选 ZIP。 +`v0.1.0-goai-rc2` tag 是许可证和跨平台发布门禁修复后的提交快照;历史 RC1 与 RC2 均不得静默移动或覆盖。实验命名空间仍为 `vdg-20260816-rc1`,RC2 不改变其数据、分母和结论。 diff --git a/release/SHA256SUMS.txt b/release/SHA256SUMS.txt index 873f202..933bb4e 100644 --- a/release/SHA256SUMS.txt +++ b/release/SHA256SUMS.txt @@ -1,5 +1,5 @@ 29135083cd5792b870342eebe7acdbf1aee1a864b7294dfe0ba489692aeeb282 GOAI_VisionDataGate_BoundlessAgents_20260816.pdf d900dd0cdf87fdf115d7ed65e03fe34a1dab380f6e6e18ec5bd6ca4a013f4d24 GOAI_VisionDataGate_BoundlessAgents_20260816.pptx 399cc2f26e1eb07634ec7a9e41dd499a43452d50c2f08d36245f1e956d8b2ad2 VisionDataGate_GOAI_FinalDemo_20260813.mp4 -b0efd18ec35e1ffa92a1eb1564c1cb60fd07d87df0b9ce103a90ad27b27e7380 VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.receipt.json -6eb9614d38c9481fedea6923d6210a2615ede99b7ccf604955052ad028577148 VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip +228b390801fe91601488ba0fa716547c20a9e0c0a6c3757affcf45001eb0eae4 VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json +560d4216be63ebc75210cf516431d23aec6e88d4c153eb16f755affd3b9382bf VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip diff --git a/src/visiondata_gate/package.py b/src/visiondata_gate/package.py index 7cf4f62..e4c288e 100644 --- a/src/visiondata_gate/package.py +++ b/src/visiondata_gate/package.py @@ -48,6 +48,7 @@ "node_modules", "output", "playwright-report", + "release", "temp", "test-results", "tmp", @@ -93,6 +94,8 @@ ) DEFAULT_SUBMISSION_REQUIRED_PATHS = ( + "LICENSE", + "NOTICE", "README.md", "app.py", "pyproject.toml", @@ -134,6 +137,7 @@ "tools/agentteams_v122_bridge.py", "tools/api_smoke.py", "tools/check_website_data.py", + "tools/check_release_assets.py", "run_app.ps1", "run_api.ps1", "setup_env.ps1", @@ -173,6 +177,7 @@ "docs/TOOL_REPLAY_AND_MIGRATION.md", "docs/SBOM.cdx.json", "docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md", + "docs/THIRD_PARTY_NOTICES.md", "website/index.html", "website/styles.css", "website/app.js", diff --git a/tests/test_evidence_package.py b/tests/test_evidence_package.py index ae39441..11e180c 100644 --- a/tests/test_evidence_package.py +++ b/tests/test_evidence_package.py @@ -702,6 +702,8 @@ def test_default_required_paths_cover_final_submission_anchors() -> None: "docs/GOAI_REVIEWER_FEEDBACK_AUDIT_20260812.md", } expected = { + "LICENSE", + "NOTICE", "README.md", "app.py", "src/visiondata_gate/product_models.py", @@ -724,6 +726,7 @@ def test_default_required_paths_cover_final_submission_anchors() -> None: "docs/SUBMISSION_CHECKLIST.md", "docs/SBOM.cdx.json", "docs/THIRD_PARTY_LICENSE_INVENTORY.generated.md", + "docs/THIRD_PARTY_NOTICES.md", "10_reports/FINAL_QA_REPORT_20260816.md", "10_reports/FINAL_QA_REPORT_20260816.json", "10_reports/SUBMISSION_DELIVERY_RECEIPT_20260816.json", diff --git a/tests/test_release_artifacts.py b/tests/test_release_artifacts.py index 198c02a..6c4e05e 100644 --- a/tests/test_release_artifacts.py +++ b/tests/test_release_artifacts.py @@ -2,6 +2,7 @@ import hashlib import json +import os import subprocess import sys from pathlib import Path, PurePosixPath @@ -10,6 +11,41 @@ PROJECT_ROOT = Path(__file__).resolve().parents[1] +def test_release_checker_writes_utf8_under_legacy_stdout_codec() -> None: + """Reproduce the Windows cp1252 failure that previously produced false-green CI.""" + + environment = os.environ.copy() + environment["PYTHONIOENCODING"] = "cp1252" + process = subprocess.run( + [sys.executable, "tools/check_release_consistency.py"], + cwd=PROJECT_ROOT, + env=environment, + capture_output=True, + timeout=30, + check=False, + ) + + assert process.returncode == 0, process.stderr.decode("utf-8", errors="replace") + payload = json.loads(process.stdout.decode("utf-8", errors="strict")) + assert payload["ok"] is True + assert payload["track"] == "Boundless Agents / AI+工业制造" + + +def test_ci_release_validators_are_independent_fail_fast_steps() -> None: + workflow = (PROJECT_ROOT / ".github" / "workflows" / "ci.yml").read_text( + encoding="utf-8" + ) + + assert 'PYTHONUTF8: "1"' in workflow + assert "- name: Validate submission evidence" in workflow + assert "- name: Validate reviewer website projection" in workflow + assert "- name: Validate detached release assets" in workflow + assert "run: uv run python tools/check_release_consistency.py" in workflow + assert "run: uv run python tools/check_website_data.py" in workflow + assert "run: uv run python tools/check_release_assets.py" in workflow + assert "- name: Validate release evidence" not in workflow + + def _sha256(path: Path) -> str: digest = hashlib.sha256() with path.open("rb") as handle: @@ -183,6 +219,6 @@ def test_frozen_supply_chain_outputs_match_offline_regeneration( assert result == { "component_count": 55, "inventory_sha256": _sha256(frozen_inventory), - "review_required_count": 9, + "review_required_count": 0, "sbom_sha256": _sha256(frozen_sbom), } diff --git a/tests/test_supply_chain_artifacts.py b/tests/test_supply_chain_artifacts.py index 6a2d098..f980382 100644 --- a/tests/test_supply_chain_artifacts.py +++ b/tests/test_supply_chain_artifacts.py @@ -276,8 +276,8 @@ def test_license_inventory_marks_ambiguity_and_removes_local_paths( combined = inventory + sbom_text assert "REVIEW_REQUIRED" in inventory - assert "不构成法律审查" in inventory - assert "不替代项目顶层 `LICENSE` / `NOTICE`" in inventory + assert "不构成法律意见" in inventory + assert "项目授权见顶层 `LICENSE` / `NOTICE`" in inventory assert "License-Expression: MIT" in inventory assert "License :: OSI Approved :: BSD License" in inventory assert "long text (" not in inventory diff --git a/tools/build_submission_package.py b/tools/build_submission_package.py index 2cc95fd..02f2b8e 100644 --- a/tools/build_submission_package.py +++ b/tools/build_submission_package.py @@ -45,7 +45,7 @@ def build_parser() -> argparse.ArgumentParser: default=( PROJECT_ROOT / "deliverables" - / "VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip" + / "VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip" ), help="destination ZIP", ) diff --git a/tools/check_release_assets.py b/tools/check_release_assets.py index 9a51394..6280445 100644 --- a/tools/check_release_assets.py +++ b/tools/check_release_assets.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Validate hashes for the detached GOAI RC1 release assets.""" +"""Validate hashes for the detached GOAI RC2 release assets.""" from __future__ import annotations @@ -15,14 +15,14 @@ CHECKSUMS_PATH = PROJECT_ROOT / "release" / "SHA256SUMS.txt" DELIVERABLES_DIR = PROJECT_ROOT / "deliverables" RECEIPT_PATH = ( - DELIVERABLES_DIR / "VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.receipt.json" + DELIVERABLES_DIR / "VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json" ) EXPECTED_ASSETS = { "GOAI_VisionDataGate_BoundlessAgents_20260816.pdf", "GOAI_VisionDataGate_BoundlessAgents_20260816.pptx", "VisionDataGate_GOAI_FinalDemo_20260813.mp4", - "VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.receipt.json", - "VisionData_Gate_GOAI_BoundlessAgents_RC1_20260816.zip", + "VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.receipt.json", + "VisionData_Gate_GOAI_BoundlessAgents_RC2_20260816.zip", } CHECKSUM_LINE = re.compile(r"^(?P[0-9a-f]{64}) (?P[^/\\]+)$") diff --git a/tools/check_release_consistency.py b/tools/check_release_consistency.py index 2b09fc8..38a76a9 100644 --- a/tools/check_release_consistency.py +++ b/tools/check_release_consistency.py @@ -21,6 +21,12 @@ ) +def _write_json(payload: dict[str, object]) -> None: + """Write canonical UTF-8 bytes without inheriting a legacy console codec.""" + + sys.stdout.buffer.write(canonical_json_text(payload).encode("utf-8")) + + def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( description="Validate a VisionData Gate public release." @@ -35,34 +41,27 @@ def main(argv: list[str] | None = None) -> int: try: release = load_submission_release(release_dir) except (OSError, ReleaseValidationError, ValueError) as exc: - sys.stdout.write( - canonical_json_text( - {"ok": False, "error_type": type(exc).__name__, "error": str(exc)} - ) - ) + _write_json({"ok": False, "error_type": type(exc).__name__, "error": str(exc)}) return 2 omni = release.manifest["evidence_namespaces"]["Omni-180-v1"] arch = release.manifest["evidence_namespaces"]["ArchBench-v2"] scenario = release.scenario_delivery_receipt - sys.stdout.write( - canonical_json_text( - { - "ok": True, - "release_id": release.manifest["release_id"], - "track": "Boundless Agents / AI+工业制造", - "architecture_records": arch["record_count"], - "omni_fixed_denominator": omni["selected_image_count"], - "dynamic_workers": omni["worker_count"], - "work_orders": omni["work_order_count"], - "scenario_status": scenario["status"], - "proof_ladder": { - key: value["status"] - for key, value in scenario["proof_ladder"].items() - }, - "agentteams": release.manifest["agentteams"]["connection_status"], - "quality_status": release.manifest["quality_gates"]["status"], - } - ) + _write_json( + { + "ok": True, + "release_id": release.manifest["release_id"], + "track": "Boundless Agents / AI+工业制造", + "architecture_records": arch["record_count"], + "omni_fixed_denominator": omni["selected_image_count"], + "dynamic_workers": omni["worker_count"], + "work_orders": omni["work_order_count"], + "scenario_status": scenario["status"], + "proof_ladder": { + key: value["status"] for key, value in scenario["proof_ladder"].items() + }, + "agentteams": release.manifest["agentteams"]["connection_status"], + "quality_status": release.manifest["quality_gates"]["status"], + } ) return 0 diff --git a/tools/check_website_data.py b/tools/check_website_data.py index b8bf672..2450dda 100644 --- a/tools/check_website_data.py +++ b/tools/check_website_data.py @@ -116,7 +116,7 @@ def validate_website_data() -> dict[str, Any]: "RECAPTURE", "45 findings → 45 工单", "评委网站展示固定公开运行,不冒充生产 SaaS", - "v0.1.0-goai-rc1", + "v0.1.0-goai-rc2", "downloads/SHA256SUMS.txt", ) for phrase in required_copy: diff --git a/tools/generate_supply_chain_artifacts.py b/tools/generate_supply_chain_artifacts.py index a625438..b67caae 100644 --- a/tools/generate_supply_chain_artifacts.py +++ b/tools/generate_supply_chain_artifacts.py @@ -26,6 +26,60 @@ DIRECT_GROUPS_PROPERTY = "visiondata-gate:direct-groups" REVIEW_REQUIRED = "REVIEW_REQUIRED" +# Exact-version resolutions for locked distributions whose Core Metadata is +# ambiguous, contains an entire license body, or is intentionally unavailable +# on one CI platform because the dependency is marker-gated. Each resolution +# was checked against the license file shipped in the named wheel. Version +# pinning is deliberate: a dependency upgrade returns to REVIEW_REQUIRED until +# its new distribution is reviewed. +_FROZEN_LICENSE_RESOLUTIONS = { + ("visiondata-gate", "0.1.0"): { + "expression": "Apache-2.0", + "evidence": "owner-confirmed top-level LICENSE", + "source": "LICENSE", + }, + ("altair", "6.2.2"): { + "expression": "BSD-3-Clause", + "evidence": "wheel LICENSE SHA-256 648332da6631555f71f18305b96e9a2c409e73d73613b6c96587cdc0a449e054", + "source": "manual-audit:altair-6.2.2.dist-info/licenses/LICENSE", + }, + ("colorama", "0.4.6"): { + "expression": "BSD-3-Clause", + "evidence": "wheel LICENSE SHA-256 cac35c02686e5d04a5a7140bfb3b36e73aed496656e891102e428886d7930318", + "source": "manual-audit:colorama-0.4.6.dist-info/licenses/LICENSE.txt", + }, + ("itsdangerous", "2.2.0"): { + "expression": "BSD-3-Clause", + "evidence": "wheel LICENSE SHA-256 63af09891b6be8ad1a4252ed43af0f4efba7fc948e228367bed7f3c5ae0b09d7", + "source": "manual-audit:itsdangerous-2.2.0.dist-info/LICENSE.txt", + }, + ("jinja2", "3.1.6"): { + "expression": "BSD-3-Clause", + "evidence": "wheel LICENSE SHA-256 3b49dcee4105eb37bac10faf1be260408fe85d252b8e9df2e0979fc1e094437b", + "source": "manual-audit:jinja2-3.1.6.dist-info/licenses/LICENSE.txt", + }, + ("numpy", "2.2.6"): { + "expression": "BSD-3-Clause", + "evidence": "wheel LICENSE and bundled notices SHA-256 14256cc3a2c9d32ac284da96b937feb44f72dd90bee2317ac3020166846ad99d", + "source": "manual-audit:numpy-2.2.6.dist-info/LICENSE.txt", + }, + ("pandas", "2.3.3"): { + "expression": "BSD-3-Clause", + "evidence": "wheel LICENSE SHA-256 533eb6d0b98e5be3ddd12dce97be35dd11282f5c47cdf8d08c81756fd5d70a26", + "source": "manual-audit:pandas-2.3.3.dist-info/LICENSE", + }, + ("python-dateutil", "2.9.0.post0"): { + "expression": "Apache-2.0 OR BSD-3-Clause", + "evidence": "wheel dual-license file SHA-256 ba00f51a0d92823b5a1cde27d8b5b9d2321e67ed8da9bc163eff96d5e17e577e", + "source": "manual-audit:python_dateutil-2.9.0.post0.dist-info/LICENSE", + }, + ("watchdog", "6.0.0"): { + "expression": "Apache-2.0", + "evidence": "wheel LICENSE SHA-256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "source": "manual-audit:watchdog-6.0.0.dist-info/LICENSE", + }, +} + _KNOWN_LICENSE_VALUES = { "apache 2.0": "Apache-2.0", "apache license 2.0": "Apache-2.0", @@ -264,6 +318,17 @@ def _component( ), missing_source="uv.lock conditional edge" if conditional_only else None, ) + frozen_resolution = _FROZEN_LICENSE_RESOLUTIONS.get( + (_normalize_name(name), version) + ) + if license_info["review"] == REVIEW_REQUIRED and frozen_resolution is not None: + license_info = { + "classifiers": license_info["classifiers"], + "evidence": frozen_resolution["evidence"], + "expression": frozen_resolution["expression"], + "metadata_source": frozen_resolution["source"], + "review": "OK", + } property_values = { LICENSE_EVIDENCE_PROPERTY: license_info["evidence"], LICENSE_REVIEW_PROPERTY: license_info["review"], @@ -311,7 +376,7 @@ def _inventory_bytes(rows: list[dict[str, Any]]) -> bytes: lines = [ "# 第三方许可证元数据清单(自动生成)", "", - "> 本文件由 `uv.lock` 与项目 `.venv` 中已安装的 `METADATA` 离线生成,仅是可审计的元数据清单;不构成法律审查,也不替代项目顶层 `LICENSE` / `NOTICE`。", + "> 本文件由 `uv.lock`、项目 `.venv` 中已安装的 `METADATA` 与精确版本许可证人工复核表离线生成;它是可审计的工程清单,不构成法律意见。项目授权见顶层 `LICENSE` / `NOTICE`,依赖说明见 `docs/THIRD_PARTY_NOTICES.md`。", "", f"- 锁定组件总数(含内部根项目):`{len(rows)}`", f"- `REVIEW_REQUIRED`:`{review_count}`", @@ -484,10 +549,10 @@ def generate_supply_chain_artifacts( "component": root_component, "properties": _properties( { - "visiondata-gate:generated-from": "uv.lock + .venv installed METADATA", - "visiondata-gate:legal-review": "NOT_PERFORMED", + "visiondata-gate:generated-from": "uv.lock + .venv installed METADATA + exact-version manual license resolutions", + "visiondata-gate:legal-review": "OWNER_CONFIRMED_NOT_LEGAL_ADVICE", "visiondata-gate:offline-rebuild": "true", - "visiondata-gate:top-level-license-notice": "NOT_REPLACED", + "visiondata-gate:top-level-license-notice": "APACHE-2.0_AND_NOTICE_PRESENT", } ), }, diff --git a/website/index.html b/website/index.html index 3199add..16c6a1d 100644 --- a/website/index.html +++ b/website/index.html @@ -350,7 +350,7 @@ 下一阶段外部验收 让评委从结论进入证据,再从证据回到可运行代码。 - 下载 RC1 源码包 ↓ + 下载 RC2 源码包 ↓ 下载路演 PDF ↓ 核验 SHA-256 ↗ @@ -359,8 +359,8 @@ 让评委从结论进入证据,再从证据回到可运行代码。< 此交互 Demo 需要 JavaScript。完整证据仍可在 GitHub 仓库中查看。