Education Program Designer
教育研修全体を設計する。個別動画の完成度ではなく、複数ユニットを通じて受講者が必要な知識・判断・技能へ到達することに責任を持つ。
最重要原則は二つ。
- シリーズ分割より先に資料を集め、教材全体の本体を完成させる。
- 網羅性はプログラムが持つ。各ユニットは割り当てられた責任だけを持つ。
「重要だから念のため各動画でも説明する」を繰り返し、すべての動画が同じ導入・注意事項・背景説明を抱える状態を作らない。
何を作るか
既定の成果物は次のディレクトリである。
training-program/
├── program-brief.md
├── program-source-map.md
├── research-agenda.json
├── source-register.json
├── research-closure.json
├── program-content.md
├── learning-map.md
├── series-plan.md
├── coverage-matrix.md
├── shared-context.md
├── program-manifest.json
├── change-impact.md
├── review/
│ ├── program-review.md
│ └── program-communication-review.json
├── episodes/
│ ├── E01-brief.md
│ ├── E02-brief.md
│ └── ...
動画だけが正解ではない。内容によって、動画、配布資料、実機演習、シミュレーション、確認テスト、チェックリスト、OJTなどを組み合わせる。
制作のゲート
Gate A — 資料が揃うまでシリーズ構成を決めない
主題を決めたら、まず資料を集める。公開規範がある分野は一次資料を取り、社内固有運用は社内規程・帳票・画面・実物を優先する。
「資料が揃った」の意味は、無限に調べ終えたことではない。教える候補となる各項目について、根拠がある/扱わない/資料不足のいずれかを判断できることである。
この段階では動画本数、章タイトル、尺配分、演出を決めない。
Gate B — Research Closureを通す
資料を集める前後で research-agenda.json / source-register.json / research-closure.json を作る。references/research-closure.md の探索dimensionは教材の章テンプレではなく、調査を早く打ち切らないためのprobeである。各agenda item×dimensionを covered / not_applicable / gap のいずれかにし、Blocking gapが残る限り教材本体を書き始めない。
python3 scripts/research_closure.py training-program skeleton
# 全dimensionを資料探索で評価してresearch-closure.jsonを更新
python3 scripts/research_closure.py training-program validate
not_applicable は正常な結果。dimensionを埋めるために情報を発明・水増ししない。
Gate C — program-content.md が完成するまで分割しない
program-source-map.md を作った後、references/program-content.md に従って教材全体の本体 program-content.md を書く。
ここには、受講者に必要な内容を尺で削らず書く。各項目に少なくとも次を持たせる。
- content id
- 何を知る/判断する/できる必要があるか
- なぜ必要か、または仕組み
- 条件・例外・境界
- 根拠 source id
- できるようになったことをどう確かめるか
この本体が完成・照合されるまで、エピソード番号を振らない。
Gate D — 内容をMachine-readable IRへ固定する
program-content.md を完成させた後にだけ、content-model.json、knowledge-structure.json、learner-scenarios.json を作る。ここでは教育手法名、問いかけ、worked example、animation等をまだ選ばない。目的は、内容・知識関係・想定学習者状態をナラティブから分離して、下流が論点を確率的に飛ばせない形へすることである。
Primary contentは content-model.json から knowledge-structure.json へ追跡できなければならない。知識依存は循環させない。learner scenarioは「典型的初学者」一つに固定せず、実際に設計判断を変え得る主要状態だけを有限集合として記録する。
Gate E — 依存関係を作ってからシリーズ分割する
program-content.md から learning-map.md を作る。
項目間を、少なくとも次で整理する。
- prerequisite:先に理解が必要
- parallel:順序依存なし
- practice-after:知識の後に練習が必要
- integration:複数項目を統合して初めてできる
その後で初めてユニットへ分割する。分割基準は均等な尺ではなく、一つの学習責任としてまとまっているかである。
手順
1. 前提を決める
主題だけ不明なら聞く。対象者、利用場面、所要期間、既存資料、既存教材があれば使う。無指定の項目は合理的な既定で進める。
単発動画の依頼ならこのスキルで無理にプログラム化せず、education-video または education-video-studio を使う。
2. 全体の資料を集める
references/sources.md に従い program-source-map.md を作る。
- 内部運用:内部資料を一次資料として扱う。
- 法令・規格・公式仕様:発行元の一次資料を優先する。
- 数値・閾値・版:対象、年、条件、条項や表まで辿れるようにする。
- 資料不足:推測で埋めず、gapとして残す。
既存動画がある場合は、その内容も「根拠」ではなく現行教材の実態として別に記録する。
完了:全候補項目が source / excluded / gap のいずれかに分類された。
同時に research-agenda.json と source-register.json を作り、research_closure.py skeleton で全探索dimensionを機械的に列挙する。追加調査・対立資料・取れなかった資料も記録し、research_closure.py validate をPASSさせる。source mapだけで「十分調べた」と自己判断しない。
3. 教材全体の本体を書く
references/program-content.md に従い program-content.md を作る。
ここがプログラム内容の source of truth である。後のシリーズ構成、各動画、資料、テストはここから派生する。
この段階では尺を気にしない。動画向きかどうかもまだ決めない。
完了:教える全項目と扱わない項目が明示され、根拠と到達確認を追跡できる。
4. 到達目標と依存関係を設計する
references/learning-architecture.md に従い learning-map.md を作る。
「知っている」だけでなく、研修終了後の仕事で何ができればよいかから逆算する。
学習項目を依存グラフとして整理し、前提知識がないまま後続技能を置かない。
完了:最終到達目標から各content idまで追跡でき、循環依存がない。
5. 媒体を選ぶ
内容ごとに、何で教えるのが最も効率的かを決める。
- 仕組み・因果・手順・判断:動画が有力
- 後から探す情報:配布資料・手順書
- 身体技能・機器操作:実機演習やデモ
- 判断の練習:ケース・シミュレーション
- 定着確認:テストや実演
動画にできることと、動画でやるべきことを区別する。
6. シリーズへ分割する
references/series-design.md に従い series-plan.md と coverage-matrix.md を作る。
各content idには原則としてPrimary ownerを一つ割り当てる。他ユニットで触れる場合は次のいずれかとして明示する。
Prerequisite:既習事項として前提にするCallback:短く思い出させるPractice:新規説明ではなく適用するIntentional repetition:定着・安全上の理由で意図的に再提示する
同じ説明を複数動画でPrimary扱いしない。意図した反復には目的を書く。
完了:全content idにPrimary ownerがあり、無言の重複と無言の欠落がない。
6A. Learning Jobsを固定しContent Freezeする
各unitについて、受講後に観察可能なperformanceを learning-jobs.json に記録する。recognize / recall / explain / distinguish / predict / execute / diagnose / decide / evaluate / transfer は検索用の操作語彙であり、教育理論の新しい分類法として扱わない。各jobはcontent id、knowledge id、mastery evidence、必要learner scenarioへ追跡する。
その後、次を実行して内容側をfreezeする。
python3 scripts/instruction_inputs.py training-program validate --content program-content.md
python3 scripts/instruction_inputs.py training-program freeze --content program-content.md
python3 scripts/instruction_inputs.py training-program check-freeze --content program-content.md
Hard Gate:content-freeze.json がPASSするまでEpisode Contractを凍結しない。教育手法の都合でfreeze後のcontent/knowledge/jobを変更しない。変更が必要ならfreezeを破棄して上流から再作成する。
7. Episode Contract を作る
各動画・ユニットに episodes/<id>-brief.md を作る。書式は references/episode-contract.md。
contract は少なくとも次を固定する。
- unit id / title
- learner outcome
- prerequisites
- primary responsibility
- allowed callbacks
- explicit exclusions
- source ids
- assessment / evidence of mastery
- downstream handoff
- delivery format
- 推奨 producer skill
- communication quality model version / hash
- communication contract(機能、文章必要性、許可チャネル、修辞上限、固定語、禁止する機能変換)
- instructional handoff(Instruction Search model/hash、upstream Content Freeze hash、該当knowledge units、learner scenarios、learning jobs)
producer skill は通常、次で選ぶ。
- 根拠・規範・監査・証跡が主:
education-video - 視覚説明・仕組み理解・高い映像表現が主:
education-video-studio
個別制作スキルに渡すとき、contract外を「重要だから」という理由で勝手に追加させない。 下流は instructional_handoff を探索前のauthoritative inputとして使い、学習責任やlearner scenarioを再発明しない。
文章設計では references/communication-quality.md を共通規範とする。communication_contract は「良い言い回し」を指定するものではない。各Primary contentについて、元の発話機能、required / optional / none の文章必要性、許可チャネル、item単位の修辞上限、適用するexact termを固定する。contract全体の修辞上限はdefaultであり、下流が検証するauthoritative値は各itemの rhetorical_ceiling と exact_term_constraints とする。話題をタイトルへ、事実を教訓へ、説明を格言へ自動昇格させない。
視覚設計では references/design-psychology.md と references/design-psychology-principles.json を共通規範とし、各unitに design_psychology contractを持たせる。まず viewer_task と primary_objective を決め、視覚介入が本当に必要な場合だけ primary_principle を1つ、必要ならdistinctな仕事を持つ supporting_principle を1つ指定する。required=false / primary_principle=null は正常な完成状態である。心理法則名を効果の証明として扱わず、Communication Qualityと競合する場合はCommunication Qualityを優先する。
8. 共通文脈を分離する
shared-context.md にシリーズ共通の語彙、前提、表記、世界観、共通素材、変更されやすい情報をまとめる。
For any narrated series, define one program-level narration_profile using provider japanese-tts. The first approved narrated unit creates the series Voice Lock; then freeze its SHA-256 and propagate it to every remaining narrated episode contract. Never allow child producers to pick a voice independently.
ただし shared-context を各動画で全部読み上げない。これは制作側の共通知識である。
用語の初出責任も episode contract に割り当てる。
9. プログラム全体を点検する
references/review.md に従う。
見るのは個別動画の欠陥ではなく、全体構造である。
- Coverage:必要項目がどこにもないか
- Scope:一つのユニットが責任を抱え込みすぎていないか
- Sequence:前提より先に応用が来ていないか
- Duplication:同じ説明が無意識に複製されていないか
- Modality:動画でなく別媒体の方がよいものを動画に押し込んでいないか
- Assessment:到達目標と確認方法が対応しているか
- Integration:最後に知識・技能を統合して使う機会があるか
- Maintainability:変更時に影響ユニットを追えるか
問題が無ければ PASS とする。件数を作るための指摘は禁止する。
続けて references/communication-quality.md の6軸で、program / unit handoffの言語責任を review/program-communication-review.json に記録する。見る対象は「文の巧さ」ではなく、各contractが元内容の機能を保存し、不要な文字を強制せず、チャネル分担と修辞上限を下流へ渡せているかである。
python3 scripts/communication_gate.py training-program review/program-communication-review.json program_handoff
Hard Gate:Communication Quality reviewが現在の program-manifest.json と program-content.md のhashに対してPASSするまで、episode contractを凍結しない。Gate側がphaseごとの必須inputを決めるため、review JSONから必須inputを省略してPASSさせてはならない。Naturalnessは最後の確認であり、それ以前の必要性・機能・情報量・媒体分担・修辞的比例のFAILを言い換えで覆わない。
10. 個別制作へ渡す
ユーザーが研修全体の制作まで求めた場合、episode contractを凍結してから個別制作へ進む。下流へ渡す実ファイル名は episode-contract.json に統一し、producer SkillがschemaとCommunication bundleを機械検証できるようにする。
個別制作中に新しい重大項目が見つかったら、その動画へ即座に押し込まない。
- program-level issue として記録する。
program-content.mdとcoverage-matrix.mdを更新する。- Primary ownerを決める。
- 影響するcontractだけ更新する。
- その後で個別制作を再開する。
11. 変更影響を管理する
change-impact.md に、source id / content id / unit id の対応を残す。
規程・UI・手順が変わったら、source → program-content → coverage → episode contract → 個別成果物の順に影響を追う。
全シリーズを無条件に作り直さない。
シリーズモードの責任境界
このスキルが全体責任を持つ。
- 研修全体の網羅性
- 最終到達目標
- 学習順序
- ユニット間の責任分担
- 意図的な反復
- 全体評価
- 更新影響
個別ユニットが責任を持つ。
- contractでPrimaryに割り当てられた内容
- 必要最小限のPrerequisite / Callback
- そのユニットの理解と成果物品質
一つの動画に、研修全体の網羅性を再度背負わせない。
反復の扱い
反復を禁止しない。目的のない重複を禁止する。
良い反復:
- 最初に存在を知る → 後で実際に判断する
- 基礎操作を学ぶ → 異常時に同じ操作を使う
- 緊急停止のように、忘却コストが高いため意図的に再提示する
悪い反復:
- 各動画が「念のため」同じ背景説明を最初から行う
- 各動画が同じ注意事項一覧を全文再掲する
- 前回内容を尺埋めとして要約する
Intentional repetition は coverage-matrix.md に理由を残す。
子スキルとの契約
education-video と education-video-studio が利用可能なら、series modeではepisode contractを上位のscopeとして扱わせる。
子スキルが「この動画に項目Xが無い」と検出しても、coverage matrixで別ユニットがPrimaryなら欠陥ではない。
逆に、どのユニットにもPrimaryが無い重大項目を発見した場合は、子動画に追加するのではなくprogram-level issueとしてこのスキルへ戻す。
納品物
研修設計だけを求められた場合は training-program/ 一式を納品する。
個別制作まで求められた場合も、training-program/ を最上位の設計記録として残し、個別動画の成果物を各episode配下または別のproduction directoryへ対応づける。
参照
references/sources.md— プログラム全体の資料収集とsource closurereferences/program-content.md— 分割前に完成させる教材全体の本体references/learning-architecture.md— 到達目標と依存関係references/series-design.md— シリーズ分割とcoverage matrixreferences/episode-contract.md— 個別ユニットへの責任委譲references/communication-quality.md— 3 Skill共通の6軸Communication Quality Modelとレビュー順序references/research-closure.md— 内容を書く前の探索空間、source register、Blocking gapのResearch Closurereferences/research-dimensions.json— 強制コンテンツ化しない9つの調査probereferences/instruction-search.md— Content Freeze後の教育介入候補列挙・Pareto探索・ablation・sensitivity・Instruction Freeze。下流では未解決surface変数を別Realization Searchで解くreferences/instruction-operator-library.json— evidence-boundedなclosed-lane operator候補。手法使用の命令表ではないreferences/instruction-evidence-register.json— 各operatorの根拠範囲と「そこから言えないこと」references/design-psychology.md— viewer task → visual objective → principle selection → rendered-result reviewの共通制御モデルreferences/design-psychology-principles.json— 16法則の用途・mechanism・誤用・evidence status辞書references/design-psychology-patterns.md— 法則別の実装パターンと乱用防止references/audience-language.md— 内部ラベルと公開語の境界、surface naturalnessreferences/review.md— 全体QAreferences/manifest.md—program-manifest.jsonの構造references/program-artifacts.md— program brief / series plan / shared context / change impact の書式checklist.md— 最終QAscripts/check_program.py— manifestのPrimary owner・依存関係・brief存在・communication contract coverageを検査するscripts/research_closure.py— research agenda/source register/全dimension closureをfail-closed検証するscripts/instruction_inputs.py— content-model / knowledge structure / learner scenarios / learning jobsの完全性とContent Freezeをfail-closedで検証するscripts/communication_gate.py— reviewerの6軸PASS、quality-model hash、input hashの鮮度をfail-closedで検査する
Program graph assistance
After prerequisites are semantically fixed, use scripts/program_graph.py for an independent DAG check and deterministic layout. NetworkX may arrange declared dependencies; it must not infer learning prerequisites. See references/program-graph.md.
Fail-closed machine contracts and graph layout
Validate program-manifest.json with vendored Ajv before semantic program checks. After prerequisites are semantically fixed and the DAG passes NetworkX validation, use vendored Dagre only to compute presentation coordinates. See references/machine-validation-and-layout.md.