🔧 STEP 1940 pilot 2-track 200/200 clean + line_map bug 発見 + 診断反転 STEP 1944

2026-09-10 → 2026-09-11 · rei-aios-99 (Phase A/C/D 実行) + rei-aios-87 sidecar (Phase B/D pilot execution) · cowork-Claude 提案 → 藤本さん relay → 全 phase A→B→C→D 実行 Track A + Track B 200 items 完走 · STEP 1940 site pagecorrigendum + full 2-track 完了

1. なぜ このページか

STEP 1940 が site 反映 (STEP 1942) で公開した「初回却下率 94.9%」は 形式化の却下率ではなく、 pilot 側の line_map バグ由来の 見かけ の 数字cowork-Claude (Claude session claude-6c / fbd39f、 別 relay) が「A は指示追従率と形式化能力の混合」と指摘 → 藤本さん経由で ①② 提案 forward → rei-aios-99 (本 tab) で 生成コストゼロ の 再検査 実行。 結果 pilot bug 発見、 A が 94.9% ではなく 76.9% だと判明。 藤本さん directive「94.9% が形式化の却下率ではないことを 明記された方がいい」 に沿って本 page 新設 (STEP 1942 page は上書きせず併存)。

2. 訂正後 metrics — 3 段階

指標pilot 報告 (buggy)Phase A 39 verifyPhase C 100/100 cleanroot cause
PASS 数2/399/3927/100bugfix + full sample
Pass rate5.1%23.1%27.0%+21.9 pt
A (raw 却下率)94.9%76.9%73.0% (73/100)bugfix 収束
A' (sorry 正規化後、 39 subset)(未計測)61.5% (24/39)(subset のみ)sorry 正規化 → type-check
statement 構造妥当 (39 subset)(未計測)38.5% (15/39)(subset のみ)同上
C `other` 割合21.6%< 5%11.0%v2 分類器 + 100 sample 分散
Top error classno_sorry 65%混在syntax 41%診断 反転
診断 反転: pilot 「A 高 × no_sorry 1 型偏り → プロンプト問題」 vs 100/100 clean 実測 「A 高 × syntax 41% dominant + no_sorry 16% + other 11% + type_mismatch 4% + elab_failed 1% = model の Lean 4 syntax 知識不足 or 混合 (prompt + model)」。 no_sorry の 65% → 16% 大幅減少 = pilot の line_map bug が この bucket を 過大計上 していた 直接影響。

Phase 内訳: Phase A verified (baseline 39) = 9 PASS + 30 REJECT / Phase B fresh (61 items) = 18 PASS + 43 REJECT。 Phase B pass rate 29.5% vs Phase A 23.1% は sample variance (n=61 で ±10% 誤差内)、 合計 100 で 27.0% 収束。

cowork-Claude の 予測 (n=15 で 条件付き却下率 86.7%) と 私 の 結果 は 別軸: cowork-Claude は「指示追従を守った 15 件 の うち REJECT 割合」、 私 の 結果 は「実 100 items で 全 model attempt を fixed line_map で 属性化」。 前者 は pilot の 「no_sorry 24 件は未検査」 前提 に立った 上界推定、 後者 は full pilot re-run + bugfix。

3. Root cause — pilot line_map バグ

run_pilot.py:140-147build_batch_file:

lines.append(marker_start)
start_line = len(lines) + 1  # BUG: len counts list elements, not physical lines
lines.append(f'namespace {ns}')
lines.append(body if body.strip() else '-- (empty body)')  # multi-line body = 1 element!
lines.append(f'end {ns}')
end_line = len(lines)  # BUG (same)

lines.append(body)body が N 行 の string でも list 要素として 1 個。 '\n'.join(lines) で 展開時 に physical line 数 は N 増えるが、 len(lines) は 1 しか増えない → 全 item の range が 「3 行幅 (namespace + body 1行相当 + end)」に compress

実測 divergence (buggy vs correct physical line)

itempilot buggy rangecorrect physical rangedrift
hilbert-residual-20(4, 6)(4, 8)+0, +2
myst-monstrous-moonshine(10, 12)(12, 14)+2, +2
erdos-172(52, 54)(97, 101)+45, +47
erdos-358(70, 72)(120, 124)+50, +52
erdos-906(142, 144)(354, 357)+212, +213
erdos-982(154, 156)(368, 373)+214, +217
greens-1(106, 108)(245, 261)+139, +153

pilot の 上限 line が 実際 の theorem 領域 の 前 に 止まる → sorry warning が range 外 → 「no_sorry」誤判定。 実際は log に 9 sorry warning が emit されている が、 pilot は 2 個 しか PASS 判定できなかった

シミュレーション検証: pilot の buggy len(lines) 算法 を そのまま 別 script で 実装 → pilot 保存 verdict と 39/39 完全一致。 root cause 特定完了。

Fix (STEP 1944 で 適用済)

body_str = body if body.strip() else '-- (empty body)'
lines.extend(body_str.splitlines())  # STEP 1944 fix: one physical line per element

関数 docstring に ★ TAB ISOLATION EXCEPTION OVERRIDE ★ marker + root cause 記載。 data/tabs/rei-aios-87/pilot-autoform/run_pilot.py の line 123-159 に patch 適用済 (commit 4f767374a)。 rei-aios-99 が Tab Isolation 例外 override で rei-aios-87 の sidecar file を 修正 (peer offline)。

4. greens-1 訂正 (もう一つ pilot PASS が 誤判定)

pilot 保存 PASS 2 件のうち:

5. v1 → v2 分類器 diff

