hyperframes: add HTML/CSS/GSAP as a parallel composition runtime
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.
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
"pipeline_selection",
|
||||
"provider_selection",
|
||||
"renderer_family_selection",
|
||||
"render_runtime_selection",
|
||||
"playbook_selection",
|
||||
"fallback_decision",
|
||||
"budget_tradeoff",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"title": "Edit Decisions",
|
||||
"description": "Editorial decisions produced by the Edit Agent.",
|
||||
"type": "object",
|
||||
"required": ["version", "cuts"],
|
||||
"required": ["version", "cuts", "render_runtime"],
|
||||
"properties": {
|
||||
"version": { "type": "string", "const": "1.0" },
|
||||
"cuts": {
|
||||
@@ -192,7 +192,12 @@
|
||||
"renderer_family": {
|
||||
"type": "string",
|
||||
"enum": ["explainer-data", "explainer-teacher", "cinematic-trailer", "documentary-montage", "product-reveal", "screen-demo", "presenter", "animation-first"],
|
||||
"description": "Locked at proposal stage — determines which Remotion composition renders this video"
|
||||
"description": "Locked at proposal stage — creative grammar for this deliverable. Preserved from proposal_packet; edit MUST NOT change without a logged decision."
|
||||
},
|
||||
"render_runtime": {
|
||||
"type": "string",
|
||||
"enum": ["remotion", "hyperframes", "ffmpeg"],
|
||||
"description": "Locked at proposal stage — technical runtime that realizes renderer_family. Edit MUST carry this forward unchanged unless a logged render_runtime_selection decision overrides it."
|
||||
},
|
||||
"slideshow_risk_score": {
|
||||
"type": "object",
|
||||
|
||||
@@ -82,7 +82,20 @@
|
||||
"description": "Delivery promise and renderer governance checks",
|
||||
"properties": {
|
||||
"delivery_promise_honored": { "type": "boolean" },
|
||||
"renderer_family_used": { "type": "string" },
|
||||
"renderer_family_used": { "type": "string", "description": "Creative grammar that actually ran" },
|
||||
"render_runtime_used": {
|
||||
"type": "string",
|
||||
"enum": ["remotion", "hyperframes", "ffmpeg"],
|
||||
"description": "Technical runtime that actually executed the render. Must match the runtime locked at proposal unless a logged decision overrode it."
|
||||
},
|
||||
"runtime_swap_detected": {
|
||||
"type": "boolean",
|
||||
"description": "True if the runtime that ran differs from the runtime locked in proposal_packet. An unapproved swap is a contract violation."
|
||||
},
|
||||
"runtime_swap_check": {
|
||||
"type": "string",
|
||||
"description": "Human-readable status of the runtime-swap check: 'ok — …', 'detected — …', or 'skipped — …'. When the check was skipped, the reviewer skill is responsible for cross-artifact comparison."
|
||||
},
|
||||
"motion_ratio_actual": { "type": "number" },
|
||||
"silent_downgrade_detected": { "type": "boolean" },
|
||||
"issues": {
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
},
|
||||
"production_plan": {
|
||||
"type": "object",
|
||||
"required": ["pipeline", "stages"],
|
||||
"required": ["pipeline", "stages", "render_runtime"],
|
||||
"properties": {
|
||||
"pipeline": { "type": "string", "description": "Pipeline manifest name, e.g., 'animated-explainer'" },
|
||||
"playbook": { "type": "string", "description": "Selected style playbook" },
|
||||
@@ -148,7 +148,12 @@
|
||||
"renderer_family": {
|
||||
"type": "string",
|
||||
"enum": ["explainer-data", "explainer-teacher", "cinematic-trailer", "documentary-montage", "product-reveal", "screen-demo", "presenter", "animation-first"],
|
||||
"description": "Locked at proposal stage — compose cannot change without logging a decision"
|
||||
"description": "Locked at proposal stage — compose cannot change without logging a decision. This is the creative grammar, NOT the technical engine."
|
||||
},
|
||||
"render_runtime": {
|
||||
"type": "string",
|
||||
"enum": ["remotion", "hyperframes", "ffmpeg"],
|
||||
"description": "Locked at proposal stage — the technical runtime that realizes renderer_family. remotion=React scene components, hyperframes=HTML/CSS/GSAP, ffmpeg=simple concat/trim. Must be explicit and auditable; silent swaps are forbidden."
|
||||
},
|
||||
"music_source": {
|
||||
"type": "object",
|
||||
|
||||
Reference in New Issue
Block a user