Skip to content

fix(graphql): add deleted_classes:[UserDetails] migration to unblock deploys#387

Merged
mattzcarey merged 1 commit into
mainfrom
fix/graphql-userdetails-delete-class-migration
Jun 2, 2026
Merged

fix(graphql): add deleted_classes:[UserDetails] migration to unblock deploys#387
mattzcarey merged 1 commit into
mainfrom
fix/graphql-userdetails-delete-class-migration

Conversation

@mattzcarey
Copy link
Copy Markdown
Collaborator

Problem

The staging and production deploys of #384 (which removed the UserDetails Durable Object) failed, leaving most servers undeployed:

  • graphqlcode: 10064"New version of script does not export class 'UserDetails' which is depended on by existing Durable Objects … use a delete-class migration."
  • workers-observabilitycode: 10061"Cannot apply --delete-class migration to class 'UserDetails' without also removing the binding that references it."

Because turbo deploy aborts on first failure, graphql's failure halted the whole release.

Root cause

#384 removed the UserDetails DO and its bindings from every server, and correctly added a deleted_classes: ["UserDetails"] migration to the two servers that own the class (workers-observability, workers-builds). It did not add one to graphql, whose already-deployed worker still depends on UserDetails — so wrangler deploy refuses the new version (10064). graphql is also the last consumer still holding a cross-script binding to observability's UserDetails, which is what blocked observability's own delete-class migration (10061).

Fix

Add the delete-class migration to graphql:

"migrations": [
  { "new_sqlite_classes": ["GraphQLMCP"], "tag": "v1" },
  { "deleted_classes": ["UserDetails"], "tag": "v2" }
]

graphql owns no actual UserDetails namespace (only observability does), so this just clears graphql's dependency on the class and releases the binding that was blocking observability.

Validation

Deployed the full set to staging in order (consumers first, owners last):

  • graphql-staging and workers-observability-staging now deploy cleanly (10064 / 10061 gone).
  • All staging servers respond 200 on the new build (accounts_list tool gone).
  • The staging UserDetails Durable Object namespace is deleted; only the production one remains (pending the prod redeploy).

Follow-up / deploy note

Production graphql + workers-observability are still on the pre-#384 build (their failed deploys left the old version running — no downtime, UserDetails data intact). After this merges, redeploy them to production in order (graphql → observability) so observability's delete-class migration succeeds.

#384 removed the UserDetails Durable Object from every server but only added the
delete-class migration to the two servers that own the class (workers-observability,
workers-builds). graphql's deployed worker still depends on UserDetails, so
`wrangler deploy` rejected the new version with code 10064 and aborted the staging
and production deploys; it also blocked workers-observability from applying its own
deleted_classes migration (code 10061).

Adding the delete-class migration lets graphql deploy and releases the binding.
Validated on staging: graphql + observability deploy cleanly and the staging
UserDetails namespace is removed.
@mattzcarey mattzcarey merged commit af70c87 into main Jun 2, 2026
6 checks passed
@mattzcarey mattzcarey deleted the fix/graphql-userdetails-delete-class-migration branch June 2, 2026 18:03
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