# TEMPORARY diagnostic workflow. Deleted before this branch is merged. # # The Actions jobs/logs API is not readable by this account, so the only # available signal is the commit-status API, which reports one entry per # *job*. This file therefore encodes the diagnosis as job topology: each job # isolates one hypothesis and surfaces as its own status context. # # Round 1 (2d328e7): # # p1 bare alpine + checkout failure 3s # p2 alpine + apk nodejs git tar + checkout success 5s # p3 p2 + script/bootstrap + script/test + tar success 15s # p4 p2 + upload-artifact v4 failure 11s # p5 node:20-alpine + checkout success 8s # p6 node:20-bookworm-slim + checkout success 11s # # -> the pinned alpine image, the prerequisite step and the site build are all # fine; upload-artifact v4 is what broke the build job on main. # # Round 2 (602fd60): # # build (deploy.yml, upload v3.2.2-node20) success 20s # q1 upload-artifact v3.2.1 (node16) success 7s # q2 upload-artifact v3.2.1-n20 (node20) success 22s # q3 full build + upload v3.2.2-node20 success 11s # q4 download v3.1.0-node20 + wrangler install failure 43s # # -> build green on every v3 upload; a second, separate failure on the deploy # side. # # Round 3 (07af755): # # build (deploy.yml, upload v3.2.1) success 8s # r1 wrangler install + invoke, no artifacts failure 7s # r2a/r2b artifact round trip, v3.2.1/v3.0.2 success 12s / 2s # r3a/r3b artifact round trip, node20 builds success 8s / 2s # # -> the artifact round trip is sound in both pairs; wrangler is the second # break. Reproduced locally in the pinned node image: `npm install -g # wrangler@4.120.0` exits 0 with EBADENGINE warnings, then wrangler itself # exits 1 with "Wrangler requires at least Node.js v22.0.0. You are using # v20.20.2." Unpinned `npm install -g wrangler` on that same image resolves # to 4.86.0, because npm picks the newest version the running node # satisfies -- so 4.86.0 is what has actually been deploying this site, and # that is what deploy.yml now pins. # # Round 4 is the full rehearsal of both jobs end to end with the corrected # pins, stopping one step short of publishing. name: probe on: push: branches: - pin-deploy-refs-observable jobs: # Producer: identical to the build job in deploy.yml. s1-build: runs-on: ubuntu-latest container: # alpine 3.21, 2026-02-28 image: alpine@sha256:c3f8e73fdb79deaebaa2037150150191b9dcbfba68b4a46d70103204c53f4709 defaults: run: shell: sh steps: - run: apk add --no-cache nodejs git tar # actions/checkout v4.2.2, 2026-02-28 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: submodules: recursive - run: script/bootstrap - run: script/test - run: tar -czf site.tar.gz public # actions/upload-artifact v3.2.1, 2026-08-09 - uses: actions/upload-artifact@ff15f0306b3f739f7b6fd43fb5d26cd321bd4de5 with: name: site-dry path: site.tar.gz # Consumer: identical to the deploy job in deploy.yml, except that the # final step prints wrangler's view of the project instead of running # `wrangler pages deploy`. Same pinned image, same pinned action, same # pinned wrangler version, same extracted tree. Needs no token and # publishes nothing. s2-deploy-dryrun: runs-on: ubuntu-latest needs: s1-build container: # node 20.20.2-bookworm, 2026-08-09 image: node@sha256:8f693eaa7e0a8e71560c9a82b55fd54c2ae920a2ba5d2cde28bac7d1c01c9ba5 steps: # actions/download-artifact v3.0.2, 2026-08-09 - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a with: name: site-dry - run: tar -xzf site.tar.gz - run: test -f public/index.html # wrangler 4.86.0, 2026-08-09 - run: npm install -g wrangler@4.86.0 - run: wrangler --version - run: wrangler pages deploy --help