# Education Video Studio

> 正確な教育内容を、プロモーション級の2Dモーショングラフィックス品質で伝えるナレーション付き教育・研修動画と配布PDFを制作する。資料収集と教材本体の完成を先に行い、その後にタイトル、Sequence、Scene間Bridge、Morph、Camera、Mask、Typography、Layer choreography、Three.jsによる2.5D/3D空間表現、音同期、動画/PDF別構図を設計する。SVGアニメーション、視覚的に魅力的、興味を惹く、高い映像表現、時間軸で理解が生まれる教材を求められたときに使う。Education Program Designerのepisode contractがある場合はseries modeでPrimary範囲だけを深く可視化する。研修全体設計はeducation-program-designer、規範監査・証跡中心はeducation-videoを優先する。

- Skill: `daito-dot/education-video-studio` (Agent Skill, multi-file: 368 files)
- Install (CLI): `npx skillmds@latest add daito-dot/education-video-studio`
- Raw SKILL.md: https://api.skillmd.com/api/skills/daito-dot/education-video-studio/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Design & Media
- Author: daito-dot (https://skillmd.com/u/daito-dot)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/daito-dot/education-video-studio

---


# Education Video Studio

正確な教材内容を、**Professional Motion Graphics水準の時間設計**へ変換する。
目標は「SVGが動く教材」ではない。**時間の変化そのものによって理解が生まれ、映像としても完成度が高い教育動画**を作る。

## 不変条件：資料と教材本体を先に完成する

映像表現を高度化しても制作順は逆転させない。

`source / program context -> research agenda -> sources/source register -> Research Closure -> content.md -> Content IR -> Content Freeze -> Instruction Search -> Instruction Freeze -> Realization Search -> Realization Freeze -> scope/duration -> communication design -> visual psychology design -> Art Direction / motion design -> script / timeline -> render -> visual psychology release`

- 根拠資料を実取得して確認する。
- `sources.md` を作る。
- 尺や演出で削る前に `content.md` を完成・照合する。
- **`content.md` が完成するまで、完成版のシナリオ・Sequence・Morph・Camera・SVGを設計しない。**
- 制作環境のcapability checkだけは先に実施してよい。内容上の結論は作らない。
- 映像設計中に新しい事実が必要になったら `sources.md -> content.md` へ戻る。

## 品質目標

### Hard constraints
1. 事実・規範・数値を捏造しない。
2. 危険な誤解や、原典と異なる指示を作らない。
3. 語り・動画・PDFの意味を一致させる。
4. 最終レンダーで読めない、重なる、切れる、壊れる状態を納品しない。
5. 宣言した映像品質を、環境制約を理由に黙って下げない。

### 標準Motion Quality Profile

既定は **Level 3 — Professional Motion Graphics**。
詳細は `references/motion-quality-rubric.md`。

- Sequence全体で時間を設計する。
- Scene間に意味のあるBridgeまたは意図的なCutを持たせる。
- Camera / Morph / Mask / Layer / Typography / Easingを内容に応じて統合する。
- 複数要素は一つの動作・因果として協調してよい。
- 各時点で構図が成立する。
- ナレーションだけでなく、必要ならSE・音楽も時間設計へ参加させる。
- 動きを入れない箇所も、意図した静止として設計する。

Level 4の3D・複雑なcharacter rig・cinematic表現は必要な場合だけ狙う。

## Meta-premortem

主要Creative Gateごとに `references/creative-premortem.md` を使う。
「最終MP4がAnimated Slides / target quality未達で拒否された」と仮定し、**現在の証拠があるriskを最大3件だけ**挙げる。件数埋めや抽象的な不安は禁止。前回Premortem自体の盲点も点検する。

Premortemは新しい安全規則を増やすためではなく、局所PASSが全体品質を保証していない場所を見つけるために使う。

## V5 Fail-Closed Creative Production

Creative Gateは助言ではなく**工程権限**として扱う。`references/fail-closed-production.md` と `harness/gate-state.mjs` を使う。

- 案件ルートに `gate-manifest.json` を置く。
- Gate PASSには、判定したinputと実物evidenceのhashを保存する。
- 上流input/evidenceが変わればそのGateと下流Gateを自動 `STALE` にする。
- Benchmark / renderer lock / audio readinessまでPASSしなければFull Productionをunlockしない。
- Blind Creativeが `INCOMPLETE`、narrationが欠落、final Creative GateがFAILなら `final` と呼ばない。
- 最終的に `release-status.json = FINALIZABLE` を作れない成果物はdraftである。

```bash
node harness/gate-state.mjs gate-manifest.json init 3
node harness/gate-state.mjs gate-manifest.json status
node harness/gate-state.mjs gate-manifest.json unlock production
node harness/gate-state.mjs gate-manifest.json release
```

GateがFAILしたら「もう作ったから」下流修正で逃げない。指定されたArt Direction / Asset / Storyboard / Animatic等へ戻る。

## Motionの4分類

本文中の動きを「意味がある／ない」の二択にしない。

1. **Semantic motion** — 因果、順序、状態、数量、構造を直接説明する。
2. **Orienting motion** — 視線、空間、Scene間の連続性を保つ。
3. **Expressive motion** — リズム、質感、期待感、ブランド性を作る。内容を邪魔しない範囲で使う。
4. **Decorative motion** — 説明・方向・表現のいずれにも寄与しない。使わない。

「意味のない動きを避ける」を「動きを最低限にする」と解釈しない。

## 動画とPDFの責務を分ける

**同じ情報源から出すが、同じ構図から出す必要はない。**

- 動画：Sequence、Shot、Camera、Morph、一時的構図、Transitionを使う。
- PDF：完成状態、Before/After、全体フロー、判断表、出典を読み返せる構図にする。
- 数値・ラベル・因果関係は同じcontent/source idから取る。
- 新規制作では `harness/motion-film-skeleton.html` の **Motion Film model** を既定にする。
- 旧 `deck-skeleton.html` / `defineDeck()` は既存案件の互換モードとして残す。

詳細は `references/video-handout-model.md`。

## V5 renderer abstraction

Do not make Chromium the single point of failure. For browser-independent 2D work, a **SVG Frame backend** is available, but it is not an Art Direction default. Choose it only after the Visual Concept and asset requirements are fixed.

- Define the frame as a pure `renderFrame(t) -> SVG` function.
- Rasterize the final SVG with Inkscape, Sharp, or CairoSVG; encode with FFmpeg.
- Use the same information model to render separate handout SVG pages.
- Motion Proofではcandidate renderer profileを保存し、Benchmark PASS後にfinal renderer構成をlockする。
- Keep Browser backend for UI/DOM-heavy sequences, but treat it as one adapter, not the architecture.
- Use Three.js for true depth / spatial camera / material-light interaction / 2.5D parallax when those qualities are required by Art Direction.
- Use Manim / Blender / authored alpha video for sequences that materially benefit from them.
- Use `hybrid-compose.mjs` when different layers are best produced by different backends.
- A renderer change invalidates renderer-specific Visual QA. Never silently delete planned motion.

Primary browser-independent files:
- `harness/svg-frame.mjs` — pure SVG motion primitives.
- `harness/svg-frame-project-skeleton.mjs` — project contract.
- `harness/render-svg.mjs` — SVG frame -> PNG -> MP4/PDF/QA.
- `harness/svg-layout-audit.py` — Inkscape geometry audit.
- `harness/render-three.mjs` — Three.js project -> deterministic frame sequence / alpha WebM / Motion Proof。制限環境ではembedded offline ESM + Python-Xvfb driverを自動優先する。
- `harness/render-three-xvfb.py` — headed Chromium + Xvfb。Three.js coreはdata URL ESM、project assetは`route.fulfill()`で供給する。
- `harness/materialize-three-offline-runtime.mjs` — 添付GitHub source ZIP / npm tgz / package directoryをwhitelist抽出・source lock検証し、offline runtimeへ変換する。
- `harness/build-three-offline-runtime.mjs` / `verify-three-offline-runtime.mjs` — 承認済みThree.js source profileをversion / revision / Git blob / exact commitで検証し、単一offline runtimeを生成・検証する。
- `harness/vendor-three-runtime.mjs` — GLTFLoader等が必要な場合に、runtimeと同一source profileの公式addonだけをvendorする。
- `harness/hybrid-compose.mjs` — Three.js / SVG / authored video等のFFmpeg合成。

## Single mode / Series mode

### Single mode

上位の研修設計がない単発教材。対象範囲の網羅性をこの教材が持つ。

### Series mode

`episode-brief.md`、`coverage-matrix.md`、`program-content.md`、`program-manifest.json` などがある場合は `references/series-mode.md` を先に読む。

**episode contractを上位scopeとして扱い、研修全体の責任をこの動画でもう一度背負わない。**

- Primary：この動画で深く理解させる。
- Prerequisite：既習として扱う。
- Callback：Primaryへ接続する最小量だけ再提示する。
- Explicit exclusions：この動画に無くて正常。
- 別unitがPrimaryの項目は欠落扱いしない。
- program-level gapは目の前の動画へ押し込まず親設計へ返す。

資料先行はSeries modeでも変えない。

## 制作手順

### 0. Capabilityを確認する

`references/renderer-strategy.md` に従い、Browser / SVG Frame / Three.js / FFmpeg / font / PDF / 必要なspecialized backendの可用性だけを確認する。この時点でVisualをrendererへ合わせない。Three.js候補で通常browser pathが失敗しても即Unavailableにせず、`references/threejs-offline-runtime.md` / `references/threejs-restricted-environment.md` に従いembedded runtime、Xvfb/WebGL2、project-local routeを別々に確認する。runtimeが無く、会話に公式Three.js source ZIP / npm tgz / package treeが添付・mount済みなら`materialize-three-offline-runtime.mjs`で取り込む。大きなsource ZIPは丸ごと実行せずwhitelist fileだけを検証・抽出する。

**完了**：利用可能経路とfallbackが分かる。

### 1. Source -> Content Gateを通す

Single / Series scopeを確定し、`references/domain.md` / `references/series-mode.md` / `references/sources.md` / `references/content.md` に従う。

`source / program context -> sources.md -> content.md`

- 根拠資料を実取得する。
- `sources.md` で数値・規範・条件を追跡可能にし、同時に `research-agenda.json` / `source-register.json` を作る。
- `harness/research_closure.py . skeleton` で全research dimensionを列挙し、追加調査後に `harness/research_closure.py . validate` をPASSさせる。`not_applicable` は正常。Blocking gapを演出で隠さない。
- 尺や演出で削る前に `content.md` を完成・照合する。
- **`content.md` のBlockingがゼロになるまで、完成版のSequence・シナリオ・SVG・Motionへ進まない。**
- Series modeではepisode contractを上位scopeとし、別unitの責任を抱え込まない。

### 2. Content IR / Instruction Searchを完了してInstruction Freezeする

Studio単体利用でも、この前工程を省略しない。`content.md` から `content-model.json`、`knowledge-structure.json`、`learner-scenarios.json`、`learning-jobs.json` を作り、内容と学習責任を機械可読にする。Series modeではepisode contractの `instructional_handoff` をauthoritativeとし、`validate_instruction_handoff.py` で一致を確認する。

```bash
python3 harness/instruction_inputs.py . validate
python3 harness/validate_instruction_handoff.py .
python3 harness/instruction_inputs.py . freeze
python3 harness/enumerate_instruction_candidates.py .
# prompts/lens-instruction-applicability.md で全candidateを評価する。winnerは選ばない
python3 harness/validate_candidate_evaluations.py .
python3 harness/instruction_optimizer.py .
python3 harness/instruction_gate.py . check
python3 harness/instruction_gate.py . freeze
python3 harness/instruction_gate.py . check-freeze
node harness/gate-state.mjs gate-manifest.json stamp instruction_design PASS --inputs content.md,content-model.json,knowledge-structure.json,learner-scenarios.json,learning-jobs.json,content-freeze.json,instruction-plan.json,instruction-freeze.json --evidence instruction-freeze.json
```

`NONE` は「内容を削る」ではなく、frozen contentを忠実に届ける以外の追加教育介入を行わない選択である。心理法則・問いかけ・prediction・worked example等をStudioの思いつきで追加しない。closed laneは全列挙、LLMは全candidateの意味評価だけ、組合せ・Pareto・ablation・sensitivityはdeterministic engineが担当する。

Instruction Planの `implementation_unknowns` は未解決のままscriptへ流さない。`references/instruction-realization.md` に従い、全unknownをdeterministicに列挙し、open semantic spaceは非網羅であることを明示したbounded comparisonを行う。operatorを別手法へ差し替えず、wording / duration / visual form / example granularity等のsurface realizationだけを解く。

```bash
python3 harness/instruction_realization.py . skeleton
# instruction-realization.json の各unknownに複数のadmissible案・baseline比較・選択根拠を記録
python3 harness/instruction_realization.py . validate
python3 harness/instruction_realization.py . freeze
python3 harness/instruction_realization.py . check-freeze
node harness/gate-state.mjs gate-manifest.json stamp instruction_realization PASS --inputs instruction-plan.json,instruction-freeze.json,instruction-realization.json,instruction-realization-freeze.json --evidence instruction-realization-freeze.json
```

**Hard Gate**：`instruction_design` と `instruction_realization` がPASSするまでScope / Duration、Communication、Visual Psychology、Art Directionへ進まない。Instruction Freeze後に教育設計を変えず、Realization Freeze後にsurface choiceを無断変更しない。実現不能なら `INSTRUCTION_CONSTRAINT_VIOLATION` として上流へ戻す。

### 3. Scope / Duration / Communication Designを確定する

`references/scope-duration.md`、`references/learning-design.md`、`references/communication-quality.md`、`references/communication-plan.md`、`references/title-design.md`、`references/audience-language.md` に従う。

- ユーザー未指定の短尺を制作都合で導入しない。
- Title Promise、Primary content、Minimum Comprehension Duration、planned durationを一致させる。
- internal labelとdisplay titleを分け、display titleは不要なら `null` とする。
- `content.md` から `communication-plan.json` を作り、Function / Necessity / Channel / Rhetorical ceiling / exact termsを文章生成より先に固定する。
- `language-map.json` v3には、Art Directionへ影響する主要title / label / reveal / instruction等だけを登録し、source functionとaudience roleを追跡する。全ナレーションを欄埋めで登録しない。
- `text_requirement=optional / none` を正常な完成状態として扱う。`optional` をbooleanへ潰さず、文字を置かない判断を保持する。Sequenceやtitle slotの存在を文字生成の理由にしない。
- 違和感を短文化・断定化・キャッチコピー化で直さない。
- 法令・規程・UI正式名称・製品名・規格名・引用原文は自然さのために改変しない。
- `prompts/lens-communication.md` をdesign phaseで実行し、6軸＋surface naturalnessを `communication-design-review.json` に保存する。

```bash
node harness/json_schema_validate.mjs assets/schemas/communication-plan.schema.json communication-plan.json
node harness/json_schema_validate.mjs assets/schemas/language-map.schema.json language-map.json
python3 harness/validate_communication_bundle.py .
python3 harness/communication_gate.py . communication-design-review.json design
node harness/gate-state.mjs gate-manifest.json stamp communication_design PASS --inputs content.md,instruction-plan.json,instruction-freeze.json,instruction-realization.json,instruction-realization-freeze.json,communication-plan.json,language-map.json --evidence communication-design-review.json
```

**Hard Gate**：`scope_duration` と `communication_design` がPASSする。続けて `references/design-psychology.md` / `design-psychology-principles.json` / `visual-psychology-plan.md` に従って `visual-psychology-plan.json` を作る。viewer task → visual problem → intervention necessity → principle → observable success conditionの順で決め、法則不要なら `intervention_needed=false` を選ぶ。

```bash
node harness/json_schema_validate.mjs assets/schemas/visual-psychology-plan.schema.json visual-psychology-plan.json
python3 harness/validate_visual_psychology_bundle.py .
# prompts/lens-visual-psychology.md design phase
python3 harness/visual_psychology_gate.py . visual-psychology-design-review.json design
node harness/gate-state.mjs gate-manifest.json stamp visual_psychology_design PASS --inputs content.md,instruction-plan.json,instruction-freeze.json,instruction-realization.json,instruction-realization-freeze.json,communication-plan.json,language-map.json,visual-psychology-plan.json --evidence visual-psychology-design-review.json
```

**Hard Gate**：`visual_psychology_design` がPASSするまでArt Directionへ進まない。心理法則とCommunication Qualityが競合する場合はCommunication Qualityを優先する。Naturalnessは最後の確認であり、不要文・function shift・channel duplication・修辞膨張を視覚的強調で覆わない。

### 4. Art DirectionとGraphic Qualityを固定する

`references/visual-concept.md`、`references/motion-art-direction.md`、`references/motion-grammar.md`、`references/asset-quality.md`、`references/style-frames.md` に従う。

成果物：`visual-concept.md`、`motion-reference.md`、`motion-grammar.md`、`asset-plan.md`、`style-frames/`。

- 題材固有のshape / material / lighting / depth / camera / typography / sensory translationを定義する。
- rendererで作りやすいVisualを選ばない。
- generic icon品質をhero assetへ使わない。
- **静止画として弱いframeをMotionで救わない。**

**Hard Gate**：Art Direction / Asset Quality / Static Hero FrameがPASSする。

### 5. Sequenceを時間として設計する

`references/sequence-design.md`、`references/film-strip.md`、`references/animatic.md`、`references/motion-necessity.md` に従う。

成果物：`sequence-plan.md`、`transition-map.md`、Storyboard / Film Strip、`animatic.mp4`、`animatic-plan.md`、`motion-necessity.md`。

- `Enter -> Establish -> Transform -> Reveal -> Hold -> Bridge -> Exit` で理解の変化を設計する。
- 「このSVGをどう動かすか」から始めない。
- Film Stripでcomposition / scale / density / value / motion densityの反復を止める。
- AnimaticでCamera / Hold / Fast-Slow-Hold-Burstを確認する。
- major Sequenceを公平なstatic surrogateと比較し、動画である必然性を確認する。

**Hard Gate**：Film Strip / Animatic / Motion NecessityがPASSする。

### 5. Video / PDF / Rendererを設計する

`references/video-handout-model.md` と `references/renderer-strategy.md` に従う。

- 同じcontent/source idを使うが、動画とPDFは別構図にする。
- Visual ConceptとStyle Frameを最も高品質に再現できるbackendを後から選ぶ。
- SVG Frameはbrowser-independentな選択肢であり、visual defaultではない。
- UI/DOM、authored vector、Three.js、Manim、Blender、pre-rendered assetを必要に応じて使う。
- Three.jsはtrue depth / spatial camera / material-light interaction / 2.5D parallaxが最終画へ実質的に寄与するときだけ選ぶ。制限環境では検証済みexact-source embedded ESM + Xvfb + headed Chromiumを正式経路とし、project assetだけvirtual HTTPS routingする。source id / status / exact commit / runtime hashをrenderer provenanceへ残す。
- rendererを統一するために品質を落とさず、必要ならHybrid compositionにする。
- `renderer-fit.md` を作り、候補backendごとに『そのbackendでなければ失われる品質』を明記する。
- Motion Proofではcandidate rendererを使ってよい。Benchmark PASS後、Full Production前にfinal renderer構成をlockする。

**Hard Gate**：Renderer Fit lensがPASSし、`renderer_fit` Gateをstampする。

### 6. Creative Motion ProofとBenchmarkを通す

`references/motion-quality-rubric.md` と `references/benchmark-review.md` に従う。

最難関8〜15秒程度を完成品質で実装する。Motion ProofはImplementation Proofではなく**Creative Proof**である。

- Style Frame / Film Strip / Motion Necessity / Motion Craftを再確認する。
- 実在する高品質2D Motion referenceと同程度の表示条件で比較する。
- rendererが動く、Camera/Morph/Maskを使った、layoutが壊れない、だけではPASSしない。

**Hard Gate**：Benchmarkで明らかにAnimated Slides / generic infographicへ見劣りする場合、全編へ進まない。

Benchmark PASS後にfinal rendererをlockし、ナレーションを確保できる実経路を `audio_readiness` として確認する。`gate-state.mjs ... unlock production` が成功するまで全編制作へ進まない。

Before `audio_readiness` can PASS, approve one `japanese-tts` Voice Lock. Evidence must include `voice-profile.lock.json`; in series mode its SHA-256 must match the episode contract. Never substitute an OS voice or another TTS engine silently.

### 7. Script / Timeline / Full Productionを作る

`references/narration.md`、`references/sound-design.md`、`references/communication-quality.md`、`references/audience-language.md` に従う。

- `content.md` とSequenceから `script.md` を作る。
- `timeline.json` にnarration cueだけでなくHold / anticipation / Bridge / SE cueを置く。
- 画面は時刻 `t` の純関数にする。
- narrationを主役とし、SE/musicは意味がある場合だけ使う。ナレーション付きdeliverableでは字幕や環境音を代替にしない。
- script / display title / subtitle / reveal / label / PDF見出しを別々にコピーライティングせず、既存 `communication-plan.json` のfunction / necessity / rhetorical ceilingへ従わせる。
- 新しい重要なcommunication unitが必要になったら、scriptへ直書きせず `communication-plan.json` / `language-map.json` へ戻す。これにより `communication_design` と依存GateはSTALEになるため、必要な上流Gateを再取得する。
- `lens-language` はsurface naturalnessとして使い、意味品質は `lens-communication` の6軸で扱う。
- 環境制約でplanned motionだけを黙って削除しない。

script完成後、TTSより前に `prompts/lens-communication.md` をtext phaseで実行し、`communication-text-review.json` を作る。design phaseのPASSをscriptへ自動継承しない。

```bash
python3 harness/validate_communication_bundle.py .
python3 harness/communication_gate.py . communication-text-review.json text
node harness/gate-state.mjs gate-manifest.json stamp communication_text PASS --inputs content.md,instruction-plan.json,instruction-freeze.json,instruction-realization.json,instruction-realization-freeze.json,communication-plan.json,language-map.json,script.md --evidence communication-text-review.json
python3 harness/tts.py prepare script.md
```

**Hard Gate**：`communication_text` が現在のscript hashに対してPASSするまでTTSを開始しない。`harness/tts.py` 自身もこのGateを再実行し、`gate-manifest.json` がある場合はstate上の `communication_text=PASS` も要求する。

### 8. Final-output QAを分離して行う

`references/visual-qa.md` と `references/review.md` に従う。

Technical / Layout / Communication / Visual Psychology / Creativeを別statusとして扱う。Communicationは `communication_design`（Art Direction前）、`communication_text`（script完成後/TTS前）、`communication_release`（完成媒体）の三段階、Visual Psychologyは `visual_psychology_design`（Art Direction前）と `visual_psychology_release`（完成媒体）の二段階に分ける。

- 最終rendererで全主要状態とPDF pageをLayout QAする。
- Final MP4でvelocity / easing / continuity / transition / sound syncを見る。
- Final MP4からUniform Film StripとSemantic Film Stripを再生成し、Storyboard時のPASSを引き継がない。
- `motion-density.py` で長いlow-change区間を抽出し、declared Holdか停滞かを確認する。数値自体を品質点にはしない。
- Technical PASSをCreative PASSの根拠にしない。

### 9. Blind Creative CertificationとFinal Gateを通す

`references/creative-certification.md` と `references/creative-premortem.md` に従う。

- 実装情報を知らないReviewerへ**最終MP4だけ**を渡し、Level 3 outcome criteriaを判定する。
- 動画を直接見られない場合、Blind Creative statusを `INCOMPLETE` とする。
- R1〜R8 regressionを再実行し、`creative_regression` Gateを最終MP4で取り直す。
- `node harness/audio-gate.mjs <workdir>` で narration -> mix -> final render のprovenanceを確認する。
- `prompts/lens-visual-psychology.md` のrelease phaseでは、**法則名や実装計画を見る前に**完成MP4/PDFを直接確認し、attention hierarchy / reading flow / grouping / differentiation / visual-verbal complementarity / restraintを `visual-psychology-release-review.json` に記録する。
- `python3 harness/visual_psychology_gate.py . visual-psychology-release-review.json release --manifest gate-manifest.json` を通し、`node harness/gate-state.mjs gate-manifest.json stamp visual_psychology_release PASS --inputs content.md,instruction-plan.json,instruction-freeze.json,instruction-realization.json,instruction-realization-freeze.json,communication-plan.json,language-map.json,visual-psychology-plan.json,script.md,<final_mp4>,<handout_pdf> --evidence visual-psychology-release-review.json` でstampする。
- 完成MP4/PDFを実際のマルチモーダル体験として `prompts/lens-communication.md` のrelease phaseで再レビューし、`communication-release-review.json` を作る。script単体でPASSしていても、語り・画面文字・図・UI・PDFの重複や説明過多が完成物で発生していればFAILにする。
- `python3 harness/communication_gate.py . communication-release-review.json release` を通し、`node harness/gate-state.mjs gate-manifest.json stamp communication_release PASS --inputs content.md,instruction-plan.json,instruction-freeze.json,instruction-realization.json,instruction-realization-freeze.json,communication-plan.json,language-map.json,script.md,<final_mp4>,<handout_pdf> --evidence communication-release-review.json` でstampする。
- `node harness/gate-state.mjs gate-manifest.json release` が `FINALIZABLE` を返すまでfinal扱いしない。
- 最終MP4 / PDFそのものを再確認する。

**Hard Gate**：Visual Psychology release `FAIL / INCOMPLETE`、Blind Creative `FAIL / INCOMPLETE`、Audio Gate FAIL、または重大Blockingが残る場合、finalとして納品しない。

## Creative premortem checkpoints

Scope、Art Direction、Style Frame / Film Strip、Animatic、Motion Proof / Benchmark、Final前で `creative-premortem.md` を更新する。最終MP4がtarget quality未達で拒否されたと仮定し、**現在の証拠があるriskだけを最大3件**記録する。Premortem自体がTechnical riskへ偏っていないか、古い懸念を惰性で繰り返していないか、新しい固定ルールで別品質を潰していないかも点検する。

## 環境制約への対応

連続アニメーションを実装できなくなった場合、動きだけを削除しない。

選択肢：
1. 別の実装経路へ移す。
2. 時系列説明をBefore/Afterや比較へ変えるなど、Visual Planを静止用に再設計する。
3. 成果物仕様を変更し、品質差をユーザーへ明示する。

**当初の動作前提の図を静止させただけの状態では納品しない。**

## Blocking

次が一つでも残る場合は納品しない。

- 文字と図形の意図しない重なり
- 判読不能な文字
- 意図しないクリッピング、safe area重大違反
- 図・語り・数値・状態の矛盾
- internal labelをそのまま表示タイトルへ出す／不要なタイトルを全Sequenceへ置く
- 画面文言やナレーションが研修見出し・広告コピー・格言の寄せ集めになる
- タイトルから説明対象を特定できない
- Primary範囲の重要な説明構造が最終レンダーで崩れている
- 動きを削除した結果、因果・順序・状態変化が理解不能
- 主要motionが不自然に途切れる
- renderer lockと最終rendererが異なるのに再QAしていない
- Motion Proof未実施
- 宣言したMotion Quality Profileを大きく下回る未承認downgrade
- 最終MP4 / PDFそのものを確認していない
- Series modeで別unitの責任を勝手に抱え込む
- Benchmark evidenceが無いのにFull Productionへ進む
- Blind Creative ReviewがINCOMPLETEのままfinal扱いする
- ナレーション必須なのに字幕・SEだけでfinal扱いする
- final成果物がGate input変更後のSTALE判定を引き継いでいる

## 保守性

`content.md` を内容source of truthとする。
`visual-model` / `sequence-plan` / `timeline.json` を映像dependency mapとする。
Series modeではparent content id / source id / unit idを維持する。

変更は `source -> content -> sequence/page -> timeline -> render` の順に追う。

## 参照

- `references/series-mode.md` — シリーズ責任境界
- `references/domain.md` / `sources.md` — 根拠
- `references/research-closure.md` — Content前のResearch Closureと探索dimension
- `references/research-dimensions.json` — 調査を早期停止しないprobe集合
- `references/instruction-search.md` — Content/Instruction Freeze、候補全列挙、Pareto・ablation・sensitivity
- `references/instruction-realization.md` — 未解決surface変数のbounded exploration、dominance check、Realization Freeze
- `references/instruction-operator-library.json` / `instruction-evidence-register.json` — evidence-bounded operator候補と根拠境界
- `references/content.md` — 教材本体
- `references/scope-duration.md` — タイトル責任範囲とMinimum Comprehension Duration
- `references/learning-design.md` — 学習構造
- `references/communication-quality.md` — 6軸Communication Quality Model、review順序、修正順
- `references/design-psychology.md` / `design-psychology-principles.json` — viewer taskから法則選択と完成物観察までを統制する共通モデル
- `references/visual-psychology-plan.md` — scene plan、series contract、release review、A/B運用
- `references/communication-plan.md` — Art Direction前のFunction / Necessity / Channel契約
- `references/title-design.md` — internal label / display title / nullable title
- `references/audience-language.md` — Communication Quality最後のsurface naturalness
- `references/visual-concept.md` — 題材固有のVisual Language / Sensory Design
- `references/asset-quality.md` — Hero / evidence / explanatory asset品質
- `references/motion-art-direction.md` — Motion Art Direction
- `references/motion-quality-rubric.md` — 品質水準
- `references/style-frames.md` — Static Hero Frame Gate
- `references/film-strip.md` — Storyboard / Film Strip Gate
- `references/animatic.md` — 時間配分 / Camera / Hold / Rhythm Gate
- `references/motion-necessity.md` — 動画である必然性のA/B比較
- `references/benchmark-review.md` — 外部Professional referenceとの比較
- `references/creative-certification.md` — outcome-based Level 3 / Blind Creative Review
- `references/creative-premortem.md` — Creative Gate横断のメタ・プレモータム
- `references/sequence-design.md` — Sequence / Bridge / Shot
- `references/video-handout-model.md` — 動画/PDF分離
- `references/renderer-strategy.md` — 実装方式とfallback
- `references/threejs-backend.md` — Three.js pure-time / GLTF / camera / material backend
- `references/threejs-offline-runtime.md` — exact-source supply-chain / Git blob + commit lock / single-file offline ESM / provenance
- `references/threejs-restricted-environment.md` — Xvfb / headed Chromium / project-local routingによる制限環境実走
- `references/hybrid-rendering.md` — Layer/Sequence単位のHybrid composition
- `references/visual-storytelling.md` / `svg-explanations.md` — visual payoffと説明図
- `references/motion.md` — Motion原則
- `references/sound-design.md` — 音
- `references/visual-qa.md` — 最終レンダーQA
- `references/render.md` — ハーネス
- `references/review.md` — レビュー
- `harness/motion-film-skeleton.html` — V3既定骨格
- `harness/deck-skeleton.html` — 旧互換

## Deterministic Typography Toolchain

For final Japanese or complex-script text geometry, use `references/typography-toolchain.md`. Treat BudouX as semantic break candidate generation and HarfBuzzJS as the final shaping authority. When text geometry is critical, reuse one serialized glyph run across SVG / PDF / Three.js rather than re-measuring independently per renderer.

## Deterministic vector and visual QA

For unequal-topology SVG morphs and pixel-level render regression evidence, use `harness/path_morph.mjs`, `harness/visual_diff.mjs`, and `references/vector-and-visual-qa.md`. Keep these technical checks separate from semantic/creative judgment.

## Deterministic machine runtime

Use vendored Ajv for machine-readable contract/schema gates and SVGPathCommander for path geometry. Prefer the locked resvg runtime for final static SVG rasterization when its verified binary is provisioned; otherwise keep fallback renderer identity explicit and never silently claim resvg. See `references/deterministic-runtime.md`.


Voice consistency reference: `references/voice-lock.md`. Obtain `communication_text=PASS`, then use `python3 harness/tts.py prepare script.md`, route the job through `japanese-tts`, then `python3 harness/tts.py import script.md` and `python3 harness/voice_lock_check.py .` before final audio QA.

