games-development-ai/contracts/play-loop/actor-view-v3.schema.json
lili cbfd4d871b
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
feat(acceptance): 闭合 playtest v3 与 A+ 可信消费链
固化 Match-3 生产者、视觉、音频与双 Judge 证据闭包。

将《山海行纪》r1.1 绑定新的不可变 release,并以生产预检现场核验 bundle、Registry/2 和 25 项 Writer 快照。

同步地图1平衡锁值、跨游戏回归修复、验收契约与 SoT 证据。
2026-07-28 20:16:13 -07:00

66 lines
3.3 KiB
JSON

{
"$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
}
}
}