Skip to content

The manifest is the single COMPOSE plan; its script is rendered, never written - #22

Merged
leochenpm merged 3 commits into
sync/plan-assemble-craftfrom
sync/manifest-single-plan
Aug 12, 2026
Merged

The manifest is the single COMPOSE plan; its script is rendered, never written#22
leochenpm merged 3 commits into
sync/plan-assemble-craftfrom
sync/manifest-single-plan

Conversation

@leochenpm

Copy link
Copy Markdown
Collaborator

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.json restated 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

  1. 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: unlike prepare it 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.
  2. The COMPOSE line plans in ONE artifact: orchestration 3C authors the manifest (with art_direction), 4C shows ovs composition script's rendering (never a hand-written abstract — same rule as plan.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.
  3. Backward compatible: a legacy shotlist.json stays 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.
  4. 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.

Verification

Full OVS_E2E=1 suite 278/279. New cases: manifestScript rendering (header/timeline/narration/sources), compositionScript read-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

leochenpm and others added 2 commits August 12, 2026 11:22
…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
@leochenpm
leochenpm merged commit 36447f7 into sync/plan-assemble-craft Aug 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant