Skip to content

Rebuild the cut pipeline and take the module goal-oriented - #9

Merged
bmadcode merged 26 commits into
mainfrom
fix-cut-pipeline
Jul 27, 2026
Merged

Rebuild the cut pipeline and take the module goal-oriented#9
bmadcode merged 26 commits into
mainfrom
fix-cut-pipeline

Conversation

@bmadcode

@bmadcode bmadcode commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Rebuilds the cut stage after its first real project, then carries the lessons across the whole module: every skill rewritten from procedure to destination, and the customization layer replaced with a single studio-defaults surface.

The cut pipeline

mc-cut grew from a thin wrapper into a real pipeline with scripts that do the work:

  • normalize_source.py — source prep and conform
  • analyze_audio.py — silence/level analysis feeding the cut plan
  • edited_transcript.py — transcript that tracks the edit
  • composite_core.py — compositing core split out of the renderer
  • cutplan.py and preflight.py substantially expanded
  • New references: source-prep, transcription, editorial-pass, rendering
  • verify_anchors.py (+ tests) added under mc-beats

Cut keys are now kebab-case throughout.

Goal-oriented overhaul

11 skills rewritten from step-by-step procedure to stated destination, and all 15 SKILL.md descriptions brought to the BMad frontmatter standard. Three invariants applied across the module:

  1. Video paths are bare paths — the inversion is gone
  2. Absence is never silent — a missing input says so
  3. One home per fact, with a persona precedence rule in mc-agent

Customization layer

customize.toml is jettisoned entirely — every per-skill file removed in favor of mc-setup/assets/studio-defaults.toml. The Production Bible owns style; creator templates install at setup time. New references/bootstrap.md and references/migration-0x.md cover the path from older installs.

Removals

  • mc-ograf and the editable-graphics lane
  • lint_genericity.py and its tests, replaced by docs/review-rules.md
  • Completed planning docs; TODO.md trimmed to a public-facing idea list

Summary by CodeRabbit

  • New Features

    • Added audio-based transcript and cut verification, silence-aware snapping, source normalization, and improved beat-anchor validation.
    • Added stronger render validation, atomic publishing, proxy support, and faster graphics compositing.
    • Added editorial review, craft checklist, live-event packaging, and series-template guidance.
  • Changes

    • Replaced editable OGraf graphics workflows with HyperFrames/HTML-based delivery.
    • Simplified studio configuration and setup migration for older studios.
  • Documentation

    • Updated guides, pipeline rules, release notes, and review standards.

bmadcode added 25 commits July 25, 2026 19:40
2.0 shipped a cut pipeline that had never been run end to end on a long 4K
take. The first one that was corrupted the edit in four ways, and nothing in
the pipeline could halt on any of them. This fixes the causes and makes each
failure impossible to ship silently again.

Transcription was silently losing speech. Every lane now windows in short
isolated windows (20s, 3s overlap); the Apple Silicon lane had been handing
whole files to the model, and larger chunks made it worse rather than better
(120s chunks lost three paragraphs of clearly-spoken content on a 20.5 minute
take). verify_transcript.py now gates every transcript, computed from the
audio side so it cannot inherit the bug it exists to catch.

Timing comes from the audio, not the transcript. analyze_audio.py produces the
silence map that is now the timing source of truth. The old detector derived
silence from transcript gaps, but parakeet absorbs a pause into the preceding
word's end, so those gaps read about 0.0 across real dead air: 12 silences
found where the audio has about 400. Every cut edge snaps into a verified
silence, which turns "never cut inside a word" from an assertion about
timestamps into a structural guarantee.

Gates, not documented inspections. New binding convention: a check the
pipeline claims to perform must be a script that exits non-zero. Source QC
asserts and halts (exit 3), the transcript is gated, beat anchors are
re-derived and gated by verify_anchors.py, and verify_edl.py gates the cut's
own deliverable, which nothing had ever read back. verify_edl follows the
two-source rule rather than fighting it: a pause-absorbed word end reaches
past the sound, so a correct cut can sit inside a word's timestamps. The audio
decides; word overlap is context on an already-failing boundary, never a
verdict of its own. snap_spans.py makes the editorial apply mechanical instead
of asking for snapping by hand.

Blocking gates carry an acknowledged override (preflight --allow-qc-defects,
verify_transcript --accept-region with a mandatory reason), because a gate
with no way past it gets worked around in ways that leave no trace.

Renders stop corrupting themselves and stop taking an hour. Deliverables are
never written directly: temp file, decode-validate, supersede check, atomic
move. The composited preview is minutes rather than an hour via overlay lane
packing and cached proxies.

Baked-in frame defects are caught and fixable. normalize_source.py adds a
spatial capability the pipeline did not have, and asserts that a crop changes
no timecodes so an existing transcript and EDL stay valid.

Thresholds were calibrated against the real footage, not guessed. Four moved
on measurement: dead-air floor 0.45 to 0.30, dropped-speech 2.5 to 1.0, map
granularity 0.3 to 0.10, and blooper context from "0.5s within 3s" to "2s
within 1.5s" after the first guess flagged a scripted line as a flub.

cutplan.py now refuses duplicate -o/--audio-map/--voice-bible, so a config
override cannot silently swap the timing source of truth.

Also includes a small mc-agent persona edit and a docs pass on mc-cut cutting
repeated incident narration down to one telling.

899 tests. Both new gates verified end to end against real ffmpeg output.
The file had grown to 4,930 tokens against a 3,000 hard budget, and the
shape was the problem more than the size: thirteen numbered steps with
letter suffixes, written as a route to follow rather than a destination
to reach.

Rewritten from the destination. It now opens with stance, outcome and
the three consumers that set the bar, then six named sections with
dependencies stated in prose. Numbered prefixes are gone because a
number implies a fixed order the model must march through.

The SKILL.md / reference split follows the gotcha rule rather than size:
a rule whose trigger the model cannot recognize stays inline, because it
cannot load a file for a situation it does not know it is in. So the
two-source rule, the 20s windowing invariant, the CFR master trap and
the cadence and marker keeps all stayed. Branch-specific mechanics moved
to three new references: source-prep, transcription, rendering.

Adds the required Resolution rules block and puts quoted triggers in the
description. 4,930 to 2,353 tokens, no script changed, 597 mc-cut tests
still green.

F1-CARVE-PLAN.md records the disposition of every old section and every
deletion with its surviving citation. PIPELINE.md drops a stale
reference to the section this rewrite renamed.
At 6,060 tokens it was the worst file in the module: 2x the hard budget
and 3x the desired tier. The numbering was the tell. Fifteen steps ran
0, 1, 1a, 2, 2b, 3, 3b, 3c, 3d, 4, 4b, 5, 6, 7, 8 with no 2a, 3a or 4a,
because every insertion got suffixed onto a neighbor rather than
renumbered, and renumbering would have meant fixing the 31 internal step
cross-references. The scaffolding existed to hold up more scaffolding.
Step 1 said a re-run should be a menu rather than a march, and the file
then laid out a march.

Rewritten from the destination: the outcome is a config every mc-* skill
can resolve, a brand folder with real content, and an honest runnability
report. Twelve named sections, no numbers, and a routing table on
activation that picks first run, 0.x migration, or update pass.

Two branch-specific sections carve to references, each with a trigger the
model already checks: bootstrap.md (the four paths are missing) and
migration-0x.md (config exists but lacks the 1.0 tables).

Two more sections were restatements of specs shipping in the same skill.
assets/voice-bible-spec.md has a section titled "How to build it" and
assets/production-bible-spec.md has "How mc-setup builds it"; the file
restated both in prose, and both are read at build time anyway. It also
restated customize.toml's defaults after naming that file as the
authority for them. Those are deleted, not moved.

The gotchas stay inline under the same rule as the mc-cut carve: never
touch the installer-owned config, presence-only secret checks, metered
vendors named only inside their opt-in branch, ograf-editable only for
Resolve 21+, approved headshots never frames from footage.

6,060 to 2,851 tokens. No script changes; all 3 mc-setup suites green.
Description 79 words to 36, now with quoted triggers.

