mirror of
https://github.com/hanzoai/video.git
synced 2026-10-30 18:18:27 +00:00
Separates creative grammar (renderer_family) from technical engine (render_runtime) so HyperFrames can stand alongside Remotion as a first-class runtime instead of masquerading as a Remotion sub-case. Locks runtime choice at proposal stage and enforces it end-to-end: the schemas require it, video_compose routes by it, the reviewer fails closed on silent swaps, and a parametrized contract test walks every pipeline manifest to ensure each planning-stage skill explains the conversation to the user. Adds hyperframes_compose (scaffold/lint/ validate/render/doctor/add_block), a playbook -> CSS style bridge, and vendored HyperFrames Layer 3 skills from commit d291358, pinned via PROVENANCE.md for future re-sync. Final_review now records render_runtime_used and runtime_swap_detected so compose lies are catchable after the fact.
103 lines
3.7 KiB
JSON
103 lines
3.7 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "openmontage/artifacts/decision_log",
|
|
"title": "Decision Log",
|
|
"description": "Audit trail of every meaningful choice made during production. Prevents hidden system behavior, enables reviewer inspection, and guards against context drift.",
|
|
"type": "object",
|
|
"required": ["version", "project_id", "decisions"],
|
|
"properties": {
|
|
"version": { "type": "string", "const": "1.0" },
|
|
"project_id": { "type": "string" },
|
|
"decisions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["decision_id", "stage", "category", "subject", "options_considered", "selected", "reason"],
|
|
"properties": {
|
|
"decision_id": {
|
|
"type": "string",
|
|
"description": "Unique ID, e.g., d-001, d-002"
|
|
},
|
|
"stage": {
|
|
"type": "string",
|
|
"description": "Pipeline stage where this decision was made"
|
|
},
|
|
"category": {
|
|
"type": "string",
|
|
"enum": [
|
|
"pipeline_selection",
|
|
"provider_selection",
|
|
"renderer_family_selection",
|
|
"render_runtime_selection",
|
|
"playbook_selection",
|
|
"fallback_decision",
|
|
"budget_tradeoff",
|
|
"downgrade_approval",
|
|
"music_source",
|
|
"motion_commitment",
|
|
"concept_selection",
|
|
"voice_selection",
|
|
"capability_extension",
|
|
"playbook_override",
|
|
"visual_accuracy_check"
|
|
],
|
|
"description": "What class of decision this is"
|
|
},
|
|
"subject": {
|
|
"type": "string",
|
|
"description": "What is being decided, e.g., 'TTS provider for narration'"
|
|
},
|
|
"options_considered": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["option_id", "label", "score", "reason"],
|
|
"properties": {
|
|
"option_id": { "type": "string" },
|
|
"label": { "type": "string", "description": "Human-readable name" },
|
|
"score": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"description": "Normalized score 0-1 (1 is best)"
|
|
},
|
|
"reason": { "type": "string", "description": "Why this option scored this way" },
|
|
"rejected_because": { "type": "string", "description": "If rejected, why" }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"minItems": 1,
|
|
"description": "All options evaluated (including rejected ones)"
|
|
},
|
|
"selected": {
|
|
"type": "string",
|
|
"description": "option_id of the selected option"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "Why this option was selected over alternatives"
|
|
},
|
|
"user_visible": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Whether this decision was surfaced to the user"
|
|
},
|
|
"user_approved": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Whether the user explicitly approved this decision"
|
|
},
|
|
"confidence": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"description": "Agent's confidence in this decision (0 = uncertain, 1 = certain)"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|