Skip to content

feat(contracts): TMPL01A0 publication contract artifacts - #8

Open
NWarila wants to merge 3 commits into
mainfrom
feat/tmpl01a0-contracts-v2
Open

feat(contracts): TMPL01A0 publication contract artifacts#8
NWarila wants to merge 3 commits into
mainfrom
feat/tmpl01a0-contracts-v2

Conversation

@NWarila

@NWarila NWarila commented Sep 5, 2026

Copy link
Copy Markdown
Owner

TMPL01A0 — publication contract artifacts for NWarila/ubi9-application-template. Files only; no workflow YAML. A later reusable workflow (A1) consumes these to publish signed multi-arch images.

Built and verified by a construction spike (built + run, not authored from prose), then hardened across seven windows under a clean-room review that split cross-model: a Codex reviewer found a signer bypass, a mode-dependent suite, a vacuous mutation harness, and a provenance-completeness gap — all fixed and reproduced-as-closed.

Verification (reproducible from a clean umask 0007 clone → tools/install-trust-tree.sh → suites):

  • tests/contracts.shTOTAL 210/210
  • tests/mutations.sh → exit 0, 80/80 named rows, each observed exit compared to its declared code (with an anti-vacuity meta-test)
  • 150 files; manifest sha256 926a31a8da99bfac98381254380df64806526d168252659c3271bdd3b3c9d5e6; all additions under contracts/ tools/ tests/

Trust boundary (four controls): four gh attestation verify calls with exact signer identity; the signer policy + check-signer.sh (requires workflow membership); the single tag-mutating path verify-and-promote.sh; and verify-build-materials.sh/.py over BuildKit/SLSA provenance (requires the exact statement type, BuildKit build type, and dependency-completeness flag). Trust tools are installed read-only (0555) with open-once descriptor binding.

