From aeb33fdf93e37c72d6246633dd6fb0ae03da70ce Mon Sep 17 00:00:00 2001 From: Jonathan Haas Date: Sun, 20 Sep 2026 14:56:38 -0700 Subject: [PATCH] ci: accept the Capobara 40-hex toolDigest in projection receipts Since dx-corp/mono#9935 the projection is published by Capobara, whose receipt records toolDigest as the 40-hex git tree id of rust/tools/capobara instead of the Node projector's 64-hex sha256. "Verify projection state" asserted 64 hex for every digest, so each sync PR from Mono fails with "AssertionError: toolDigest". Accept either length for toolDigest only; definitionDigest and contentDigest stay 64 hex. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4559072..9a42159 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,8 +63,13 @@ jobs: assert receipt["destinationRepository"] == os.environ["DESTINATION_REPOSITORY"] assert re.fullmatch(r"[0-9a-f]{40}", receipt["sourceSha"]) assert re.fullmatch(r"[0-9a-f]{40}", receipt["priorProjectedBase"]) - for key in ("definitionDigest", "toolDigest", "contentDigest"): + for key in ("definitionDigest", "contentDigest"): assert re.fullmatch(r"[0-9a-f]{64}", receipt[key]), key + # toolDigest identifies the projector: the Node projector recorded a + # 64-hex sha256 of its inputs; since the Capobara cutover + # (dx-corp/mono#9935) it is the 40-hex git tree id of + # rust/tools/capobara. Both are established provenance. + assert re.fullmatch(r"[0-9a-f]{40}|[0-9a-f]{64}", receipt["toolDigest"]), "toolDigest" assert receipt["publicationEligible"] is True PY