| name | mystery-case |
| description | 推理SF小説ハーネスのフェーズ3。world.json と characters.json をもとに殺人事件を設計する。トリック(手段/機会/動機)、被害者と加害者の確定、フェアプレイ手掛かり台帳、探偵の推理連鎖、全容疑者の消去理由、動機の妥当性、SF設定(novum)の必然性を構造化し case.json を生成、characters.json の真相を更新する。world.json と characters.json が存在する前提。 |
mystery-case — 事件・トリック設計(フェーズ3)
world.json と characters.json を入力に殺人事件を設計し、case.json(完全ネタバレ)を
生成する。トリックと手掛かり台帳・推理連鎖をフェアプレイ準拠で組み上げ、後段の執筆と
監査が依拠する設計図を作る。
入力
~/mystery-novels/<slug>/world.json
~/mystery-novels/<slug>/characters.json
trick_complexity(1〜5、既定 3。トリック難解度レバー。meta.json の
settings.trick_complexity かオーケストレータ/呼び出し時の引数で渡る)
causal_loop(任意・boolean・既定 false。meta.json の settings.causal_loop か引数で渡る。
true なら因果ループ=ブートストラップパラドックスを設計に組み込む。historical モードでは不可)
事前に必ず読むもの
~/.claude/skills/mystery-novel/references/data-contract.md
~/.claude/skills/mystery-novel/references/knox-and-fairplay.md(Knox 1-10 + F1-F5。設計の制約。
causal_loop 時は F6-F8 も)
~/.claude/skills/mystery-case/references/case-schema.json(出力スキーマ。trick ブロック。
causal_loop 時は causal_loop ブロック)
~/.claude/skills/mystery-case/references/trick-complexity.md(トリック複雑度レバー・偽装必達・A7禁止)
~/.claude/skills/mystery-case/references/trick-design-guide.md(設計手順・アンチパターンA1-A13)
- causal_loop 時のみ:
~/.claude/skills/mystery-case/references/causal-loop-design-guide.md
(逆算設計手順・L1-L6・causal alibi・状態閉包)
- 対象プロジェクトの world.json / characters.json
プロトコル
-
入力読込。真犯人(is_perpetrator:true)・被害者・容疑者・zones・novum・closed_circle と
trick_complexity を把握。trick-complexity.md を読み、tier に応じた目標を確定。
-
見破るべき偽装(central_deception)を先に据える(trick-complexity.md / trick-design-guide.md):
trick ブロックを設計: complexity_tier・trick_types・central_deception・breakdown_point・
(tier>=3 は)false_solutions・why_not_mere_execution。A7「単なる実行」を禁止。
- 探偵の推理が「偽装を見破ること」に懸かる構造にする(消去法だけで犯人が割れない)。
- 判断保留の設計(A8対策): 偽装は「事実は本文に出るが、真偽の解釈は解決編まで伏せる」
こと。各 clue に「その場で探偵が解かず、解決編で解釈する」前提を持たせる。
- 嘘の台帳
deception_ledger(A9対策): 複数の容疑者に嘘/隠し事を設計。**最低2名は
reason: innocent_secret(無実だが後ろ暗い)**にし、嘘=犯人にならないよう散らす。
真犯人の欺瞞を無実者の欺瞞に紛れ込ませる。exposed_when は原則 solution。
2b. 因果ループの設計(causal_loop 有効時のみ): causal-loop-design-guide.md の
逆算設計手順で causal_loop ブロックを設計する:
- bootstrap_artifact(kind・why_no_origin・state_trace=閉路順の状態列で先頭==末尾)。
loop_events を単一の単純閉路として組む(caused_by は単一参照・objective_order は
全イベントで一意・逆行辺を最低1本)。各事象を timeline に通常の出来事として埋め込み、
observable を clue_ledger に登録して clue_refs で紐づける。
- F6 開示: 逆行因果の可能性を挑戦前に示す clue を
disclosure.premise_clues に置く。
- causal alibi:
critical_times(send/receive/execution)を宣言し、全容疑者の
アリバイ・機会評価を各時刻に対して timeline/alibis に落とす。
- L3 積集合ガード:
channel_access_holders に真犯人以外2名以上を置き、各人の
full_path(チャネル×機会×知識の end-to-end 経路)が終盤まで plausible であること。
- L6: who の結論はループ外の独立手掛かりで支える(who_discriminator の根拠を
ループ由来 clue だけにしない)。
-
推理から逆算して組む(trick-design-guide.md 準拠):
- 探偵の
deduction_chain(各推論ステップ)を先に設計。
- 各ステップが依拠する事実を
clue_ledger に登録し、planted_at(挑戦前)を割り当てる。
- 真の
timeline を作り、crime.how_committed(手段・機会)が物理・動線・隔離条件に
矛盾しないことを確認。
- 全容疑者の
alibis(真偽)と、真犯人以外の elimination(消去理由)を網羅。
motive(why_kill_necessary / proportionality)で動機を妥当化。
necessity_check で死者数と各死の必然性を明示(不要殺人の排除)。
- SF を使うなら
novum_usage に F1-F5 の充足を記述(解決編で新設定を出さない)。
-
自己監査 knox_self_check: Knox#1-10 と F1-F5 を1項目ずつ pass/na+根拠で記録(15項目以上)。
causal_loop 時は F6-F8 の行も各ちょうど1回追加(18項目以上)。
1つでも疑わしければ設計を修正してから書き出す。
-
整合性の自己検証(書き出し前):
perpetrator_id == characters.json の is_perpetrator:true の人物。
- deduction_chain の各
supported_by が clue_ledger に実在する clue_id。
- clue_ledger の全 clue が
visible_to_reader: true かつ planted_at が挑戦前。
- elimination が真犯人以外の全容疑者を網羅。
- timeline・alibis・zones 動線が相互に矛盾しない。
trick.central_deception が存在し、A7(単なる実行)でない。tier>=3 は
trick.false_solutions が1つ以上あり、各々を clue_id で覆せる。
- 判断保留(A8): 偽装の真偽を「その場で探偵が解く」設計になっていない。解釈は解決編に集約。
- 嘘の設計(A9):
deception_ledger に2名以上が嘘/隠し事を持ち、うち2名以上が
innocent_secret(無実だが嘘)。透明に無実と分かる容疑者がいない。
- 機会軸の非独占(A10): 犯人を確定させる deduction ステップの
supported_by clue の
points_to/fact が「◯◯だけ」「合鍵なし」「◯◯に機会が一意化する」等、接触独占で犯人を
名指しする語に依存していない。凶器/施錠物への物理的機会を2〜3名が終盤まで保持し、
trick.opportunity_holders(2名以上)と trick.who_discriminator.not_contact_monopoly_reason
を記述した。犯人を絞る決め手は接触独占でなく breakdown_point の演繹である。
- 物証の非集中(A11): 手段+身元+動機の決定的物証が犯人の私室など一箇所に集中・挑戦前一括
開示になっていない。各物証の
planted_at が別々の場所・場面へ分散している。
- 動機の非独占(A12): 表向きだけでなく真の動機を2名以上が持ち、 が
「◯◯を望むのは犯人だけ」に依存していない。
完了条件
- case.json が schema と上記整合性チェックを満たし、
trick ブロックを持つ。
- 見破るべき偽装(central_deception)があり、A7(単なる実行)でない。tier>=3 は偽の解決あり。
- causal_loop 有効時は
causal_loop ブロックが check_causal_loop.py の全 clean を満たす。
- knox_self_check が全項目 pass/na(fail なし)。
- characters.json の真相が case と一致。
- meta.json の
phases.case.status == "done"。
単体実行時の次の一手
続けて執筆(オーケストレータ mystery-novel の執筆ステップ)→ mystery-audit を案内する。