{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://shd.build/schemas/game-data-capture/isac-handoff-v1.json", "title": "Authenticated ISAC draft handoff v1", "type": "object", "additionalProperties": false, "required": [ "schema_version", "handoff_id", "created_at", "source_archive", "trust_boundary", "source_artifacts", "evidence_values", "records" ], "properties": { "schema_version": { "const": 1 }, "handoff_id": { "$ref": "#/$defs/id" }, "created_at": { "$ref": "#/$defs/timestamp" }, "source_archive": { "type": "object", "additionalProperties": false, "required": ["archive_id", "manifest_sha256", "schema_version"], "properties": { "archive_id": { "$ref": "#/$defs/id" }, "manifest_sha256": { "$ref": "#/$defs/sha256" }, "schema_version": { "const": 1 } } }, "trust_boundary": { "type": "object", "additionalProperties": false, "required": [ "intended_destination", "mutation_authority", "requires_authenticated_action", "preserves_moderation", "creates_audit_events" ], "properties": { "intended_destination": { "const": "authenticated_isac_intake" }, "mutation_authority": { "const": "none" }, "requires_authenticated_action": { "const": true }, "preserves_moderation": { "const": true }, "creates_audit_events": { "const": false } } }, "source_artifacts": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/$defs/sourceArtifact" } }, "evidence_values": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/$defs/evidenceValue" } }, "records": { "type": "array", "maxItems": 20000, "items": { "$ref": "#/$defs/handoffRecord" } } }, "$defs": { "id": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$" }, "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 40 }, "recordType": { "enum": [ "weapon", "weapon_talent", "weapon_augmentation_profile", "gear", "brand_set", "gear_talent", "gear_augmentation_profile", "skill_chip_set", "skill_chip_set_bonus", "skill_chip_roll_pool", "skill_chip_talent", "os_protocol", "os_protocol_secondary_profile", "os_protocol_talent", "specialization", "specialization_focus", "specialization_ability", "specialization_tree_node", "specialization_tree_rank", "weapon_mod", "gear_mod" ] }, "missingReason": { "enum": [ "not_visible", "occluded", "unreadable", "not_present_on_screen", "unsupported", "ambiguous", "extraction_failed", "not_applicable", "redacted" ] }, "jsonValue": { "oneOf": [ { "type": "null" }, { "type": "boolean" }, { "type": "number" }, { "type": "string", "maxLength": 8192 }, { "type": "array", "maxItems": 500, "items": { "$ref": "#/$defs/jsonValue" } }, { "type": "object", "maxProperties": 500, "additionalProperties": { "$ref": "#/$defs/jsonValue" } } ] }, "sourceEngine": { "type": "object", "additionalProperties": false, "required": ["kind", "engine_id", "engine_version"], "properties": { "kind": { "enum": [ "local_ocr", "openai_vision", "classifier", "manual", "video_decoder" ] }, "engine_id": { "type": "string", "minLength": 1, "maxLength": 100 }, "engine_version": { "type": "string", "minLength": 1, "maxLength": 100 } } }, "region": { "oneOf": [ { "type": "object", "additionalProperties": false, "required": ["coordinate_space", "x", "y", "width", "height"], "properties": { "coordinate_space": { "const": "normalized" }, "x": { "type": "number", "minimum": 0, "maximum": 1 }, "y": { "type": "number", "minimum": 0, "maximum": 1 }, "width": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 }, "height": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 } } }, { "type": "object", "additionalProperties": false, "required": ["coordinate_space", "x", "y", "width", "height"], "properties": { "coordinate_space": { "const": "pixels" }, "x": { "type": "integer", "minimum": 0, "maximum": 100000 }, "y": { "type": "integer", "minimum": 0, "maximum": 100000 }, "width": { "type": "integer", "minimum": 1, "maximum": 100000 }, "height": { "type": "integer", "minimum": 1, "maximum": 100000 } } } ] }, "valueState": { "type": "object", "additionalProperties": false, "required": ["raw_text", "normalized_value", "missing_reason"], "properties": { "raw_text": { "type": ["string", "null"], "maxLength": 8192 }, "normalized_value": { "$ref": "#/$defs/jsonValue" }, "missing_reason": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/missingReason" }] } }, "oneOf": [ { "properties": { "normalized_value": { "type": "null" }, "missing_reason": { "$ref": "#/$defs/missingReason" } } }, { "properties": { "normalized_value": { "not": { "type": "null" } }, "missing_reason": { "type": "null" } } } ] }, "correction": { "type": "object", "additionalProperties": false, "required": [ "correction_id", "corrected_at", "actor", "reason", "before", "after" ], "properties": { "correction_id": { "$ref": "#/$defs/id" }, "corrected_at": { "$ref": "#/$defs/timestamp" }, "actor": { "enum": ["local_user", "system_reprocess"] }, "reason": { "type": "string", "minLength": 1, "maxLength": 1000 }, "before": { "$ref": "#/$defs/valueState" }, "after": { "$ref": "#/$defs/valueState" } } }, "evidenceValue": { "type": "object", "additionalProperties": false, "required": [ "evidence_id", "field_path", "raw_text", "normalized_value", "missing_reason", "confidence", "source_engine", "image_artifact_id", "image_sha256", "region", "correction_history" ], "properties": { "evidence_id": { "$ref": "#/$defs/id" }, "field_path": { "type": "string", "pattern": "^[A-Za-z0-9_.-]{1,256}$" }, "raw_text": { "type": ["string", "null"], "maxLength": 8192 }, "normalized_value": { "$ref": "#/$defs/jsonValue" }, "missing_reason": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/missingReason" }] }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "source_engine": { "$ref": "#/$defs/sourceEngine" }, "image_artifact_id": { "$ref": "#/$defs/id" }, "image_sha256": { "$ref": "#/$defs/sha256" }, "region": { "$ref": "#/$defs/region" }, "correction_history": { "type": "array", "maxItems": 100, "items": { "$ref": "#/$defs/correction" } } }, "oneOf": [ { "properties": { "normalized_value": { "type": "null" }, "missing_reason": { "$ref": "#/$defs/missingReason" } } }, { "properties": { "normalized_value": { "not": { "type": "null" } }, "missing_reason": { "type": "null" } } } ] }, "fieldClaim": { "type": "object", "additionalProperties": false, "required": [ "path", "value", "missing_reason", "evidence_refs", "uncertainty_note" ], "properties": { "path": { "type": "string", "pattern": "^[A-Za-z0-9_.-]{1,256}$" }, "value": { "$ref": "#/$defs/jsonValue" }, "missing_reason": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/missingReason" }] }, "evidence_refs": { "type": "array", "minItems": 1, "maxItems": 100, "uniqueItems": true, "items": { "$ref": "#/$defs/id" } }, "uncertainty_note": { "type": ["string", "null"], "maxLength": 2000 } }, "oneOf": [ { "properties": { "value": { "type": "null" }, "missing_reason": { "$ref": "#/$defs/missingReason" } } }, { "properties": { "value": { "not": { "type": "null" } }, "missing_reason": { "type": "null" } } } ] }, "sourceArtifact": { "type": "object", "additionalProperties": false, "required": ["artifact_id", "sha256", "media_type", "byte_size"], "properties": { "artifact_id": { "$ref": "#/$defs/id" }, "sha256": { "$ref": "#/$defs/sha256" }, "media_type": { "enum": ["image/png", "image/webp", "image/avif"] }, "byte_size": { "type": "integer", "minimum": 1, "maximum": 67108864 } } }, "evidenceSection": { "type": "object", "additionalProperties": false, "required": ["status", "evidence_refs", "note"], "properties": { "status": { "enum": ["evidenced", "unresolved", "unsupported", "not_applicable"] }, "evidence_refs": { "type": "array", "maxItems": 1000, "uniqueItems": true, "items": { "$ref": "#/$defs/id" } }, "note": { "type": ["string", "null"], "maxLength": 4000 } } }, "handoffRecord": { "type": "object", "additionalProperties": false, "required": [ "handoff_record_id", "record_type", "intent", "target_id", "review_state", "source_candidate_ids", "observed_instance_ids", "fields", "relationships", "mechanics" ], "properties": { "handoff_record_id": { "$ref": "#/$defs/id" }, "record_type": { "$ref": "#/$defs/recordType" }, "intent": { "enum": ["create_draft", "update_draft", "abstain"] }, "target_id": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/id" }] }, "review_state": { "enum": ["approved", "abstained"] }, "source_candidate_ids": { "type": "array", "minItems": 1, "maxItems": 100, "uniqueItems": true, "items": { "$ref": "#/$defs/id" } }, "observed_instance_ids": { "type": "array", "minItems": 1, "maxItems": 100, "uniqueItems": true, "items": { "$ref": "#/$defs/id" } }, "fields": { "type": "array", "maxItems": 1000, "items": { "$ref": "#/$defs/fieldClaim" } }, "relationships": { "$ref": "#/$defs/evidenceSection" }, "mechanics": { "$ref": "#/$defs/evidenceSection" } }, "oneOf": [ { "properties": { "intent": { "const": "create_draft" }, "target_id": { "const": null }, "review_state": { "const": "approved" } } }, { "properties": { "intent": { "const": "update_draft" }, "target_id": { "$ref": "#/$defs/id" }, "review_state": { "const": "approved" } } }, { "properties": { "intent": { "const": "abstain" }, "target_id": { "const": null }, "review_state": { "const": "abstained" }, "fields": { "maxItems": 0 } } } ] } } }