Unlike mc-cut, this file's step numbers were cited externally, so
mc-assets, mc-graphics, engines/hyperframes.md and customize.toml now
refer to sections by name.
mc-agent was not bloated the way mc-cut and mc-setup were. It is the
best-structured skill in the module: four references each with an explicit
load trigger, plus a rule the others lack ("never preload: a file whose
moment has not come stays unread"). The problem was duplication, and it sat
in the worst possible place for a persona agent.

The persona was defined twice. SKILL.md carried it in prose ("lion's heart
for the big vision, scorpion's tail for slop") while customize.toml's
[agent] identity said nearly the same thing differently, and step 3 said to
adopt the first and "layer the customized persona on top" without saying
which wins. For the one skill whose entire output is persona, and the only
one a creator interacts with directly, that ambiguity defeated the point of
having customize.toml at all. SKILL.md now keeps only what is genuinely
fixed, the name and title, and states plainly that [agent] wins over any
description of Manny written anywhere else.

Nothing defined dismissal either. Two lines said stay in character "until
the creator dismisses" without saying what dismissal looks like or what
survives it. Now stated, including that studio state, persistent facts and
gates were never the persona's to take with it.

Other duplication removed, each keeping one home:

- The gates were a hard rule three times plus a table column. Now once.
- The resolver's merge semantics were restated in SKILL.md and again in
  customize.toml. Kept in customize.toml, which is the file people edit.
- Packaging-early coaching was near-verbatim in SKILL.md and skills-map.md;
  render-first and footage-first were restated from mc-pipeline (named as
  the authority one line above) and again in skills-map.md.
- Standing behaviors and Rules were two lists of the same kind, split
  arbitrarily. Merged, with "movie quotes and emojis" dropped because
  communication_style already owns tone.

Also fixes an ordering bug: the pulse check told you to "greet first (step
6)" from inside step 5, so the numbering said 5-then-6 while the content
said the reverse. The check now resolves state and the greeting acts on it.

Convention fixes: Conventions renamed to Resolution rules, {brand-path}
declared (it was used twice, undeclared), description cut from 79 words to
26 with quoted triggers, and mixed second/third person normalized.

2,687 to 2,497 tokens. The drop is small because roughly 200 tokens of new
load-bearing content went in (the precedence rule, dismissal semantics, and
the consumer bar) against roughly 400 of duplication removed.

Clears a pre-existing high-severity bare-_bmad path finding on a line this
change already touched; scan-path-standards now passes at 0 findings.
PIPELINE.md had drifted from being a contract (what every stage must
conform to) into a summary of every stage's internals. Those are
different documents: the first is stable and small, the second grows
whenever any skill changes and is always slightly stale.

The tell was the stage table. The cut row's artifacts cell was 241
tokens against a median of 15 across the other eleven rows, listing
cut/candidates.json, cut/edited-words.json, edl.pre-editorial.json and
the preview key sidecar. Cutting is not sixteen times more complex as a
contract; it is the stage that has been worked on most, and this branch
made it worse by "completing" the row rather than questioning it.

The rule now stated at the top of the file: this carries what crosses a
stage boundary, and anything a stage produces and consumes entirely
within itself belongs to that skill. Applied to the cut row, that leaves
the six artifacts with real downstream consumers, verified by grep:
words.json (beats, package), edl.json (beats, package, retro, pipeline,
two format profiles), editorial-review.md (beats), preview.mp4
(graphics), plus cutplan.md and rough.fcpxml, which are deliverables to
the creator rather than to a skill. All seven removed artifacts are
named in mc-cut, verified.

Also removed, each keeping one home:

- The Conventions block taught how to resolve the studio config, {paths}
  and per-skill customize.toml. All 16 skills already carry those
  invocations; a contract need not teach what every conforming file
  states.
- The Verification contract retold AGENTS.md's four-defect narrative
  verbatim. The gate table stays, because that cross-stage view exists
  nowhere else; the story around it does not.
- The Remotion entry spent 55 tokens on why a removed engine was removed
  and then pointed at mc-graphics/engines/hyperframes.md for the
  rationale it had just given. The compatibility alias, which is
  load-bearing, stays.
- Spatial normalize duplicated mc-cut's references/source-prep.md down
  to the creative-reframing distinction. Kept here: only the two
  consequences that bind other stages.
- Gate behavior restated what each gate approves, which the owning
  skills own. Now a table of what each gate blocks, which is the part
  other stages depend on, plus gate 4's dual path.

4,137 to 3,412 tokens. Every contract survives intact: the stage table,
project.json, the stage algorithm, gate behavior, the beat table, the
gate list, blessed-slot. 33 test suites green.
OGraf produced graphics that stayed editable inside DaVinci Resolve 21+
and could be click-triggered live in OBS/SPX-GC. It cost a second
authoring path, a second spec to conform to, and its own scaffold and
verify scripts, all to serve one editor version. Baked alpha overlays,
which every editor imports, are now the only graphics deliverable and
the editor-dependent branch is gone.

Deleted skills/mc-ograf entirely, plus its marketplace.json entry and
its module-help.csv row.

No creator file breaks, following the precedent set when Remotion was
removed in 2.0.0:

- `ograf` joins `remotion` as a permanent compatibility alias for
  `hyperframes` wherever an engine is named, so an in-flight beat table
  or an already-copied format profile keeps working and nothing is
  rewritten in a creator's studio.
- `[editor] ograf-editable` is retired rather than deleted. A config
  written before 2.1.0 may still carry it; every skill ignores it and
  none writes it. mc-setup stops offering it.

One capability actually moved rather than disappearing. mc-stream-pack
built its lower thirds and topic cards through mc-ograf, so those are
now self-contained local HTML styled from tokens.json, alongside the
scenes that already worked that way. SPX-GC and OBS browser sources
drive them exactly as before, without an editor-specific package format.

The design invariant in AGENTS.md was replaced rather than dropped,
because the surviving decision (baked alpha everywhere) is now
unconditional and worth stating as such. The stale "12 stage skills"
count is corrected to 11; it was already off by one before this change.

CHANGELOG gets a 2.1.0 entry. The 2.0.0 entry mentioning mc-ograf is
left alone, because a changelog records what shipped.

31 test suites green, marketplace and help catalog consistent with disk
at 15 skills, no new genericity findings.
standard-fields.md defines the description as two parts: a 5 to 8 word
summary, then a trigger clause naming what the user says, with the
phrases quoted. Nine of fifteen had no quoted trigger at all, and the
summaries ran to 64 words carrying model names, caller lists and
service-versus-stage explanations that belong in the body.

All fifteen are now exactly two sentences, every summary within the 5 to
8 word range, every trigger clause quoted. Longest description dropped
from 64 words to 42.

Two real defects surfaced while doing it:

- mc-setup's frontmatter did not parse as YAML. Its description read
  "Configure the Manticore studio: config, dependencies..." and the
  second colon makes the mapping invalid. That shipped in 4bec532. The
  same hazard silently turned mc-audio's "local-first:" into
  "local-first." at some point. No description now contains a colon, and
  all fifteen are verified against a YAML parser.
- "cut this" (mc-cut) was a prefix of "cut this VOD" (mc-new), so a
  creator arriving with a VOD could route straight into the cut stage and
  skip project scaffolding entirely, which is the one thing the module
  says never to do with existing footage. mc-cut now triggers on "cut the
  takes".

45 distinct trigger phrases across 15 skills, no exact duplicates. One
benign prefix remains ("manticore" inside "set up manticore"): if it
misroutes, Manny hands off to mc-setup, which is menu item SU.

Guardrail clauses were dropped from descriptions ("never writes the
script", "zero creative instruction", and so on) after verifying each is
already stated in its skill body. A description routes; it does not
carry rules.

31 test suites green, quick_validate clean on all 15.
Every one of these files opened with ## Steps and marched through numbered
procedure. Three of them (mc-assets, mc-graphics, mc-new) went straight from
the H1 to the first step without ever stating a goal. The defect was
overspecification: pinning down how when only what was needed, which removes
judgment a capable model would have exercised correctly.

Run as a workflow, one agent per skill owning all of that skill's prose plus
an adversarial verifier per skill that diffed against HEAD hunting for lost
load-bearing content.

Shape, which is the real result:

- ## On Activation now exists in 11 of 11; it was in 0. The config and
  customization load used to be crammed into "step 1".
- Named sections replaced ## Steps everywhere. Numbered steps went from 87
  to 32, and most survivors are inside activation blocks, which are a genuine
  sequence.
- mc-package SKILL.md 3363 to 2481, so no SKILL.md in the module is over the
  3000 hard ceiling now. It shed two references (live-event.md,
  series-template.md) by progressive disclosure rather than compression.

Prose totals moved 35696 to 32279, only 9 percent. That number is honest and
low: the win here is shape, not size, and several agents were conservative.

Verified rather than trusted. Zero script references and zero CLI flags lost
across all 24 files. Every numeric threshold survives except four that were
illustrative values inside one worked example.

Five things the verifiers got wrong, fixed by hand:

- mc-assets de-numbered the six generative-editing rules, orphaning
  "generative rule 5" cited in farm_asset.py:192 and its test. Numbering
  restored; rule 6 kept as a pointer since its content correctly moved to
  SKILL.md.
- cta-placement.md is byte-identical in mc-beats and mc-package by module
  convention. mc-beats owned the rewrite; mc-package's copy is re-synced.
- design-prompting.md dropped three real gotchas, graded cosmetic: a
  full-frame gradient killing an overlay, models paraphrasing text they were
  told to render verbatim, and the hosted preview not being the deliverable.
  Restored in one compact block.
- mc-pipeline and mc-graphics both cited mc-cut's "Composited preview (after
  graphics)" section, which my own earlier commit renamed. That citation was
  stale before this work; I checked for orphaned step numbers back then and
  never checked section names.

31 test suites green, quick_validate clean on 15, no new genericity findings.
Ground rules, execution order 1-2-3-4-7-5-6-8, verification toolbox,
regenerable audits, and the mc-retro relocation decision, so each story
can be executed from a fresh context.
Absence is never silent, bare paths are the current video project, and every
file in a skill addresses the model executing it. Stated once in AGENTS.md's
design invariants so later stories cite them instead of restating the rule;
PLAN.md Story 2 now cites invariant 2 rather than repeating it.
Carries AGENTS.md invariant 2 into every skill. A bare path in skill prose now
resolves against the current video project, `{video-path}` = `{projects-path}/<slug>/`,
which is what 126 of the 167 bare path sites already meant; a file inside a
skill's own folder always carries `{skill-root}`.

- Resolution rules present in all 15 skills, six of which had no block at all
  (mc-braindump, mc-new, mc-outline, mc-pipeline, mc-retro, mc-stream-pack).
- The plan's audit grep for bare skill-relative paths goes 41 lines to 9, and
  `{skill-root}/` occurrences 55 to 114. The 41 also covered the bare
  skill-root files the old rule reached: mc-setup's `customize.toml`,
  mc-package's `SKILL.md`, mc-pipeline's `PIPELINE.md`.
- `assets/` is resolved per site rather than by pattern. The video-project hits
  stay bare and are called out in both files' resolution rules: the 9 lines the
  audit grep still returns (2 in mc-pipeline/PIPELINE.md, 7 in
  mc-assets/SKILL.md), all bare video-project `assets/`. The three skill-folder
  hits (mc-setup x2, mc-cut x1) gained `{skill-root}`.
- A third meaning the plan's table did not enumerate: bare filenames that mean
  the brand folder, which the inverted rule would otherwise send to
  `{video-path}`. `{brand-path}/` occurrences go 52 to 71 across mc-graphics,
  mc-package, mc-retro, and mc-setup's SKILL.md, specs and format profiles.
- A path led by a skill name (`mc-cut/scripts/preflight.py`) records which
  skill owns a file; the form is stated in PIPELINE.md's naming notes and in
  AGENTS.md invariant 2, and is used only where the defining rule is reachable.
  mc-setup's audio-ladder citation and the voiceover-explainer profile's
  engine-policy citation drop their paths to prose, since neither file can
  resolve a skill-name-led path where it is read.
- PIPELINE.md's stage algorithm names no path for stage scripts; "the stage
  skill's own scripts" is prose, so the module-wide bare-path rule has no
  counterexample inside the contract that states it.

Verification: 31 test suites green, quick_validate clean on 15, no SKILL.md over
3000 tokens (max mc-setup 2879), genericity findings still the 5 pre-existing in
editorial-pass.md. Skill prose went 62852 to ~63800 tokens; the plan estimated
-150 to -300, but the six skills that needed a block created from scratch cost
more than the prefixes saved.
Cites AGENTS.md invariant 3: every file in a skill addresses the model
executing it, never a human reader.

Removed:
- Three `## Sources` blocks and all 23 citation URLs (both cta-placement
  copies, density-and-creativity.md).
- "Research-backed rules (2024-2026 era)" and "Research-backed rules"
  self-stamping openers.
- Dated provenance: "Research basis: platform and capabilities audit,
  2026-07-21" from the three stack-*.md files; the M4 Pro / 24 GB /
  2026-07-07 validation stamp in audio-lanes.md; the removal dates in
  PIPELINE.md's compatibility-alias bullet.
- Evidence-grading prose: cta-placement's "Confidence notes" section
  becomes "Overrides and trade-offs", keeping the override permission and
  the retention-dip trade-off, dropping which claims are "well supported".
- density-and-creativity's MrBeast-slowed-editing-in-2024 aside; the rule
  it justified stands on its own.
- hyperframes.md's "Why this engine and not Remotion" section, a maintainer
  decision record addressed to a human. The rationale (Remotion's
  free-up-to-3-people license against a distributed module, and React
  buying nothing in a frame-deterministic renderer where state is a
  function of frame index) is already recorded in CHANGELOG.md 2.0.0.
  PIPELINE.md's pointer at that section goes with it; the compatibility
  alias rule itself is unchanged.

Kept: the three functional URLs, each an install or fetch target (the
PyTorch cu126 wheel index, the HyperFrames llms.txt capability index,
the skill-creation best-practices page). hyperframes.md's llms.txt line
is reworded to read as a fetch instruction rather than a citation.

Every threshold, quota, floor, duration, percentage and exit code
survives; density-and-creativity's benchmark sentence keeps its 5-7 s, 19
shot changes, 20%, 20-30 s and 30-60 s figures, restated as pacing
reference points with the outside attributions dropped. They are not
attached to the density tiers, which would contradict the tier table
above them and the beats-per-minute floors in SKILL.md.

Read-through pass over the seven highest-density skills (mc-graphics,
mc-pipeline, mc-audio, mc-script, mc-agent, mc-package, mc-new); the
remaining parenthetical density is paths, flags and gotcha triggers.

cta-placement.md is byte-identical across mc-beats and mc-package.
31 test suites green; genericity lint shows only the 5 pre-existing
editorial-pass.md findings.
…vives

The BMM installer's isAgentSkill() classifies agent skills by the [agent]
block in customize.toml (Copilot agents-only filter, silent on absence).
mc-agent keeps that file as the one exception and the single home of the
persona; the other 14 die as planned.
Maintainer decision: no customize.toml survives, mc-agent included. The
Copilot agents-only classification loss goes to TODO.md with the bmad-bmm
installer fix that lifts it.
…rovenanced

The pre-seeded Learnings entries narrated module history as dated log rows a
fresh studio never lived. The unique content moves to undated Design rules and
Post-publish hygiene sections; duplicates of Style philosophy and Engine
defaults die; the Learnings log ships empty like the other six profiles, so
mc-retro's output is never mixed with seed content.
15 packaged customize.toml files removed, and with them the
_bmad/custom/<skill>.toml / <skill>.user.toml override layer. The studio
config ([modules.manticore] in _bmad/custom/config.toml, with
config.user.toml over it) is the only config surface left.

Where the content went:

- mc-setup's [defaults] seed to skills/mc-setup/assets/studio-defaults.toml,
  value-identical, plus three new sub-tables.
- mc-cut's silence_floor_db, cutplan_flags, preview_flags and final_flags to
  [defaults.cut]; mc-package's four keys to [defaults.packaging];
  mc-retro's preserve to [defaults.retro] (was [wrap]).
- mc-agent's [agent] persona and 7-item menu inline into SKILL.md, which
  lands at 2486 tokens, under the 3000 ceiling.
- mc-script's craft_checklist indirection becomes the direct path; Story 5
  moves the file itself to {brand-path}.
- The nine empty [workflow] boilerplate files deleted outright.

15 SKILL.md files carried a resolve_customization.py activation line, and
19 mentions of the resolver across skills/ markdown; all gone. 59
{workflow.*} and {agent.*} references, 45 of them the three empty-array
ceremony keys; all gone.

Net -4314 tiktoken tokens: -648 across skill markdown, -3666 across toml
(7062 in the 15 removed files, 3396 in studio-defaults.toml).

TODO.md records the accepted regression: BMM's isAgentSkill() detects an
agent by reading <skill-dir>/customize.toml for an [agent] block, so
mc-agent drops out of GitHub Copilot's agents-only Custom Agents picker
until the installer learns to read module.yaml or SKILL.md frontmatter.

31 test suites green, quick_validate clean on 15 skills, genericity
unchanged at the 5 pre-existing findings in mc-cut/references/editorial-pass.md.
Nine stage skills now load their creator files on activation with one verbatim
clause per file: name the file, name the capability lost, route to mc-setup,
stop. 22 clauses total, matching the dependency map: production bible 7, voice
bible 4, tokens.json 4, blacklist 4, headshots 2, exemplars 1.

Removed the optional-taste-file phrasing: mc-cut and mc-stream-pack read the
production bible "when it exists", mc-outline read the voice bible "if it has
been built". Zero occurrences of either phrase remain under skills/.

mc-beats reads cut/editorial-review.md unconditionally; gate 2 has passed by
then, so a missing one is a hand-back to mc-cut, not a shrug.

PIPELINE.md's module-wide stage algorithm carries the same rule at step 3.

Both disclosed fallbacks survive verbatim: mc-cut's tiny built-in soft-filler
list in voice-bible-spec.md, and headshots blocking face-plus-hook thumbnails
in mc-package.

Cost: +847 tokens across the ten touched files. 31 test suites green, 15
quick_validate clean, genericity lint still the 5 pre-existing editorial-pass
findings, no SKILL.md over 3000 tokens (highest is mc-setup at 2891).
The 16-rule craft checklist (531 tokens) was module content mc-script
executed against from its own assets/ folder, so the creator could not
change the rules their script is judged by. It is now a setup-installed
template like tokens.json, blacklist.md and the format profiles:

- skills/mc-script/assets/craft-checklist.md moves to
  skills/mc-setup/assets/craft-checklist.md (89% rename), and
  mc-script/assets/ is gone. Its one content change is the closing line,
  which cited rules 1, 2 and 15 by number and now names the stakes-claim
  opening, the hook shape and the lower-the-barrier rule, so a creator who
  deletes or reorders a rule does not silently repoint that exception.
- mc-setup copies it into {brand-path}/craft-checklist.md when building the
  brand, and the never-overwrite rule that covered {formats-path} now covers
  both folders, so a re-run never clobbers the creator's edits.
- Studios that already exist get it too, which is where a template move
  usually breaks. The update-pass row of mc-setup's routing table copies in
  any shipped template {brand-path} or {formats-path} is missing before it
  offers the menu, and the 0.x upgrade path in references/migration-0x.md
  does the same, because a brand folder built before the template shipped
  would otherwise stop mc-script dead on activation.
- mc-script reads {brand-path}/craft-checklist.md at activation under the
  Story 7 pattern, and its QA step runs the creator's copy. A missing
  checklist names the file, says the craft pass cannot happen without it,
  routes to mc-setup, and stops. Its CTA section names the checklist's
  lower-the-barrier rule without restating what that rule says, so the
  creator's copy remains the only statement of it.

The editorial-review template decision, recorded in AGENTS.md next to the
install-source convention: mc-cut/assets/editorial-review-template.md stays
module-owned. It is the shape of cut/editorial-review.md, whose sections
mc-beats reads for its hand-to-beats seeds, so it is a downstream contract
rather than the creator's taste.

Every brand-folder listing a creator reads gains the file: README.md's
studio tree, the user guide's tree and its brand-asset list, and
studio-defaults.toml's brand-path comment.

mc-script SKILL.md 1005 to 1052 tokens, mc-setup 2891 to 2964, both under
the 3000 ceiling. 31 test suites green, quick_validate clean on 15 skills,
genericity unchanged at the 5 pre-existing findings in
mc-cut/references/editorial-pass.md.
The four aesthetic judgments mc-beats hardcoded (6 distinct types over 5
minutes with no type above 40% of rows, static cards under 25% and never
consecutive, beats-per-minute floors of 3 / 1.5 / 0.7, and the tier table's
numeric columns) come out of SKILL.md and density-and-creativity.md. Story 7
landed first, so a missing bible is already loud and the deletion is safe.

The bible's section 5 now specifies those numbers as creator-owned, global
with per-project-type overrides, delegating to no skill. mc-setup asks for
them in the video style pass with the shipped values offered as suggestions
inside the interview rather than as config defaults; only the tier has a
config key, so the floor, the variety quota, and the card cap live in the
bible alone. mc-beats resolves them from the bible per format. mc-retro
routes a density or variety note to that section and a motion note to the
animation and motion look-and-feel section. mc-graphics states that the
bible's motion feel outranks the shipped ffmpeg recipes.

density-and-creativity.md keeps the taxonomy, the trigger heuristics, the
pacing curve, and the per-tier character, and stops stating quotas as law.
No number leaves the tree: the seconds-per-beat budgets already live in the
seven format profiles' density frontmatter, and the four quota values now
appear as interview suggestions.

TODO.md records that scripting the quota check is unblocked, since a script
against resolved values enforces the creator's taste rather than the
module's.

Verified: 31 test suites green; genericity lint at the 5 pre-existing
editorial-pass.md findings and no new ones; quick_validate clean on the four
edited skills; every SKILL.md under 3000 tokens (mc-setup 2995, mc-beats
1930, mc-retro 1787, mc-graphics 1652); cta-placement.md still byte-identical
across mc-beats and mc-package.
Re-ran the whole toolbox against the finished epic. 31 test suites green,
quick_validate clean on all 15 skills, genericity lint still exactly the 5
pre-existing findings in mc-cut/references/editorial-pass.md (127 files
scanned, was 141 before the 15 customize.toml went) and no new ones.

Largest SKILL.md is mc-setup at 2997 tokens, under the 3000 ceiling; every
other one is under 2700. cta-placement.md is byte-identical across mc-beats
and mc-package (md5 e27ff644495f922f83e816c4db5f4b21).

Nothing load-bearing was lost against the branch point (319721d). Of 41 uv run
invocations only the 2 resolve_customization.py lines went; the analyze_audio
and verify_thumb lines kept every flag and only renamed their placeholder.
The one CLI flag dropped module-wide is --skill, which only that resolver took.
Every config key survives: mc-cut's four, mc-package's four and mc-retro's one
now sit in [defaults.cut], [defaults.packaging] and [defaults.retro] of
assets/studio-defaults.toml with their values unchanged, and the [defaults]
seed itself diffs clean against the old customize.toml. The only numbers gone
are Story 6's four sanctioned quota literals plus the citation years and the
design-prompting worked example; the 20s/3s transcription window, the cutplan
defaults, the tier seconds-per-beat ranges, the CTA caps and the ffmpeg
filter strings are all still there. All four gates, their hard-stop wording
and the creator-approval rule are intact, and no internal link or named
section dangles.

Re-measured baseline, .md outside scripts/ and tests/, whole skill folder:

  mc-setup 13729 | mc-package  5966 | mc-script       1052
  mc-cut    7898 | mc-agent    5432 | mc-new           895
  mc-graphics 7751 | mc-pipeline 4213 | mc-stream-pack   855
  mc-beats  7156 | mc-audio    2145 | mc-outline       791
                 | mc-assets   1908 | mc-braindump     727
                 | mc-retro    1853

Total 62371, from 62852: only -481, because mc-setup absorbed the craft
checklist and mc-agent absorbed the persona. The real reduction is in the toml
surface the same skills load, 15 files at 7050 tokens down to 1 at 3422. Loaded
surface overall 69902 to 65793, -4109, inside the plan's -3800 to -5500 band.

Two re-sync gaps the verification surfaced, both fixed here. TODO.md now
records the red genericity lint and the maintainer decision it is waiting on,
which lived only in the branch plan. The under-the-hood deck's taste-contracts
card now lists the craft checklist, which became a creator-editable brand file
in Story 5 and reached the README and the user guide but not the deck.
…test_cache

[cut] silence-floor-db, cutplan-flags, preview-flags, final-flags now match
the module's kebab-case config convention (AGENTS.md); scripts take these as
explicit args so only prose, seed toml, and comments changed. README's 2.0
section states what is, not what was; the Remotion story lives in the
changelog. .pytest_cache/ ignored at repo level rather than relying on a
global excludesfile.
A keyword grep cannot tell a brand leak from a skill invoking a sibling by
name, which is how CI sat red on legitimate content. The ship-hygiene rules
now live in docs/review-rules.md as ten checks for code review agents,
linked from AGENTS.md. The lint script, its test suite, the CI gate step,
and TODO.md's pending-decision section all go; 30 test suites remain.
REMEDIATION-PLAN, SKILL-SCAN-ACTIONS, F1-CARVE-PLAN, MC-SETUP-CARVE-PLAN and
the epic PLAN all executed to completion on this branch; git history keeps
them, TODO.md carries everything still open.
TODO.md was carrying its own history: fixture tables for work that had
landed, root-cause write-ups, and the accepted-regression record. All of
that lives in CHANGELOG.md and the commit log. What remains is one line
per idea we might pick up.

Dropped the karaoke-captions idea, added stronger social tooling (either
in Manticore or as its own module). The release-gate validation section
came out because this file is public facing; the real-take validation
belongs in the PR, not the roadmap.

Also drop the doc-style rule from AGENTS.md and review-rules.md. Drafting
and polishing rules live in the maintainer's own rule files, not here.
@greptile-apps

greptile-apps Bot commented Jul 27, 2026

Copy link
Copy Markdown

Too many files changed for review. (116 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@bmadcode, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 49 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5717bd80-f74a-4346-9dac-13f9a5fd3f6b

📥 Commits

Reviewing files that changed from the base of the PR and between 18443d2 and ecb312f.

📒 Files selected for processing (7)
  • .claude-plugin/marketplace.json
  • AGENTS.md
  • CHANGELOG.md
  • README.md
  • TRADEMARK.md
  • skills/mc-beats/SKILL.md
  • skills/mc-pipeline/PIPELINE.md

Walkthrough

This PR removes the mc-ograf lane, consolidates configuration around studio defaults and user overrides, restructures skill contracts, and adds audio-driven transcription, cutting, verification, normalization, rendering, packaging, and setup workflows with expanded automated coverage.

Changes

Manticore pipeline overhaul

Layer / File(s) Summary
Repository contracts and governance
.claude-plugin/marketplace.json, .github/workflows/quality.yaml, .gitignore, AGENTS.md, CHANGELOG.md, README.md, TODO.md, docs/*, skills/module.yaml
Removes mc-ograf registration and genericity-gate execution, adds review-rule documentation, updates configuration and engine documentation, and refreshes release and roadmap text.
Skill activation and studio contracts
skills/mc-agent/*, skills/mc-assets/*, skills/mc-audio/*, skills/mc-beats/*, skills/mc-new/*, skills/mc-outline/*, skills/mc-retro/*, skills/mc-script/*, skills/mc-setup/*, skills/mc-stream-pack/*
Reorganizes skill instructions around resolved paths, studio configuration, required inputs, gate behavior, stage routing, and updated HyperFrames-based engine contracts.
Audio-authoritative cut processing
skills/mc-cut/SKILL.md, skills/mc-cut/references/*, skills/mc-cut/scripts/*
Adds audio-map generation, fixed transcription windowing, transcript and EDL gates, silence-based snapping, edited-transcript reconstruction, editorial review, source normalization, and render handoff rules.
Cut and transcription validation tests
skills/mc-cut/scripts/tests/*
Adds and expands unit, CLI, synthetic-media, and concurrency tests for audio analysis, transcription, cut planning, verification, normalization, snapping, and rendering.
Graphics and render safety
skills/mc-graphics/*, skills/mc-cut/scripts/composite_core.py, skills/mc-cut/scripts/render_*.py
Updates graphics contracts and implements overlay lanes, preview proxies, render identities, decode validation, atomic publication, stale-render rejection, and cleanup.
Packaging, setup, and pipeline wiring
skills/mc-package/*, skills/mc-pipeline/*, skills/mc-setup/*, skills/mc-stream-pack/*
Adds packaging and live-event references, setup migration/bootstrap guidance, new defaults and cadence contracts, and stricter pipeline verification and spatial-normalization rules.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Poem

I’m a rabbit with a checklist bright,
Watching clean cuts snap just right.
OGraf hops out, HyperFrames gleam,
Audio guides the editing stream.
Safe renders land without a scare—
Carrots and contracts everywhere!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 17.52% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title captures the two main themes of the PR: rebuilding the cut pipeline and refactoring the module toward goal-oriented skills.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-cut-pipeline

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Both unreleased changelog sections (2.0.0 and 2.1.0) collapse into a
single 3.0.0 entry, since neither ever shipped. Every version reference
in README, AGENTS.md, PIPELINE.md and mc-beats follows.

Adds TRADEMARK.md, mirroring the BMad Method module notice, with BMad
Manticore and the Manticore Video Editing Platform added to the marks
list and to the prohibited-use and examples sections.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Due to the large number of review comments, Critical severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
skills/mc-setup/assets/voice-bible-spec.md (1)

7-9: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Remove URL and capture-time provenance requirements.

This template is copied into the creator’s brand artifacts, but it requires exemplar URLs and captured stats. Preserve the transcript evidence without requiring source URLs or provenance metadata.

As per coding guidelines, “Every file shipped by a skill must address the executing model, not a human reader; do not include citation blocks, source URLs, provenance, or dated research claims.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-setup/assets/voice-bible-spec.md` around lines 7 - 9, Update the
exemplar-saving guidance in the voice-bible specification to remove requirements
for source URLs, capture-time stats, and related provenance metadata from
frontmatter or filenames. Preserve the cleaned transcript and evidence-quote
requirements, while ensuring the instructions address the executing model and do
not request citation blocks, source URLs, or dated research claims.

Source: Coding guidelines

🟠 Major comments (34)
skills/mc-graphics/engines/design-prompting.md-3-3 (1)

3-3: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Remove hardcoded Claude branding from the skill.

Use a generic design surface/model term or a studio-configured provider. Skill files must not ship user-specific identity, branding, or tool choices.

Also applies to: 85-85

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-graphics/engines/design-prompting.md` at line 3, Remove hardcoded
Claude references from the authoring-path description and the corresponding
worked example, replacing them with generic design-capable model/surface
terminology or the configured provider symbol. Keep the workflow behavior
unchanged: provide a structured design brief, review the look, and render it
deterministically.

Source: Coding guidelines

skills/mc-graphics/SKILL.md-25-43 (1)

25-43: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Preserve the thin-router contract across both stage skills.

  • skills/mc-graphics/SKILL.md#L25-L43: move engine/source-selection/rendering mechanics into references or scripts.
  • skills/mc-stream-pack/SKILL.md#L23-L39: move pack-building, format branching, transcoding, audio, and verification mechanics out of SKILL.md.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-graphics/SKILL.md` around lines 25 - 43, Thin both stage skills to
routing guidance: in skills/mc-graphics/SKILL.md lines 25-43, move engine setup,
source selection, rendering, and verification mechanics into the referenced
reference files or scripts; in skills/mc-stream-pack/SKILL.md lines 23-39, move
pack-building, format branching, transcoding, audio, and verification mechanics
into appropriate references or scripts. Keep each SKILL.md focused on concise
sequencing and pointers to those resources.

Source: Coding guidelines

skills/mc-stream-pack/SKILL.md-33-33 (1)

33-33: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Restrict the WebM skip rule to vmix and Wirecast.

“vmix or other” makes every non-vMix [live] tool skip WebM, including Ecamm/OBS paths. Say when [live] tool is vmix or Wirecast, and explain that OBS keeps the WebM VP9 deliverable by default.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-stream-pack/SKILL.md` at line 33, Update the WebM skip guidance to
apply only when the [live] tool is vmix or Wirecast, rather than to all other
tools. Clarify that OBS retains the WebM VP9 deliverable by default, while vmix
and Wirecast receive the PNG sequence or ProRes 4444 MOV as specified.
skills/mc-new/SKILL.md-8-8 (1)

8-8: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Correct the series project path contract.

Series projects are created under {projects-path}/<series>/<slug>/, not {projects-path}/<slug>/; these resolution rules would direct downstream stages to the wrong project directory.

Also applies to: 12-12

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-new/SKILL.md` at line 8, Update the project scaffolding path
contract in the series workflow so projects are created and resolved under
{projects-path}/<series>/<slug>/ instead of {projects-path}/<slug>/. Ensure all
downstream references use this nested series project directory consistently,
including the corresponding guidance in 12-12.
skills/mc-package/SKILL.md-31-31 (1)

31-31: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Use one series-template location. Migration places creator-specific templates in {brand-path}/templates/<series>.md, while package activation loads only {skill-root}/references/series-template.md; migrated locked anchors will never be applied.

  • skills/mc-package/SKILL.md#L31-L31: load the creator’s {brand-path}/templates/<series>.md for a bound series, using the skill-local reference only as generic guidance if needed.
  • skills/mc-setup/references/migration-0x.md#L43-L45: keep the migration destination aligned with the path mc-package actually resolves.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-package/SKILL.md` at line 31, Update the bound-series branch in
skills/mc-package/SKILL.md at lines 31-31 to load the creator-specific
{brand-path}/templates/<series>.md, using
{skill-root}/references/series-template.md only as generic guidance when needed.
Update skills/mc-setup/references/migration-0x.md at lines 43-45 so its
migration destination matches the path resolved by mc-package; both locations
must use one consistent series-template location.
skills/mc-outline/SKILL.md-8-8 (1)

8-8: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Do not require braindump citations in outline.md.

outline.md is a shipped artifact, but these instructions require line/passage citations and provenance notes. Keep the artifact grounded in the braindump without embedding citation-style traceability.

As per coding guidelines, “Every file shipped by a skill must address the executing model, not a human reader; do not include citation blocks, source URLs, provenance, or dated research claims.”

Also applies to: 25-31

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-outline/SKILL.md` at line 8, Update the outline.md requirements in
the Gate 1 instructions to remove mandatory braindump citations, line/passage
references, and provenance notes. Keep the requirement that the outline remains
grounded in braindump.md, while ensuring the shipped artifact addresses the
executing model and contains no citation-style traceability or source metadata.

Source: Coding guidelines

skills/mc-package/SKILL.md-142-146 (1)

142-146: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not complete package before captions are produced.

When cut/edl.json exists but transcript/words.json does not, Lines 121-135 defer captions, yet this condition advances the project once chapters are done. Require captions/transcript completion too, or leave stage and stages_done unchanged for that partial run.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-package/SKILL.md` around lines 142 - 146, The package-stage
completion logic must not advance when captions are deferred because
cut/edl.json exists without transcript/words.json. Update the stage/stages_done
condition to require captions/transcript completion in addition to completed
chapters, while leaving both fields unchanged for this partial run; preserve the
existing early-run behavior.
skills/mc-package/SKILL.md-29-29 (1)

29-29: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Allow the documented non-face fallback.

Activation stops whenever {brand-path}/headshots/ is absent, so the explicit creator-approved non-face path in Lines 45-47 is unreachable. Defer the headshot requirement until face-plus-hook is selected, or explicitly collect approval before stopping.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-package/SKILL.md` at line 29, Update the workflow around the
headshots check and the face-plus-hook selection in the skill instructions: do
not stop or route to mc-setup solely because {brand-path}/headshots/ is missing.
Allow the documented creator-approved non-face fallback to proceed, while
requiring headshots only when face-plus-hook thumbnails are selected, or collect
explicit approval before stopping.
skills/mc-setup/references/bootstrap.md-51-53 (1)

51-53: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Keep the required installer flags in the fallback command.

npx bmad-method install follows a document rule that non-interactive installs must include --modules core and --tools <tool-id>, but this fallback switches to interactive only by removing those flags. If the installer still requires them, this can install the wrong module set or fail on a fresh install; include the required flags in the fallback too.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-setup/references/bootstrap.md` around lines 51 - 53, Update the
fallback command in the mc-setup instructions to retain the required installer
flags, including --modules core and the appropriate --tools <tool-id> value,
while keeping it interactive. Ensure the surrounding guidance still directs
users to run it from the project root before re-running mc-setup.
skills/mc-pipeline/PIPELINE.md-94-94 (1)

94-94: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Make the editor-only final path conditional on a real timeline export.

Both files promise an editor-render path that depends on an always-exported timeline, while the contract permits [editor] timeline-format = none.

  • skills/mc-pipeline/PIPELINE.md#L94-L94: require a non-none timeline for the editor path or make the offer conditional.
  • skills/mc-pipeline/SKILL.md#L27-L27: do not direct the creator to a timeline when the configured format skips timeline export.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-pipeline/PIPELINE.md` at line 94, Make the editor-render path
conditional on a real timeline export: in skills/mc-pipeline/PIPELINE.md at line
94, require a non-none timeline or state that the editor option is offered only
when one exists; in skills/mc-pipeline/SKILL.md at line 27, avoid directing
creators to a timeline when [editor] timeline-format is none.
skills/mc-package/references/series-template.md-23-27 (1)

23-27: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not silently bootstrap a missing creator template.

When series is set but {brand-path}/templates/<series>.md is missing, this flow creates a series-level contract from episode-local choices and continues. Route the missing creator file to mc-setup and stop, or make the fallback explicitly disclose the creative-output change and require creator approval before saving it.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-package/references/series-template.md` around lines 23 - 27, The
“When the file is missing” flow must not silently create a series template from
episode-local choices. When series is set and the template is absent, route the
creator to mc-setup and stop; alternatively, explicitly disclose the fallback’s
creative-output change and obtain creator approval before saving the generated
template.

Source: Coding guidelines

skills/mc-pipeline/SKILL.md-24-24 (1)

24-24: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Keep footage-first routing in dependency order.

This list places graphics before assets, while skills/mc-pipeline/PIPELINE.md requires assets to run before graphics. Correct the list to new, cut, beats, assets, graphics, package, final, retro.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-pipeline/SKILL.md` at line 24, Update the footage-first project
stages array in the routing guidance to preserve dependency order: use new, cut,
beats, assets, graphics, package, final, retro. Keep the surrounding routing
rules and graphics re-render behavior unchanged.
skills/mc-pipeline/PIPELINE.md-28-28 (1)

28-28: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Include the blessed package output in the stage contract.

The package row lists candidate folders such as packaging/thumbs/, but the blessed-slot contract at Line 123 says approved deliverables are written to packaging/final/ and recorded in artifacts. Add that path here, or explicitly state that this row intentionally lists candidates only.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-pipeline/PIPELINE.md` at line 28, Update the package stage entry in
PIPELINE.md to include packaging/final/ alongside the approved package outputs,
aligning it with the blessed-slot contract and artifacts recording behavior;
alternatively, explicitly label the listed paths as candidates only if that is
the intended contract.
skills/mc-retro/SKILL.md-21-24 (1)

21-24: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Scope missing-file stops to the selected ad-hoc target.

Step 2 permits targeting one format or one brand file, but Lines 22-24 unconditionally require all three brand files. A targeted visual or wording note will therefore be blocked by an unrelated missing file. Only require the files needed by the selected route.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-retro/SKILL.md` around lines 21 - 24, Update the missing-file
checks in the retro workflow around the target selected by step 2 so ad-hoc runs
require only the brand file relevant to that route: voice-bible for
voice/wording notes, blacklist for blocked-pattern notes, and production-bible
for visual-style notes. Preserve the existing mc-setup-and-stop behavior for a
required missing file, while avoiding checks for unrelated files.

Source: Coding guidelines

skills/mc-pipeline/PIPELINE.md-98-99 (1)

98-99: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Make the alpha-format contract consistent.

The policy requires both VP9 WebM for OBS and ProRes 4444 for the editor, then says MOV is the deliverable “everywhere.” Define ProRes as the editor/master deliverable and WebM as the live runtime deliverable so downstream stages do not select the wrong format.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-pipeline/PIPELINE.md` around lines 98 - 99, Update the HyperFrames
format policy in the pipeline documentation so ProRes 4444 MOV with alpha is
explicitly the editor/master deliverable, while VP9 alpha WebM is explicitly the
live OBS runtime deliverable. Remove or rewrite the unconditional “Baked alpha
MOVs” statement to avoid contradicting this dual-deliverable contract.
skills/mc-script/SKILL.md-40-40 (1)

40-40: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Do not invoke another skill’s script directly.

Referencing mc-cut’s transcribe.py from mc-script violates the skill-folder isolation contract. Consume a transcript artifact produced by mc-cut, or expose the operation through an installed core script.

As per coding guidelines, a skill may read only its own folder, installed core scripts, and project files.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-script/SKILL.md` at line 40, Update the transcription workflow in
the mc-script instructions so it does not directly invoke or reference mc-cut’s
transcribe.py. Instead, consume a transcript artifact generated by mc-cut or
route transcription through an installed core script, while preserving the
requirement to identify spoken script lines and annotate them with
word-timestamp-based TAKE markers.

Source: Coding guidelines

skills/mc-script/SKILL.md-25-46 (1)

25-46: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Keep mc-script as a thin router.

This section implements stage mechanics and judgment—quote-or-cut decisions, invention thresholds, CTA composition, transcript matching, lint QA, and runtime calculation. Extract these into named scripts/checklists; leave SKILL.md responsible for configuration, state, gates, handoffs, and artifact publication.

As per coding guidelines, stage skills must remain thin routers and must not implement stage mechanics or judgment.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-script/SKILL.md` around lines 25 - 46, The mc-script section in
SKILL.md is implementing stage mechanics and judgment instead of routing. Move
the quote-or-cut rules, invention threshold, CTA handling, transcript matching,
lint and checklist QA, and runtime calculation into named scripts or checklists;
retain only references to those resources plus configuration, state, gates,
handoffs, and artifact publication in SKILL.md.

Source: Coding guidelines

skills/mc-setup/assets/formats/livestream-pack.md-30-30 (1)

30-30: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Ship baked-alpha assets alongside the HTML control surface.

This line makes local HTML the lower-third/topic-card deliverable, which leaves the pack dependent on browser-source runtime and preserves editable graphics behavior. Keep HTML as an optional OBS/SPX-GC control surface, but also emit the required baked-alpha assets for editor use.

As per coding guidelines, graphics deliverables must use baked alpha and work in every editor.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-setup/assets/formats/livestream-pack.md` at line 30, Update the
lower-thirds and topic-cards deliverable description to require baked-alpha
assets alongside the HTML control surface, ensuring the graphics work in any
editor. Keep the local HTML explicitly optional and limited to OBS/SPX-GC
triggering, while preserving styling from {brand-path}/tokens.json.

Source: Coding guidelines

skills/mc-setup/SKILL.md-52-55 (1)

52-55: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Pin the HyperFrames installer and updater.

npx skills add and npx hyperframes skills update both resolve latest upstream packages at setup time. Use a reviewed package/version, lockfile-based install, or immutable artifact reference for these commands to keep setup from pulling changed or compromised upstream code.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-setup/SKILL.md` around lines 52 - 55, Update the HyperFrames setup
commands in the installation instructions to use a reviewed, immutable package
or artifact reference for both the skills installer and updater, rather than
resolving latest upstream content at runtime. Preserve the existing idempotent
and lightweight setup behavior, and ensure the pinned reference applies
consistently to `npx skills add` and `npx hyperframes skills update`.

Source: Linters/SAST tools

skills/mc-setup/SKILL.md-23-24 (1)

23-24: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not block setup on a missing custom directory.

skills/mc-setup/SKILL.md:23 requires {project-root}/_bmad/custom/, but setup later writes {project-root}/_bmad/custom/config.toml when the config is missing and the bootstrap path only guarantees _bmad/. A valid BMad-initialized project without a custom custom layer will be routed to bootstrap before setup can create it. Make bootstrap guarantee custom/, or gate setup on the installer-owned files and create custom/ before writing the Manticore section.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-setup/SKILL.md` around lines 23 - 24, The initialization check in
SKILL.md must not require the optional custom directory to already exist. Gate
bootstrap on the installer-owned config.toml and resolve_config.py files, then
ensure _bmad/custom/ is created before writing the Manticore configuration;
alternatively update the bootstrap flow to guarantee that directory.
skills/mc-beats/SKILL.md-42-42 (1)

42-42: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Do not leave Gate 3 checks as prose.

Line 42 explicitly says the quota checks are not scripted, while Lines 75-78 add overlap, image-policy, and generated-b-roll checks. Add executable validators that exit non-zero and invoke them before Line 82 presents the table; otherwise these requirements can be skipped while Gate 3 still proceeds.

Also applies to: 71-78

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-beats/SKILL.md` at line 42, Add executable Gate 3 validators for
the density, static-text-card cap, beats-per-minute floor, overlap,
image-policy, and generated-b-roll requirements described in the Production
Bible. Ensure each validator exits non-zero on violation and invoke all
validators before the table presentation step referenced near Line 82, so Gate 3
cannot proceed when any requirement fails.

Source: Coding guidelines

skills/mc-beats/SKILL.md-32-44 (1)

32-44: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Keep stage mechanics and judgment out of SKILL.md.

Lines 34-44 make the stage pitch ideas, scan triggers, choose compositions, and enforce planning budgets. The repository contract requires stage skills to remain thin routers; move mechanical planning and validation into named scripts, keep taste in references/configuration, and have this file orchestrate inputs, outputs, and gates only.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-beats/SKILL.md` around lines 32 - 44, Refactor the “Riff before you
plan” and “Build the table” sections in SKILL.md into a thin orchestration flow:
remove the embedded pitching, trigger scanning, composition selection, density
enforcement, and engine/asset validation mechanics, and delegate them to named
repository scripts. Keep only references to the required inputs, outputs, stage
gates, and configuration/reference sources, preserving the existing
hand-to-beats, edited-timeline, engine-alias, and asset-list workflow through
those delegated steps.

Source: Coding guidelines

skills/mc-beats/references/cta-placement.md-3-10 (1)

3-10: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Rewrite research-style claims before removing the sources section.

The changed text still presents measured outcomes as facts (30–40%, “single most reliably harmful,” “outperform,” and retention-collapse claims) while the Sources section is removed. Keep these as explicitly non-binding heuristics/defaults and remove unsupported uplift or ranking language.

Also applies to: 26-26, 63-63, 81-85, 111-112

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-beats/references/cta-placement.md` around lines 3 - 10, Revise the
research-style claims throughout the CTA guidance, including the principles and
the referenced sections, to use explicitly non-binding heuristic/default
language. Remove unsupported quantified uplift, performance comparisons,
rankings, and retention-collapse claims, while preserving the actionable CTA
placement guidance and omitting the removed Sources section.

Source: Coding guidelines

skills/mc-beats/references/density-and-creativity.md-16-20 (1)

16-20: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not mix fixed density ceilings with configurable budgets.

Line 16 hardcodes 6, 3, and 1.3 beats per minute, while Line 20 says these values come from the Production Bible and format profile. A configured tier can therefore receive contradictory planning guidance. Remove the fixed numbers or label them explicitly as non-binding examples.

Proposed fix
-Past roughly 6 beats a minute at the high tier, 3 at medium, and 1.3 at low, the density is itself the clutter.
+Use the resolved tier budget as the planning limit; denser treatment is clutter only when it exceeds that configured budget.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-beats/references/density-and-creativity.md` around lines 16 - 20,
Remove the hardcoded 6, 3, and 1.3 beats-per-minute ceilings from the opening
density guidance, or clearly label them as non-binding examples. Keep the
configurable tier budgets sourced from the Production Bible and format profile
as described in the “Tier character” section, avoiding contradictory fixed
limits.
skills/mc-assets/references/generative-editing-rules.md-23-24 (1)

23-24: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Keep generated-text policy consistent with the accuracy contract.

Generated assets must not be treated as a reliable source for accuracy-critical text; both locations currently permit that behavior.

  • skills/mc-assets/references/generative-editing-rules.md#L23-L24: remove the claim that quoted generated strings are reliable; route exact text to deterministic graphics or real screen recordings.
  • skills/mc-assets/SKILL.md#L60-L60: remove the “character-exact” generated-text checklist exception.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-assets/references/generative-editing-rules.md` around lines 23 -
24, Remove the claim in skills/mc-assets/references/generative-editing-rules.md
lines 23-24 that quoted generated strings are reliable, and direct
accuracy-critical text to deterministic graphics or real screen recordings. Also
remove the “character-exact” generated-text checklist exception in
skills/mc-assets/SKILL.md line 60 so both documents follow the same accuracy
contract.

Source: Coding guidelines

skills/mc-audio/SKILL.md-41-50 (1)

41-50: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Make audio QC executable or explicitly make it a creator review gate.

The skill claims every output is checked for duration, silence, truncation, and ordering, but provides no named check that can fail non-zero. Add and invoke an audio-QC script, or state that this is an explicit creator approval step outside the pipeline.

As per coding guidelines, any check claimed by the pipeline must be implemented by a script that exits non-zero on failure.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-audio/SKILL.md` around lines 41 - 50, Make the audio quality checks
in the Delivery and Checklist sections executable: add a named audio-QC script
that validates duration, silence, truncation, and output ordering, exits
non-zero on failure, and invoke it before delivery; otherwise revise the text to
clearly identify these checks as an explicit creator approval step outside the
pipeline.

Source: Coding guidelines

skills/mc-assets/SKILL.md-36-54 (1)

36-54: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Keep mc-assets/SKILL.md as a thin router.

This section embeds farming mechanics and judgment—prompting, provider escalation, deadline ordering, blessing copies, manifest updates, and project-state mutation. Move those details into references/scripts; keep the SKILL focused on resolving config, reading state, invoking named scripts, checking executable gates, and advancing state.

As per coding guidelines, stage skills must remain thin routers and must not implement stage mechanics or judgment.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-assets/SKILL.md` around lines 36 - 54, Refactor the Farming and
Blessing sections of mc-assets/SKILL.md into a thin router: retain only
config/state resolution, named script invocation, executable-gate checks, and
stage advancement. Move prompt rules, provider escalation, deadline ordering,
blessing/manifest mechanics, cost reporting, and project-state mutation details
into appropriate references or scripts, and have the skill invoke those
resources by name.

Source: Coding guidelines

skills/mc-assets/SKILL.md-21-22 (1)

21-22: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make person references subject-specific, not a global headshots/ gate.

headshots/ is documented as containing approved photos of the creator, but Line 22 stops the entire assets stage when it is absent and Line 30 routes every other person through it. That blocks object-only/generic-person assets and can supply the wrong identity.

Require creator headshots only for slots depicting the creator; use a rights-cleared original reference for another specific person, and allow non-person assets to proceed.

Also applies to: 30-30

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-assets/SKILL.md` around lines 21 - 22, Update the headshots
requirement in the asset workflow around the `{brand-path}/headshots/` check and
the person-reference routing at step 30: require creator headshots only when a
slot depicts the creator, use a rights-cleared original reference for another
specific person, and allow object-only or generic-person assets to proceed
without the creator headshots directory. Remove the unconditional stop and
routing that treats every asset as dependent on `headshots/`.
skills/mc-assets/SKILL.md-40-44 (1)

40-44: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Use shell-safe command examples across both farming skills.

Copying the documented placeholders directly can make the shell execute extra commands or create files. Replace image|video / tts|podcast|music|sfx with a single valid --kind value and use concrete path/file examples instead of unquoted > ... redirects or angle-bracket placeholders.

  • skills/mc-assets/SKILL.md#L40-L44
  • skills/mc-audio/SKILL.md#L31-L35
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-assets/SKILL.md` around lines 40 - 44, Update the command examples
in skills/mc-assets/SKILL.md lines 40-44 and skills/mc-audio/SKILL.md lines
31-35 to be shell-safe: replace alternation placeholders with one valid --kind
value, use concrete quoted paths and filenames, and quote or safely redirect the
resolved configuration output without angle-bracket placeholders. Preserve the
documented farming workflow and apply the same guidance at both sites.
skills/mc-cut/SKILL.md-43-52 (1)

43-52: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

The audio-map command contradicts the CFR-master rule it sits under.

Line 39 makes it a hard rule that every later step reads the recorded cfr_master, never the VFR original, and line 45 repeats that this section needs it. The command on line 50 then passes raw/<take>. Followed literally, the audio map (the timing source of truth for the whole stage) gets built against the original, while the EDL and renders run on the CFR master — the exact desync this stage warns about.

📝 Proposed fix
-uv run {skill-root}/scripts/analyze_audio.py raw/<take> -o cut/audio-map.json --noise <[cut] silence-floor-db>
+uv run {skill-root}/scripts/analyze_audio.py <cfr_master> -o cut/audio-map.json --noise <[cut] silence-floor-db>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-cut/SKILL.md` around lines 43 - 52, Update the audio-map command in
the “Transcribe and verify” section to use the recorded CFR master from the
previous section instead of raw/<take>. Keep the existing analyze_audio.py
options and output path unchanged, and ensure subsequent transcript verification
uses timings derived from that same CFR source.
skills/mc-cut/scripts/normalize_source.py-295-295 (1)

295-295: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

normalize_source.py hand-rolls staging instead of using the composite_core publish contract. Both findings share one root cause: the script stages to its own non-per-process temp name and publishes on a duration probe alone, skipping the decode-validate step every other renderer now performs.

  • skills/mc-cut/scripts/normalize_source.py#L295-L295: replace the hardcoded .{stem}.normalizing{suffix} name with core.temp_render_path(output, ...) so concurrent runs cannot interleave writes (and update the leftover assertion in skills/mc-cut/scripts/tests/test-normalize_source.py line 317).
  • skills/mc-cut/scripts/normalize_source.py#L310-L328: call core.validate_render(tmp) before core.publish_render, keeping the duration-drift refusal on top of it.

As per coding guidelines, deliverables must "render to a per-process temporary file, decode-validate, verify the output has not been superseded, and atomically move it into place".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-cut/scripts/normalize_source.py` at line 295, Update
skills/mc-cut/scripts/normalize_source.py:295 to use
core.temp_render_path(output, ...) instead of the hardcoded staging name, and
update the leftover assertion in
skills/mc-cut/scripts/tests/test-normalize_source.py:317 accordingly. In
skills/mc-cut/scripts/normalize_source.py:310-328, call
core.validate_render(tmp) before core.publish_render while preserving the
existing duration-drift refusal and atomic publish flow.

Source: Coding guidelines

skills/mc-cut/scripts/composite_core.py-297-322 (1)

297-322: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Pad overlay elements to their declared duration before chaining the lane.

trim=duration=... only caps; if an overlay asset is shorter than ov["dur"], the lane concat is short by the missing interval and later overlays in that lane run earlier. Pad each element to exactly ov["dur"], e.g. with tpad=stop_mode=clone:stop_duration=... before trim, so the lane timing is independent of asset length.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-cut/scripts/composite_core.py` around lines 297 - 322, Update the
overlay filter construction in add_overlay so each element is extended to
exactly ov["dur"] before chaining the lane. Add padding for assets shorter than
the declared duration, while retaining the existing trim and timestamp-reset
behavior so longer assets remain capped and lane timing stays aligned.
skills/mc-cut/scripts/analyze_audio.py-330-333 (1)

330-333: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Shared artifacts are published non-atomically across the new cut scripts. Every new script writes its deliverable straight to the final path with write_text, so an interrupted or superseded run leaves a truncated artifact that the next stage reads as valid. The repository rule requires render-to-temp, decode-validate, supersession check, then atomic move — one small write_json_atomic helper in analyze_audio.py would cover all three call sites.

  • skills/mc-cut/scripts/analyze_audio.py#L330-L333: publish audio-map.json through a temp file in the destination directory plus os.replace, and expose the helper for the siblings that import this module.
  • skills/mc-cut/scripts/edited_transcript.py#L196-L208: route both the -o markdown and the -j edited-words.json through the same atomic helper.
  • skills/mc-cut/scripts/snap_spans.py#L170-L174: route the --output snapped-spans JSON through the same atomic helper.

skills/mc-cut/scripts/cutplan.py writes candidates.json the same way at its main output block; worth converting in the same pass even though that line range is unchanged here.

As per coding guidelines: "Never write deliverables directly to their final paths: render to a per-process temporary file, decode-validate, verify the output has not been superseded, and atomically move it into place; shared artifacts must use the same approach."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-cut/scripts/analyze_audio.py` around lines 330 - 333, Replace
direct deliverable writes with a shared write_json_atomic helper defined in
skills/mc-cut/scripts/analyze_audio.py, rendering to a destination-directory
temporary file, decode-validating, checking for supersession, and publishing via
os.replace. Export and reuse it for audio-map.json in
skills/mc-cut/scripts/analyze_audio.py#L330-L333, both markdown and
edited-words.json outputs in
skills/mc-cut/scripts/edited_transcript.py#L196-L208, snapped-spans JSON in
skills/mc-cut/scripts/snap_spans.py#L170-L174, and candidates.json in
cutplan.py’s main output block; route the markdown output through the shared
atomic publication behavior as well.

Source: Coding guidelines

skills/mc-cut/scripts/cutplan.py-519-538 (1)

519-538: 🚀 Performance & Scalability | 🟠 Major | ⚡ Quick win

_find_section_redo is O(n · W²) and W scales with --section-window-s.

For every word i the inner j scan walks every word inside the 45s window, and each j runs its own prefix-match loop. At ~175 wpm that is roughly 130 candidates per i, each doing up to 130 comparisons: about 17k operations per word. On a 20-minute take (~3.5k words) that is tolerable, but the editorial pass explicitly targets 1.5-hour VODs (references/editorial-pass.md Line 76), where n ≈ 15k and this becomes hundreds of millions of pure-Python comparisons.

A cheap bound without changing semantics: index word positions by their normalized token and only try j values whose first token equals nwords[i], which skips the overwhelming majority of the window.

♻️ Sketch
     n = len(nwords)
+    from collections import defaultdict
+    positions = defaultdict(list)
+    for idx, w in enumerate(nwords):
+        positions[w].append(idx)
     out = []
     i = 0
     while i < n:
         best = None
-        j = i + 1
-        while j < n and words[j]["start"] - words[i]["start"] <= window_s:
+        for j in positions.get(nwords[i], ()):
+            if j <= i:
+                continue
+            if words[j]["start"] - words[i]["start"] > window_s:
+                break
             m = 0
             ...
-            j += 1
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/mc-cut/scripts/cutplan.py` around lines 519 - 538, Optimize
_find_section_redo by indexing word positions by normalized token, then restrict
each i’s candidate j scan to positions within the section window whose token
equals nwords[i]. Preserve the existing prefix-match, run_min threshold,
best-candidate selection, and output ordering semantics.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 01d65904-75c0-4ed6-9cbb-cd64429bdce1

📥 Commits

Reviewing files that changed from the base of the PR and between 97ce6f1 and 18443d2.

⛔ Files ignored due to path filters (1)
  • skills/module-help.csv is excluded by !**/*.csv
📒 Files selected for processing (114)
  • .claude-plugin/marketplace.json
  • .github/workflows/quality.yaml
  • .gitignore
  • AGENTS.md
  • CHANGELOG.md
  • README.md
  • TODO.md
  • docs/manny-under-the-hood.html
  • docs/review-rules.md
  • docs/user-guide.md
  • skills/mc-agent/SKILL.md
  • skills/mc-agent/customize.toml
  • skills/mc-agent/references/flows.md
  • skills/mc-agent/references/growing-the-studio.md
  • skills/mc-agent/references/onboarding.md
  • skills/mc-agent/references/skills-map.md
  • skills/mc-assets/SKILL.md
  • skills/mc-assets/customize.toml
  • skills/mc-assets/references/generative-editing-rules.md
  • skills/mc-audio/SKILL.md
  • skills/mc-audio/customize.toml
  • skills/mc-audio/references/audio-lanes.md
  • skills/mc-beats/SKILL.md
  • skills/mc-beats/customize.toml
  • skills/mc-beats/references/cta-placement.md
  • skills/mc-beats/references/density-and-creativity.md
  • skills/mc-beats/scripts/tests/test-verify_anchors.py
  • skills/mc-beats/scripts/verify_anchors.py
  • skills/mc-braindump/SKILL.md
  • skills/mc-braindump/customize.toml
  • skills/mc-cut/SKILL.md
  • skills/mc-cut/assets/editorial-review-template.md
  • skills/mc-cut/customize.toml
  • skills/mc-cut/references/editorial-pass.md
  • skills/mc-cut/references/rendering.md
  • skills/mc-cut/references/source-prep.md
  • skills/mc-cut/references/transcription.md
  • skills/mc-cut/scripts/analyze_audio.py
  • skills/mc-cut/scripts/composite_core.py
  • skills/mc-cut/scripts/cutplan.py
  • skills/mc-cut/scripts/edited_transcript.py
  • skills/mc-cut/scripts/normalize_source.py
  • skills/mc-cut/scripts/preflight.py
  • skills/mc-cut/scripts/remap_timecode.py
  • skills/mc-cut/scripts/render_final.py
  • skills/mc-cut/scripts/render_preview.py
  • skills/mc-cut/scripts/snap_spans.py
  • skills/mc-cut/scripts/tests/test-analyze_audio.py
  • skills/mc-cut/scripts/tests/test-cutplan.py
  • skills/mc-cut/scripts/tests/test-edited_transcript.py
  • skills/mc-cut/scripts/tests/test-normalize_source.py
  • skills/mc-cut/scripts/tests/test-preflight.py
  • skills/mc-cut/scripts/tests/test-render_preview.py
  • skills/mc-cut/scripts/tests/test-snap_spans.py
  • skills/mc-cut/scripts/tests/test-transcribe.py
  • skills/mc-cut/scripts/tests/test-verify_edl.py
  • skills/mc-cut/scripts/tests/test-verify_transcript.py
  • skills/mc-cut/scripts/transcribe.py
  • skills/mc-cut/scripts/verify_edl.py
  • skills/mc-cut/scripts/verify_transcript.py
  • skills/mc-graphics/SKILL.md
  • skills/mc-graphics/customize.toml
  • skills/mc-graphics/engines/design-prompting.md
  • skills/mc-graphics/engines/html.md
  • skills/mc-graphics/engines/hyperframes.md
  • skills/mc-graphics/references/motion-recipes.md
  • skills/mc-new/SKILL.md
  • skills/mc-new/customize.toml
  • skills/mc-ograf/SKILL.md
  • skills/mc-ograf/assets/graphic.template.mjs
  • skills/mc-ograf/assets/manifest.template.json
  • skills/mc-ograf/assets/preview.template.html
  • skills/mc-ograf/customize.toml
  • skills/mc-ograf/references/engine-rationale.md
  • skills/mc-ograf/references/ograf-spec.md
  • skills/mc-ograf/references/resolve-workflow.md
  • skills/mc-ograf/scripts/scaffold_ograf.py
  • skills/mc-ograf/scripts/tests/test-scaffold_ograf.py
  • skills/mc-ograf/scripts/tests/test-verify_ograf.py
  • skills/mc-ograf/scripts/verify_ograf.py
  • skills/mc-outline/SKILL.md
  • skills/mc-outline/customize.toml
  • skills/mc-package/SKILL.md
  • skills/mc-package/customize.toml
  • skills/mc-package/references/cta-placement.md
  • skills/mc-package/references/live-event.md
  • skills/mc-package/references/series-template.md
  • skills/mc-pipeline/PIPELINE.md
  • skills/mc-pipeline/SKILL.md
  • skills/mc-pipeline/customize.toml
  • skills/mc-retro/SKILL.md
  • skills/mc-retro/customize.toml
  • skills/mc-script/SKILL.md
  • skills/mc-script/customize.toml
  • skills/mc-setup/SKILL.md
  • skills/mc-setup/assets/craft-checklist.md
  • skills/mc-setup/assets/formats/livestream-pack.md
  • skills/mc-setup/assets/formats/livestream-vod.md
  • skills/mc-setup/assets/formats/screen-tutorial.md
  • skills/mc-setup/assets/formats/voiceover-explainer.md
  • skills/mc-setup/assets/production-bible-spec.md
  • skills/mc-setup/assets/studio-defaults.toml
  • skills/mc-setup/assets/voice-bible-spec.md
  • skills/mc-setup/references/bootstrap.md
  • skills/mc-setup/references/migration-0x.md
  • skills/mc-setup/references/stack-linux.md
  • skills/mc-setup/references/stack-macos.md
  • skills/mc-setup/references/stack-windows.md
  • skills/mc-setup/scripts/lint_genericity.py
  • skills/mc-setup/scripts/tests/test-lint_genericity.py
  • skills/mc-setup/scripts/tests/test-merge_profile_frontmatter.py
  • skills/mc-stream-pack/SKILL.md
  • skills/mc-stream-pack/customize.toml
  • skills/module.yaml
💤 Files with no reviewable changes (30)
  • skills/mc-outline/customize.toml
  • skills/mc-ograf/references/engine-rationale.md
  • skills/mc-assets/customize.toml
  • skills/mc-new/customize.toml
  • skills/mc-ograf/assets/preview.template.html
  • skills/mc-audio/customize.toml
  • skills/mc-beats/customize.toml
  • skills/mc-script/customize.toml
  • skills/mc-pipeline/customize.toml
  • skills/mc-ograf/references/ograf-spec.md
  • skills/mc-ograf/SKILL.md
  • skills/mc-ograf/scripts/tests/test-scaffold_ograf.py
  • skills/mc-package/customize.toml
  • skills/mc-cut/customize.toml
  • skills/mc-retro/customize.toml
  • skills/mc-ograf/references/resolve-workflow.md
  • skills/mc-braindump/customize.toml
  • skills/mc-ograf/assets/graphic.template.mjs
  • skills/mc-agent/customize.toml
  • skills/mc-ograf/assets/manifest.template.json
  • skills/mc-graphics/customize.toml
  • skills/mc-stream-pack/customize.toml
  • skills/mc-ograf/customize.toml
  • .claude-plugin/marketplace.json
  • skills/mc-ograf/scripts/tests/test-verify_ograf.py
  • skills/mc-ograf/scripts/verify_ograf.py
  • skills/mc-ograf/scripts/scaffold_ograf.py
  • skills/mc-setup/scripts/tests/test-lint_genericity.py
  • skills/mc-agent/references/skills-map.md
  • skills/mc-setup/scripts/lint_genericity.py

@bmadcode
bmadcode merged commit 39f0c67 into main Jul 27, 2026
2 checks 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