{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://wanxiang.ai/contracts/play-loop/grouped-action-ref.schema.json", "title": "GroupedActionRefV1", "description": "GroupedActionRef/1。runner 审计层把原生 tap 标成 first/second/reset;不进入 ProofAction 或 JudgePackage。", "type": "object", "required": ["schemaVersion", "actionGroupId", "role", "actionId", "endpoint", "actionRef", "actionHash"], "properties": { "schemaVersion": { "const": "GroupedActionRef/1" }, "actionGroupId": { "type": "string", "pattern": "^action-group-[1-9][0-9]*$" }, "role": { "enum": ["first", "second", "reset"] }, "actionId": { "type": "string", "pattern": "^action-[1-9][0-9]*$" }, "endpoint": { "anyOf": [ { "$ref": "actor-selection-v2.schema.json#/$defs/swapEndpoint" }, { "type": "null" } ] }, "actionRef": { "type": "string", "minLength": 1 }, "actionHash": { "$ref": "#/$defs/sha256" } }, "additionalProperties": false, "allOf": [ { "if": { "properties": { "role": { "const": "reset" } }, "required": ["role"] }, "then": { "properties": { "endpoint": { "type": "null" } } }, "else": { "properties": { "endpoint": { "type": "object" } } } } ], "$defs": { "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" } } }