STEP 1372 — d8_verdict_from_multi_trial MCP wrapper + finding #32 訂正

STEP 1372 MCP wrapper 統合 finding #32 訂正
2026-08-23 · rei-aios · STEP 1371 primitive を MCP tool 化 + banner off-by-one drift 訂正

1. 契機

STEP 1371 (2026-08-22) で 実装した mapMultiTrialToD8 primitive を rei-aios MCP server の tool として wire up。 併せて 発見済 finding #32 (banner 「38ツール」 vs 実 tool 39 個宣言 の off-by-one drift、 STEP 1349 memory 記載 pattern の 再発) を 同時訂正。

藤本さん directive: STEP 1371 push 後 defer 5 項目 (a-e) の (a) MCP wrapper 統合。

2. 実装内容 (rei-aios single-commit)

2.1 src/mcp/rei-mcp-server.ts 4 edit

  1. import 追加: mapMultiTrialToD8, d8MultiTrialSpecTable from ./d8-verdict-mapping
  2. Tool 定義追加: d8_verdict_from_multi_trial (description で 集約 8 rule + STEP 1350 相補 + 順序原則 + honest scope 明示、 inputSchema で trials array + fdrQ + alpha + includeSpec、 finding #30/#31 preventive design 継承 = 返却 field 全列挙)
  3. Case handler 追加: case "d8_verdict_from_multi_trial" = thin wrapper (trials array normalize + fdrQ/alpha pass-through + includeSpec で specTable dump)、 STEP 1350 case pattern 完全 mirror
  4. Banner update: v2.8.1 → v2.8.2、 「38ツール」 → 「40ツール」 (実 tool 39 + 新 tool 1 = 40)、 finding #32 訂正明記

2.2 Finding #32 訂正 (banner tool count drift)

Pre-STEP 1372 状態: banner text 「38ツール」 vs 実 tool 39 個宣言 (grep -cE '^\s*name:\s*"') = off-by-one drift。 STEP 1349 memory (2026-08-20) に 「description drift 3 例目 = finding #30 (rei-aios get_kernel_status) + finding #31 (rei-meta 自身) と 同型 pattern」 記載済、 STEP 1371 の MCP wrapper defer 検討時に 再発 検出。

訂正: v2.8.2 で banner 実 tool count 40 に 一致。 STEP 1372 の tool 追加 (+1) と 同時 実行で 追加編集不要。 「開通した計器が 最初に映したもの」 pattern の 4 例目 = STEP 1334 KA wiring + STEP 1336 Rei-Automator revival + STEP 1349 D8 connectors の 系譜継承 (STEP 1349 で 検出したが 別 STEP で 訂正の pattern)。

3. Verify 実測

3.1 Tool count exact

grep -cE '^\s*name:\s*"' src/mcp/rei-mcp-server.ts
→ 40  (39 pre-STEP 1372 + 1 新 tool)

banner: "v2.8.2 起動済み(stdio モード・40ツール・...・
        d8_verdict_from_multi_trial 追加 (STEP 1371、 BH FDR aggregate)・
        banner tool count drift finding #32 訂正)"

3.2 MCP stdio end-to-end smoke (chat-Claude 核心 M6 case)

test: tools/call name=d8_verdict_from_multi_trial args={trials:[{pValue:0.04},{pValue:0.045},{pValue:0.06}], fdrQ:0.05, alpha:0.05}

FieldValue
aggregateVerdict.nameNEITHER
aggregateReasonall_naive_killed_by_fdr ★ chat-Claude 核心 M6
naiveSignificantCount2
fdrSurvivorCount0
perTrial[0].verdictNEITHER (naive_killed_by_fdr)
perTrial[1].verdictNEITHER (naive_killed_by_fdr)
perTrial[2].verdictFALSE (not_naive_significant)
sourcemulti-trial-fdr-verdict-mapping ✓ 静的引き当て 機械保証
honestScopeembedded ✓

3.3 Regression

4. Honest scope

  1. 「世界初」 主張ゼロ ([[feedback-world-uniqueness-claim-controllable]])。 STEP 1371 primitive は STEP 1350 pattern 継承 + BH 1995 既知、 本 STEP は wrapper wire-up + drift 訂正のみ、 novelty ゼロ。
  2. Finding #32 = 累積 drift の 一部。 finding #30 (rei-aios get_kernel_status) / #31 (rei-meta 自身) と 同型 「宣言 vs 実装 drift」、 systemic 対策 (init 時 auto-count + banner 自動生成) は 別 STEP candidate、 本 STEP は spot fix のみ。
  3. Wrapper は thin: primitive の 動作を そのまま流す、 caller 側の schema validation (trials array 空配列許容、 fdrQ/alpha null 許容) は primitive の decision-table に 委譲、 wrapper 層 追加 logic なし。
  4. Tool description 長い (~1500 chars): finding #30/#31 preventive design 継承で 返却 field 全列挙 + honest scope 明示、 caller (Claude session or 別 tool) が description のみで tool の 動作境界を 把握可能な設計、 短縮は 意図的に 避ける。
  5. Rei stack MCP 8 systems 数不変: rei-aios 内 tool 39 → 40 (STEP 1371 primitive 統合)、 systems 数は 8 のまま (rei-aios + benchtop + mcp-lens + rei-automator-mcp + lab-notebook-mcp + rei-verify + rei-memory-mcp + rei-meta-mcp)。 STEP 1352 memory L10 header 「rei-aios v2.8.1 tool 38」 は drift 済、 本 STEP で 「v2.8.2 tool 40」 に update 対象。

5. 関連