| 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 かオーケストレータ/呼び出し時の引数で渡る)
事前に必ず読むもの
~/.claude/skills/mystery-novel/references/data-contract.md
~/.claude/skills/mystery-novel/references/knox-and-fairplay.md(Knox 1-10 + F1-F5。設計の制約)
~/.claude/skills/mystery-case/references/case-schema.json(出力スキーマ。trick ブロック)
~/.claude/skills/mystery-case/references/trick-complexity.md(トリック複雑度レバー・偽装必達・A7禁止)
~/.claude/skills/mystery-case/references/trick-design-guide.md(設計手順・アンチパターンA1-A13)
- 対象プロジェクトの 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。
-
推理から逆算して組む(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項目以上)。
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名以上が持ち、
who_discriminator が
「◯◯を望むのは犯人だけ」に依存していない。
- 非・過剰決定(A13): 犯人を単独で名指す独立手掛かりが多すぎない(
who_discriminator
.supported_by_clues が過大=目安6本以上でないか)。収束は積み上げでなく結合による。
- A10-A13 は
check_who_axis.py で機械確認でき、監査 D9 も同じ検査を行う。
- アンチパターン A1-A13 を最終チェック(trick-design-guide.md)。
-
出力:
~/mystery-novels/<slug>/case.json を case-schema.json 準拠で書く(trick ブロック含む)。
characters.json の true_state(真のアリバイ・真の動機・真の所在)を case と整合する
よう更新する。
meta.json の phases.case.status="done"。
-
要約報告。被害者・加害者・central_deception とトリック種別・複雑度tier・動機・
主要手掛かり3つ・(tier>=3なら)偽の解決・SF設定の役割を報告。
完了条件
- case.json が schema と上記整合性チェックを満たし、
trick ブロックを持つ。
- 見破るべき偽装(central_deception)があり、A7(単なる実行)でない。tier>=3 は偽の解決あり。
- knox_self_check が全項目 pass/na(fail なし)。
- characters.json の真相が case と一致。
- meta.json の
phases.case.status == "done"。
単体実行時の次の一手
続けて執筆(オーケストレータ mystery-novel の執筆ステップ)→ mystery-audit を案内する。