STEP 2289 — benchtop-mcp audit-coverage patch review arc + Python env repair

documentation-only cross-tab review arc Python env repair 2026-09-27 evening → 2026-09-28 早朝 · rei-aios-2c tab · STEP 2289
藤本さん directive 「サイト反映 + Rei から 辿れる + メモリ に 入れる」 (2026-09-28 出発 前) 応答。 chat-Claude (benchtop-mcp-78 tab 想定) 主導 の benchtop-mcp v0.14.1-alpha → v0.14.2-alpha patch chain review + Python global 環境 修復 補助 の close bundle。

1. Executive summary

本 arc は 2 layer:

2. Delivered patches (chat-Claude → 藤本さん Downloads/)

#File内容State
1benchtop-mcp-audit-coverage.patchv1 素 差分 — audit claim/impl gap 初期 fix (33 tool 中 7 tool のみ 記録 → 17 audited + 16 unaudited 明示 列挙)superseded (v3 化)
20001-fix-audit-tool-10.patchv2 — git am 対応、 但し [16e-1] が 登録一覧 と 分類 集合 の 一致 検査 を していない 自欠陥 内包superseded (自欠陥 catch)
30001-fix-audit-tool-10_1.patchv3 — 自欠陥 fix (server._tool_manager.list_tools() と 集合 一致 assert)、 陰性対照 実測 (list_ports を 分類 から 外す と AssertionError)★ landed on origin/main @ 9c2511e
40001-fix-tz-BENCHTOP_TZ-tzdata-requirements.patchtz 無言縮退 fix + tzdata requirement 追加 (前 版、 [15f] なし)superseded (差し替え)
50002-fix-selftest-phase.patchselftest 「全テスト成功。」 banner を [25] 直後 から 最後 phase の 後 へ 移動 (前 版)superseded (差し替え)
60001-fix-tz-BENCHTOP_TZ-tzdata-requirements_1.patch差し替え 版 — 内側 finally の env 冗長 復元 削除 + [15f] 追加 (env 復元 の 事実 を assert)review 完了、 apply pending
70002-fix-selftest-phase_1.patch差し替え 版 — 実質 変更 なし (0001 の 行数 影響 の context 更新)review 完了、 apply pending
判別: 差し替え 版 は _1.patch suffix。 内容 判別 = 0001 に 15f が 含まれる か:
Get-ChildItem $HOME\Downloads\0001-fix-tz-*.patch |
  ForEach-Object { "{0}  new={1}" -f $_.Name, [bool](Select-String -Path $_ -Pattern '15f' -Quiet) }

3. Python global 環境 修復 (Layer B)

3.1 発見 flow

  1. chat-Claude 「グローバル の Python 環境 が まだ 壊れた まま」 指摘 (v3 push 完了 直後、 2026-09-27 深夜)
  2. 本 tab 診断: py --list-paths default が 3.13t (free-threading build) を * marker で 指定 = 未来 の 別 session / Task Scheduler / cron で py -3 or python3 shim 経由 起動 が failing
  3. 但し rei-aios .mcp.json の benchtop 起動 は 3.13 通常 build の 絶対 path 指定 で 二重防御 = 現状 私 の 33 tool 起動 は 動く

3.2 修復 内容

%LOCALAPPDATA%\py.ini (= C:\Users\user\AppData\Local\py.ini) 新規作成:

[defaults]
python=3.13
python3=3.13

3.3 検証 (実測、 全 pass)

検証結果
py -3 -c "import sys; print(sys.executable)"python.exe (通常 build、 t なし)
py -3 -c "import sys; print(sys.version)""free-threading" 文字列 なし
py -3 -c "import pydantic; print(pydantic.VERSION)"pydantic OK: 2.13.4 (本番 検証)
py -3 -c "import mcp; import tzdata"両方 OK (benchtop-mcp 依存)
本 turn の 教訓 = py.ini の python= key scope: 初期 attempt で [defaults] python=3.13 だけ 書いた 結果、 py --list の * は 移った が py -3 は 依然 3.13t を 引き、 pydantic import は ModuleNotFoundError。 python= key は py (arg なし) の default のみ 制御、 py -3 は 別 key python3= が 必要 と 実測 で 判明。 語感 の 「default」 scope が 見た目 より 狭い。

