Shopify Dev App Proxy Conflicts
Problem
When multiple PRs deploy to the same developer's Shopify app (e.g., shopify.app.raynorchavez.toml), the last shopify app deploy wins and overwrites the app proxy URL. This causes persistent 500 errors on the storefront for any branch that isn't the last to deploy.
Symptoms
bundle.jsreturns 500 Internal Server Error through Shopify's app proxy (/apps/marqo/static/search/bundle.js)- The search proxy is healthy when hit directly (
https://{FULL_ENV}-ecom.dev-marqo.org/static/search/bundle.jsreturns 302 → S3 → 200) - The 500 is persistent, not intermittent — it starts when another branch deploys and doesn't stop
- Shopify renders a full HTML page instead of proxying to the worker (visible in response headers:
theme;desc="...",render;dur=...) - App logs in Shopify Partners dashboard are empty
Root Cause
All dev PRs for the same developer share a single Shopify app (e.g., [dev-raynorchavez] Marqo). The deploy_and_test_shopify.yaml workflow runs shopify app deploy -f which pushes a new app version with URLs pointing to the deploying branch's infrastructure:
[app_proxy]
url = "https://{FULL_ENV}-ecom.dev-marqo.org"
When PR A deploys, the app proxy points to dev-branch-a-ecom.dev-marqo.org. When PR B deploys after, it overwrites the proxy to dev-branch-b-ecom.dev-marqo.org. Now PR A's storefront gets 500s because Shopify tries to route /apps/marqo/* to branch B's worker, which may not exist or has different settings.
How to Diagnose
- Check the active app version in Shopify Partners dashboard:
Apps → your app → Versions → look at the active version's
app_proxy.url - If it points to a different branch than the one you're testing, that's the problem
- You can also check the version number in the deploy logs — look for
Releasing a new app version as part of [dev-username] Marqo
How to Fix
Re-deploy from your branch to reclaim the app proxy URL:
# Option 1: Push a commit (even empty) to trigger CI
git commit --allow-empty -m "chore: reclaim Shopify app proxy" && git push
# Option 2: Manually trigger the workflow
gh workflow run deploy_and_test_shopify.yaml --ref your-branch -f environment=dev
Prevention
This is tracked in bead cloud_control_plane-dbe. Potential solutions:
- Lock mechanism: Before deploying, check if another branch "owns" the app proxy and skip the URL update
- Per-branch Shopify apps: Each branch gets its own test app (expensive in Partners dashboard slots)
- Skip app proxy update in CI: Only update URLs on the first deploy of a branch, not on every push
- Awareness: If you have multiple PRs open that touch
components/shopify/**, be aware that deploys will fight over the app proxy URL
Timeline of Discovery
This was discovered on 2026-04-09 during the storefront search UI uplift. The fix/bulk-job-lookup branch deployed version 1569 which overwrote the app proxy URL, causing persistent 500s on the shopify/search-uplift branch. The issue was resolved by re-deploying from the correct branch.