hopify app deploy blocked: migrateAppModule mutation returns "App not found" for legacy admin_link extension

I have reproduced the issue on the latest CLI version.

Yes, I am on the latest version

I have searched existing posts and this report is not a duplicate.

Yes, this isn’t a duplicate

In which of these areas are you experiencing a problem?

Extension

Expected behavior

Running shopify app deploy should complete the extension migration when confirmed, then push the app configuration (including updated redirect URLs in shopify.app.toml) to a new app version.

Actual behavior

The migration prompt for the legacy orders-link (admin_link) extension is shown. Confirming with “Yes” causes the migrateAppModule Partners API mutation to fail with “App not found”. Choosing “No” aborts the deploy. Result: no path to push any config changes — every deploy is blocked.
Notably, the App Management API (app.shopify.com/app_management/unstable/graphql.json) successfully finds the app in the same session (multiple ActiveAppReleaseFromApiKey queries succeed). Only the Partners API migrateAppModule mutation returns “App not found”, suggesting a state mismatch between the two API surfaces for this specific app/extension pairing.
Already escalated through Shopify Support — they couldn’t find anything actionable in their logs and pointed here.

Reproduction steps

  1. Have an app with a legacy admin_link extension (orders-link) originally created via Partner Dashboard
  2. cd into the linked app directory
  3. Run: shopify app deploy
  4. CLI auto-imports the legacy extension via import-extensions
  5. CLI prompts: Migrate "orders-link"?
  6. Select Yes → error: “App not found”
  7. Select No → command aborts

Verbose output

2026-05-13T09:59:33.713Z: Sending “Partners” GraphQL request:
mutation MigrateAppModule($apiKey: String!, $registrationId: ID, $registrationUuid: String, $type: String!) {
migrateAppModule(
input: {apiKey: $apiKey, registrationId: $registrationId, registrationUuid: $registrationUuid, type: $type}
) {
migratedAppModule
userErrors {
field
message
}
}
}

With variables:
{
“apiKey”: “*****”,
“registrationUuid”: “7517d2b2-8f1d-4401-95d7-f5f56523d3f7”,
“type”: “admin_link”
}

to https://partners.shopify.com/api/cli/graphql

2026-05-13T09:59:34.054Z: Request completed in 340 ms
With response headers:

  • x-request-id: 463dcd50-e898-4fc6-becb-670e857e7966-1778666373

╭─ error ──────────────────────╮
│ App not found │
╰──────────────────────────────╯

Earlier in the same session, App Management API calls succeeded:

  • query ActiveAppReleaseFromApiKey → 200 OK (x-request-id: 0e10e933-f169-431c-8591-a0dc0a688036-1778666370)
  • query fetchSpecifications → 200 OK (x-request-id: 4f8814f0-50cb-4a35-a2e6-29aa7f1fabff-1778666370)
  • query ActiveAppReleaseFromApiKey → 200 OK (x-request-id: bfe2e831-77a2-4b8b-9aed-fee36993639a-1778666371)
  • query ActiveAppReleaseFromApiKey → 200 OK (x-request-id: ab18db81-9431-49c4-b49a-bddb788fb51b-1778666372)

CLI also reports:

The following extension specifications were defined locally but not found in the remote specifications: admin, order_attribution_config, tax_calculation
The following extension specifications were found in the remote specifications but not defined locally: admin_app

Suggesting the migration is from legacy admin spec → new admin_app spec, but the mutation can’t find the parent app to perform it.

Operating system

macOS Darwin 25.3.0 (Apple Silicon, arm64)

CLI version

3.94.3 (also reproduced on 3.84.1)

Shell

zsh

Nodejs version

v22.14.0

What language and version are you using in your application?

N/A — this app has no local web backend; it’s a config-only app with a single legacy admin_link extension. The web app is hosted externally (Node.js backend on our infra, but irrelevant to the deploy issue which is purely about app configuration).