orig (v1)new (v2)count
PASS (2)PASS_confirmed1
unknown_identifier1 (greens-1)
no_sorry (24)PASS_confirmed (line_map bug)6
syntax9
unknown_identifier3
tactic_failed2
invalid_declaration2
no_sorry_confirmed1
other1
syntax (5)PASS_confirmed (line_map bug)2
syntax2
type_mismatch1
other (8)syntax5
elab_failed1
tactic_failed1
invalid_declaration1

v2 分類器 追加 bucket: tactic_failed / invalid_binder / function_expected / resource_limit / PASS_confirmed / no_sorry_confirmed。 詳細: STEP 1944 notepad

5.5. Phase D — Track B (qwen2.5:7b) 対照群 完走、 診断反転 が 統計的 validate

★ 決定的発見 ★ Track A (Lean 特化) と Track B (汎用) で dominant failure mode が 完全に 逆:
  • Track A (Goedel-Prover-V2:8b, Lean 特化): syntax 41% dominant = model の Lean 4 知識ギャップ (指示は 従うが 書けない)
  • Track B (qwen2.5:7b, 汎用): no_sorry 64% dominant = prompt を無視して 証明 を 書こうとする (Lean 未特化)

Track A vs Track B (両方 100/100 clean、 same 100-item sample、 same prompt)

metricTrack A (Goedel-Prover-V2:8b、 Lean 特化 8.7 GB)Track B (qwen2.5:7b、 汎用 4.7 GB)
PASS27/100 = 27.0%3/100 = 3.0%
REJECT73/10097/100
Top error classsyntax 41%no_sorry 64% ← 逆
syntax count4119
no_sorry count1664
other117
type_mismatch47
elab_failed10
Gen median72s49s (0.68x)

Spec §8 判定表 適用 (統計的 discrimination 可能に)

model診断intervention
Track Asyntax dominant → model limitation (Lean 4 知識不足)Lean 特化 訓練 or 別 specialized model (Track B は 解決策 ではない、 pass 3% で 悪化)
Track Bno_sorry dominant → prompt problem (汎用 model 指示追従弱い)prompt tuning (「必ず sorry で終わる」 explicit 指示 + refuse 例示) が 効く可能性
総合 診断: 両方 が 効く — prompt tuning は Track B の 症状 に 効く、 model 特化 は Track A の 症状 に 効く。 pilot の 元 診断 「プロンプト問題」 は Track B だけ 正しい、 Track A では 誤り (line_map bug で no_sorry 65% と 見えていたが 実は syntax 41% dominant)。 cowork-Claude の spec §8 mapping 「A 高 × 1 型偏り → 対応 intervention 決まる」 pattern は 本 データで 現に Track B (no_sorry 偏り) と Track A (syntax 偏り) で 別 diagnosis を与える = prompt vs model 混合 の 統計的 evidence

6. 4 択への 含意 (cowork-Claude 提示、 Phase A→B→C→D 完了で 事後 review)

  • 択 (すべての 前提) ✓ 実行済: pilot bugfix (commit 4f767374a) + full re-run で 100/100 clean 到達
  • 択 1 (resume 残 61) ✓ 実行済: Phase B で 61 items 完走、 fresh 61 = 18 PASS + 43 REJECT (pass rate 29.5%)
  • 択 3 (prompt 改良 の 焦点): 100/100 で 判明 = 「syntax 41% dominant」 は prompt 改良より model 側 の Lean 4 syntax 知識不足 示唆、 prompt tweaking の 効果余地は 限定的、 Track B (別 model) の 方が 診断力 高い 可能性大
  • 択 2 (Track B qwen2.5:7b) ✓ 実行済 (Phase D): 100 items 完走 → PASS 3/100 (3%)、 no_sorry 64% dominant。 診断反転 が 統計的 validate、 spec §8 判定表 が 各 track 別 diagnosis を与える 状態確立
  • 択 4 (close) 却下: 2-track 200 items 完走 で pilot arc 完全 close 可能

7. Honest scope

8. Failure mode dataset (未来 Claude 予防)

9. 再現性 (Reproducibility)

rei-aios-99 sidecar (data/tabs/rei-aios-99/pilot-autoform-analysis/) に:

実行 phase 別:

10. Attribution (SAC-5 marker source 分離)

  • Directive source: 藤本さん 2026-09-10 explicit 発話 (cowork-Claude ①② 提案 forward + 「94.9% が形式化の却下率ではないことを 明記された方がいい」corrigendum request + 「順番に お願い致します」 = 4 択順次 authorize)
  • Spec/proposal source: cowork-Claude (Claude session claude-6c / fbd39f、 via 藤本さん、 元 spec は Downloads 側 file、 私 は 実行 のみ)
  • Finding/execution source: rei-aios-99 (本 tab 独立 verify、 rei-aios-87 sidecar は read-only input のみ、 除 run_pilot.py bugfix patch)
  • Root cause 発見 source: rei-aios-99 (私 の re-attribution が pilot 保存 verdict と divergence した後、 pilot 算法 シミュレーション で 39/39 一致 確認)
  • Applied by: rei-aios-99 (STEP 1944 arc、 commits e93c8f76a initial + 4f767374a bugfix + 59f154977 site 反映 initial + 46e76d382 Phase C 100/100 clean + Phase D 本 update commit)
  • Phase B execution authorize: 藤本さん 2026-09-11 explicit 「(A) 今 進める でお願い致します」 (残 39 items Ollama re-run + fan noise + 電力コスト の explicit authorize)
  • Phase D execution authorize: 藤本さん 2026-09-11 explicit 「(a) 今 Track B 実行 (~1 h 想定、 fan 継続) でお願い致します」 (Track B qwen2.5:7b full 100 items + fan noise 継続 の explicit authorize)