---
name: project-step1543-mystery-playable-page-2026-08-29
description: STEP 1543 playable mystery page v0.1 (推理コネクタ engine (STEP 1538) の browser port + 4 事件出題 教材、 fair-play discipline 保持、 localStorage stats persist、 事件は event-load 時に engine で self-verify well-posed 通過)
metadata: 
  node_type: memory
  type: project
  originSessionId: c922ed16-8768-46a2-904a-a44edbee09b5
  modified: 2026-08-28T22:44:46.503Z
---

# STEP 1543: Playable Mystery Page v0.1 (推理コネクタ 遊んでみる)

**Date**: 2026-08-29
**Trigger**: 藤本さん承認 「C. 推理コネクタの playable page 化」 (recommendation `[[project-step1538-mystery-reasoning-connector-2026-08-29]]` の v0.1 完成直後、 藤本さんが next step として選択)
**Sibling**: [[project-step1538-mystery-reasoning-connector-2026-08-29]] (engine 本体) / [[project-step1536-puzzle-verifier]] (パズル姉妹) / STEP 1537 verdict-puzzle (同 gamification pattern)
**Files**:
- `public/tools/step-1543-mystery-playable/index.html` (700+ line: inline engine port + 4 case + UI + stats)
- `dist-renderer/tools/step-1543-mystery-playable/index.html` (mirror md5 `f457ab79...`)
- `test/step1543-mystery-playable-cases-test.ts` (16/16 PASS — 4 case × 4 assertion 全通過)

## v0.1 design

**Engine port**: STEP 1538 `mystery-reasoning-connector.ts` を browser inline JS に subset port (5 chip + runCircuit + verifyMystery)。 各 case は page load 時に `verifyMystery()` を実行して `wellPosed=true` を self-verify (console.warn 出力で異常検知可能)。

**4 事件 (難度別)**:

| ID | 題 | 難度 | 犯人 | Chips | 実装 pattern |
|---|---|---|---|---|---|
| study | 書斎の事件 | 易 | B 佐藤 | alibi + elimination | leftHanded (person) + station alibi |
| library | 図書館の毒殺 | 中 | B 看護師 | alibi + elimination + common_feature | medic + leftHanded (person 2 個で common_feature narrative) + pharmacy alibi |
| garden | 庭園の密会 | 中 | C 元愛人 | alibi | 3 alibi record で 3 人除外 = 純消去法 |
| lab | 深夜の研究室 | 難 | B 博士研究員 | alibi + elimination + common_feature | tall + wearsGlasses=false (person 2 個) + home alibi |

**UI 構造**:
- Case selector tabs (chips 表示 + difficulty badge)
- 事件の初期提示 (narrativeFragment を prose 一覧)
- 容疑者カード grid (attributes を display text で自然文化)
- 答え選択 radio + 「推理を確定する」 button + 「諦めて答えを見る」 button
- 答え後: 正解/不正解 + 推理の展開 (chip trace narrative) + 検証器判定 (uniqueness / necessity / wellPosed) + 「次の事件へ」 button
- Stats sidebar: 解いた事件 / 正解 / 誤答 / 諦め / 連続正解 + reset button
- Theme toggle (light/dark/auto、 STEP 1537 v0.1.1 stats persistence pattern 継承)

**fair-play discipline**:
- narrative reveal は 答え確定後のみ (`verdictArea` initial hidden、 submit 時 UnHide)
- Chip が providedFacts のみ見る pure function 制約で 「後出しの手掛かり」 構造的に不能

**Stats persistence** (STEP 1537 v0.1.1 pattern):
- localStorage key `mystery_playable_stats_v01`
- `solved: {}` map で 「一度解いた事件は再 count しない」 (連続同 puzzle spam 防止)
- theme も別 key `mystery_playable_theme` で persist

## 実装中の bug 発見 → redesign

初回 4 case 実装後 test で 3/4 fail:

1. **library** (NONE): person fact medic=true + leftHanded=true 適用時、 全 4 suspect が eliminate される。 alibi 済み 看護師 C + person 済み 事務員 B + person 済み 学生 D + 助教 A の overlap 過多。
2. **garden** (REDUNDANT_FACTS: f1, f2): contradiction fact (元愛人 3F vs garden) は v0.1 で elimination なし、 uniqueness に貢献しない → 冗長。
3. **lab** (REDUNDANT_FACTS: ALL): 3 person fact + 1 alibi の overlap 過多 (leftHanded=true が 全 4 に True で eliminates 0、 各 non-culprit が複数 fact で eliminate 可能)。

**修正原則**: 「各 fact は exactly 一人を uniquely eliminate、 overlap ゼロ」。

- **library redesign**: 4 suspect を 事務員(非医療)/看護師(医療左利き=犯人)/医師(医療右利き)/薬剤師(医療左利きalibi) に変更。 各 fact が exactly 一人除外 (medic=true→事務員、 leftHanded=true→医師、 alibi→薬剤師)。
- **garden redesign**: contradiction fact を drop、 3 alibi record 単独で well-posed 化。 元愛人 の 証言矛盾は case_subtitle + 容疑者 display text の narrative color に残す。
- **lab redesign**: leftHanded fact drop (全員左利きで eliminates 0)、 tall + wearsGlasses + alibi の 3 fact に scope 縮小。 各 fact exactly 一人除外 (tall→院生、 wearsGlasses=false→警備員、 alibi→教授)。

Redesign 後 4/4 well-posed、 test 16/16 PASS。

## Honest scope

- v0.1 = 4 事件 hardcoded、 dynamic 生成なし (「生成 → verifier gate → 出題」 の full cycle は v0.2 defer)
- contradiction chip は v0.1 で narrative color のみ (elimination なし)、 garden case で demo できず drop
- narrative layer は簡易 template (LLM なし)、 「事件の余韻」 のような文学的表現なし
- Stats は per-viewer localStorage (viewer 間共有なし、 clear 可能)
- 「推理教材で世界初」 主張ゼロ、 「事前に検証済み (uniqueness + necessity) を確認可能な形で見せる」 教材路線
- puzzle-verifier (STEP 1536) の 「puzzle 生成 4 component の (iii) レンダラ」 に相当、 mystery 側 の renderer 位置

## site 反映

- URL: https://rei-aios.pages.dev/tools/step-1543-mystery-playable/
- md5: `f457ab7951b2a0a0ae475383ef4a52eb` (public + dist-renderer mirror 一致)

## 次 STEP candidate (v0.2)

- contradiction chip elimination 昇格 → garden case を contradiction 主体 に redesign
- dynamic 生成 (backward machine 出力を direct 出題、 verifier gate 通過分のみ)
- 事件バリエーション追加 (難度 極 = 5+ suspect、 timeline chip 主体)
- LLM narrative layer (chip output → 事件の余韻 prose、 「火災の14分前に通報した人物がいた」 型の追加装飾)
- 事件履歴 tracking + Jaccard anti-repetition 実装 (「またこのパターンか」 予防)
- 「あなたが解いた事件」 export (SNS 共有用 image or text)
