# Manuals Tenant Recovery Runbook ## 1) Verify runtime env on active app Confirm these variables on the live Coolify app/container: - `NEXT_PUBLIC_CONVEX_URL` (full `https://...` URL) - `NEXT_PUBLIC_SITE_DOMAIN=rmv.abundancepartners.app` - Optional override: `MANUALS_TENANT_DOMAIN=rmv.abundancepartners.app` ## 2) Verify Convex tenant data gate Run: ```bash pnpm deploy:staging:convex-gate ``` This fails if Convex returns fewer than one manual for the active domain. ## 3) Backfill existing manuals rows for tenant visibility Dry run first: ```bash pnpm manuals:backfill:tenant -- --domain rmv.abundancepartners.app --dry-run ``` Apply: ```bash pnpm manuals:backfill:tenant -- --domain rmv.abundancepartners.app ``` ## 4) Re-run smoke checks ```bash pnpm deploy:staging:smoke -- --base-url https://rmv.abundancepartners.app --skip-browser ``` Manuals checks will fail if: - `/manuals` renders with `initialManuals: []` - tenant domain marker mismatches the host - degraded manuals state is shown ## 5) Recover eBay parts cache (when status is `rate_limited`/empty) Force a cache refresh from the live app (requires `ADMIN_API_TOKEN`): ```bash curl -sS -X POST \ -H "x-admin-token: $ADMIN_API_TOKEN" \ https://rmv.abundancepartners.app/api/admin/ebay/refresh ``` Then verify: 1. `GET /api/ebay/search?...` reports cache `status=success` with non-zero `listingCount`. 2. `POST /api/ebay/manual-parts` for a known parts manual returns at least one listing. 3. Manual viewer shows no stale/error eBay panel when matches are unavailable.