Replace exercise figure
replace_exercise_figure
Section titled “replace_exercise_figure”Replace one active image with a new UUID, preserving display settings and original history. Requires current exercise revision and shared-use acknowledgment. Read back after an uncertain response before any further write.
Contract metadata
Section titled “Contract metadata”{ "annotations": { "readOnlyHint": false, "destructiveHint": true, "idempotentHint": false, "openWorldHint": true }, "fileParams": [ "file_id_1" ], "requiredPermission": "write", "security": { "type": "oauth2", "scopes": [ "chalksurf:mcp" ] }}Input schema
Section titled “Input schema”The server advertises this JSON Schema to MCP clients. Runtime authorization and business-rule checks still apply.
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": {}, "properties": { "allowNeedsRevision": { "default": false, "type": "boolean" }, "allowSharedExerciseUpdate": { "default": false, "type": "boolean" }, "exerciseFigureId": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "exerciseId": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "expectedUpdatedAt": { "minLength": 1, "type": "string" }, "file_id_1": { "additionalProperties": false, "description": "A ChatGPT file ID.", "properties": { "download_url": { "format": "uri", "type": "string" }, "file_id": { "minLength": 1, "type": "string" }, "file_name": { "minLength": 1, "type": "string" }, "mime_type": { "minLength": 1, "type": "string" } }, "required": [ "download_url", "file_id" ], "type": "object" }, "organizationId": { "description": "The ChalkSurf organization ID to use for this request.", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "originalFileName": { "maxLength": 255, "minLength": 1, "type": "string" }, "source": { "additionalProperties": {}, "description": "A figure source object. Use file_id_1 for ChatGPT file uploads; for rendered_figure, include input using the figure_render_draft shape.", "properties": { "data": { "maxLength": 14680064, "minLength": 1, "type": "string" }, "input": { "additionalProperties": {}, "description": "Call figure_get_capabilities first. Unknown properties are ignored with warnings; recognized invalid combinations fail with actionable paths.", "properties": { "assertions": { "items": { "additionalProperties": {}, "properties": { "angleA": { "items": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "maxItems": 3, "minItems": 3, "type": "array" }, "angleB": { "items": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "maxItems": 3, "minItems": 3, "type": "array" }, "bisector": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "circle": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "degrees": { "maximum": 360, "minimum": 0, "type": "number" }, "from": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "id": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "line": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "lineObject": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "objectA": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "objectB": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "objects": { "items": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "maxItems": 8, "minItems": 3, "type": "array" }, "point": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "pointA": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "pointB": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "points": { "items": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "maxItems": 8, "minItems": 3, "type": "array" }, "segmentA": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "segmentB": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "segmentEnd": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "segmentStart": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "to": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "type": { "description": "Required fields depend on this assertion type. Call figure_get_capabilities for the matrix.", "enum": [ "collinearPoints", "parallel", "perpendicular", "equalLength", "pointOnLine", "pointOnCircle", "angleMeasure", "equalAngle", "angleBisected", "tangent", "pointOnSegment", "concurrent" ], "type": "string" }, "vertex": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" } }, "required": [ "type" ], "type": "object" }, "maxItems": 30, "type": "array" }, "canvas": { "additionalProperties": {}, "properties": { "height": { "default": 420, "maximum": 1200, "minimum": 120, "type": "integer" }, "viewBox": { "additionalProperties": {}, "properties": { "xMax": { "maximum": 100000, "minimum": -100000, "type": "number" }, "xMin": { "maximum": 100000, "minimum": -100000, "type": "number" }, "yMax": { "maximum": 100000, "minimum": -100000, "type": "number" }, "yMin": { "maximum": 100000, "minimum": -100000, "type": "number" } }, "required": [ "xMin", "xMax", "yMin", "yMax" ], "type": "object" }, "width": { "default": 640, "maximum": 1200, "minimum": 120, "type": "integer" } }, "type": "object" }, "objects": { "description": "Semantic objects. Each type has a conditional field contract in figure_get_capabilities.", "items": { "additionalProperties": {}, "properties": { "at": { "additionalProperties": {}, "properties": { "x": { "maximum": 100000, "minimum": -100000, "type": "number" }, "y": { "maximum": 100000, "minimum": -100000, "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "definition": { "additionalProperties": {}, "properties": { "at": { "additionalProperties": {}, "properties": { "x": { "maximum": 100000, "minimum": -100000, "type": "number" }, "y": { "maximum": 100000, "minimum": -100000, "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "center": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "count": { "maximum": 3, "minimum": 1, "type": "integer" }, "dx": { "maximum": 2, "minimum": -2, "type": "number" }, "dy": { "maximum": 2, "minimum": -2, "type": "number" }, "end": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "endAngleDegrees": { "maximum": 720, "minimum": -360, "type": "number" }, "from": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "grid": { "type": "boolean" }, "kind": { "description": "Construction fields depend on this kind. Call figure_get_capabilities for the exact field matrix.", "enum": [ "midpointBetweenPoints", "intersection", "projection", "pointOnSegmentRatio", "triangleCenter", "betweenPoints", "throughPoints", "parallelThrough", "perpendicularThrough", "perpendicularBisector", "triangleMedian", "triangleAltitude", "fromThrough", "angleBisector", "centerRadius", "centerThroughPoint", "throughThreePoints", "diameter", "centerTangentToLine", "triangleIncircle", "centerRadiusAngles", "centerStartEnd", "threePoints", "onSegmentObject", "atPoint", "atCoordinate", "cartesian" ], "type": "string" }, "line": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "mid": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "objectA": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "objectB": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "onto": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "point": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "pointA": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "pointB": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "pointC": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "points": { "items": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "maxItems": 12, "minItems": 3, "type": "array" }, "radius": { "exclusiveMinimum": 0, "maximum": 100000, "type": "number" }, "ratio": { "maximum": 1, "minimum": 0, "type": "number" }, "segment": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "side": { "enum": [ "internal", "external" ], "type": "string" }, "sideA": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "sideB": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "start": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "startAngleDegrees": { "maximum": 360, "minimum": -360, "type": "number" }, "sweepDirection": { "enum": [ "clockwise", "counterclockwise" ], "type": "string" }, "text": { "maxLength": 80, "minLength": 1, "type": "string" }, "through": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "tickStep": { "exclusiveMinimum": 0, "maximum": 1000, "type": "number" }, "to": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "triangle": { "items": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "maxItems": 3, "minItems": 3, "type": "array" }, "vertex": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "which": { "additionalProperties": {}, "properties": { "index": { "maximum": 1, "minimum": 0, "type": "integer" }, "kind": { "enum": [ "nearPoint", "upper", "lower", "left", "right", "byIndex" ], "type": "string" }, "point": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" } }, "required": [ "kind" ], "type": "object" }, "xLabel": { "maxLength": 12, "minLength": 1, "type": "string" }, "yLabel": { "maxLength": 12, "minLength": 1, "type": "string" } }, "required": [ "kind" ], "type": "object" }, "id": { "description": "A stable figure object identifier such as A, AB, c1, or angle_mark_1.", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$", "type": "string" }, "label": { "maxLength": 80, "minLength": 1, "type": "string" }, "radius": { "exclusiveMinimum": 0, "maximum": 1000, "type": "number" }, "size": { "exclusiveMinimum": 0, "maximum": 1000, "type": "number" }, "style": { "additionalProperties": {}, "properties": { "dash": { "enum": [ "solid", "dashed", "dotted" ], "type": "string" }, "fill": { "enum": [ "black", "gray", "lightGray", "red", "orange", "green", "blue", "purple", "white", "none" ], "type": "string" }, "opacity": { "maximum": 1, "minimum": 0.05, "type": "number" }, "stroke": { "enum": [ "black", "gray", "lightGray", "red", "orange", "green", "blue", "purple", "white", "none" ], "type": "string" }, "strokeWidth": { "maximum": 8, "minimum": 0.25, "type": "number" }, "textSize": { "maximum": 32, "minimum": 8, "type": "number" } }, "type": "object" }, "type": { "description": "Required and allowed fields depend on this type. Call figure_get_capabilities before authoring.", "enum": [ "point", "segment", "line", "ray", "circle", "arc", "polygon", "angleMark", "rightAngleMark", "tickMark", "label", "axes" ], "type": "string" } }, "required": [ "id", "type" ], "type": "object" }, "maxItems": 80, "minItems": 1, "type": "array" } }, "required": [ "objects" ], "type": "object" }, "kind": { "enum": [ "https_url", "base64_image", "rendered_figure" ], "type": "string" }, "mimeType": { "enum": [ "image/avif", "image/gif", "image/jpeg", "image/png", "image/svg+xml", "image/tiff", "image/webp" ], "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "kind" ], "type": "object" }, "targetSheetId": { "anyOf": [ { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, { "type": "null" } ] } }, "required": [ "organizationId", "exerciseId", "expectedUpdatedAt", "exerciseFigureId" ], "type": "object"}Output schema
Section titled “Output schema”{ "$schema": "https://json-schema.org/draft/2020-12/schema", "anyOf": [ { "additionalProperties": false, "properties": { "figure": { "additionalProperties": false, "properties": { "exerciseFigureId": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "orderIndex": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "provenance": { "additionalProperties": false, "properties": { "byteLength": { "maximum": 104857600, "minimum": 0, "type": "integer" }, "createdBy": { "enum": [ "agent", "user", "import" ], "type": "string" }, "mimeType": { "maxLength": 100, "minLength": 1, "type": "string" }, "originalFileName": { "maxLength": 255, "minLength": 1, "type": "string" }, "pixelHeight": { "maximum": 100000, "minimum": 1, "type": "integer" }, "pixelWidth": { "maximum": 100000, "minimum": 1, "type": "integer" }, "renderQualityStatus": { "enum": [ "passed", "needs_revision", "unchecked" ], "type": "string" }, "renderSpecHash": { "pattern": "^[a-f0-9]{64}$", "type": "string" }, "sourceKind": { "enum": [ "local_file", "mcp_file", "https_url", "base64_image", "rendered_figure", "user_upload", "import", "unknown" ], "type": "string" } }, "required": [ "sourceKind", "createdBy" ], "type": "object" }, "rotationClockwiseDegrees": { "anyOf": [ { "const": 0, "type": "number" }, { "const": 90, "type": "number" }, { "const": 180, "type": "number" }, { "const": 270, "type": "number" } ] }, "type": { "enum": [ "text", "solution" ], "type": "string" }, "url": { "format": "uri", "type": "string" }, "widthInCm": { "maximum": 20, "minimum": 1, "type": "number" } }, "required": [ "type", "url", "widthInCm", "exerciseFigureId", "orderIndex", "rotationClockwiseDegrees" ], "type": "object" }, "receipt": { "additionalProperties": false, "properties": { "changedPaths": { "items": { "type": "string" }, "type": "array" }, "details": {}, "operation": { "enum": [ "copy_exercise", "copy_sheet", "update_exercise", "resolve_quality_issue", "dismiss_quality_issue", "update_sheet", "bulk_update_sheets", "append_exercises_to_sheet", "create_folder", "rename_folder", "delete_exercise", "delete_sheet", "delete_folder", "create_sheet", "create_exercise", "update_exercise_figure", "replace_exercise_figure", "remove_exercise_figure", "reorder_exercise_figures", "upload_exercise_figure", "set_exercise_visibility", "set_sheet_visibility" ], "type": "string" }, "precondition": { "additionalProperties": false, "properties": { "actualUpdatedAt": { "anyOf": [ { "minLength": 1, "type": "string" }, { "type": "null" } ] }, "expectedUpdatedAt": { "anyOf": [ { "minLength": 1, "type": "string" }, { "type": "null" } ] }, "status": { "enum": [ "matched", "not_required" ], "type": "string" } }, "required": [ "status" ], "type": "object" }, "resource": { "additionalProperties": false, "properties": { "id": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "type": { "enum": [ "exercise", "sheet", "folder" ], "type": "string" }, "url": { "format": "uri", "type": "string" } }, "required": [ "type", "id" ], "type": "object" }, "version": { "oneOf": [ { "additionalProperties": false, "properties": { "created": { "const": true, "type": "boolean" }, "resourceType": { "enum": [ "sheet", "exercise" ], "type": "string" }, "versionId": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "versionNumber": { "exclusiveMinimum": 0, "maximum": 9007199254740991, "type": "integer" } }, "required": [ "resourceType", "created", "versionId", "versionNumber" ], "type": "object" }, { "additionalProperties": false, "properties": { "created": { "const": false, "type": "boolean" }, "reason": { "minLength": 1, "type": "string" }, "resourceType": { "enum": [ "sheet", "exercise" ], "type": "string" } }, "required": [ "resourceType", "created", "reason" ], "type": "object" } ] }, "warnings": { "items": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "details": {}, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "type": "array" } }, "required": [ "resource", "operation", "changedPaths", "precondition", "warnings", "details" ], "type": "object" }, "review": { "additionalProperties": false, "properties": { "byteLength": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "nextActions": { "items": { "minLength": 1, "type": "string" }, "type": "array" }, "pixelHeight": { "anyOf": [ { "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, { "type": "null" } ] }, "pixelWidth": { "anyOf": [ { "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, { "type": "null" } ] }, "renderQualityStatus": { "anyOf": [ { "enum": [ "passed", "needs_revision", "unchecked" ], "type": "string" }, { "type": "null" } ] }, "sourceKind": { "enum": [ "local_file", "mcp_file", "https_url", "base64_image", "rendered_figure", "user_upload", "import", "unknown" ], "type": "string" }, "warnings": { "items": { "additionalProperties": false, "properties": { "code": { "minLength": 1, "type": "string" }, "details": {}, "message": { "minLength": 1, "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "type": "array" } }, "required": [ "pixelWidth", "pixelHeight", "byteLength", "sourceKind", "warnings", "renderQualityStatus", "nextActions" ], "type": "object" } }, "required": [ "figure", "review", "receipt" ], "type": "object" }, { "additionalProperties": false, "properties": { "error": { "additionalProperties": false, "properties": { "agentErrorDetails": { "oneOf": [ { "additionalProperties": false, "properties": { "results": { "items": { "additionalProperties": false, "properties": { "field": { "enum": [ "exercise_text", "description", "hint", "answer", "scaffold", "detailed_solution", "teaching_notes" ], "type": "string" }, "language": { "minLength": 1, "type": "string" }, "patchPath": { "minLength": 1, "type": "string" }, "path": { "minLength": 1, "type": "string" }, "validation": { "additionalProperties": false, "properties": { "issues": { "items": { "additionalProperties": false, "properties": { "code": { "enum": [ "unclosed_delimiter", "blacklisted_command", "disallowed_control_character_in_math", "disallowed_control_character_in_text", "double_escaped_latex_command", "katex_parse_error", "raw_latex_command_outside_math" ], "type": "string" }, "end": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "hint": { "type": "string" }, "message": { "type": "string" }, "severity": { "const": "error", "type": "string" }, "snippet": { "type": "string" }, "start": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "code", "message", "severity", "snippet", "start", "end" ], "type": "object" }, "type": "array" }, "path": { "type": "string" }, "valid": { "type": "boolean" }, "value": { "type": "string" } }, "required": [ "path", "value", "valid", "issues" ], "type": "object" } }, "required": [ "language", "field", "path", "patchPath", "validation" ], "type": "object" }, "type": "array" }, "summary": { "additionalProperties": false, "properties": { "affectedPathCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "checkedSnippetCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "invalidSnippetCount": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "checkedSnippetCount", "invalidSnippetCount", "affectedPathCount" ], "type": "object" }, "type": { "const": "invalid_latex", "type": "string" } }, "required": [ "type", "summary", "results" ], "type": "object" }, { "additionalProperties": false, "properties": { "metadata": { "additionalProperties": { "type": [ "string", "number", "boolean", "null" ] }, "propertyNames": { "type": "string" }, "type": "object" }, "reason": { "enum": [ "exercise_not_found", "exercise_version_not_found", "invalid_exercise_version_cursor", "invalid_exercise_source_cursor", "source_document_not_associated", "source_document_not_ready", "source_document_object_missing", "source_document_size_mismatch", "exercise_version_snapshot_invalid", "source_document_association_inconsistent", "source_document_too_large_for_mcp", "source_document_too_large", "source_document_read_capacity_exhausted", "source_document_storage_unavailable" ], "type": "string" }, "recovery": { "enum": [ "check_organization_and_id", "relist_exercise_versions", "restart_pagination", "relist_source_documents", "inspect_source_coverage", "escalate_integrity_incident", "use_cli_source_download", "request_out_of_band_inspection", "retry_source_read" ], "type": "string" }, "retryable": { "type": "boolean" }, "type": { "const": "exercise_provenance", "type": "string" } }, "required": [ "type", "reason", "recovery", "retryable", "metadata" ], "type": "object" }, { "additionalProperties": false, "properties": { "editIndex": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "reason": { "enum": [ "missing_member", "missing_anchor", "self_anchor", "duplicate_addition", "source_unavailable", "revision_changed", "publication_confirmation_required", "result_too_large", "temporarily_unavailable" ], "type": "string" }, "recovery": { "enum": [ "correct_edits", "reload_sheet", "confirm_publication", "inspect_state" ], "type": "string" }, "type": { "const": "sheet_content_edit", "type": "string" } }, "required": [ "type", "reason", "recovery" ], "type": "object" }, { "additionalProperties": false, "properties": { "exerciseId": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "figureType": { "enum": [ "text", "solution" ], "type": "string" }, "requiredExerciseFigureIds": { "items": { "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", "type": "string" }, "type": "array" }, "type": { "const": "figure_group_membership", "type": "string" } }, "required": [ "type", "exerciseId", "figureType", "requiredExerciseFigureIds" ], "type": "object" } ] }, "code": { "enum": [ "validation_error", "unauthorized", "forbidden", "not_found", "timeout", "import_source_error", "precondition_failed", "confirmation_required", "resource_in_use", "feature_disabled", "figure_quality_failed", "figure_render_failed", "image_transform_failed", "invalid_label", "invalid_latex", "storage_upload_failed", "unsupported_image", "validation_failed", "resource_exhausted", "data_loss", "unavailable", "organization_selection_required", "organization_access_denied", "internal_error" ], "type": "string" }, "message": { "minLength": 1, "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "isError": { "const": true, "type": "boolean" } }, "required": [ "isError", "error" ], "type": "object" } ]}