{ "schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "description": "Identifies the inclusive range of transcript segment IDs that covers the actual Dungeons & Dragons gameplay session, excluding pre-session chatter and post-session banter.", "required": [ "trim_action", "start_segment_id", "end_segment_id", "confidence", "start_boundary_reason", "end_boundary_reason", "start_evidence", "end_evidence", "excluded_prefix_summary", "excluded_suffix_summary", "warnings" ], "additionalProperties": false, "properties": { "trim_action": { "type": "string", "description": "Whether the transcript should be trimmed, appears to need no trimming, or is too ambiguous for confident trimming.", "enum": [ "trim", "no_trim_needed", "uncertain" ] }, "start_segment_id": { "type": "integer", "description": "The inclusive segment ID where actual gameplay begins. This should be the first meaningful gameplay segment, such as the DM's opening recap, scene-setting, or the first in-world decision.", "minimum": 0 }, "end_segment_id": { "type": "integer", "description": "The inclusive segment ID where actual gameplay ends. This should be the final meaningful gameplay segment, such as final in-world narration, an adjudicated action, a cliffhanger, or a next-session handoff.", "minimum": 0 }, "confidence": { "type": "string", "description": "Confidence in the selected boundaries.", "enum": [ "high", "medium", "low" ] }, "start_boundary_reason": { "type": "string", "description": "Brief explanation of why the selected start segment is the first gameplay segment." }, "end_boundary_reason": { "type": "string", "description": "Brief explanation of why the selected end segment is the last gameplay segment." }, "start_evidence": { "type": "object", "description": "Short evidence supporting the selected start boundary.", "properties": { "segment_id": { "type": "integer", "description": "The segment ID used as evidence for the start boundary.", "minimum": 0 }, "speaker": { "type": "string", "description": "The speaker of the evidence segment." }, "text_excerpt": { "type": "string", "description": "A short excerpt from the evidence segment showing why gameplay begins here." } }, "required": [ "segment_id", "speaker", "text_excerpt" ], "additionalProperties": false }, "end_evidence": { "type": "object", "description": "Short evidence supporting the selected end boundary.", "properties": { "segment_id": { "type": "integer", "description": "The segment ID used as evidence for the end boundary.", "minimum": 0 }, "speaker": { "type": "string", "description": "The speaker of the evidence segment." }, "text_excerpt": { "type": "string", "description": "A short excerpt from the evidence segment showing why gameplay ends here." } }, "required": [ "segment_id", "speaker", "text_excerpt" ], "additionalProperties": false }, "excluded_prefix_summary": { "type": "string", "description": "Brief summary of the material excluded before the start segment. Use an empty string if no prefix was excluded." }, "excluded_suffix_summary": { "type": "string", "description": "Brief summary of the material excluded after the end segment. Use an empty string if no suffix was excluded." }, "warnings": { "type": "array", "description": "Any caveats, ambiguities, or reasons the boundary selection may need human review.", "items": { "type": "string" } } } }