Skip to content

Operational: dspack-studio (exhibit) Worker appears to auto-deploy on every push to main #34

Description

@ryandmonk

Recorded at the ledger-v2 production deployment closeout (2026-08-04). No change has been made to the Cloudflare integration — this is an operational decision requiring review.

Observation

The exhibit Worker dspack-studio receives a new version upload a couple of minutes after every push to main, with no such command in the release procedure:

Event Timestamp (UTC)
#31 merge push → CI run started 2026-08-04T14:00:46Z
dspack-studio version f671c8d1-eae8-4759-9e55-7e3ae23437c5 created 2026-08-04T14:02:53Z
#29 merge push → CI run started 2026-08-03T23:43:23Z
dspack-studio version ee8e7cfb-e2bb-435d-be7b-773b20c14ae4 created 2026-08-03T23:46:02Z

During the ledger-v2 release the only Cloudflare write command executed was npx wrangler deploy --config wrangler.composer.jsonc at 2026-08-04T14:11:35Z, which uploaded 8 files to the composer Worker (dspack-studio-composer, version ca1af622). The exhibit version predates it by ~9 minutes.

No repository workflow deploys

grep -rln "wrangler deploy\|cloudflare/wrangler-action" .github/ returns nothing. .github/workflows/ci.yml builds the static export as an artifact ("Static export (the deploy artifact)") but never deploys it, and release-style deploy workflows do not exist in this repo. The consistent ~2–3 minute lag after each push to main is the signature of a Cloudflare Workers Builds Git integration configured on the dspack-studio Worker in the Cloudflare dashboard. Notably the composer Worker (dspack-studio-composer) shows no equivalent uploads — its only versions come from explicit wrangler deploy runs — so if the integration exists it is scoped to the exhibit Worker only.

Why it was harmless this time

The exhibit's entire consumed source surface is byte-identical between the Phase 2 deploy source 177b9ae and merged main 1a56872:

git diff --stat 177b9ae 1a56872 -- apps/web packages/a2ui-ingest packages/replay \
  packages/scenarios packages/contracts packages/astryx-renderers packages/shadcn-renderers
# (empty)

apps/web has no dependency on @aestheticfunction/dspack-export, so the ledger-v2 dependency bump could not reach it. Exhibit production smoke after the merge: 86/86 green.

Operational risk

Any future merge to main that touches apps/web or its consumed packages will redeploy the exhibit without an explicit deployment decision, without the pre-deploy rollback anchor being recorded, and without the exhibit production smoke being run as a gate. That contradicts the deployment discipline documented in docs/deployment.md (explicit wrangler deploy per Worker, anchor first, smoke after) and means a red smoke would be discovered after the fact rather than before rollout. It also makes "the exhibit Worker remains untouched" unverifiable as a release criterion, since a merge alone can change it.

Choices (no action taken)

  1. Retain deliberately — document the auto-deploy in docs/deployment.md as the intended exhibit path, and add a post-merge exhibit smoke (scheduled or workflow-triggered) so a bad rollout is caught automatically. Keeps merges fast; accepts deploy-on-merge.
  2. Scope by paths, if supported — restrict the Workers Builds trigger to apps/web/** plus the packages the exhibit consumes, so unrelated merges (like this one) stop redeploying it. Reduces noise without giving up automation; needs confirmation that path filters are available for this integration.
  3. Disable and make exhibit deployment explicit — remove the Git integration so the exhibit deploys only via npx wrangler deploy --config wrangler.jsonc, matching the composer's discipline and the documented anchor→deploy→smoke sequence. Most control, least automation.

Deciding requires dashboard access to confirm the integration exists and how it is configured (Workers → dspack-studio → Settings → Build).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions