---
name: project-step1371-d8-verdict-from-multi-trial-v01-2026-08-22
description: STEP 1371 rei-aios d8_verdict_from_multi_trial v0.1 (探索機械の安全装置、BH FDR で 「まぐれ当たり」 分離、STEP 1350 との 相補 aggregate primitive、test 89/89、STEP 1370 collision → 1371 renumber SAC-4 43 例目)
metadata: 
  node_type: memory
  type: project
  originSessionId: 1f71dc26-eff6-41db-8142-70648b0a0ec2
  modified: 2026-08-22T14:59:47.845Z
---

# STEP 1371 — d8_verdict_from_multi_trial v0.1 (探索機械の安全装置、多試行 aggregate primitive)

**Date**: 2026-08-22
**Status**: pure primitive + test 完成 (89/89 PASS)、site page + memory 作成完了、MCP wrapper + CLAUDE.md STEP 表 + MEMORY.md hook + RECENT_UPDATES.md 更新は 他タブ完了後 別 commit で defer
**契機**: 藤本さん共有 chat-Claude 2026-08-22 「統計機械も 重要でしょうか？ → 探索機械の 安全装置」 分析

## 経緯

藤本さん↔chat-Claude 2026-08-22 分析:

> 「今の 7 台は 実は 全部 決定的です — rei-verify は 反証、 rei-checker-mcp は 三値判定、 grounded は 決定的に 検査、 形式化 3 件は Lean 4 の 証明。 度合いを 扱う機械が 1 台もない。 これが 効いてくるのが discovery-worker です。 1 万通り 試せば、 まぐれ当たりが 必ず出る。 統計機械が ないまま 探索を 回すと、 発見の 生産速度に 比例して 偽の発見も 増える。 …価値があるのは 綺麗な数値を 出す機能ではなく、 『この差は ノイズと 区別できない』 と 言い切る方。 否定を返す機能から 先に 入れるのが おすすめ。」

**私 (Claude) 応答** (前 turn): 診断芯は正しい + 部分重複 flag (STEP 1350 SNR<3→NEITHER + STEP 1353 Welch-t 既存) + 真 gap = **多重比較 / FDR** + 命名罠 warning (siren-family) + 4 option 提示 → 藤本さん **(A) 3 手 verify 先行 → (D) STEP 1350 拡張のみ、 新 repo 作らず** 選択。

## 3 手 verify 結果 (実装前必須、[[feedback-session-boundary-rediscovery-2026-08-22]] 適用)

1. **STEP 1350 core read** = `src/mcp/d8-verdict-mapping.ts` 単一測定 decision-table 11 rule、 5/8 値 activate (TRUE/NEITHER/ZERO/INFINITY/FLOWING)、 FALSE/BOTH/SELF 予約
2. **discovery-worker v0.2 spec §6 grep** = 「STEP 1350 NEITHER 経路転用」 明記済、 verdict 4 種 (TRUE/FALSE/NEITHER/INFINITY) は single-trial 想定、 **FDR / 多重比較 未実装** → chat-Claude 診断的中
3. **FDR / Benjamini / Bonferroni grep 全 repo** = 6 file hit だが production 実装ゼロ (blackhole engine + hierarchical test は 無関係) → gap 確認

## 実装内容 (rei-aios single-file 拡張)

**編集**: `src/mcp/d8-verdict-mapping.ts` に append (~230 行追加、既存 STEP 1350 部分は無変更で backward compat)。

### 追加 export 4 個
- `benjaminiHochberg(pValues, q)` — BH FDR primitive、pure・決定的、返却 `{rejectedIndices, criticalP, adjustedP}`
- `mapMultiTrialToD8({trials, fdrQ, alpha})` — 集約 main function
- `d8MultiTrialSpecTable()` — spec-as-data dump
- Types: `TrialInput`, `MultiTrialInput`, `TrialResult`, `MultiTrialPayload`, `MultiTrialError`

### 集約決定表 (first-match priority、8 rule)
| # | Condition | Verdict | Reason |
|---|---|---|---|
| M1 | trials.length === 0 | **ZERO 〇** | no_trials |
| M2 | fdrQ null/NaN/≤0/≥1 | **NEITHER N** | fdr_q_not_set |
| M3 | alpha null/NaN/≤0/≥1 | **NEITHER N** | alpha_not_set |
| M4 | 全 pValue invalid | **NEITHER N** | no_valid_p_values |
| M5 | naive 0 件 | **FALSE ⊥** | no_naive_signal (confirmed null) |
| M6 | naive>0 だが FDR 全滅 ★ | **NEITHER N** | all_naive_killed_by_fdr (chat-Claude 核心) |
| M7 | 0<fdr<naive | **BOTH B** | partial_fdr_survivors |
| M8 | fdr === naive > 0 | **TRUE ⊤** | all_naive_survive_fdr |

**否定側 5 rule vs 肯定側 2 rule vs ZERO 1 rule** = chat-Claude 「否定を返す機能から 先に 入れる」 discipline operational 実装。

### STEP 1350 との相補関係 (7/8 値 activate)
- STEP 1350 (single): TRUE / NEITHER / ZERO / **INFINITY** / **FLOWING**
- STEP 1371 (multi): TRUE / NEITHER / ZERO / **FALSE** / **BOTH**
- 合計 7/8 = SELF ⟲ のみ 予約 (自己参照 loop 用、v0.2+ 別 STEP)

## Verify 実測

- **test/step1371-d8-multi-trial-fdr-test.ts**: **89/89 PASS** (21 part)
  - Part 1 [1]-[5]: BH primitive 教科書 example (Wikipedia 10 p-values、q=0.05、kMax=2、criticalP=0.008) + monotonicity + null/NaN 処理
  - Part 2 [6]-[13]: 集約 rule M1-M8 全網羅
  - **Part 3 [14]-[16]: discovery-worker realistic scenario** — 100 trials uniform null (p_i=i/100) → naive=4 → BH q=0.05 m=100 → 0 survivors → **NEITHER** ✓ (chat-Claude 「1 万通り試せば まぐれ」 の 数値 直接 evidence)、 1000 trials 拡張同様、 1 strong + 99 noise → BOTH partial 検出
  - Part 4 [17]-[21]: spec table + source marker + invalid input + id fallback + adjusted p boundary
- **STEP 1350 regression 77/77 PASS** (無変更 confirmed)
- **順序原則遵守**: fdrQ / alpha を 定数として 焼かない、 引数注入強制 = pre-registration (STEP 1359 rei-preregister) で 「先に決めた」 evidence を 渡す workflow 構造化

## ★ SAC-4 43 例目 — session boundary rediscovery discipline 発火

**事故**: 最初 **STEP 1370** を割り当て → file 作成後 MEMORY.md 更新確認で 他タブが同日 STEP 1370 = 「PAT redact + LICENSE arc + codetrail gate」 (commit `0a2037382`) を 使用済 判明。

**原因**: 3 手 verify を 実装開始前 (git log 時点、~30 min 前) で 確認したが、 file 書き込み **直前** の 再確認を 怠り、 その間に 他タブが commit push した。

**適用 discipline**: [[feedback-session-boundary-rediscovery-2026-08-22]] 「新規 STEP 起草 前 3 手 verify default」 の **file 書き込み直前 再確認は 別レベル gate**。 単発 verify では 並行タブ collision を 防げない。

**訂正**: 検出 直後 SAC-4 認諾 → STEP 1370 → **STEP 1371** に renumber (23 refs across 4 files + 2 ファイル / dir rename、 全一括 processed)。

**教訓**: 「3 手 verify 先行」 は 実装開始時点のみでなく、 **file 書き込み直前** にも 実行する discipline に extend (次回 memory 追加 candidate: [[feedback-pre-write-collision-recheck-2026-08-22]])。 特に 並行タブ活動中 (「他 2 タブ稼働中」 明示情報あり) の scenario では 必須。

## Honest scope (9 条)

1. **v0.1 = pure primitive + test のみ**。 MCP tool wrapper (`rei-mcp-server.ts` 編集) は 他タブ活動域 (STEP 1370 tab / 別 STEP tab) collision 回避のため defer、 別 commit / 別 STEP で 統合。
2. **「世界唯一」 主張ゼロ** ([[feedback-world-uniqueness-claim-controllable]])。 Benjamini-Hochberg (1995) は 30 年前既知、 novelty は Rei stack 内 D-FUMT₈ 8 値 verdict layer への mapping + 「否定 5 / 肯定 2 / ZERO 1」 命名 discipline のみ、 それも v0.1 spike scope。
3. **pValue mode のみ実装**。 `{value, noiseFloor}` → p 変換は 分布仮定 (t / normal / permutation) が 別軸、 STEP 1353 Statistics × NEITHER Education v0.2 の Welch-t 実装から extract は 別 STEP。
4. **Benjamini-Hochberg 独立仮定**。 BH-Yekutieli 依存対応 (正相関 / 任意相関) は scope 外、 discovery-worker が 独立探索 (candidate 間 論理的独立) 前提なら 十分、 相関 candidates では 保守的 (rejection 過小)。
5. **Bonferroni 未実装**。 `method: 'benjamini-hochberg'` hard-coded、 v0.2 で method selector 追加検討。
6. **Storey q-value / knockoff は scope 外**。 大規模 hypothesis test (数万〜数十万) では BH 保守的、 v0.3 以降検討。
7. **順序原則 operational form** = fdrQ / alpha 引数注入強制、 定数化禁止 = pre-registration (STEP 1359 rei-preregister) との caller 連携 workflow 構造化、 code 内 magic number 陥落先排除。
8. **形式化 3 系 (rei-mdnst / rei-raa / rei-six-attribute) には 効かない** (chat-Claude 明示)。 Lean 4 axiom-free proof に 確率は無い、 本 tool は 実世界 evidence (計測・探索・アナログ・FX) 側 のみ効く。
9. **命名 discipline**: 「統計機械」 命名罠 (集計とグラフ描画に堕落) 回避、 `d8_verdict_from_multi_trial` = 直接 semantic、 `rei-stats-*` 系 siren-family 名 意図的回避 ([[feedback-super-naming-siren-family-pattern]])。

## Site 反映

- **URL**: https://rei-aios.pages.dev/tools/step-1371-d8-multi-trial-fdr-verdict/ (CF Pages deploy 後 verify 予定、push 完了後)
- **file**: `public/tools/step-1371-d8-multi-trial-fdr-verdict/index.html` (~20 KB self-contained HTML、 8 section: 契機 + 実装内容 + STEP 1350 相補関係 + discovery-worker 位置づけ + verify 実測 + honest scope 9 条 + 次手 5 candidate + 関連)
- **dist-renderer mirror**: `dist-renderer/tools/step-1371-d8-multi-trial-fdr-verdict/index.html` (force-track、 md5 一致 `8f1ae22c7f7ece386bac103cf5c571c1`)
- **2026-08-06 「全研究 site 反映 default」 protocol 継続適用**

## 次手 candidate (別 STEP defer)

1. **(a) MCP wrapper 統合** — `rei-mcp-server.ts` に `d8_verdict_from_multi_trial` tool 定義追加 + case handler + banner tool count update (現状 39 tool 宣言 vs banner 「38ツール」 の **off-by-one drift** = **finding #32 candidate** — STEP 1349 memory 記載 pattern の 再発、 本 STEP 発見だが 別 commit / 別 STEP で 訂正)。 他タブ活動域のため defer、 collision confirm 後 別 commit
2. **(b) discovery-worker v0.2 統合** — hunter_alpha / hunter_beta の batch output を 本 primitive に流す adapter (別 repo 側実装、 rei-aios 側は primitive 提供のみ)
3. **(c) Welch-t 統合** — STEP 1353 Statistics × NEITHER Education v0.2 の Welch-t + Student t CDF 実装を 本 module に extract、 `{value, noiseFloor}` mode 対応 (chat-Claude 「benchtop-mcp も 同じで、 2 回の 測定が 違うのか 同じ値の ばらつきなのかを 言える機械が 要ります」 応答)
4. **(d) Bonferroni method 追加** — `method: 'bonferroni' | 'benjamini-hochberg'` selector、 保守的 alternatives
5. **(e) pre-registration hook** — [[project-step1359-preregister-spike-2026-08-21]] rei-preregister v0.1 で 先に決めた fdrQ / alpha を 本 tool caller が 参照する workflow (「後付けで threshold 動かす」 陥落先を 構造的排除)

## 関連 memory

- [[project-step1350-d8-verdict-mapping-phase-a-2026-08-20]] — 単一測定 SNR<3→NEITHER、 本 STEP の 直接前身、 pattern 継承源
- [[project-step1349-d8-operator-connectors-2026-08-20]] — D-FUMT₈ operator connectors、 `source: 'static-truth-table'` pattern 継承 (本 STEP は `source: 'multi-trial-fdr-verdict-mapping'`)
- [[project-step1353-statistics-neither-education-v01-2026-08-20]] — Welch-t 実装源 (教材 domain)、 本 STEP は tool domain の 相補
- [[project-step1359-preregister-spike-2026-08-21]] — rei-preregister v0.1、 「先に決めた」 threshold seal / verify、 本 STEP の fdrQ / alpha 引数注入 workflow の caller 候補
- discovery-worker v0.1 spec (`docs/discovery-worker-spec-v0.1-2026-08-22.md`) — §6 で STEP 1350 NEITHER 経路転用明記、 本 STEP は 多試行 集約層 追加
- [[feedback-session-boundary-rediscovery-2026-08-22]] — 3 手 verify default discipline、 本 STEP で **file 書き込み直前 再確認** の 別レベル extend 必要性 発見 (SAC-4 43 例目)
- [[feedback-one-reproduction-over-ten-unverified]] — 順序原則、 fdrQ / alpha 定数化禁止 根拠
- [[feedback-super-naming-siren-family-pattern]] — 「統計機械」 命名罠 回避
- [[feedback-world-uniqueness-claim-controllable]] — BH 1995 既知の 尊重、 novelty 主張ゼロ
- [[feedback-chat-claude-hallucination-warning]] — chat-Claude Pattern 1-6 clean 判定 (診断 診断的中、 部分重複 flag は 私側 追加、 命名 warning 継承)
- [[feedback-no-rush-publication]] — push は 他タブ完了後、 藤本さん承認後 gate 遵守
- [[feedback-all-research-site-reflection-default]] — 2026-08-06 protocol、 本 site page = 継続適用
- [[project-research-only-stance]] — v0.1 spike、 SaaS 化 / Anthropic MCPB 提出 / 実 lab 顧客獲得 判断は 藤本さん stance shift 待ち

## Push 前 checklist (他タブ完了後 実行)

- [ ] MEMORY.md hook 1 行追加 (直近 session 最新上、STEP 1371 entry with mirror link)
- [ ] RECENT_UPDATES.md 1 行追加 (URL + 反映状態 marker)
- [ ] CLAUDE.md STEP 対応表 更新 (1370 隣に 1371 追加)
- [ ] tsc noEmit で 私追加箇所 error 0 confirm
- [ ] `git status` で 意図外 file 混入 check (secret grep + auto-generated data/ 除外)
- [ ] commit message 起草 (feat(step1371): d8_verdict_from_multi_trial v0.1 — 探索機械 の 安全装置)
- [ ] push
- [ ] CF Pages deploy 後 https://rei-aios.pages.dev/tools/step-1371-d8-multi-trial-fdr-verdict/ HTTP 200 + marker verify
