Rebuild the cut pipeline and take the module goal-oriented - #9
Conversation
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.
|
Too many files changed for review. ( Bypass the limit by tagging |
|
Warning Review limit reached
Next review available in: 49 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (7)
WalkthroughThis 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. ChangesManticore pipeline overhaul
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
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.
There was a problem hiding this comment.
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 winRemove 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 winRemove 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 liftPreserve 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 ofSKILL.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 winRestrict the WebM skip rule to
vmixandWirecast.“vmix or other” makes every non-vMix
[live] toolskip WebM, including Ecamm/OBS paths. Saywhen [live] tool is vmixorWirecast, 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 winCorrect 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 winUse 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>.mdfor 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 winDo not require braindump citations in
outline.md.
outline.mdis 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 winDo not complete
packagebefore captions are produced.When
cut/edl.jsonexists buttranscript/words.jsondoes not, Lines 121-135 defer captions, yet this condition advances the project once chapters are done. Require captions/transcript completion too, or leavestageandstages_doneunchanged 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 winAllow 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 winKeep the required installer flags in the fallback command.
npx bmad-method installfollows a document rule that non-interactive installs must include--modules coreand--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 winMake 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-nonetimeline 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 winDo not silently bootstrap a missing creator template.
When
seriesis set but{brand-path}/templates/<series>.mdis missing, this flow creates a series-level contract from episode-local choices and continues. Route the missing creator file tomc-setupand 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 winKeep footage-first routing in dependency order.
This list places
graphicsbeforeassets, whileskills/mc-pipeline/PIPELINE.mdrequires assets to run before graphics. Correct the list tonew, 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 winInclude 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 topackaging/final/and recorded inartifacts. 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 winScope 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 winMake 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 winDo not invoke another skill’s script directly.
Referencing
mc-cut’stranscribe.pyfrommc-scriptviolates the skill-folder isolation contract. Consume a transcript artifact produced bymc-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 liftKeep
mc-scriptas 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.mdresponsible 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 liftShip 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 winPin the HyperFrames installer and updater.
npx skills addandnpx hyperframes skills updateboth 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 winDo not block setup on a missing custom directory.
skills/mc-setup/SKILL.md:23requires{project-root}/_bmad/custom/, but setup later writes{project-root}/_bmad/custom/config.tomlwhen 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 guaranteecustom/, or gate setup on the installer-owned files and createcustom/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 liftDo 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 liftKeep 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 winRewrite 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 winDo 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 winKeep 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 liftMake 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 liftKeep
mc-assets/SKILL.mdas 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 winMake 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 winUse 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|sfxwith a single valid--kindvalue and use concrete path/file examples instead of unquoted> ...redirects or angle-bracket placeholders.
skills/mc-assets/SKILL.md#L40-L44skills/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 winThe 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 passesraw/<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.pyhand-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 withcore.temp_render_path(output, ...)so concurrent runs cannot interleave writes (and update the leftover assertion inskills/mc-cut/scripts/tests/test-normalize_source.pyline 317).skills/mc-cut/scripts/normalize_source.py#L310-L328: callcore.validate_render(tmp)beforecore.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 winPad overlay elements to their declared duration before chaining the lane.
trim=duration=...only caps; if an overlay asset is shorter thanov["dur"], the lane concat is short by the missing interval and later overlays in that lane run earlier. Pad each element to exactlyov["dur"], e.g. withtpad=stop_mode=clone:stop_duration=...beforetrim, 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 winShared 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 smallwrite_json_atomichelper inanalyze_audio.pywould cover all three call sites.
skills/mc-cut/scripts/analyze_audio.py#L330-L333: publishaudio-map.jsonthrough a temp file in the destination directory plusos.replace, and expose the helper for the siblings that import this module.skills/mc-cut/scripts/edited_transcript.py#L196-L208: route both the-omarkdown and the-jedited-words.jsonthrough the same atomic helper.skills/mc-cut/scripts/snap_spans.py#L170-L174: route the--outputsnapped-spans JSON through the same atomic helper.
skills/mc-cut/scripts/cutplan.pywritescandidates.jsonthe same way at itsmainoutput 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_redois O(n · W²) and W scales with--section-window-s.For every word
ithe innerjscan walks every word inside the 45s window, and eachjruns its own prefix-match loop. At ~175 wpm that is roughly 130 candidates peri, 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.mdLine 76), wheren≈ 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
jvalues whose first token equalsnwords[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
⛔ Files ignored due to path filters (1)
skills/module-help.csvis excluded by!**/*.csv
📒 Files selected for processing (114)
.claude-plugin/marketplace.json.github/workflows/quality.yaml.gitignoreAGENTS.mdCHANGELOG.mdREADME.mdTODO.mddocs/manny-under-the-hood.htmldocs/review-rules.mddocs/user-guide.mdskills/mc-agent/SKILL.mdskills/mc-agent/customize.tomlskills/mc-agent/references/flows.mdskills/mc-agent/references/growing-the-studio.mdskills/mc-agent/references/onboarding.mdskills/mc-agent/references/skills-map.mdskills/mc-assets/SKILL.mdskills/mc-assets/customize.tomlskills/mc-assets/references/generative-editing-rules.mdskills/mc-audio/SKILL.mdskills/mc-audio/customize.tomlskills/mc-audio/references/audio-lanes.mdskills/mc-beats/SKILL.mdskills/mc-beats/customize.tomlskills/mc-beats/references/cta-placement.mdskills/mc-beats/references/density-and-creativity.mdskills/mc-beats/scripts/tests/test-verify_anchors.pyskills/mc-beats/scripts/verify_anchors.pyskills/mc-braindump/SKILL.mdskills/mc-braindump/customize.tomlskills/mc-cut/SKILL.mdskills/mc-cut/assets/editorial-review-template.mdskills/mc-cut/customize.tomlskills/mc-cut/references/editorial-pass.mdskills/mc-cut/references/rendering.mdskills/mc-cut/references/source-prep.mdskills/mc-cut/references/transcription.mdskills/mc-cut/scripts/analyze_audio.pyskills/mc-cut/scripts/composite_core.pyskills/mc-cut/scripts/cutplan.pyskills/mc-cut/scripts/edited_transcript.pyskills/mc-cut/scripts/normalize_source.pyskills/mc-cut/scripts/preflight.pyskills/mc-cut/scripts/remap_timecode.pyskills/mc-cut/scripts/render_final.pyskills/mc-cut/scripts/render_preview.pyskills/mc-cut/scripts/snap_spans.pyskills/mc-cut/scripts/tests/test-analyze_audio.pyskills/mc-cut/scripts/tests/test-cutplan.pyskills/mc-cut/scripts/tests/test-edited_transcript.pyskills/mc-cut/scripts/tests/test-normalize_source.pyskills/mc-cut/scripts/tests/test-preflight.pyskills/mc-cut/scripts/tests/test-render_preview.pyskills/mc-cut/scripts/tests/test-snap_spans.pyskills/mc-cut/scripts/tests/test-transcribe.pyskills/mc-cut/scripts/tests/test-verify_edl.pyskills/mc-cut/scripts/tests/test-verify_transcript.pyskills/mc-cut/scripts/transcribe.pyskills/mc-cut/scripts/verify_edl.pyskills/mc-cut/scripts/verify_transcript.pyskills/mc-graphics/SKILL.mdskills/mc-graphics/customize.tomlskills/mc-graphics/engines/design-prompting.mdskills/mc-graphics/engines/html.mdskills/mc-graphics/engines/hyperframes.mdskills/mc-graphics/references/motion-recipes.mdskills/mc-new/SKILL.mdskills/mc-new/customize.tomlskills/mc-ograf/SKILL.mdskills/mc-ograf/assets/graphic.template.mjsskills/mc-ograf/assets/manifest.template.jsonskills/mc-ograf/assets/preview.template.htmlskills/mc-ograf/customize.tomlskills/mc-ograf/references/engine-rationale.mdskills/mc-ograf/references/ograf-spec.mdskills/mc-ograf/references/resolve-workflow.mdskills/mc-ograf/scripts/scaffold_ograf.pyskills/mc-ograf/scripts/tests/test-scaffold_ograf.pyskills/mc-ograf/scripts/tests/test-verify_ograf.pyskills/mc-ograf/scripts/verify_ograf.pyskills/mc-outline/SKILL.mdskills/mc-outline/customize.tomlskills/mc-package/SKILL.mdskills/mc-package/customize.tomlskills/mc-package/references/cta-placement.mdskills/mc-package/references/live-event.mdskills/mc-package/references/series-template.mdskills/mc-pipeline/PIPELINE.mdskills/mc-pipeline/SKILL.mdskills/mc-pipeline/customize.tomlskills/mc-retro/SKILL.mdskills/mc-retro/customize.tomlskills/mc-script/SKILL.mdskills/mc-script/customize.tomlskills/mc-setup/SKILL.mdskills/mc-setup/assets/craft-checklist.mdskills/mc-setup/assets/formats/livestream-pack.mdskills/mc-setup/assets/formats/livestream-vod.mdskills/mc-setup/assets/formats/screen-tutorial.mdskills/mc-setup/assets/formats/voiceover-explainer.mdskills/mc-setup/assets/production-bible-spec.mdskills/mc-setup/assets/studio-defaults.tomlskills/mc-setup/assets/voice-bible-spec.mdskills/mc-setup/references/bootstrap.mdskills/mc-setup/references/migration-0x.mdskills/mc-setup/references/stack-linux.mdskills/mc-setup/references/stack-macos.mdskills/mc-setup/references/stack-windows.mdskills/mc-setup/scripts/lint_genericity.pyskills/mc-setup/scripts/tests/test-lint_genericity.pyskills/mc-setup/scripts/tests/test-merge_profile_frontmatter.pyskills/mc-stream-pack/SKILL.mdskills/mc-stream-pack/customize.tomlskills/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
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-cutgrew from a thin wrapper into a real pipeline with scripts that do the work:normalize_source.py— source prep and conformanalyze_audio.py— silence/level analysis feeding the cut planedited_transcript.py— transcript that tracks the editcomposite_core.py— compositing core split out of the renderercutplan.pyandpreflight.pysubstantially expandedverify_anchors.py(+ tests) added undermc-beatsCut keys are now kebab-case throughout.
Goal-oriented overhaul
11 skills rewritten from step-by-step procedure to stated destination, and all 15
SKILL.mddescriptions brought to the BMad frontmatter standard. Three invariants applied across the module:mc-agentCustomization layer
customize.tomlis jettisoned entirely — every per-skill file removed in favor ofmc-setup/assets/studio-defaults.toml. The Production Bible owns style; creator templates install at setup time. Newreferences/bootstrap.mdandreferences/migration-0x.mdcover the path from older installs.Removals
mc-ografand the editable-graphics lanelint_genericity.pyand its tests, replaced bydocs/review-rules.mdTODO.mdtrimmed to a public-facing idea listSummary by CodeRabbit
New Features
Changes
Documentation