| Source blocker or conversion requirement | Inspect the exact source file/capability, fix it, push and plan that commit. |
progress.phase: waiting_for_mail | Read mail_status (same as mail_domain_status) with the Prod environment ID; apply its required records. |
reconciliation.state: required | Review the operation and perform one confirmed reconciliation. |
reconciliation.state: pending | Wait and inspect the existing operation; do not submit another attempt. |
error.code: build_failed | operation get names the failed deployment as deployment_id. Read its diagnostics: ohmyhost deployment logs --project "$PROJECT_ID" --deployment "$DEPLOYMENT_ID" --follow --json or MCP deployment_logs. The BUILD_FAILED item carries excerpt, the sanitized tail of your own install/build output (newest lines last; excerpt_truncated means earlier output was omitted). An ending ohmyho.st packaging: line names an output size/file limit. Fix that cause,push andplan the new commit. Without an excerpt,the build may have printed nothing,hit the eight-minute deadline or failed inside the platform; plan the same commit once more,then report both IDs if it repeats. |
error.code: runtime_candidate_failed | The new deployment failed its health check. In the same deployment logs, the HEALTH_CHECK_FAILED item names the route, the status_code it answered and, for a project owner, an excerpt of the response. The check is a cookieless GET that follows no redirect, so a redirect fails too. Each probe has five seconds and follows no redirect; an ordinary login redirect fails. After promotion/rollback,first fix the target environment secret if that is the cause and plan again. For source errors,fix/push the new commit. If the probe throws or exceeds the timeout repeatedly,a diagnostic can be absent and the original operation may require reconciliation. A previous deployment keeps serving when the new candidate fails. |
error.code: runtime_candidate_rejected | The runtime refused the built Worker script. Check the default export and imports of src/ohmyhost/worker.ts, then plan the new commit. |
error.code: storage_jurisdiction_conflict | Match storage.jurisdiction to the immutable us/eu project region from project status,push andplan again; the project cannot move regions. |
error.code: database_migration_failed | Read DATABASE_MIGRATION_FAILED’s file/catalog reason; none of the new files applied. Preserve applied files and use later timestamps. Follow expand-only admission; never reset the database. |
CLI 0.1.24 init/plan managed_auth_mail_required | Upgrade to CLI 0.1.25 or later. Older clients incorrectly required managed mail for Better Auth. Preserve your auth and chosen sender; only calls through ohmyho.st Mail need its capability, Paid access and verified sender. |
App 402 Project execution paused | Resolve Stop budget,expired seven-day credit grace,or custom hostname lacking Paid/flag eligibility. Serving resumes within about five minutes; redeploying cannot fund it. |
App 429 Runtime limit exceeded | Reduce work to fit50msCPU/ten subrequests; use small batches. This is not a request rate limit. |
App 502 Upstream unavailable | The app threw or failed to run; read that deployment’s diagnostics. |
App 503 Service unavailable or Credit check unavailable | Address/credit/Dev check unavailable,or Dev passed about1,200requests/minute. Wait/retry; load-test Prod. |
Non-GET/HEAD 403 Forbidden | Verify Origin/cookies and the committed browser/CORS declarations. |
Server 403 Egress denied or 502 Egress upstream unavailable | Add the exact HTTPS origin to runtime.egress.allow,commit/deploy; redirects require the final URL.304 is preserved. |
| Cron absent or failed | Read function_runs_list or function runs with the actual environment ULID; state,attempt,status_code describe the outcome. Observe runs. |
response_contract_invalid,or old MCP client_request_failed with working login | Compare installed CLI/MCP with current release,upgrade both/reload MCP,then replay the original request/key. If current,report the request ID. |
| HTTP 429 | Respect Retry-After; do not fan out retries. |