{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://wanxiang.ai/contracts/play-loop/actor-view-v3.schema.json", "title": "ActorViewV3Frozen", "description": "冻结当前生产 ActorView/3 可见投影,供版本兼容矩阵验证;不得加入 interactionCandidates。", "type": "object", "required": [ "schemaVersion", "projectionVersion", "brief", "currentFrameRef", "currentFrameHash", "viewport", "legalSelections", "visualTargetCatalog", "history", "protocolErrors", "remainingBudget", "virtualTimeMs", "objectiveProgress" ], "properties": { "schemaVersion": { "const": "playtest/3" }, "projectionVersion": { "const": "ActorView/3" }, "brief": { "type": "string", "minLength": 1 }, "currentFrameRef": { "type": "string", "pattern": "^frames/(frame-initial|action-[1-9][0-9]*-(pre|post))\\.png$" }, "currentFrameHash": { "$ref": "actor-view-v4.schema.json#/$defs/sha256" }, "viewport": { "type": "object", "required": ["width", "height", "dpr"], "properties": { "width": { "const": 390 }, "height": { "const": 844 }, "dpr": { "const": 1 } }, "additionalProperties": false }, "legalSelections": { "$ref": "actor-view-v4.schema.json#/$defs/legalSelections" }, "visualTargetCatalog": { "$ref": "actor-view-v4.schema.json#/$defs/visualTargetCatalog" }, "history": { "type": "array", "maxItems": 64, "items": { "$ref": "#/$defs/historyEntry" } }, "protocolErrors": { "type": "array", "maxItems": 16, "items": { "$ref": "actor-view-v4.schema.json#/$defs/protocolError" } }, "remainingBudget": { "type": "integer", "minimum": 0 }, "virtualTimeMs": { "type": "integer", "minimum": 0 }, "objectiveProgress": { "anyOf": [{ "$ref": "actor-view-v4.schema.json#/$defs/objectiveProgress" }, { "type": "null" }] } }, "additionalProperties": false, "$defs": { "historyEntry": { "type": "object", "required": [ "actionId", "selection", "normalized", "valid", "retryCount", "preFrameRef", "preFrameHash", "preEventSeq", "virtualTimeBudgetMs", "postFrameRef", "postFrameHash", "postEventSeq", "causalGameResponse", "gameEvents", "protocolErrors" ], "properties": { "actionId": { "type": "string", "pattern": "^action-[1-9][0-9]*$" }, "selection": { "$ref": "actor-selection.schema.json" }, "normalized": { "$ref": "playtest-evidence.schema.json#/$defs/action" }, "valid": { "type": "boolean" }, "retryCount": { "type": "integer", "minimum": 0, "maximum": 2 }, "preFrameRef": { "$ref": "playtest-evidence.schema.json#/$defs/frameRef" }, "preFrameHash": { "$ref": "actor-view-v4.schema.json#/$defs/sha256" }, "preEventSeq": { "type": "integer", "minimum": 0 }, "virtualTimeBudgetMs": { "type": "integer", "minimum": 0 }, "postFrameRef": { "$ref": "playtest-evidence.schema.json#/$defs/frameRef" }, "postFrameHash": { "$ref": "actor-view-v4.schema.json#/$defs/sha256" }, "postEventSeq": { "type": "integer", "minimum": 0 }, "causalGameResponse": { "type": "boolean" }, "gameEvents": { "type": "array", "items": { "$ref": "game-event.schema.json" } }, "protocolErrors": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false } } }