review-roughcut
いつ使うか(必ず発火する条件)
- ユーザーが「レビューして」「粗編集を評価して」「review_report.yaml を作って」と言ったとき
full-pipelineの Step 7 として呼ばれたときcompile-timelineが05_timeline/timeline.jsonを新規作成または更新した直後scripts/compile-timeline.ts --patch ...で patch apply 後のtimeline.jsonが更新された直後timeline.json、06_review/human_notes.yaml、STYLE.mdのいずれかが変わり、既存 review artifact が stale になったとき
compile の直後に review を省略してはいけない。 timeline_version が変わったら前回の
review_report.yaml / review_patch.json は再評価対象とみなす。
前提条件
schemas/review-report.schema.jsonとschemas/review-patch.schema.jsonを守ることruntime/commands/review.tsの preflight / promote / state transition と整合すること/reviewpreflight は deterministic に以下を行う- compile
- placeholder
05_timeline/review.mp4の生成 05_timeline/review-qc-summary.jsonの生成- roughcut critique
- patch safety guard
06_review/human_notes.yamlがある場合はschemas/human-notes.schema.jsonに合わせて読むこと- current repo の
review.mp4は実レンダではなく JSON stub。直接視聴ベースの断定は避け、timeline / QC からの推論であることを明示すること - compile gate / planning gate / timeline schema validation が preflight で落ちた場合、これは critic の
FATAL判定ではなく command failure (GATE_CHECK_FAILED) として止まる
評価の優先順
1. evidence の優先順
human_notes.yaml- brief / blueprint との factual mismatch
timeline.json/review-qc-summary.json/ markers / quality flags- AI-only craft / style inference
2. critique baseline の順序
- brief mismatch
- blueprint mismatch
- technical deliverability
- craft / style
taste-level のコメントで factual mismatch を覆い隠さない。
3. craft 判断の優先順位
craft 上のトレードオフは Walter Murch の Rule of Six で並べる。
emotion > story > rhythm > eye_trace > plane_2d > space_3d
2D / 3D continuity が改善しても、emotion や story を弱めるなら減点する。
references/review-rubric.md を必ず参照すること。
やること(ステップ)
Step 1: deterministic metrics を生成して確認する
- まず
npx tsx scripts/review-metrics.ts <project-dir>を実行し、06_review/review_metrics.jsonを生成する /reviewコマンド経由では preflight 後、critic agent の前にreview_metrics.jsonが自動生成されるreview_metrics.jsonのchecks[].statusがfail/warnの項目は、review_report.yamlのfatal_issues/warnings/mismatches_to_blueprintに機械的に転記する- LLM は metrics が測れない主観的判断に集中する:
- カットの気持ちよさ
- 物語の説得力
- 感情の立ち上がり / 余韻
- 2D / 3D continuity を犠牲にしてでも emotion / story を優先すべき箇所
- 定量チェックを LLM の注意力に依存させない。Rule of Six のうち、決定論的に測れる違反は
review_metrics.jsonを正とする
Step 2: preflight の成否と artifact を確認する
- 現在の
05_timeline/timeline.jsonを正とする 05_timeline/review.mp4と05_timeline/review-qc-summary.jsonを確認するreview.mp4が placeholder の場合は、summary_judgment.rationaleやdetailsで inference ベースの評価であることを曖昧にしない
Step 3: factual mismatch を先に切る
must_have,must_avoid,message.primary,audience.primary,emotion_curveを確認するedit_blueprint.yamlの beat purpose, required role coverage, pacing intent とtimeline.jsonの実際を照合する- factual mismatch を見落としたまま taste の話に進まない
Step 4: rubric に沿って評価する
references/review-rubric.mdの構成 / 感情 / リズム / 技術チェックを順番に見る- 重要な指摘にはできるだけ
evidence,affected_beat_ids,affected_clip_idsを付ける - 直接観測と推論を混ぜない
- 短尺SNSでは
social_hook_treatment_valid,social_visual_refresh_valid,social_title_copy_fit_valid,social_cta_treatment_valid,social_audio_policy_validを確認する。brief がCTAを要求する場合、登録済みcta-cardが終盤35%に2秒以上あることを完成条件にする
Step 5: review_report.yaml を作る
必須 section:
summary_judgmentstrengthsweaknessesfatal_issueswarningsmismatches_to_briefmismatches_to_blueprintrecommended_next_pass
Step 6: 判定を決める
PASS
- 意味: technical deliverability に blocker がなく、構成 / 感情 / リズムにも重大な再編集要求がない
- report への書き方:
summary_judgment.status: approvedfatal_issues: []
- runtime 上の意味:
critic judgment が通っただけで、project state は operator accept まで自動で
approvedにならない
needs_revision
- 意味: technical blocker はないが、hook / pacing / beat order / clip choice / audio policy などに改善余地がある
- report への書き方:
summary_judgment.status: needs_revisionfatal_issues: []
- 次アクション: localized fix が safe op に落ちるなら patch を出す
FATAL
- 意味: preflight 通過後なお、意図した message / coherence / technical deliverability を壊す blocker が残る
- report への書き方:
summary_judgment.status: blockedfatal_issuesを必ず埋めるrecommended_next_pass.goalで compile 再実行や blueprint 見直しの要否を明示する
- 次アクション: unsafe patch でごまかさず、root cause を report に残す
review_patch.json の生成ルール
/reviewでは06_review/review_patch.jsonを artifact として常に作る- safe op がない場合も空 patch を作る
基本 shape:
{
"timeline_version": "<timeline.json version>",
"operations": []
}
operations を入れてよい条件:
- 問題が局所的で、safe / deterministic / machine-executable な修正に落ちる
reasonが 1 op ごとに明確evidenceが report の指摘と結び付いている
safe rule:
replace_segmenttarget_clip_idのfallback_segment_idsに含まれる segment- または
human_notes.yamlのapproved_segment_idsに含まれる segment
insert_segmenthuman_notes.yamlにdirective_type: insert_segmentと machine-readable anchor がある場合のみ
trim_segment,move_segment,remove_segment,change_audio_policy,add_marker,add_note- target が一意で、意図と副作用を説明できる場合のみ
safe に直せない場合:
- issue は report に残す
- patch は
operations: []にする - 無理に unsafe な
replace_segment/insert_segmentを作らない
references/patch-patterns.md を参照し、自然言語の改善提案を schema-valid な op に落とすこと。
出力 artifact
06_review/review_metrics.json06_review/review_report.yaml06_review/review_patch.json05_timeline/review.mp405_timeline/review-qc-summary.json
注意事項
human_notes.yamlが AI 判断と衝突した場合は human note を優先し、AI 側はalternative_directionsに退避するPASSでも warning はありうる。warning だけでfatal_issuesに昇格させないFATALでも、原因が preflight hard failure なら review artifact ではなく command failure になるreplace_segment/insert_segmentは patch safety guard で filtering される。reject される前提の op に依存した report を書かない