4. fm 学習 loop 継承 candidate 10 個 (canonical promote は 別 STEP defer)

  1. fm-check-uses-proxy-instead-of-result — 本 session 3 度目 発火: (a) sys.executable path 確認 は 代理指標 (実 は import が 本番)、 (b) py --list * marker も 代理指標 (py -3 は 別 key)、 (c) selftest 「全テスト成功。」 banner 印字 も 代理指標 (権威判定 は exit code)
  2. fm-alternative-framing-hides-composition — 2 度目 実 emerge: 択一 A/B/C form が 「役割 異な る action の 併用」 を 隠す。 chat-Claude 指摘 「A = 罠 範囲 縮小、 B = 『もう 届か ない と 言える か』、 役割 別 = 併用 が 正解」
  3. fm-py-launcher-config-key-scope-narrower-than-name-suggests — [defaults] python= は py のみ、 py -3 は python3=。 key 名 の 語感 scope が 実 scope より 広く 見える
  4. fm-negative-control-mistargets-the-check — 陰性対照 の 対象 選び が 検査 の 意味 を 決定。 [15e] 内側 finally 削除 対照 では 落ちない → [15f] が 守って いる のは 外側 復元、 内側 汚染 では ない
  5. fm-cleanup-code-looks-like-restore-but-restores-nothing — 冗長 復元 code (内側 finally の env 書き戻し) は 外側 の 無条件 復元 に 上書き され 何も 復元 しない、 誤解 誘発 pattern
  6. fm-relative-refspec-embeds-count-assumption — HEAD~N は N 個 apply 前提、 片方 だけ 通った case で 誤動作。 apply 前 位置 に 戻す は 絶対 ref (origin/main) 使用
  7. fm-bias-note-over-discounts-review-substance — Rei-favorable bias 注記 は メタ 自己認識 として 妥当、 但し review 内在的品質 まで discount 方向 に 過剰 適用 する と 質 判定 が ゆがむ
  8. fm-suggested-verify-declined-as-unnecessary-hides-real-defect — 「追加 verify 不要 level」 判断 が 誤り、 空振り 見込み でも 走らせる ことで 検査コード 側 の 欠陥 (v2 [16e-1]) が 発見
  9. fm-selftest-exit-0-conflated-with-phase-strictness — exit 0 は 「全 phase 通った」 のみ、 「各 phase 意図 どおり 厳しい」 は 陰性対照 で 別途 実測
  10. fm-lint-that-fails-to-catch-its-own-anti-pattern — 予防機構 が 自分の 予防対象 pattern を 内包 (v2 patch = 「主張/実装 齟齬」 を 直す 途中 で 検査 自身 が 同 pattern を 再現)

5. Cross-platform independent verify 成立

chat-Claude 側藤本さん 側
OSLinux (使い捨て clone container)Windows 11 Pro
Python3.11.153.13.2 通常 build
mcp2.2.03.x (別 install)
pydantic2.13.32.13.4
tzdataなし (system tzdb あり)あり (Windows は system tzdb なし の ため 必須)
selftestexit 0exit 0
v3 push 後 tree hash = 175597efbf83ab50562560123fad409f49a535a1 byte-identical — Linux で 通った state と Windows で 通った state が bit 単位 同一

6. Honest scope

7. Peer coordination

8. Attribution

via 藤本さん directive 「サイト反映 + Rei から 辿れる + メモリ に 入れる」 (2026-09-28 出発 前) 応答 / rei-aios-2c STEP 2289 own arc / cross-tab review arc (benchtop-mcp-78 chat-Claude relay 主導 + 本 tab review + Windows 環境 verify + Python global 修復) / immutable_artifact_write_once 遵守: forward-only close bundle form / documentation-only (rei-aios repo 側 の コード source 変更 一切 なし、 benchtop-mcp v3 landed は 別 repo)