| name | mystery-audit |
| description | 推理SF小説ハーネスのフェーズ4。完成した原稿一式(world.json/characters.json/case.json/novel.md)を並列サブエージェントで監査する。矛盾検出・殺人の動機妥当性・ノックスの十戒(SF適応F1-F5)・フェアプレイ手掛かり・字数1万字以上・不必要な殺人の排除・安直/過剰複雑なロジックの検出を並列で実行し、クロスモデル(codex-reviewer)監査も含めて audit/summary.json に集約、合否を判定する。novel.md と各JSONが存在する前提。 |
mystery-audit — 並列監査(フェーズ4)
完成原稿一式を並列サブエージェントで多角監査し、合否(pass/fail)と修復指示を出す。
goal 要件(矛盾・動機妥当性・字数1万字・Knox十戒・不要殺人排除・安直ロジック排除)を
すべて網羅する。
入力
~/mystery-novels/<slug>/ の world.json / characters.json / case.json / novel.md
- 任意:
iteration(修復ループの周回番号。既定1)
事前に必ず読むもの
~/.claude/skills/mystery-audit/references/audit-rubric.md(次元D1-D10・出力スキーマ・集計規則)
~/.claude/skills/mystery-novel/references/knox-and-fairplay.md
~/.claude/skills/mystery-novel/references/data-contract.md
プロトコル
-
対象確定。slug からプロジェクトパスを解決。4ファイルの存在を確認。
-
決定的計測(字数, D5)をスキル側で実行。共有スクリプトで novel.md の字数を数える:
python3 ~/.claude/skills/mystery-audit/references/count_chars.py "<proj>/novel.md"。
得た char_count が 10,000 未満なら blocker を即記録。
2b. 決定的計測(who軸 preflight, D9用)をスキル側で実行。共有スクリプトで case.json の
接触独占(A10)・物証集中(A11)・動機独占(A12)・過剰決定(A13)を機械検出する:
python3 ~/.claude/skills/mystery-audit/references/check_who_axis.py "<proj>/case.json"。
返る JSON(a10_contact_monopoly / a11_evidence_dump / a12_motive_monopoly /
a13_over_determination)を D9 エージェントのプロンプトに埋め込んで渡す(D9 が第二段で
挑戦前本文と照合する。audit-rubric.md D9-5 参照)。
2c. 決定的計測(未来予告・後知恵 lint, D10用)をスキル側で実行。挑戦前本文の語り手フラグを検出:
python3 ~/.claude/skills/mystery-audit/references/check_prose_tells.py "<proj>/readers/_challenge_cut.md"。
返る JSON(findings の major/カテゴリ/該当文)を D10 エージェントのプロンプトに埋め込んで渡す
(major あれば当該文の書き換えを指摘。audit-rubric.md D10-5 参照)。
-
並列監査エージェントを1メッセージで同時起動(Agent ツールを複数同時に発行)。
次元 D1〜D10 をそれぞれ独立エージェントに割り当てる:
- D1 consistency / D2 motive / D3 knox / D4 fairplay_clues / D6 necessity / D7 logic_quality /
D9 trick_quality(見破るべき偽装の有無・A7禁止・複雑度tier整合・偽の解決・A10/A11=who軸退化。
手順2bの check_who_axis.py 出力を渡す) /
D10 suspense(A8その場否定の禁止・A9透明容疑者/全員正直の禁止・判断保留の霧)
→
subagent_type: "general-purpose"(または既定)。
- D8 cross_model →
subagent_type: "codex-reviewer"(クロスモデル必須。CLAUDE.md原則4)。
- 各エージェントへの指示は audit-rubric.md の該当「プロンプト要旨」を展開し、
出力スキーマ(JSONのみ)で返すことと、読むべきファイルの絶対パスを明示する。
- D5(字数)は手順2の実測値を D7/集計の文脈として渡す(エージェント不要)。
※ 各エージェントは結論のみを構造化JSONで返す。中間の探索ログは持ち帰らない。
-
結果の書き出し。各エージェントの JSON を audit/<dimension>.json に保存。
-
集計。audit-rubric.md の集計規則で audit/summary.json を作成:
overall = pass ⇔ 全次元が fail でない かつ char_count >= 10000。
- fail なら blocking_findings に blocker/major を集約(dimension・issue・evidence・fix_suggestion)。
-
meta.json 更新。phases.audit.status = "pass" | "fail"、phases.audit.iteration、
phases.novel.char_count を記録。
-
報告。overall 判定、char_count、各次元の verdict 一覧、fail 時は修復すべき
blocking_findings を優先度順に提示。
修復ループ(fail 時)
- 監査スキル自体は修復しない。オーケストレータ
mystery-novel が blocking_findings を
読み、mystery-case(設計の問題なら)や執筆ステップ(本文の問題なら)を再実行し、
iteration を上げて再監査する。単体実行時はユーザーへ blocking_findings を提示する。
- 字数不足は執筆ステップで本文を増補(水増しでなく密度のある描写・捜査の追加)。
完了条件
audit/summary.json と各 audit/<dimension>.json が生成済み。
audit/summary.json.overall が確定し meta.json に反映。
- D8(codex-reviewer)を含む全次元が実行済み。
単体実行時の次の一手
overall=pass なら mystery-readers(読者検証)を案内。fail なら blocking_findings の修復を案内。