{"record":{"id":"b0f9e7090c93f7ff","repo":"nikivdev/code","slug":"remote-review-failed-http","errorCode":null,"errorMessage":"remote review failed: HTTP {}","messagePattern":"remote review failed: HTTP (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/commit.rs","lineNumber":5490,"sourceCode":"    .context(\"failed to create HTTP client for remote review\")?;\n\n    let mut request = client.post(&review_url).json(&payload);\n    if let Some(token) = commit_with_check_review_token() {\n        request = request.bearer_auth(token);\n    }\n\n    let response = request\n        .send()\n        .context(\"failed to send remote review request\")?;\n\n    if !response.status().is_success() {\n        if response.status() == StatusCode::UNAUTHORIZED {\n            bail!(\"remote review unauthorized. Run `f auth` to login.\");\n        }\n        if response.status() == StatusCode::PAYMENT_REQUIRED {\n            bail!(\"remote review requires an active subscription. Visit myflow to subscribe.\");\n        }\n        bail!(\"remote review failed: HTTP {}\", response.status());\n    }\n\n    let payload: RemoteReviewResponse = response\n        .json()\n        .context(\"failed to parse remote review response\")?;\n\n    if !payload.stderr.trim().is_empty() {\n        debug!(stderr = payload.stderr.as_str(), \"remote claude stderr\");\n    }\n\n    let result = payload.output;\n    let mut review_json = parse_review_json(&result);\n    let future_tasks = review_json\n        .as_ref()\n        .map(|parsed| normalize_future_tasks(&parsed.future_tasks))\n        .unwrap_or_default();\n    let summary = review_json.as_ref().and_then(|r| r.summary.clone());\n    let quality = review_json.as_mut().and_then(|r| r.quality.take());","sourceCodeStart":5472,"sourceCodeEnd":5508,"githubUrl":"https://github.com/nikivdev/code/blob/a747e741ae92c09071d0ae946ab48488adcff1ce/src/commit.rs#L5472-L5508","documentation":"Catch-all for any non-success HTTP status from the remote review service that is not 401 or 402 (e.g. 4xx/5xx). The status code is embedded in the message, so the specific server-side problem must be inferred from the code.","triggerScenarios":"The review endpoint returns any status other than success/401/402 — e.g. 404 wrong URL, 429 rate limited, 500/502/503 server errors, 413 payload too large.","commonSituations":"Misconfigured review URL pointing at a wrong or moved endpoint (404); oversized diffs rejected (413); rate limiting under heavy use (429); myflow service outage (5xx); proxy/firewall interference.","solutions":["Check the HTTP code in the message: 429 → wait and retry with backoff; 404 → re-check review URL config; 5xx → retry later or check myflow status page.","Shrink the diff/payload if it may exceed size limits.","Verify the review URL with curl to see the raw response.","Retry the review after confirming the service is up."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// preflight reachability\nlet resp = reqwest::Client::new().get(review_url).send().await?;\nlet status = resp.status();\nif status.is_client_error() || status.is_server_error() {\n    anyhow::bail!(\"review endpoint unhealthy: HTTP {status}\");\n}","typeGuard":null,"tryCatchPattern":"for attempt in 0..3 {\n    match run_remote_review(&diff).await {\n        Ok(r) => return Ok(r),\n        Err(e) if e.to_string().contains(\"remote review failed: HTTP 5\") && attempt < 2 => {\n            tokio::time::sleep(Duration::from_secs(2u64.pow(attempt))).await;\n        }\n        Err(e) => return Err(e),\n    }\n}\nunreachable!()","preventionTips":["Retry with exponential backoff on 429/5xx only","Validate the review URL config with a smoke request before long flows","Cap diff/payload size to avoid 413s","Alert on myflow status page / service outages"],"tags":["http","remote-review","network","server-error"],"backgroundTag":"http-5xx-server-error","analyzedSha":"a747e741ae92c09071d0ae946ab48488adcff1ce","analyzedAt":"2026-09-01T22:43:55.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}