{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://wanxiang.ai/contracts/play-loop/match3-action-group.schema.json", "title": "Match3ActionGroupV1", "description": "Match3ActionGroup/1。同一 pair 计划展开为两个原生 tap;完整组只在 runner 审计层封存。", "type": "object", "required": [ "schemaVersion", "actionGroupId", "selectionAttemptRef", "selectionAttemptHash", "pairResolutionRef", "pairResolutionHash", "interactionProfileId", "interactionRegistryVersion", "interactionBindingHash", "candidateSetHash", "candidateId", "initialSourceFrameHash", "initialTargetSetHash", "latticeId", "pair", "firstEndpoint", "secondEndpoint", "firstActionId", "secondActionId", "firstGroupedActionRef", "firstGroupedActionHash", "secondGroupedActionRef", "secondGroupedActionHash", "boardIdentityCheckRef", "boardIdentityCheckHash", "state", "abortReason", "actionGroupHash" ], "properties": { "schemaVersion": { "const": "Match3ActionGroup/1" }, "actionGroupId": { "type": "string", "pattern": "^action-group-[1-9][0-9]*$" }, "selectionAttemptRef": { "type": "string", "minLength": 1 }, "selectionAttemptHash": { "$ref": "#/$defs/sha256" }, "pairResolutionRef": { "type": "string", "minLength": 1 }, "pairResolutionHash": { "$ref": "#/$defs/sha256" }, "interactionProfileId": { "const": "match3.orthogonal-swap-v1" }, "interactionRegistryVersion": { "const": "2026-07-15.v2" }, "interactionBindingHash": { "$ref": "#/$defs/sha256" }, "candidateSetHash": { "$ref": "#/$defs/sha256" }, "candidateId": { "type": "string", "pattern": "^ms[0-9]{2,3}$" }, "initialSourceFrameHash": { "$ref": "#/$defs/sha256" }, "initialTargetSetHash": { "$ref": "#/$defs/sha256" }, "latticeId": { "type": "string", "pattern": "^l[0-9]{2}$" }, "pair": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/cell" } }, "firstEndpoint": { "$ref": "#/$defs/endpoint" }, "secondEndpoint": { "$ref": "#/$defs/endpoint" }, "firstActionId": { "anyOf": [{ "$ref": "#/$defs/actionId" }, { "type": "null" }] }, "secondActionId": { "anyOf": [{ "$ref": "#/$defs/actionId" }, { "type": "null" }] }, "firstGroupedActionRef": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] }, "firstGroupedActionHash": { "anyOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }, "secondGroupedActionRef": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] }, "secondGroupedActionHash": { "anyOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }, "boardIdentityCheckRef": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] }, "boardIdentityCheckHash": { "anyOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }, "state": { "enum": ["awaiting_first", "awaiting_second", "completed", "aborted"] }, "abortReason": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] }, "actionGroupHash": { "$ref": "#/$defs/sha256" } }, "additionalProperties": false, "$defs": { "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, "actionId": { "type": "string", "pattern": "^action-[1-9][0-9]*$" }, "cell": { "type": "object", "required": ["row", "column"], "properties": { "row": { "type": "integer", "minimum": 1, "maximum": 12 }, "column": { "type": "integer", "minimum": 1, "maximum": 12 } }, "additionalProperties": false }, "endpoint": { "type": "object", "required": ["id", "cell", "subAnchor"], "properties": { "id": { "type": "string", "pattern": "^l[0-9]{2}$" }, "cell": { "$ref": "#/$defs/cell" }, "subAnchor": { "const": "center" } }, "additionalProperties": false } } }