{"record":{"id":"76a3fae385150b85","repo":"Hmbown/CodeWhale","slug":"antigravity-cloud-code-sse-shape-is-unproven-fail","errorCode":null,"errorMessage":"Antigravity cloud-code SSE shape is unproven; failing closed","messagePattern":"Antigravity cloud-code SSE shape is unproven; failing closed","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/client/cloud_code.rs","lineNumber":234,"sourceCode":"                        Ok(value) => value,\n                        Err(err) => {\n                            yield Err(anyhow::anyhow!(\n                                \"Antigravity cloud-code SSE is not JSON: {err}\"\n                            ));\n                            return;\n                        }\n                    };\n                    if let Some(error) = value.get(\"error\") {\n                        yield Ok(StreamEvent::Error {\n                            error: error.clone(),\n                        });\n                        return;\n                    }\n                    let Some(text) = extract_cloud_code_text(&value) else {\n                        if value.get(\"response\").is_some() || value.get(\"candidates\").is_some() {\n                            continue;\n                        }\n                        yield Err(anyhow::anyhow!(\n                            \"Antigravity cloud-code SSE shape is unproven; failing closed\"\n                        ));\n                        return;\n                    };\n                    if !started {\n                        started = true;\n                        yield Ok(StreamEvent::MessageStart {\n                            message: MessageResponse {\n                                id: \"agy\".to_string(),\n                                r#type: \"message\".to_string(),\n                                role: \"assistant\".to_string(),\n                                content: Vec::new(),\n                                model: String::new(),\n                                stop_reason: None,\n                                stop_sequence: None,\n                                container: None,\n                                usage: crate::models::Usage::default(),\n                            },","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/8880682c63083a91624de936797efa3ce9e498fd/crates/tui/src/client/cloud_code.rs#L216-L252","documentation":"The cloud-code SSE payload parsed as JSON, carried no `error` key, `extract_cloud_code_text` could not pull a text part from it, and it had neither a `response` nor `candidates` wrapper (the known ignorable shapes). Because the Antigravity protocol is reverse-engineered and its shape unproven, the client deliberately fails closed instead of silently dropping a possibly meaningful frame.","triggerScenarios":"Antigravity ships a new event shape not yet mapped by the client; an intermediate informational frame the client has never seen; the endpoint's response format drifts.","commonSituations":"Provider-side protocol evolution outpacing the client; beta endpoints with undocumented frame types.","solutions":["Update the client — new shapes get mapped as they are confirmed","Capture the failing payload and report it so the shape can be proven and mapped","Retry after updating; do not retry unchanged — the same frame will fail again"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_unproven_shape_error(err: &anyhow::Error) -> bool {\n    err.to_string().contains(\"SSE shape is unproven\")\n}","tryCatchPattern":"match stream.next().await {\n    Some(Err(e)) if is_unproven_shape_error(&e) => {\n        // Deliberate fail-closed: unknown frame may carry meaning. Upgrade client, report payload.\n        return Err(e.context(\"cloud-code protocol changed; client mapping outdated\"));\n    }\n    other => { /* forward */ }\n}","preventionTips":["Keep the client updated — new cloud-code frames are mapped as shapes are proven","Never silence this error by skipping frames; it exists to prevent silent data loss","Report captured payloads so the extractor's known-shape list grows"],"tags":["antigravity","cloud-code","fail-closed","protocol","sse"],"backgroundTag":null,"analyzedSha":"8880682c63083a91624de936797efa3ce9e498fd","analyzedAt":"2026-08-16T11:31:27.956Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}