From 9122aa7f05dd428c73e22bd8a2500a8c84f474a6 Mon Sep 17 00:00:00 2001 From: Jintao Date: Sun, 26 Jul 2026 19:16:49 +0800 Subject: [PATCH] Pin BusyBox env notice --- CHANGELOG.en.md | 13 ++--- CHANGELOG.md | 11 ++-- Compliance/RootFS/v0.3.3/EVIDENCE.json | 6 +-- .../RootFS/v0.3.3/LICENSE-INVENTORY.json | 6 +-- .../v0.3.3/LICENSE-NOTICE-CANDIDATES.json | 6 ++- .../v0.3.3/LICENSE-NOTICE-REVIEW-RESULTS.json | 11 ++-- .../RootFS/v0.3.3/LICENSE-REVIEW-RESULTS.json | 10 +++- Compliance/RootFS/v0.3.3/LICENSE-REVIEW.json | 14 +++++ Compliance/RootFS/v0.3.3/NOTICE.md | 6 +-- Compliance/RootFS/v0.3.3/README.md | 54 ++++++++++++------- Compliance/RootFS/v0.3.3/SHA256SUMS | 14 ++--- Docs/ReleaseCompliance.md | 10 ++-- Docs/Roadmap.md | 2 +- Docs/RootFS.md | 8 +-- Docs/en/ReleaseCompliance.md | 10 ++-- Docs/en/Roadmap.md | 2 +- Docs/en/RootFS.md | 8 +-- README.md | 2 +- Scripts/rootfs-license-notice-candidates.rb | 2 +- .../rootfs-license-notice-review-results.rb | 2 +- .../RootFSLicenseNoticeCandidatesTests.rb | 41 +++++++++++++- .../RootFSLicenseNoticeReviewResultsTests.rb | 26 ++++++++- .../RootFSLicenseReviewResultsTests.rb | 2 +- 23 files changed, 183 insertions(+), 83 deletions(-) diff --git a/CHANGELOG.en.md b/CHANGELOG.en.md index 45d1e38..f9edb61 100644 --- a/CHANGELOG.en.md +++ b/CHANGELOG.en.md @@ -32,25 +32,26 @@ All notable PocketRoot changes are recorded here. Semantic Versioning begins wit declared-license/attribution inventories, and default `apk`, repository, and DNS configuration; complete LICENSE/NOTICE and corresponding-source bundles remain distribution blockers. -- A checksum-bound `LICENSE-REVIEW-RESULTS.json` and strict validator. All 22 +- A checksum-bound `LICENSE-REVIEW-RESULTS.json` and strict validator. All 23 pinned RootFS license/NOTICE candidates have engineering review results; eight source origins retain package-level open items, and legal and redistribution gates remain closed. - A checksum-bound `LICENSE-NOTICE-CANDIDATES.json`, strict validator, and outside-repository atomic materializer for the eight remaining RootFS source origins. It indexes 13 remote license/attribution payloads, 47 aports files, - and the 22 existing evidence files for complete re-verification without + and the 23 existing evidence files for complete re-verification without committing payloads or opening engineering, legal, or redistribution gates. - `LICENSE-NOTICE-REVIEW-RESULTS.json` and a strict external payload-tree - verifier. All 82 candidate payloads now have checksum-bound engineering + verifier. All 83 candidate payloads now have checksum-bound engineering review. The pinned upstream `alpine-keys` GPL-to-MIT license-decision commit is included while its package-level copyright notice remains open. The `ca-certificates` generator is byte-identical to curl commit `3fdc4bdb`, and that exact revision's curl license is pinned while trust-store review stays open. The pinned BusyBox configuration now binds enabled bzip2 support to - its exact source license and confirms that enabled ash arithmetic links - `shell/math.c`, which retains complete MIT and BSD-3-Clause notices, while - other inline third-party notices stay open; + its exact source license, confirms that enabled ash arithmetic links + `shell/math.c`, which retains complete MIT and BSD-3-Clause notices, and + confirms that the installed `env` applet links `coreutils/env.c`, which + retains its complete BSD notice; other inline third-party notices stay open; `apk-tools`, `openssl`, and `pax-utils` have no remaining candidate-material engineering items, five origins still need package-specific material, and diff --git a/CHANGELOG.md b/CHANGELOG.md index 615a3c3..72f6c14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,20 +30,21 @@ PocketRoot 的重要变化记录在这里。首个公开版本发布后遵循 Se 10 个 source origin、SPDX 2.3 JSON SBOM、许可证声明/attribution inventory 和 `apk`、repository、DNS 默认配置快照;完整 LICENSE/NOTICE 与对应源码 bundle 仍保持发行阻塞。 -- 加入 checksum-bound `LICENSE-REVIEW-RESULTS.json` 和严格验证器;22/22 个固定 +- 加入 checksum-bound `LICENSE-REVIEW-RESULTS.json` 和严格验证器;23/23 个固定 RootFS license/NOTICE 候选已完成工程复核,8 个 source origin 仍有包级未决项, 法律与再分发门禁保持关闭。 - 为剩余 8 个 RootFS source origin 加入 checksum-bound `LICENSE-NOTICE-CANDIDATES.json`、严格验证器和仓库外原子 materializer;索引 - 13 份远端许可证/attribution 材料、47 份 aports 文件与 22 份既有证据,支持完整 + 13 份远端许可证/attribution 材料、47 份 aports 文件与 23 份既有证据,支持完整 复验,但不提交 payload,也不解除工程、法律或再分发门禁。 - 加入 `LICENSE-NOTICE-REVIEW-RESULTS.json` 和严格外置 payload-tree 复验器; - 82/82 个候选 payload 已完成 checksum-bound 工程复核;新增固定 + 83/83 个候选 payload 已完成 checksum-bound 工程复核;新增固定 `alpine-keys` GPL→MIT 上游许可判定提交,但仍保留包级版权声明缺口; `ca-certificates` 生成脚本与 curl 提交 `3fdc4bdb` 字节一致并固定该精确 revision 的 curl 授权文本,trust-store 审查仍保持未决; - BusyBox 固定配置确认 bzip2 与源包内精确授权绑定,并确认启用的 ash 算术模块 - 链入保留完整 MIT 与 BSD-3-Clause notices 的 `shell/math.c`;其他内联第三方 + BusyBox 固定配置确认 bzip2 与源包内精确授权绑定,确认启用的 ash 算术模块 + 链入保留完整 MIT 与 BSD-3-Clause notices 的 `shell/math.c`,并确认已安装的 + `env` applet 链入保留完整 BSD notice 的 `coreutils/env.c`;其他内联第三方 notices 继续保持未决; `apk-tools`、`openssl`、`pax-utils` 的候选材料工程项关闭,另外 5 个 origin 仍需补逐包材料,法律和再分发门禁保持关闭。 diff --git a/Compliance/RootFS/v0.3.3/EVIDENCE.json b/Compliance/RootFS/v0.3.3/EVIDENCE.json index d3b445a..0f60aed 100644 --- a/Compliance/RootFS/v0.3.3/EVIDENCE.json +++ b/Compliance/RootFS/v0.3.3/EVIDENCE.json @@ -39,13 +39,13 @@ "sourceOrigins": 10, "declaredLicenseExpressions": 7, "licenseOrNoticeFilesInGuestTemplate": 0, - "indexedExternalLicenseReviewCandidates": 22, - "engineeringReviewedLicenseCandidates": 22, + "indexedExternalLicenseReviewCandidates": 23, + "engineeringReviewedLicenseCandidates": 23, "sourceOriginsWithRemainingLicenseReviewItems": 8, "indexedLicenseNoticeCandidateOrigins": 8, "pinnedRemoteLicenseNoticePayloads": 13, "supplementalAportsCandidateFiles": 47, - "engineeringReviewedLicenseNoticeCandidatePayloads": 82, + "engineeringReviewedLicenseNoticeCandidatePayloads": 83, "sourceOriginsWithRemainingCandidatePayloadReviewItems": 5 }, "engineeringStatus": { diff --git a/Compliance/RootFS/v0.3.3/LICENSE-INVENTORY.json b/Compliance/RootFS/v0.3.3/LICENSE-INVENTORY.json index 4b1e942..c7a6de2 100644 --- a/Compliance/RootFS/v0.3.3/LICENSE-INVENTORY.json +++ b/Compliance/RootFS/v0.3.3/LICENSE-INVENTORY.json @@ -26,14 +26,14 @@ "licenseOrNoticeFilesFoundInGuestTemplate": [ ], - "indexedExternalReviewCandidates": 22, - "engineeringReviewedCandidates": 22, + "indexedExternalReviewCandidates": 23, + "engineeringReviewedCandidates": 23, "sourceOriginsWithOpenReviewItems": 10, "sourceOriginsWithRemainingReviewItems": 8, "indexedOpenSourceOrigins": 8, "pinnedRemoteReferencePayloads": 13, "supplementalAportsFiles": 47, - "engineeringReviewedCandidatePayloads": 82, + "engineeringReviewedCandidatePayloads": 83, "sourceOriginsWithRemainingCandidatePayloadReviewItems": 5, "candidateBundleIndexComplete": true, "candidatePayloadCommitted": false, diff --git a/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-CANDIDATES.json b/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-CANDIDATES.json index 3fd7ec3..8022d57 100644 --- a/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-CANDIDATES.json +++ b/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-CANDIDATES.json @@ -4,7 +4,7 @@ "version": "v0.3.3", "sha256": "be0f3c133f78f28b023288459b33dc28fa253a6ef29f7123bc5f3892edf90ad4" }, - "licenseReviewResultsSha256": "f2d53935baf0dffe43a3e68b3a1151a3d5d6a497ab2793592487919014b12577", + "licenseReviewResultsSha256": "1c714f4b65e01a1a35cbfa58a8b964e511c67187e00a010d7036439f6c013d43", "status": "candidate-bundle-indexed-engineering-review-required", "candidateBundleIndexComplete": true, "candidatePayloadCommitted": false, @@ -246,7 +246,8 @@ "evidence/busybox/AUTHORS", "evidence/busybox/LICENSE", "evidence/busybox/bzip2-LICENSE", - "evidence/busybox/shell-math.c" + "evidence/busybox/shell-math.c", + "evidence/busybox/coreutils-env.c" ], "referenceLicensePaths": [ "licenses/GPL-2.0.txt" @@ -294,6 +295,7 @@ "remainingReviewItems": [ "confirm-enabled-bzip2-license-and-attribution-coverage", "confirm-enabled-ash-math-license-and-attribution-coverage", + "confirm-enabled-env-license-and-attribution-coverage", "review-other-bundled-third-party-license-and-attribution-coverage", "confirm-aports-patch-notices" ], diff --git a/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-REVIEW-RESULTS.json b/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-REVIEW-RESULTS.json index e75e795..79e30ce 100644 --- a/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-REVIEW-RESULTS.json +++ b/Compliance/RootFS/v0.3.3/LICENSE-NOTICE-REVIEW-RESULTS.json @@ -4,7 +4,7 @@ "version": "v0.3.3", "sha256": "be0f3c133f78f28b023288459b33dc28fa253a6ef29f7123bc5f3892edf90ad4" }, - "candidateManifestSha256": "04e1cd4b1e0f51c396a36fef432640a576a5f33e1ec802bd135d96fd3ce7da2f", + "candidateManifestSha256": "5b64ca8c2312ce190bdcf8d80c14fdc5155d78b7b2469404a0e4180e1281e2ec", "status": "candidate-payloads-engineering-reviewed-open-release-gates", "engineeringReviewCompleted": true, "allIndexedCandidatePayloadsReviewed": true, @@ -13,8 +13,8 @@ "legalReviewApproved": false, "redistributionApproved": false, "candidatePayloadTreeFormat": "sha256-path-lines-v1", - "candidatePayloadTreeSha256": "b0a7ffeb09f02b3b751a4cf29dbb8ce65658b60c70316ea3c295c7bdb8360349", - "reviewedPayloadFileCount": 82, + "candidatePayloadTreeSha256": "0b8a148b1af67eca6737eb57ad0a66d0f34d06212a952f96bc6f1b65dc7c5fe1", + "reviewedPayloadFileCount": 83, "reviewedClosedOriginEvidenceCount": 4, "sourceOriginsWithRemainingReviewItems": 5, "sources": [ @@ -82,14 +82,15 @@ "reviewState": "candidate-payloads-engineering-reviewed-legal-review-open", "licenseTextCoverage": "partial", "attributionCoverage": "partial", - "reviewedExistingEvidenceCount": 4, + "reviewedExistingEvidenceCount": 5, "reviewedReferenceLicenseCount": 1, "reviewedSupplementalAportsCount": 37, "reviewedRemoteEvidenceCount": 0, "resolvedReviewItems": [ "confirm-aports-patch-notices", "confirm-enabled-bzip2-license-and-attribution-coverage", - "confirm-enabled-ash-math-license-and-attribution-coverage" + "confirm-enabled-ash-math-license-and-attribution-coverage", + "confirm-enabled-env-license-and-attribution-coverage" ], "remainingReviewItems": [ "review-other-bundled-third-party-license-and-attribution-coverage" diff --git a/Compliance/RootFS/v0.3.3/LICENSE-REVIEW-RESULTS.json b/Compliance/RootFS/v0.3.3/LICENSE-REVIEW-RESULTS.json index 549c3cb..c89e047 100644 --- a/Compliance/RootFS/v0.3.3/LICENSE-REVIEW-RESULTS.json +++ b/Compliance/RootFS/v0.3.3/LICENSE-REVIEW-RESULTS.json @@ -4,11 +4,11 @@ "version": "v0.3.3", "sha256": "be0f3c133f78f28b023288459b33dc28fa253a6ef29f7123bc5f3892edf90ad4" }, - "licenseReviewManifestSha256": "956ec98fd3ec39f8f277b8293c85f4d7ed9841d7754f563e91638521c29cf989", + "licenseReviewManifestSha256": "63feb98198ef530764dcff4f890b3d423ab28bdec0ac9d193df8fe11a7983673", "status": "engineering-reviewed-open-release-gates", "engineeringReviewCompleted": true, "allCandidateDigestsVerified": true, - "reviewedCandidateCount": 22, + "reviewedCandidateCount": 23, "sourceOriginsWithRemainingReviewItems": 8, "completeLicenseTextBundlePresent": false, "completePackageNoticeSetPresent": false, @@ -109,12 +109,18 @@ "outputPath": "evidence/busybox/shell-math.c", "sha256": "8f2d57454d233b67662047cd3411c77ecde7e428ef1f6652d66f177b1d06e2f3", "conclusion": "inline-license-and-attribution-notice" + }, + { + "outputPath": "evidence/busybox/coreutils-env.c", + "sha256": "730d258bcbeeef301fc00611d0e325958f3f378576af54c524f9be662b0ac757", + "conclusion": "inline-license-and-attribution-notice" } ], "resolvedReviewItems": [], "remainingReviewItems": [ "confirm-enabled-bzip2-license-and-attribution-coverage", "confirm-enabled-ash-math-license-and-attribution-coverage", + "confirm-enabled-env-license-and-attribution-coverage", "review-other-bundled-third-party-license-and-attribution-coverage", "confirm-aports-patch-notices" ] diff --git a/Compliance/RootFS/v0.3.3/LICENSE-REVIEW.json b/Compliance/RootFS/v0.3.3/LICENSE-REVIEW.json index 35270fb..7e7da17 100644 --- a/Compliance/RootFS/v0.3.3/LICENSE-REVIEW.json +++ b/Compliance/RootFS/v0.3.3/LICENSE-REVIEW.json @@ -165,11 +165,25 @@ "attribution" ], "reviewState": "unreviewed-candidate" + }, + { + "sourceKind": "distfile-member", + "distfile": "busybox-1.36.1.tar.bz2", + "member": "busybox-1.36.1/coreutils/env.c", + "outputPath": "evidence/busybox/coreutils-env.c", + "byteCount": 4753, + "sha256": "730d258bcbeeef301fc00611d0e325958f3f378576af54c524f9be662b0ac757", + "evidenceKinds": [ + "inline-license-notice", + "attribution" + ], + "reviewState": "unreviewed-candidate" } ], "openReviewItems": [ "confirm-enabled-bzip2-license-and-attribution-coverage", "confirm-enabled-ash-math-license-and-attribution-coverage", + "confirm-enabled-env-license-and-attribution-coverage", "review-other-bundled-third-party-license-and-attribution-coverage", "confirm-aports-patch-notices" ] diff --git a/Compliance/RootFS/v0.3.3/NOTICE.md b/Compliance/RootFS/v0.3.3/NOTICE.md index 9eae424..f85545b 100644 --- a/Compliance/RootFS/v0.3.3/NOTICE.md +++ b/Compliance/RootFS/v0.3.3/NOTICE.md @@ -33,12 +33,12 @@ Generated from the exact `v0.3.3` archive with SHA-256 No file whose path identifies it as LICENSE, COPYING, NOTICE, or a license-directory member was found in the guest template. Declared identifiers and expressions are recorded in -`LICENSE-INVENTORY.json`. `LICENSE-REVIEW.json` pins 22 +`LICENSE-INVENTORY.json`. `LICENSE-REVIEW.json` pins 23 candidate license, attribution, declaration, and inline-notice files across all 10 source origins. The external review tool extracts and verifies those candidates from the pinned source-review bundle. `LICENSE-REVIEW-RESULTS.json` records the checksum-bound engineering review -of all 22 candidates. All indexed review items are resolved +of all 23 candidates. All indexed review items are resolved for `libc-dev`, `zlib`. 8 source origins still have package-specific open items, so this is not a complete or legally approved license/NOTICE bundle. @@ -49,7 +49,7 @@ reference/attribution payloads and files, together with all checksum-bound reviewed evidence. The repository tool can materialize and re-verify that bundle outside the repository. `LICENSE-NOTICE-REVIEW-RESULTS.json` records checksum-bound engineering -review of all 82 indexed +review of all 83 indexed payload files. 3 origins have no remaining candidate-material engineering items; 5 origins still require package-specific material. Legal review and redistribution diff --git a/Compliance/RootFS/v0.3.3/README.md b/Compliance/RootFS/v0.3.3/README.md index 3987f21..29a3c42 100644 --- a/Compliance/RootFS/v0.3.3/README.md +++ b/Compliance/RootFS/v0.3.3/README.md @@ -16,14 +16,14 @@ pinned RootFS archive. It does not store the RootFS payload. SHA-256; - `LICENSE-INVENTORY.json`:声明的许可证表达式、标识符和 archive 内 license/notice 文件检查结果; -- `LICENSE-REVIEW.json`:覆盖 10 个 source origin 的 22 个候选许可证文本、 +- `LICENSE-REVIEW.json`:覆盖 10 个 source origin 的 23 个候选许可证文本、 attribution、声明与内联 notice 的路径、大小、SHA-256 和逐包未决审查项; -- `LICENSE-REVIEW-RESULTS.json`:对全部 22 个候选的 checksum-bound 工程复核 +- `LICENSE-REVIEW-RESULTS.json`:对全部 23 个候选的 checksum-bound 工程复核 结论、coverage 和未决项处置;不表示法律或再分发批准; - `LICENSE-NOTICE-CANDIDATES.json`:为剩余 8 个 source origin 固定 13 份远端 - 许可证/attribution 材料、47 份 aports 补充文件及现有 22 份复核证据的外置候选包; + 许可证/attribution 材料、47 份 aports 补充文件及现有 23 份复核证据的外置候选包; payload 不提交,工程、法律和再分发门禁保持关闭; -- `LICENSE-NOTICE-REVIEW-RESULTS.json`:绑定候选清单与 82 个 payload 文件树的 +- `LICENSE-NOTICE-REVIEW-RESULTS.json`:绑定候选清单与 83 个 payload 文件树的 工程复核结果;3 个 origin 的候选材料工程项关闭,5 个仍需补逐包材料,法律和 再分发门禁保持关闭; - `RUNTIME-CONFIGURATION.json`:guest、`apk`、repository、world 和 DNS 默认配置; @@ -34,15 +34,15 @@ pinned RootFS archive. It does not store the RootFS payload. `SOURCE-ACQUISITION.json` pins the aports snapshots and upstream distfiles needed to assemble an external source-review directory. It is an acquisition manifest, not a committed source archive or redistribution grant. -`LICENSE-REVIEW.json` pins 22 unreviewed candidate evidence files across all +`LICENSE-REVIEW.json` pins 23 unreviewed candidate evidence files across all 10 source origins; it is an engineering review index, not legal approval. -`LICENSE-REVIEW-RESULTS.json` records the engineering review of all 22 pinned +`LICENSE-REVIEW-RESULTS.json` records the engineering review of all 23 pinned candidates. Two source origins have no remaining indexed review items; eight still have package-specific open items. `LICENSE-NOTICE-CANDIDATES.json` indexes an external candidate bundle for those eight origins: 13 pinned remote license/attribution payloads, 47 supplemental aports files, and the existing -22 reviewed evidence files. `LICENSE-NOTICE-REVIEW-RESULTS.json` binds the -engineering review to the exact 82-file payload tree. Three origins have no +23 reviewed evidence files. `LICENSE-NOTICE-REVIEW-RESULTS.json` binds the +engineering review to the exact 83-file payload tree. Three origins have no remaining candidate-material engineering items; five still require package-specific material. Legal and redistribution approval remain open. @@ -77,8 +77,9 @@ change. `18d78e185ff0cccd6ccd09f4f78c5780175d78214e16acd1390e4ee85c74346e`; 其中精确启用了 `CONFIG_BZIP2=y`、`CONFIG_BZIP2_SMALL=8` 和 `CONFIG_FEATURE_BZIP2_DECOMPRESS=y`,也启用了 `CONFIG_ASH=y`、 -`CONFIG_FEATURE_SH_MATH=y` 和 `CONFIG_FEATURE_SH_MATH_64=y`;BusyBox -`shell/Kbuild.src` 在该配置下把 `math.o` 链入构建。外置候选树现同时绑定该配置与固定 +`CONFIG_FEATURE_SH_MATH=y`、`CONFIG_FEATURE_SH_MATH_64=y` 和 +`CONFIG_ENV=y`;BusyBox `shell/Kbuild.src` 在该配置下把 `math.o` 链入构建, +`coreutils/env.c` 则通过 `lib-$(CONFIG_ENV) += env.o` 链入。外置候选树现同时绑定该配置与固定 BusyBox 1.36.1 源包中的 1,999 字节 `archival/libarchive/bz/LICENSE`(SHA-256 `b5a136ed67798e51fe2e0ca0b2a21cb01b904ff0c9f7d563a6292e276607e58f`), @@ -87,7 +88,12 @@ BusyBox 1.36.1 源包中的 1,999 字节 `shell/math.c`(SHA-256 `8f2d57454d233b67662047cd3411c77ecde7e428ef1f6652d66f177b1d06e2f3`), 其中保留完整 MIT 与 BSD-3-Clause 版权及许可通知,从而在工程层关闭 -`confirm-enabled-ash-math-license-and-attribution-coverage`。BusyBox 其他已启用 +`confirm-enabled-ash-math-license-and-attribution-coverage`;同时绑定 4,753 字节 +`coreutils/env.c`(SHA-256 +`730d258bcbeeef301fc00611d0e325958f3f378576af54c524f9be662b0ac757`), +其中保留完整 BSD 版权及许可通知。固定 RootFS 中 `/usr/bin/env` 的目标为 +`/bin/busybox`,因此在工程层关闭 +`confirm-enabled-env-license-and-attribution-coverage`。BusyBox 其他已启用 组件的内联第三方 notice 尚未形成完整集合,因此 license-text 与 attribution coverage 均保持 partial, `review-other-bundled-third-party-license-and-attribution-coverage` 保持未决, @@ -98,8 +104,10 @@ The `busyboxconfig` at pinned aports commit `18d78e185ff0cccd6ccd09f4f78c5780175d78214e16acd1390e4ee85c74346e`. It explicitly enables `CONFIG_BZIP2=y`, `CONFIG_BZIP2_SMALL=8`, `CONFIG_FEATURE_BZIP2_DECOMPRESS=y`, `CONFIG_ASH=y`, -`CONFIG_FEATURE_SH_MATH=y`, and `CONFIG_FEATURE_SH_MATH_64=y`; BusyBox -`shell/Kbuild.src` links `math.o` under that configuration. The external candidate tree now binds +`CONFIG_FEATURE_SH_MATH=y`, `CONFIG_FEATURE_SH_MATH_64=y`, and +`CONFIG_ENV=y`; BusyBox `shell/Kbuild.src` links `math.o` under that +configuration, while `coreutils/env.c` is linked by +`lib-$(CONFIG_ENV) += env.o`. The external candidate tree now binds that configuration to the 1,999-byte `archival/libarchive/bz/LICENSE` in the pinned BusyBox 1.36.1 source archive, whose SHA-256 is @@ -110,7 +118,13 @@ level. It also binds the 26,578-byte `shell/math.c`, whose SHA-256 is `8f2d57454d233b67662047cd3411c77ecde7e428ef1f6652d66f177b1d06e2f3`; that file retains complete MIT and BSD-3-Clause copyright and license notices, closing `confirm-enabled-ash-math-license-and-attribution-coverage` at the -engineering level. A complete set of inline third-party notices for BusyBox's other +engineering level. It also binds the 4,753-byte `coreutils/env.c`, whose +SHA-256 is +`730d258bcbeeef301fc00611d0e325958f3f378576af54c524f9be662b0ac757`; +the file retains its complete BSD copyright and license notice. The pinned +RootFS maps `/usr/bin/env` to `/bin/busybox`, closing +`confirm-enabled-env-license-and-attribution-coverage` at the engineering +level. A complete set of inline third-party notices for BusyBox's other enabled components is still missing, so license-text and attribution coverage remain partial, `review-other-bundled-third-party-license-and-attribution-coverage` remains @@ -289,13 +303,13 @@ ruby Scripts/rootfs-license-review-results.rb ``` 工具只提取 `LICENSE-REVIEW.json` 固定的候选文件,并再次核对大小、SHA-256、 -路径全集、无符号链接/特殊节点边界。结果清单证明 22 个候选已完成工程复核; +路径全集、无符号链接/特殊节点边界。结果清单证明 23 个候选已完成工程复核; 外置输出仍不是可直接随产品发行的 NOTICE bundle。 The tool extracts only candidates pinned by `LICENSE-REVIEW.json`, then rechecks byte counts, SHA-256 digests, the exact path set, and the no-symlink/ special-node boundary. The results manifest proves engineering review of all -22 candidates; the external output is still not a product-ready NOTICE bundle. +23 candidates; the external output is still not a product-ready NOTICE bundle. 剩余 8 个 source origin 的材料可继续组装为外置候选包。先校验清单;实际物化 必须同时提供已经通过 `--verify` 的 source-review 和 license-review 目录,以及 @@ -339,8 +353,8 @@ advice, or redistribution approval. 这些文件不构成完整第三方 LICENSE/NOTICE bundle、经审查的 copyleft corresponding-source 交付、法律意见或再分发授权。源码获取清单已完整覆盖固定 -inventory,22 个候选也都有工程复核结果;`libc-dev`、`zlib` 已关闭索引项,另外 -8 个 source origin 的 82 个新候选 payload 已完成 checksum-bound 工程复核; +inventory,23 个候选也都有工程复核结果;`libc-dev`、`zlib` 已关闭索引项,另外 +8 个 source origin 的 83 个新候选 payload 已完成 checksum-bound 工程复核; `apk-tools`、`openssl`、`pax-utils` 的候选材料工程项已关闭,另外 5 个 origin 仍需补逐包版权/notice 材料。修改说明、构建完整性、源码提供方式、法律 审查、App Store 2.5.2 产品策略和负责人批准仍是发行阻塞项。 @@ -348,8 +362,8 @@ origin 仍需补逐包版权/notice 材料。修改说明、构建完整性、 These files are not a complete third-party LICENSE/NOTICE bundle, reviewed copyleft corresponding-source delivery, legal advice, or redistribution approval. The acquisition manifest completely covers the pinned inventory and -all 22 indexed candidates have engineering review results. `libc-dev` and -`zlib` have no remaining indexed items. All 82 newly indexed payloads have a +all 23 indexed candidates have engineering review results. `libc-dev` and +`zlib` have no remaining indexed items. All 83 newly indexed payloads have a checksum-bound engineering review; `apk-tools`, `openssl`, and `pax-utils` have no remaining candidate-material engineering items, while five origins still need package-specific copyright/notice material. Modification, build diff --git a/Compliance/RootFS/v0.3.3/SHA256SUMS b/Compliance/RootFS/v0.3.3/SHA256SUMS index 9b6f13d..84eb549 100644 --- a/Compliance/RootFS/v0.3.3/SHA256SUMS +++ b/Compliance/RootFS/v0.3.3/SHA256SUMS @@ -1,10 +1,10 @@ -e717b564976eaa45f489f19b984dffe32c63c50d6b68cdf17362b13b2cca4858 EVIDENCE.json -d0a7b915082b04f5d5d1faf262d03bc9608741c8e23ce2779034395703fc53fc LICENSE-INVENTORY.json -04e1cd4b1e0f51c396a36fef432640a576a5f33e1ec802bd135d96fd3ce7da2f LICENSE-NOTICE-CANDIDATES.json -e97c5f7066a8c17e7f2e3e2d1f123a6d87bfd7d833cb8ad7661b5a73773d6484 LICENSE-NOTICE-REVIEW-RESULTS.json -f2d53935baf0dffe43a3e68b3a1151a3d5d6a497ab2793592487919014b12577 LICENSE-REVIEW-RESULTS.json -956ec98fd3ec39f8f277b8293c85f4d7ed9841d7754f563e91638521c29cf989 LICENSE-REVIEW.json -22dfc22080f097532666ff2df29f160d41083c46fdd6009a26d4e48d93862077 NOTICE.md +71a6a120b6ba67ade0086abdd26d54ca3609268bf343f539dec7bc34f4582283 EVIDENCE.json +e7ab124c9b4b21af22568ca0ec5cb66caf7d6e06bc21418d533ae3719ba0d88e LICENSE-INVENTORY.json +5b64ca8c2312ce190bdcf8d80c14fdc5155d78b7b2469404a0e4180e1281e2ec LICENSE-NOTICE-CANDIDATES.json +b387a49932f859f8213c94f7f416cdec208d594bfcf5f52b0da2bf09ec993106 LICENSE-NOTICE-REVIEW-RESULTS.json +1c714f4b65e01a1a35cbfa58a8b964e511c67187e00a010d7036439f6c013d43 LICENSE-REVIEW-RESULTS.json +63feb98198ef530764dcff4f890b3d423ab28bdec0ac9d193df8fe11a7983673 LICENSE-REVIEW.json +7cf228dd972c31a5e741dcad37cab56bbd6e907024bd0a5789429288daf86efe NOTICE.md 4f7f7626f3d0891a29717e4b7932c36004ecc9aac25a4aa104c300aae979e3e1 PACKAGE-INVENTORY.tsv dbca9b285015a0d8b1d339a894b4594c9e335cbc2d7f9d5212a41095ae4bd1e1 RUNTIME-CONFIGURATION.json 8e021cb8c4160c934a0202609691d7a94526cd016f4394a47da6e7a5ab41d0ea SBOM.spdx.json diff --git a/Docs/ReleaseCompliance.md b/Docs/ReleaseCompliance.md index 5b25d37..e788e16 100644 --- a/Docs/ReleaseCompliance.md +++ b/Docs/ReleaseCompliance.md @@ -72,12 +72,12 @@ machine-readable SBOM。仓库现在从固定 archive 可复现生成 15 个已 `apk`、repository、DNS 默认配置快照。archive 内没有发现可识别的 LICENSE/COPYING/NOTICE 文件。仓库另有与 inventory 一一对应、固定 checksum 的 aports snapshot/upstream distfile 获取清单和仓库外 materializer,并固定了覆盖 -全部 10 个 source origin 的 22 个 license、attribution、声明与内联 notice 候选。 +全部 10 个 source origin 的 23 个 license、attribution、声明与内联 notice 候选。 第二个仓库外工具从已验证 source-review 目录提取这些候选;固定结果清单记录 -22/22 个候选均已工程复核,`libc-dev`、`zlib` 的索引项已关闭,另外 8 个 source +23/23 个候选均已工程复核,`libc-dev`、`zlib` 的索引项已关闭,另外 8 个 source origin 仍有逐包未决项。仓库现已为这 8 个 origin 固定外置候选包:13 份远端 许可证/attribution 材料、47 份 aports 补充文件和全部既有复核证据;工具可在 -仓库外原子生成并复验。固定结果清单把工程复核绑定到精确的 82 文件 payload +仓库外原子生成并复验。固定结果清单把工程复核绑定到精确的 83 文件 payload tree;`apk-tools`、`openssl`、`pax-utils` 的候选材料工程项已关闭,另外 5 个 origin 仍需补逐包材料。修改与构建完整性、源码提供方式和法律审查仍未完成, 不能视为完整 NOTICE 或已批准的对应源码交付。 @@ -176,10 +176,10 @@ Alpine `apk` 可以下载、安装和执行新增代码。即使初始 RootFS - [x] 从固定 APK database 生成完整 package inventory。 - [x] 生成并通过 SPDX 2.3 JSON schema 校验的 machine-readable SBOM。 -- [x] 对固定的 22 个 license/NOTICE 候选完成 checksum-bound 工程复核。 +- [x] 对固定的 23 个 license/NOTICE 候选完成 checksum-bound 工程复核。 - [x] 为剩余 8 个 source origin 建立 checksum-bound 外置候选包索引与可复验 materializer;payload 不提交且批准门禁保持关闭。 -- [x] 对外置候选包的 82 个 payload 完成 checksum-bound 工程复核并固定结果; +- [x] 对外置候选包的 83 个 payload 完成 checksum-bound 工程复核并固定结果; 3 个 origin 的候选材料工程项关闭,5 个仍需补逐包材料。 - [ ] 收集 license text 和 NOTICE。 - [ ] 建立 copyleft corresponding source bundle。 diff --git a/Docs/Roadmap.md b/Docs/Roadmap.md index 8afd85b..d862564 100644 --- a/Docs/Roadmap.md +++ b/Docs/Roadmap.md @@ -103,7 +103,7 @@ | 最低 Xcode 16 原生兼容 | 已通过 | Xcode 16.0 / iOS 18.0 SDK 完成 RootFS install、Simulator/device final-link 和 17 项 native smoke | | App lifecycle 与内存 | 进行中 | Simulator 与 Jack iPhone 均有 256 MiB `ru_maxrss` 门禁;真机 process suspend/resume、UIKit foreground/background、强制终止后数据恢复和有界 App delegate memory-warning 回调恢复已通过;补真实 memory pressure/jetsam | | RootFS ENOSPC/掉电 | 进行中 | 峰值空间预检、全 ENOSPC、七点持久化屏障、确定性掉电切点和 Jack iPhone 受限容量/ENOSPC 清理恢复已覆盖;补真实 storage pressure/强制断电 | -| License-reviewed RootFS | 阻塞 | 15 包 inventory、10 source origin、SPDX SBOM、默认配置证据、外置源码获取流程、22/22 初始候选和 82/82 外置 payload 工程复核已完成;3 个 origin 的候选材料工程项关闭,5 个仍需补逐包材料,之后完成法律复核、对应源码交付审查与负责人批准 | +| License-reviewed RootFS | 阻塞 | 15 包 inventory、10 source origin、SPDX SBOM、默认配置证据、外置源码获取流程、23/23 初始候选和 83/83 外置 payload 工程复核已完成;3 个 origin 的候选材料工程项关闭,5 个仍需补逐包材料,之后完成法律复核、对应源码交付审查与负责人批准 | | App Store 2.5.2 | 阻塞 | guest download/execute policy 有书面结论 | ### 后续 runtime 执行顺序 diff --git a/Docs/RootFS.md b/Docs/RootFS.md index b16db32..be1b720 100644 --- a/Docs/RootFS.md +++ b/Docs/RootFS.md @@ -5,7 +5,7 @@ RootFS 是 PocketRoot 的外部供应链输入,不是普通测试 fixture。仓库提交的是不可变清单、校验和安全安装代码,不提交、镜像或默认打包 RootFS 二进制。 > [!WARNING] -> 固定 v0.3.3 归档已有可复现 package inventory、SPDX SBOM、默认配置证据、完整覆盖 inventory 的源码获取清单,以及 22 个初始候选和 82 个外置 LICENSE/NOTICE payload 的 checksum-bound 工程复核结果;3 个 origin 的候选材料工程项已关闭,5 个仍需补逐包材料。完整 NOTICE、法律复核、对应源码交付审查与发行批准尚未闭环。以下 URL 与命令用于审计和本地开发,不构成公开再分发授权。应用必须先完成自己的法律与发行审查。 +> 固定 v0.3.3 归档已有可复现 package inventory、SPDX SBOM、默认配置证据、完整覆盖 inventory 的源码获取清单,以及 23 个初始候选和 83 个外置 LICENSE/NOTICE payload 的 checksum-bound 工程复核结果;3 个 origin 的候选材料工程项已关闭,5 个仍需补逐包材料。完整 NOTICE、法律复核、对应源码交付审查与发行批准尚未闭环。以下 URL 与命令用于审计和本地开发,不构成公开再分发授权。应用必须先完成自己的法律与发行审查。 ## 1. 固定清单 @@ -118,7 +118,7 @@ receipt schema v2 强制包含该模式。旧 v1 source-review 的传输来源 规范化 aports 目录身份覆盖条目类型、路径、普通文件权限位和内容摘要;物化时会保留 这些权限位,`--verify` 会再次校验。 -在 source-review 目录验证通过后,可把固定的 22 个候选许可证/attribution 文件 +在 source-review 目录验证通过后,可把固定的 23 个候选许可证/attribution 文件 提取到另一个仓库外目录: ```bash @@ -139,7 +139,7 @@ ruby Scripts/rootfs-license-review-results.rb `APKBUILD`;`--verify` 会复核普通文件摘要、目录集合和符号链接目标。脚本不向 App、 Git 或 CI artifact 自动添加输出。这完成的是可复现的工程获取流程。archive 内没有 随附可识别的 LICENSE/COPYING/NOTICE 文件。候选工具会核对提取文件的大小、 -SHA-256、精确路径集合与无链接/特殊节点边界。固定结果清单记录 22/22 个候选均已 +SHA-256、精确路径集合与无链接/特殊节点边界。固定结果清单记录 23/23 个候选均已 工程复核,其中 `libc-dev`、`zlib` 的索引项已关闭,另外 8 个 source origin 仍有 未决项;输出不能直接视为完整 NOTICE 或对应源码交付材料。 @@ -167,7 +167,7 @@ ruby Scripts/rootfs-license-notice-review-results.rb \ ``` 工具对远端材料强制 HTTPS、重定向次数、响应大小、固定字节数与 SHA-256,并原子 -创建输出。结果清单把工程复核绑定到精确的 82 文件 payload tree;复验器拒绝路径 +创建输出。结果清单把工程复核绑定到精确的 83 文件 payload tree;复验器拒绝路径 漂移、符号链接、特殊节点、已知摘要漂移和 tree digest 漂移。`apk-tools`、 `openssl` 与 `pax-utils` 的候选材料工程项已关闭,另外 5 个 origin 仍需补逐包 材料;候选 NOTICE 和 receipt 不代表法律审查或发行批准。 diff --git a/Docs/en/ReleaseCompliance.md b/Docs/en/ReleaseCompliance.md index dea7a02..8d08ac9 100644 --- a/Docs/en/ReleaseCompliance.md +++ b/Docs/en/ReleaseCompliance.md @@ -36,15 +36,15 @@ the default `apk`, repository, and DNS snapshot. No identifiable LICENSE/COPYING/NOTICE file was found in the archive. A checksum-pinned aports-snapshot/upstream-distfile manifest covers the inventory, and an outside-repository materializer creates reproducible review inputs. A second -outside-repository tool pins, extracts, and verifies 22 license, attribution, +outside-repository tool pins, extracts, and verifies 23 license, attribution, declaration, and inline-notice candidates across all 10 source origins. -A pinned result manifest records engineering review of all 22 candidates. +A pinned result manifest records engineering review of all 23 candidates. `libc-dev` and `zlib` have no remaining indexed items; eight source origins still have package-level follow-up. The repository now pins an external candidate bundle for those origins: 13 remote license/attribution payloads, 47 supplemental aports files, and all existing reviewed evidence. The tool can atomically materialize and re-verify it outside the repository. A pinned -results manifest binds engineering review to the exact 82-file payload tree. +results manifest binds engineering review to the exact 83-file payload tree. `apk-tools`, `openssl`, and `pax-utils` have no remaining candidate-material engineering items; five origins still need package-specific material. Modification, build-completeness, source-offer, and legal reviews remain unresolved, so the @@ -117,12 +117,12 @@ The current code does not provide a complete product-level privacy policy. - [x] Generate a complete inventory from the pinned APK database. - [x] Generate a machine-readable SBOM validated against the SPDX 2.3 JSON schema. -- [x] Complete checksum-bound engineering review of all 22 pinned +- [x] Complete checksum-bound engineering review of all 23 pinned license/NOTICE candidates. - [x] Index a checksum-bound external candidate bundle and reproducible materializer for the eight remaining origins; payloads stay uncommitted and approval gates stay closed. -- [x] Complete checksum-bound engineering review of all 82 external candidate +- [x] Complete checksum-bound engineering review of all 83 external candidate payloads; three origins have no remaining candidate-material engineering items and five still need package-specific material. - [ ] Collect license texts and NOTICE files. diff --git a/Docs/en/Roadmap.md b/Docs/en/Roadmap.md index b5cd2d0..b71ca0a 100644 --- a/Docs/en/Roadmap.md +++ b/Docs/en/Roadmap.md @@ -98,7 +98,7 @@ This establishes the current Simulator, minimum-Xcode 16, and single-iPhone one- | Minimum Xcode 16 native | Passed | Xcode 16.0 / iOS 18.0 SDK completed RootFS install, Simulator/device final links, and the 17-check native smoke | | App lifecycle and memory | In progress | Simulator and Jack iPhone have 256 MiB `ru_maxrss` gates; physical process suspend/resume, UIKit foreground/background, post-termination data recovery, and bounded App-delegate memory-warning recovery passed; add real memory-pressure/jetsam evidence | | RootFS ENOSPC/power faults | In progress | Peak-space preflight, full ENOSPC, seven persistence barriers, deterministic power-loss cuts, and bounded capacity/ENOSPC cleanup recovery on Jack iPhone are covered; add real storage-pressure/power-cut evidence | -| License-reviewed RootFS | Blocked | The 15-package/10-origin evidence, all 22 initial candidates, and all 82 external payloads have checksum-bound engineering review; three origins have no remaining candidate-material engineering items, five still need package-specific material, followed by legal review, corresponding-source delivery review, and authorized approval | +| License-reviewed RootFS | Blocked | The 15-package/10-origin evidence, all 23 initial candidates, and all 83 external payloads have checksum-bound engineering review; three origins have no remaining candidate-material engineering items, five still need package-specific material, followed by legal review, corresponding-source delivery review, and authorized approval | | App Store 2.5.2 | Blocked | Written guest download/execute policy decision | ### Next runtime sequence diff --git a/Docs/en/RootFS.md b/Docs/en/RootFS.md index 2dec62d..ffbfe0c 100644 --- a/Docs/en/RootFS.md +++ b/Docs/en/RootFS.md @@ -5,7 +5,7 @@ A RootFS is an external supply-chain input, not a normal fixture. PocketRoot commits immutable metadata and secure install code, not the payload. > [!WARNING] -> The pinned v0.3.3 archive now has a reproducible package inventory, SPDX SBOM, default-configuration evidence, a source-acquisition manifest covering the complete inventory, and checksum-bound engineering review of all 22 initial candidates and all 82 external LICENSE/NOTICE payloads. Three origins have no remaining candidate-material engineering items; five still need package-specific material. The complete NOTICE set, legal review, corresponding-source delivery review, and distribution approval remain open. The URL and commands below support audit and local development; they do not grant redistribution rights. +> The pinned v0.3.3 archive now has a reproducible package inventory, SPDX SBOM, default-configuration evidence, a source-acquisition manifest covering the complete inventory, and checksum-bound engineering review of all 23 initial candidates and all 83 external LICENSE/NOTICE payloads. Three origins have no remaining candidate-material engineering items; five still need package-specific material. The complete NOTICE set, legal review, corresponding-source delivery review, and distribution approval remain open. The URL and commands below support audit and local development; they do not grant redistribution rights. ## Pinned manifest @@ -95,7 +95,7 @@ Receipt schema v2 requires that explicit mode. A legacy v1 source-review directory has ambiguous transport provenance and is no longer accepted by `--verify`; pass it to `--download-cache` to regenerate a verifiable v2 bundle. -After that source-review directory verifies, extract the 22 pinned +After that source-review directory verifies, extract the 23 pinned license/attribution candidates into another directory outside the repository: ```bash @@ -122,7 +122,7 @@ engineering acquisition workflow, not legal review. The RootFS archive contains no identifiable LICENSE/COPYING/NOTICE files. The candidate tool rechecks extracted byte counts, SHA-256 digests, the exact path set, and the no-link/special-node boundary. The pinned results record engineering review of -all 22 candidates: `libc-dev` and `zlib` have no remaining indexed items, while +all 23 candidates: `libc-dev` and `zlib` have no remaining indexed items, while eight source origins still require follow-up. The output is not a completed NOTICE or corresponding-source delivery bundle. @@ -152,7 +152,7 @@ ruby Scripts/rootfs-license-notice-review-results.rb \ The tool enforces HTTPS, redirect and response-size bounds, pinned byte counts and SHA-256 digests, and atomic output creation. The results bind engineering -review to the exact 82-file payload tree; the verifier rejects path drift, +review to the exact 83-file payload tree; the verifier rejects path drift, links, special nodes, known-digest drift, and tree-digest drift. `apk-tools`, `openssl`, and `pax-utils` have no remaining candidate-material engineering items; five origins still need package-specific material. The candidate NOTICE diff --git a/README.md b/README.md index 77560e9..c3409d9 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ print("stderr:", result.stderr) - 展开大小:`18,838,016` 字节 - SHA-256:`be0f3c133f78f28b023288459b33dc28fa253a6ef29f7123bc5f3892edf90ad4` -固定 URL 只是清单元数据,不代表库会自动下载。仓库已从固定归档生成 RootFS 包清单与 SPDX SBOM,并完成 22 个初始候选及 82 个外置 LICENSE/NOTICE payload 的 checksum-bound 工程复核;5 个 source origin 仍需补逐包材料。许可证/NOTICE 法律复核、对应源码和完整发行物 SBOM 未完成前,不得把该 RootFS 加入 Package、App bundle 或公开发行物。 +固定 URL 只是清单元数据,不代表库会自动下载。仓库已从固定归档生成 RootFS 包清单与 SPDX SBOM,并完成 23 个初始候选及 83 个外置 LICENSE/NOTICE payload 的 checksum-bound 工程复核;5 个 source origin 仍需补逐包材料。许可证/NOTICE 法律复核、对应源码和完整发行物 SBOM 未完成前,不得把该 RootFS 加入 Package、App bundle 或公开发行物。 ## 验证命令 diff --git a/Scripts/rootfs-license-notice-candidates.rb b/Scripts/rootfs-license-notice-candidates.rb index fa5c4b5..90e8aa0 100644 --- a/Scripts/rootfs-license-notice-candidates.rb +++ b/Scripts/rootfs-license-notice-candidates.rb @@ -20,7 +20,7 @@ module RootFSLicenseNoticeCandidates alpine-baselayout alpine-keys apk-tools busybox ca-certificates musl openssl pax-utils ].freeze - EXPECTED_EXISTING_EVIDENCE_FILES = 22 + EXPECTED_EXISTING_EVIDENCE_FILES = 23 EXPECTED_REMOTE_PAYLOAD_FILES = 13 EXPECTED_APORTS_FILES = 47 PAYLOAD_KINDS = %w[package-attribution spdx-license-text].freeze diff --git a/Scripts/rootfs-license-notice-review-results.rb b/Scripts/rootfs-license-notice-review-results.rb index 91d4a2f..406cb57 100644 --- a/Scripts/rootfs-license-notice-review-results.rb +++ b/Scripts/rootfs-license-notice-review-results.rb @@ -22,7 +22,7 @@ module RootFSLicenseNoticeReviewResults COVERAGE = %w[complete partial reference-only].freeze SHA256_PATTERN = /\A[0-9a-f]{64}\z/ CANDIDATE_PAYLOAD_TREE_FORMAT = "sha256-path-lines-v1" - EXPECTED_REVIEWED_PAYLOAD_FILES = 82 + EXPECTED_REVIEWED_PAYLOAD_FILES = 83 MAX_REVIEWED_PAYLOAD_BYTES = 8 * 1_024 * 1_024 TOP_LEVEL_KEYS = %w[ allIndexedCandidatePayloadsReviewed archive candidateManifestSha256 diff --git a/Tests/Scripts/RootFSLicenseNoticeCandidatesTests.rb b/Tests/Scripts/RootFSLicenseNoticeCandidatesTests.rb index ba2f12e..4bdf33b 100644 --- a/Tests/Scripts/RootFSLicenseNoticeCandidatesTests.rb +++ b/Tests/Scripts/RootFSLicenseNoticeCandidatesTests.rb @@ -29,7 +29,7 @@ def test_validates_complete_open_origin_candidate_index assert_equal 8, validated.fetch(:sources).length assert_equal 13, validated.fetch(:remote_payloads).length - assert_equal 22, validated.fetch(:existing_evidence_paths).length + assert_equal 23, validated.fetch(:existing_evidence_paths).length assert_equal 47, validated.fetch(:aports_paths).length end @@ -243,6 +243,45 @@ def test_pins_enabled_busybox_ash_math_inline_notices ) end + def test_pins_enabled_busybox_env_inline_notice + source = @candidate.fetch("sources").find do |candidate| + candidate.fetch("sourceOrigin") == "busybox" + end + review_source = @review.fetch("sources").find do |candidate| + candidate.fetch("sourceOrigin") == "busybox" + end + evidence = review_source.fetch("candidateEvidence").find do |candidate| + candidate.fetch("outputPath") == "evidence/busybox/coreutils-env.c" + end + + assert_includes( + source.fetch("existingEvidencePaths"), + "evidence/busybox/coreutils-env.c" + ) + assert_includes( + source.fetch("supplementalAportsPaths"), + "aports/busybox/busyboxconfig" + ) + assert_includes( + source.fetch("remainingReviewItems"), + "confirm-enabled-env-license-and-attribution-coverage" + ) + assert_includes( + source.fetch("remainingReviewItems"), + "review-other-bundled-third-party-license-and-attribution-coverage" + ) + assert_equal "busybox-1.36.1/coreutils/env.c", evidence.fetch("member") + assert_equal 4_753, evidence.fetch("byteCount") + assert_equal( + "730d258bcbeeef301fc00611d0e325958f3f378576af54c524f9be662b0ac757", + evidence.fetch("sha256") + ) + assert_equal( + %w[inline-license-notice attribution], + evidence.fetch("evidenceKinds") + ) + end + def test_rejects_overlapping_materialized_output_paths payloads = @candidate.fetch("remotePayloads") payloads.fetch(0)["outputPath"] = "licenses/collision" diff --git a/Tests/Scripts/RootFSLicenseNoticeReviewResultsTests.rb b/Tests/Scripts/RootFSLicenseNoticeReviewResultsTests.rb index f7bb155..ea3979a 100644 --- a/Tests/Scripts/RootFSLicenseNoticeReviewResultsTests.rb +++ b/Tests/Scripts/RootFSLicenseNoticeReviewResultsTests.rb @@ -47,7 +47,7 @@ def test_validates_pinned_candidate_review_results assert_equal 8, validated.fetch(:sources).length assert_equal 13, validated.fetch(:remote_payloads).length assert_equal 47, validated.fetch(:aports_paths).length - assert_equal 82, @results.fetch("reviewedPayloadFileCount") + assert_equal 83, @results.fetch("reviewedPayloadFileCount") assert_equal 5, @results.fetch("sourceOriginsWithRemainingReviewItems") assert_equal %w[apk-tools openssl pax-utils], @@ -136,7 +136,7 @@ def test_binds_enabled_busybox_ash_math_to_inline_notices assert_equal "partial", source.fetch("licenseTextCoverage") assert_equal "partial", source.fetch("attributionCoverage") - assert_equal 4, source.fetch("reviewedExistingEvidenceCount") + assert_equal 5, source.fetch("reviewedExistingEvidenceCount") assert_includes( source.fetch("resolvedReviewItems"), "confirm-enabled-ash-math-license-and-attribution-coverage" @@ -151,6 +151,28 @@ def test_binds_enabled_busybox_ash_math_to_inline_notices ) end + def test_binds_enabled_busybox_env_to_inline_notice + source = @results.fetch("sources").find do |candidate| + candidate.fetch("sourceOrigin") == "busybox" + end + + assert_equal "partial", source.fetch("licenseTextCoverage") + assert_equal "partial", source.fetch("attributionCoverage") + assert_equal 5, source.fetch("reviewedExistingEvidenceCount") + assert_includes( + source.fetch("resolvedReviewItems"), + "confirm-enabled-env-license-and-attribution-coverage" + ) + assert_equal( + ["review-other-bundled-third-party-license-and-attribution-coverage"], + source.fetch("remainingReviewItems") + ) + assert_equal( + "additional-package-material-required", + source.fetch("engineeringConclusion") + ) + end + def test_rejects_candidate_manifest_digest_drift @candidates["status"] = "changed" diff --git a/Tests/Scripts/RootFSLicenseReviewResultsTests.rb b/Tests/Scripts/RootFSLicenseReviewResultsTests.rb index 31f1528..9b2f122 100644 --- a/Tests/Scripts/RootFSLicenseReviewResultsTests.rb +++ b/Tests/Scripts/RootFSLicenseReviewResultsTests.rb @@ -39,7 +39,7 @@ def test_validates_pinned_engineering_review_results sources = validate assert_equal 10, sources.length - assert_equal 22, + assert_equal 23, sources.sum { |entry| entry.fetch("candidateResults").length } assert_equal 8, sources.count { |entry| !entry.fetch("remainingReviewItems").empty? }