150-row manifest (sha256 → path)
9b84b8d019c62e5f271f9729ded23c8682729838fc48445b4f13afdec1f196e1  contracts/builders.json
adfd36102f075a3a11c46c5648820d816593e4374c3277dd15d8d6b2eed573b0  contracts/descriptor.schema.json
c278018a00ef64cd0ffd377150d7d0bb00e258ac58545b5134f50563b9b1ffac  contracts/publish-inputs.schema.json
7a315213952c6bd4344e7e327452f2172cde55e97af0fa294eb8533845bc51c4  contracts/root-base.json
b30fbdf66bacaa0498ba2bedb89c70fb80a8c08cffe886c4953821be90137771  contracts/signers.json
23fd2b7b0999f8f63aeb98701456bc381c75eeb8eb46a8f7fc7db98c4b43e3d8  tests/clean-clone-umask-0007.sh
b939d00ecd66c92b71357e96da10d4f3eddf0c2ef694741e06d54384d7cf75c7  tests/contracts.sh
22c196403c8b9562f2ea34c415f6ecaf60ffff72ce63e48bd44e7e8a6703ea53  tests/fault-after-attest.sh
437e26451d4378f966818de6abbc37132dbecf489b7181a03d912725888e2f2f  tests/fixtures/bin/crane
5e5f7e2813a1ac8a5c1bbd8722f418b6850cc21f689ad9a91c451e4a1bda75a4  tests/fixtures/bin/gh
8d312e53b20c91f252aee6238131233e92492aefe1b6c4efe1966b801f12bf19  tests/fixtures/decide/candidate-amd64-changed.json
e013df6aad277217790acbcb6b03359d00cc10713a946211172136f3866f1a00  tests/fixtures/decide/candidate-both-changed.json
daeaeebe8d293da47eb4f0279be313fe2d98e2d66ac093b1815422a1ab2bede5  tests/fixtures/decide/candidate-same.json
3af912b64c6ac9d885ed98d3904d1bc5ac31635b17cd633b9ffb07b1e6481e53  tests/fixtures/decide/current-config.json
292955c02e20007fb7d997957c0b7dd55606022c1782df22634432616b7fdc86  tests/fixtures/decide/current-index.json
daeaeebe8d293da47eb4f0279be313fe2d98e2d66ac093b1815422a1ab2bede5  tests/fixtures/decide/current-sbom.json
0e8ac5f95258fc39e18dba8ac8c2eee91eb7c3c563d5e78bb17c339b927ed51d  tests/fixtures/decide/duplicate-amd64-index.json
faae942fa5201e96abea2ca065c92aa92487668ae3d93c3b1961e2bc96c0f4d5  tests/fixtures/decide/missing-amd64-index.json
31c0ba50d2e7cdbd6433ac162e793daff71861370fe45da87af9605b766d9613  tests/fixtures/descriptors/amd64-second.json
31c0ba50d2e7cdbd6433ac162e793daff71861370fe45da87af9605b766d9613  tests/fixtures/descriptors/amd64.json
e12f2c2a04a9408717aa2d48adaadd21eedaab01a125d9c97112997ab8968b8f  tests/fixtures/descriptors/arm64-nested-index.json
ef0dc3db27728a334d7294047ed98dd81497cbaa6f043c09cd8b1d6a2bf00f57  tests/fixtures/descriptors/arm64-stale.json
b5f1873a36f8ef4a4451d0ae7e71ee181dba907999b8aa359ad7b78a27ed670b  tests/fixtures/descriptors/arm64-variant.json
ec41c58719b20fe1538992e6875b290be3464fc9ae542679771a47c5715e6cd3  tests/fixtures/descriptors/arm64.json
da9c8ec5752b1d936f25c5036e18e1188e7c7cae8fd6282a83aa73c7099575c4  tests/fixtures/dockerfiles/alternate-escape.Dockerfile
576ba0f31ff5cc91dba3aa60322f8403c7764b8eb548683eb2aa6a8cedb4708c  tests/fixtures/dockerfiles/arg-default.Dockerfile
6c09d2357db399331e6eb793b794001272789198be0e67a3410df74e276279f9  tests/fixtures/dockerfiles/base-only-root.Dockerfile
5b7f174f9a410944e2868c3e9dae8b9befac46df93d5b01cf762221e88e5c979  tests/fixtures/dockerfiles/builder-only-root.Dockerfile
f91aa823e9c62302391398ec2c6c415e7c07ed2b3a5a2d16130cda92721bacd0  tests/fixtures/dockerfiles/case-smuggle.Dockerfile
d418fe0e769a2bd0bbd7c6e83fed6511fe5012f08fa87942cbed1af80206f15b  tests/fixtures/dockerfiles/comment-smuggle.Dockerfile
fbb2a792a0e5be68605bb0b1b9ad74eedf9e289bd923a2e32322ff7a0b78199b  tests/fixtures/dockerfiles/conforming-normal.Dockerfile
230e78c77aba30d164add98cd9f5f46e97ca37c5dc9a5ab7b4f59435717c3d19  tests/fixtures/dockerfiles/conforming-root.Dockerfile
b73cb3cb0f7d9c2c865ce402f708bbd0e08e46f83bebe9478944d826def18f56  tests/fixtures/dockerfiles/continuation.Dockerfile
8269984c318215762a49e7f1721b4c0ceca7d13d84bb0c52476403c7ff9029b9  tests/fixtures/dockerfiles/default-shadowed-arg.Dockerfile
127ae1c7207fe401e1e6c3bbf3a44b90349ad406c7cf4dbabecae150c1e76349  tests/fixtures/dockerfiles/duplicate-alias.Dockerfile
3df3d56733d2af6f4e9ef000bdd3f5df8890374d81d0d480a5ade8fc7bc08d49  tests/fixtures/dockerfiles/duplicate-arg.Dockerfile
b3bf6778d31cfc8cca74973cdf54730da72e71bf74b338eb774bcc961f4f89e7  tests/fixtures/dockerfiles/external-copy.Dockerfile
bfa19c2a1e17383485c1edef2e9ace1039a5cee7fd276c686c217b0193dfe34c  tests/fixtures/dockerfiles/external-run-mount.Dockerfile
8305ddde98b1dc8efe02e3316649ccbf669b5310517bc82be8838bdef867771d  tests/fixtures/dockerfiles/heredoc-copy.Dockerfile
46cbe687c047bb43feedf67bb1b7ddad5d0a63bb6f4a4af8db99a563f36bed5d  tests/fixtures/dockerfiles/heredoc.Dockerfile
9ff9d113e1949a0f52eb6a754978cbb0eae8ff2db74d6e3cdca0b9df9724888b  tests/fixtures/dockerfiles/indirect-arg.Dockerfile
bb2553558b6c28ff9b2476afa4f8359b7703458b7bd925066da963c1327c8fa3  tests/fixtures/dockerfiles/live-base-8e9043a.Dockerfile
b5512ffae68009268a0397f10f702eeb73286054c48befe7086fe211069ab6ab  tests/fixtures/dockerfiles/mixed-case-copy.Dockerfile
c1fe58f49a88a732a2e72067cf22aef66456b8cecd757f799adfba99e4247e98  tests/fixtures/dockerfiles/mixed-case-run-mount.Dockerfile
5c199886e41030521c06a6039c1f5e2d2dd149b3a3c0152c89c806716d21b48e  tests/fixtures/dockerfiles/onbuild-from.Dockerfile
0065302801c595d3defda1887c6683f89e0bd2d8f756370c10124341cc031981  tests/fixtures/dockerfiles/parser-directive.Dockerfile
d536eb9f79eada059aae1f5059c4c20c8199fb9600f86128238ce500d89352af  tests/fixtures/dockerfiles/platform-unapproved.Dockerfile
6260019074d655b283cb01ca3a0367411fd68741a2ac522252788fe6a8cf9faf  tests/fixtures/dockerfiles/scratch.Dockerfile
68c2c27a97b90310522c4d094b3edcfb35ce1b452f500352cfcf7fd5dd2384c1  tests/fixtures/dockerfiles/second-normal-builder.Dockerfile
5bc4ea5b25baed73a64bf011282293f7dba515508ccaa732ed0feec4436c654a  tests/fixtures/dockerfiles/trailing-tokens.Dockerfile
938f6b3c061fe944a838b5263befd5c256774cc248c07814dacd372b07eab2be  tests/fixtures/dockerfiles/unbraced.Dockerfile
131640073b3f41da328a3f79e33d6551c9d85bebe4a4b9abefce9d5948cf884b  tests/fixtures/dockerfiles/unsupported-from-flag.Dockerfile
8b165660e607b7fdb788e303211f8ea12cea89aaaf02646ed0c57c156e21e1b1  tests/fixtures/envelopes/normal-valid.json
17edf985290818ed505e56fc42db2111084ade6ad40faf02a4536fb5b185a84b  tests/fixtures/envelopes/promote-only-valid.json
c2e87dbbd986ac6bffd3323a8d248d156260e92bad1d317c1f9276d8e4b9b971  tests/fixtures/envelopes/root-context-extra-property.json
7c68297692998c055fd43cd42a6d584fce45e1d722c1835c42aa43d971465224  tests/fixtures/envelopes/root-extra-property.json
d418eb270c4526f09aafd703398c4bd823ed9f4c4c73e2c099cab276f8417126  tests/fixtures/envelopes/root-forbidden-overrides.json
d4c8959c878a0d1185bd2a277ed416512dd96118e4d27c305539907083ca66d8  tests/fixtures/envelopes/root-homoglyph.json
d20f30f12fd69bf605b08e3d072acd38b96bb9acd81e8bfe7434b060c2f9b24a  tests/fixtures/envelopes/root-pull-request.json
933bb243b0e4742de65886ba5420ff54d0ae513248fa3895e1ad0cbf7121ed50  tests/fixtures/envelopes/root-valid.json
0bebbd9b3ed408591e53b46caad31d370d296ea1bfabc8b24c7ca3b626957152  tests/fixtures/hostile-bin/bash
3e96c50729e2e71422f27efc97dd0f6ead649b66bb5643b8cc59b50b672c777b  tests/fixtures/hostile-bin/crane
e1cc3da1bdddd08fa6304dd7f86c8f70090d49a8af90aa5251e9d529b1c57674  tests/fixtures/hostile-bin/gh
b7b37858bf6ed7e8c5dc40681aa1404fc66d52ab7eadd433ca546e21402c596c  tests/fixtures/hostile-bin/jq
73ac6827ebdc2f048fdaefd21efed063e5583add0a06bfcdce3cb111a7d77410  tests/fixtures/hostile-bin/python3
7063182293f34a77a7f305dcb82bfef3a7683add02e13be60196ed9eabcb6d68  tests/fixtures/mock-registry.py
02b3c19a855e12fd01062b71844c58c8315510660abf61eb6c76008960cd6973  tests/fixtures/pkgset/control-cr.json
00af484554f6d6303621b451b5336ef2b8b18e8ec3be62d11837d1ddaebcae45  tests/fixtures/pkgset/control-del.json
6b6c70d12a194c39a4fd46824e4ac1512bb454c7760944828a4d6f8a4a9bea5d  tests/fixtures/pkgset/control-lf.json
d6ad3c9576aa38e9531a49e626d299004b22e36c93e70d2b786d717f44413335  tests/fixtures/pkgset/control-tab.json
86c51f0867b091fe809e648772c8bfefd6ee1c3f900b85e034d89ac1df15a377  tests/fixtures/pkgset/dual-arch-root.json
7abd73ce4b0d920cc487f52fcaa2c9ff2fbc4fdffebfc12e6e479193c8cfaf57  tests/fixtures/pkgset/duplicate-root.json
b3f6206f0b1252c3fce058c184d66b53fcc65bd1e4ddf0d4bab05c95c15cabb6  tests/fixtures/pkgset/empty-version.json
b62a2965fc41febb129c7f57c4479c8aa555cc3944e2b0656b99d40aa5a35bae  tests/fixtures/pkgset/handcrafted.expected
981a2cf7e9c06f1710cf7b06a74983b4cf24358e823dc91422f5030a5c774565  tests/fixtures/pkgset/handcrafted.json
8c503387681b11e0ecfd4c8a299a1cd6768f8a70f1bea4bc57b296ec5ae399de  tests/fixtures/pkgset/handcrafted.sha256
c3cb643378d2af0d70c912f1edc96b5db6aef74e401315fc9fbe16d0a790c6ff  tests/fixtures/pkgset/malformed-percent.json
b5c4db58b5a592f57991f62581bf3115e7f3326985974c288c8ca7fc92e87d10  tests/fixtures/pkgset/malformed-qualifier.json
d3985f8b055abaa191d42fe524a190acef0141401a86c5b9094a2cd1868d050a  tests/fixtures/pkgset/malformed-rpm.json
2ffc663f205de08409deeb58dd33331b2da77ff75994ef023cde2584690436fe  tests/fixtures/pkgset/missing-root.json
1c9946e690fcf27ed2c04e0b757fde1297967f9e40dd1b831dae9461aa892f10  tests/fixtures/pkgset/multiple-at.json
694571b3c64f178b29e2dd3b0870a96f4f4f2b14eaab962e1255f59dc05e2b25  tests/fixtures/pkgset/percent-00.json
177d59a8d73e474f209c212c436d4863aa2ee98ac89d38f94f7c43872b3d3da4  tests/fixtures/pkgset/percent-0a.json
22b58b079464f2cb54bc857c1bf1778143ab61f64bd542441a45355703666969  tests/fixtures/pkgset/percent-at.json
109aceb807690763e8bdc3f4e968f009a38589ec6530580526cf38ce14709978  tests/fixtures/pkgset/percent-hash.json
55971785a7db3e799e99131ee99ebea51e1ebf6f66d5db231747b853fc0ba467  tests/fixtures/pkgset/percent-question.json
71a8d0617c88192414d08fb5bee882893e97d27a78eda7759f93bb4cb016b6f1  tests/fixtures/pkgset/percent-slash.json
45a613f1f9ff7bf33134757ba5b8edecf99db18cd3dc49f68f734b2ecf6e61fc  tests/fixtures/pkgset/two-rpm.json
ab5f9b41cea3b226365e9388632a12634c65a8ee858247dcd855e47c92f793bc  tests/fixtures/pkgset/unknown-root.json
b0ee70c9a1dee2865454da16052e63c82844d796177520b67a49fb3fe853dd6f  tests/fixtures/pkgset/zero-at.json
58526abc9799e94e61e1660472f26699cfb775e737e4475e75d7df2e4ad7247a  tests/fixtures/provenance/conforming-normal.json
0b6046f8a169efbc17a73c8bc643e95f95c737b1e97bc43a3bcbd9dcb54b7bd0  tests/fixtures/provenance/conforming-root-mirror.json
f2066ee6577d19f11bc8fcac706904a11d89df5bbefdf155c6cbfe3c29b2f50d  tests/fixtures/provenance/conforming-root.json
f82d9267fd375283beaf96bf6a41fd23832a04ab2bd2e94dbc10062c0328fd15  tests/fixtures/provenance/different-digest.json
90653d3b842b0ce2d97ad0ddf28b71f11f4089d41c59abdb8298ec5e408c37b9  tests/fixtures/provenance/extra-alpine.json
9865f00d12064dabab4ffe3ea9d4967186ab011ba71d5d55cd438efe2857f566  tests/fixtures/provenance/missing-digest.json
42abd17a1878653e98f9ff7d7084801855c228562d234add932cac82b3692b65  tests/fixtures/provenance/resolved-dependencies-incomplete.json
60989222273db075cab68f3849772f14e8d6fc0d807ca8d56b33bbf4aa761f5b  tests/fixtures/provenance/resolved-dependencies-missing-completeness.json
3566707e9152bbd83e812698347ddf73f4d2877dbe1cd8f22c68ad9bb4e90226  tests/fixtures/provenance/syntax-frontend.json
5f1fa36948e6de2d2cd0f94a7e50535976043aee1c70f100ce5d09d21fe8540a  tests/fixtures/provenance/wrong-build-type.json
fa75c84a7cb348f13338fac8907aae14eefe380dc42e7e9c040cc8f3ec463642  tests/fixtures/pythonpath/json.py
28f0a80d6057fedf2732ef8e7b57f9122d7d424e4f2704a03b6060710656aa51  tests/fixtures/registry-config.yml
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  tests/fixtures/registry/200-empty.body
5d6c0b77b846994d29d9cc06b85620263c10513aa436b7de253e8bdca4dc7888  tests/fixtures/registry/200-error-envelope.json
d2ecbd8319ba23871a125212ba73cc3d3ebc2d33a5dea8bda76e2a0b15a82e64  tests/fixtures/registry/200-html.body
a6fb08fda1acb957b6116bd37811a1fe41a01611c0631edbf786d6889a27a55c  tests/fixtures/registry/200-malformed-json.body
aea22e966eb540d953a66303d3eaef5935a1d08e797f60aa6a96ed5a65a368e5  tests/fixtures/registry/200-schema-version-1.json
3d60eec733f106e03a571223c6adb85a3dabd53590ae0d8339e8ea2de2d32c56  tests/fixtures/registry/200-valid-index.json
8372bce0c0f1c067da7a8c2bf6b3df5183fd1f81f09b35e59b2cfcf2c4796823  tests/fixtures/registry/200-valid-manifest.json
fd8cd6a1258fa0c28791a8dd1c6be6ee992c690db22a7a42f43d6ce17eb0b762  tests/fixtures/registry/200-wrong-media-type.json
c2792137531464ccaa8716df586f38df6ff1898375d84e9b98b6f167a129dad3  tests/fixtures/requirements-spdx.txt
6bd73e7efdce2ce242ab96e63f9ebe278bc271d1ef2ad6478228e07e40bea122  tests/fixtures/root-base-mirror.json
7d39f7222f75d20d8f318a45481cb2813775feb0997aab200857fe8ebcbdd226  tests/fixtures/signer-bin/jq
daf9a5d58234ebe1b5f079ffc28d40f72ff351725872423462383f46d6c6bd1a  tests/fixtures/signers-allowed-out-of-tree.json
daf9a5d58234ebe1b5f079ffc28d40f72ff351725872423462383f46d6c6bd1a  tests/fixtures/signers-allowed.json
2b9587be9bf0896ca360a361daa23de828ecc77b0510a6d6be418cd490b868d8  tests/fixtures/signers-bad-active.json
94ccb210ef1f39f854619475f8af11b09809176346730b1ec02fa4785e10839b  tests/fixtures/signers-bad-digest.json
9e4d309ed5c3a11b9cef9309fbbdf5233f5bebcc981e9f15c99ad3806d53e0c1  tests/fixtures/signers-bad-workflow.json
8d9d66e6b8dc65e4164ac72e4cd3efb4d599c32d80cd6849f8547cb5cdf6af9b  tests/fixtures/signers-duplicate.json
180df66e94506a977c0a0be7649bba5fab7e31e9139890d595cd8901f0786dfe  tests/fixtures/signers-extra-key.json
1d6ac7388d85b5d68637f220d829ebad1f121df03be11c8f8bb5f85144915074  tests/fixtures/signers-redundant-template.json
b30fbdf66bacaa0498ba2bedb89c70fb80a8c08cffe886c4953821be90137771  tests/fixtures/signers-revoked.json
5e2627e23b84ec13cbf4a3a0ad2e139f17f28ce8db035f256f698264582c8bf0  tests/fixtures/signers-uppercase-digest.json
e68a47accd54041d5a74c106300e7e83b6108f70eca243416c626d0943f16823  tests/fixtures/signers-wrong-workflow.json
98d72c0fbba82ef8e3f5797662c08e82628660254afd1ebd8c8c49ea57643c79  tests/fixtures/spdx/spdx-amd64-rerun.json
c5e5d6edca59941263c78c0e72d4f873d08c153b6260a3071d35f5968f05c53e  tests/fixtures/spdx/spdx-amd64.json
5f1f1699d13ebc02e51aba9824178b054954bc275a0ea5b23474a3151dbd8b7d  tests/fixtures/spdx/spdx-arm64-rerun.json
5af507542e0de85b62cdbbc7bdc9e6cc128c50417c5313c36009568438131b0b  tests/fixtures/spdx/spdx-arm64.json
3e2f85bdc165fa613fe15a96c2853c19655a5d17682d551a2646dba227058361  tests/fixtures/spdx/spdx-merged.sha256
a45b375faf52daeb50a3fd8eee14842b07ece99fc9aeff33860975fc1423c9a3  tests/fixtures/trusted-runtime/crane
02e04555095a16ae655c38eb991f46634e1c356a6d8c19fce18ea5756e31d9a6  tests/fixtures/trusted-runtime/jq-snapshot
7847c5cc7b6e6f5ffb4662f9d5c8c1c514a3f63d8313b54c97be93232542bc56  tests/mutations.sh
dc90f775e881a9c673b218525c419a88117cb930fc51ff91fe8fef886667b886  tests/noexec-construction.sh
d8a3e75c7537baa1122dbfe84ec9eeeced9371e00a7992a8ca2498f81573c8ab  tools/.tmpl01a-runtime/README
f9bac137f05c1eeeee695d45a0f659e976914652be462c273c4b53a04cb390f8  tools/check-signer.sh
e49c4fa6d25750166280e9d68acf69b392b3484f2fd11c3b567f794cbf5cba41  tools/decide.sh
aef6c55fdfb47816ff04e144d9353fcffd01d705fb1f162ca49039d7c0d3363e  tools/dockerfile-froms.py
00f611bcbd4c7980bb0ab69a9a1bb9f42b4e840a0c8f31786142483ddd431c34  tools/fetch-pinned-tools.sh
7e11ee6261d96144dd53bc08544feec51b8f6ac7ebea81a52cff6ffab7b3cd18  tools/index-build.sh
da9d649b1cb5b32aed6cf4b79f15dfb3b576d9a637401b45138bf6bddf880302  tools/install-trust-tree.sh
3b62ed1189c2cf132274165d0ed83d9763e3c5583f983fc8aa8c065822852d11  tools/manifest-push.sh
8b86764a821160b2d7ebd40d53681a17e3a6f0c243aa704890907214dd878248  tools/pkgset.sh
9827aa43ef89ccec535ac48009b993025c0cc10ab1e725b0cc44db63adb15163  tools/registry-status.sh
026ba8fb000dc5b611d8b324e38b75738724ba2722dd2f725f3ac29c5df1cf0a  tools/spdx-merge.py
7f58f33478da40fba278470277fe72beebaeb124b3932fea9ca6890f0178abc5  tools/tags-resolving-to.sh
97091de808d1485a93626201d9d645b87e44af3a0423740285c707197bd1a786  tools/validate-envelope.py
d312ba37f47e0f007dc4836ac18ed38cad251faf652457a68b6f8a848071d2f3  tools/verify-and-promote.sh
4aac422a77dd65c130049e4bcd68183de5d553b88b100a5d0e7a7b0d1928ede3  tools/verify-attestations.sh
f1a85a119a60bcc01a1f1f025880f9af61d85f8ab10c61749cb7359ad4e753df  tools/verify-build-materials.py
f220ba0d81e5dd02967d4c8acd918de74dbc9b012de2f4d2de2f7e1c90481413  tools/verify-build-materials.sh

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant