The manifest is the single COMPOSE plan; its script is rendered, never written - #22
Merged
Merged
Conversation
…pt is rendered, never written Sync of the plan-artifact unification from Orkas release_1.6.5 (9824033ab, 4658470f8, 4ef7be4ec), re-mapped onto the ovs surface: - New pure manifestScript() renders composition-manifest.json as the readable production plan (locked header, per-scene timeline with copy/narration/sources, audio tracks). Exposed read-only as `ovs composition script` + MCP composition_script — no scaffold, no vendor copy, no writes, so Gate B can show the plan BEFORE any approval authorizes side effects. The text is returned, deliberately never written to disk: a prose file inside the composition directory would change the composition signature and stale the preview. - COMPOSE line stops authoring script.md + shotlist.json (orchestration 3C/4C/7C, stage-compose runbook + manifest section, gate-control Gate B row, composition-design-review inputs). Upstream's motive holds here verbatim: the retired files' fields all restated the manifest, so their only QA failures were reconciliation failures about bookkeeping, never about the video. - Backward compatibility is explicit: a legacy shotlist.json remains readable and its alignment QA activates only on a real shotlist shape (the #16 gate); the GENERATE line keeps its own shot plan. - Deliberately NOT ported: upstream's composition.caption_mode. OSS's caption declaration already lives in plan.json tracks.captions (the canonical editable-data home), and a manifest field with no consumer would be speculative. Verified: full OVS_E2E=1 suite 278/279; new unit + integration cases (manifestScript rendering, compositionScript read-only + missing manifest refusal); built-CLI smoke shows the rendered plan and leaves the directory untouched. Content tests pin that no skill instructs authoring the retired files while the prohibitions remain. Prompt audit: every script.md/shotlist-authoring clause in the COMPOSE path replaced by the manifest-is-the-plan contract backed by the new command; legacy-compat sentence states what the #16 shape gate actually does; no clause touches the GENERATE line's shot planning; Gate B row now names the artifact the command actually produces. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VL7mRpmEphLAbcH7YmABnV
…in playback order
Sync of the assembled-production review contract from Orkas
release_1.6.5 (3b9451d78, c072d58ef, 2182ad89a), re-mapped onto the ovs
surface as a new capability rather than host state:
- New productionPreview(plan, video, outDir): probes the assembled
draft, samples the cover plus one frame per PRIMARY segment at the
midpoint of its window (target_sec proportions scaled to the REAL
duration, so planned-vs-produced drift shifts midpoints instead of
seeking past the end), extracts the frames, and composes ONE contact
sheet. Pure planner buildProductionPreviewPlan is unit-tested; the
sheet is capped at 24 segments with the truncation reported, never
silent. Exposed as `ovs plan preview` + MCP plan_preview.
- stage-assemble Step 4 leads Gate D with this sheet: never per-segment
contact sheets ("four links to four children is not a look at the
video"), never per-segment approval stops. orchestration's AUTO rule
(from the batch-6 stop economics) now points at the command that
makes it executable.
Deliberately NOT ported: upstream's production-scope batched QA phases
and uncaptured_segment_ids state — those need a production state
machine OSS does not have; the review-side value lands here without it.
Verified: full OVS_E2E=1 suite 283/284. Unit cases: midpoint scaling
(20s planned on a 10s cut halves every window), last-seekable clamp,
cover-only degradation, cap reporting. Real-ffmpeg case: 4s assembled
clip → cover + two segment frames on disk + one SVG sheet naming both.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL7mRpmEphLAbcH7YmABnV
The whole-video production preview: one sheet, segments in playback order
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Batch 9 of the release_1.6.5 sync — the coordinated refactor that batches 1–8 deliberately deferred. Stacked on #21. Re-mapped by hand from Orkas commits
9824033ab("retire shotlist.json; the manifest is the delivery contract"),4658470f8("merge script.md into the manifest; the plan is one file"),4ef7be4ec.Why
Upstream measured that every field in
script.md/shotlist.jsonrestated the manifest, so four of five QA checks on them compared one copy of a fact to the other — their only failures (shotlist.shots.missing,script.narration_missing) were reconciliation failures about bookkeeping, never about the video. OSS carries the same duplication in its COMPOSE line.What
manifestScript()(core) +ovs composition script(CLI/MCP): renders the manifest as the readable production plan — locked header, per-scene timeline with copy/narration/sources, audio tracks. Read-only by design: unlikeprepareit has no side effects, so Gate B can show the plan before any approval authorizes writes. The text is returned, deliberately never written to disk — a prose file inside the composition directory would change the composition signature and stale the preview.art_direction), 4C showsovs composition script's rendering (never a hand-written abstract — same rule asplan.json's summary in See interior dead air and colliding narration windows; validator hands over the summary #15/Plan/assemble craft: validator-true prose, the signature-safe envelope, and coverage as QA #21), 7C prepares/authors from the already-approved manifest. stage-compose, gate-control's Gate B row, and composition-design-review's inputs follow.shotlist.jsonstays readable and its alignment QA activates only on a real shotlist shape (the Repair QA self-contradictions, see split CJK copy, calibrate taste findings to advisory #16 gate); the GENERATE line keeps its own shot plan file.composition.caption_mode— OSS's caption declaration already lives inplan.jsontracks.captions(the canonical editable-data home), and a manifest field with no consumer would be speculative.Verification
Full
OVS_E2E=1suite 278/279. New cases:manifestScriptrendering (header/timeline/narration/sources),compositionScriptread-only (no scaffold, no vendor, no writes) + missing-manifest refusal. Built-CLI smoke renders a zh-CN plan and leaves the directory untouched. Content tests pin that no skill instructs authoring the retired files while the prohibitions remain readable.🤖 Generated with Claude Code
https://claude.ai/code/session_01VL7mRpmEphLAbcH7YmABnV