{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://wanxiang.ai/contracts/play-loop/judge-package.schema.json", "title": "JudgePackageV1", "description": "playtest/3 Judge 唯一可读包;只含 proof 候选和事实投影,不含 interaction、Resolution 或 solver 身份。", "type": "object", "required": [ "schemaVersion", "projectionVersion", "packageType", "gameId", "genre", "templateRoute", "proofProfileId", "proofRegistryVersion", "taskBindingHash", "acceptanceRequestHash", "evidenceMode", "brief", "artifactHash", "briefHash", "registry", "proofObligations", "actions", "frames", "gameEvents", "textReferenceScope", "environment", "floor", "proofRef", "proofHash" ], "properties": { "schemaVersion": { "const": "playtest/3" }, "projectionVersion": { "const": "JudgePackage/1" }, "packageType": { "const": "JudgePackage" }, "gameId": { "type": "string", "minLength": 1 }, "genre": { "enum": ["narrative", "trpg", "heritage", "puzzle", "sim-business"] }, "templateRoute": { "type": "string", "pattern": "^_template-[a-z0-9-]+$" }, "proofProfileId": { "type": "string", "pattern": "^[a-z][a-z0-9-]*\\.[a-z][a-z0-9-]*$" }, "proofRegistryVersion": { "type": "string", "minLength": 1 }, "taskBindingHash": { "$ref": "#/$defs/sha256" }, "acceptanceRequestHash": { "$ref": "#/$defs/sha256" }, "evidenceMode": { "const": "native" }, "brief": { "type": "string" }, "artifactHash": { "$ref": "#/$defs/sha256" }, "briefHash": { "$ref": "#/$defs/sha256" }, "registry": { "type": "object", "required": [ "schemaVersion", "registryVersion", "proofProfileId", "genre", "templateRoute", "briefRuleMatches" ], "properties": { "schemaVersion": { "const": "proof-obligations/2" }, "registryVersion": { "type": "string", "minLength": 1 }, "proofProfileId": { "type": "string", "minLength": 1 }, "genre": { "type": "string", "minLength": 1 }, "templateRoute": { "type": "string", "minLength": 1 }, "briefRuleMatches": { "type": "array", "items": { "type": "string" }, "uniqueItems": true } }, "additionalProperties": false }, "proofObligations": { "type": "array", "items": { "$ref": "#/$defs/candidate" } }, "actions": { "type": "array", "items": { "$ref": "#/$defs/judgeAction" } }, "frames": { "type": "array", "items": { "$ref": "single-roll-fact-v3.schema.json#/$defs/evidenceFrame" } }, "gameEvents": { "type": "array", "items": { "$ref": "game-event.schema.json" } }, "textReferenceScope": { "type": "object", "required": ["actionRefs", "frameRefs", "eventRefs"], "properties": { "actionRefs": { "type": "array", "items": { "type": "string", "pattern": "^action-[1-9][0-9]*$" }, "uniqueItems": true }, "frameRefs": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true }, "eventRefs": { "type": "array", "items": { "type": "string", "pattern": "^event:[1-9][0-9]*$" }, "uniqueItems": true } }, "additionalProperties": false }, "environment": { "$ref": "playtest-evidence-v3.schema.json#/$defs/environmentV3" }, "floor": { "type": "null" }, "proofRef": { "type": "string", "minLength": 1 }, "proofHash": { "$ref": "#/$defs/sha256" } }, "additionalProperties": false, "$defs": { "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, "candidate": { "type": "object", "required": [ "id", "title", "description", "required", "evidence", "candidateOnly", "candidateState", "candidateProblems", "sequenceRefs", "actionRefs", "postFrameRefs", "eventRefs", "evidenceRefs", "seenStepTitles", "missingStepTitles" ], "properties": { "id": { "type": "string", "minLength": 1 }, "title": { "type": "string" }, "description": { "type": "string" }, "required": { "type": "boolean" }, "evidence": { "$ref": "proof-obligation-registry.schema.json#/$defs/evidence" }, "candidateOnly": { "const": true }, "candidateState": { "enum": ["complete", "contradicted", "missing"] }, "candidateProblems": { "type": "array", "items": { "type": "string" } }, "sequenceRefs": { "type": "array", "items": { "$ref": "playtest-evidence.schema.json#/$defs/sequenceRef" } }, "actionRefs": { "type": "array", "items": { "type": "string" } }, "postFrameRefs": { "type": "array", "items": { "type": "string" } }, "eventRefs": { "type": "array", "items": { "type": "integer" } }, "evidenceRefs": { "type": "array", "items": { "type": "string" } }, "seenStepTitles": { "type": "array", "items": { "type": "string" } }, "missingStepTitles": { "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "judgeAction": { "type": "object", "required": [ "actionId", "normalized", "valid", "preFrameRef", "preFrameHash", "preEventSeq", "virtualTimeBudgetMs", "postFrameRef", "postFrameHash", "postEventSeq", "gameEvents" ], "properties": { "actionId": { "type": "string", "pattern": "^action-[1-9][0-9]*$" }, "normalized": { "$ref": "playtest-evidence.schema.json#/$defs/action" }, "valid": { "type": "boolean" }, "preFrameRef": { "anyOf": [ { "$ref": "playtest-evidence.schema.json#/$defs/frameRef" }, { "type": "null" } ] }, "preFrameHash": { "$ref": "#/$defs/sha256" }, "preEventSeq": { "type": "integer", "minimum": 0 }, "virtualTimeBudgetMs": { "type": "integer", "minimum": 0 }, "postFrameRef": { "anyOf": [ { "$ref": "playtest-evidence.schema.json#/$defs/frameRef" }, { "type": "null" } ] }, "postFrameHash": { "$ref": "#/$defs/sha256" }, "postEventSeq": { "type": "integer", "minimum": 0 }, "gameEvents": { "type": "array", "items": { "$ref": "game-event.schema.json" } } }, "additionalProperties": false } } }