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:
@@ -29,6 +29,7 @@ class BenchScenario:
|
||||
scenes: list[dict[str, Any]]
|
||||
edit_decisions: dict[str, Any] | None = None
|
||||
renderer_family: str | None = None
|
||||
render_runtime: str | None = None # remotion | hyperframes | ffmpeg (optional)
|
||||
delivery_promise: dict[str, Any] | None = None
|
||||
cuts: list[dict[str, Any]] = field(default_factory=list)
|
||||
|
||||
@@ -365,7 +366,9 @@ def run_bench(scenarios: list[BenchScenario], verbose: bool = False) -> list[Ben
|
||||
if sc.expected_slideshow_verdict is not None:
|
||||
try:
|
||||
from lib.slideshow_risk import score_slideshow_risk
|
||||
risk = score_slideshow_risk(sc.scenes, sc.edit_decisions, sc.renderer_family)
|
||||
risk = score_slideshow_risk(
|
||||
sc.scenes, sc.edit_decisions, sc.renderer_family, sc.render_runtime
|
||||
)
|
||||
actual = risk["verdict"]
|
||||
ok = _verdict_matches(sc.expected_slideshow_verdict, actual)
|
||||
result.checks["slideshow_risk"] = {
|
||||
|
||||
Reference in New Issue
Block a user