STEPs 2176 · 2180 · 2181 · v0.7 → v0.8 → v0.9 · 2026-09-21 · rei-aios-fe
chat-Claude Code review が 順序 D→B→C→A を 提案。 D+#1 (cap-hit + git ctime) は v0.6 で 対応 済。 本 chain は B → C → A の 順で 3 STEP land。 v0.7 (B) = recall fixture と baseline metric、 v0.8 (C) = bare TS import + entry-point reachability filter、 v0.9 (A) = 意図宣言軸 (orphan-gauge: keep marker)。 fixture 上 F1 は 0.57 → 0.86 → 1.00 と 段階的 に 上昇、 chat-Claude 予想 完全一致。
| STEP | version | 主 改善 | fixture P | fixture R | fixture F1 |
|---|---|---|---|---|---|
| 2171 | v0.6 (D+#1) | cap-hit exit + git-ctime diff | (recall metric 未実装) | ||
| 2174 | v0.6.1 | flip stats + rename | (recall metric 未実装) | ||
| 2176 | v0.7 (B) | recall fixture + baseline | 0.50 | 0.67 | 0.57 |
| 2180 | v0.8 (C) | bare TS import + entry-point reachability | 0.75 | 1.00 | 0.86 |
| 2181 | v0.9 (A) | intent-declaration axis | 1.00 | 1.00 | 1.00 |
chat-Claude review item B (「偽陰性 (recall) 未測」) の 対応。 従来 の tool は 「予測 orphan 件数」 は 出せたが、 「本当は orphan なのに LIVE 判定 した 件数 (FN)」 は 測っていなかった。 controlled fixture で ground truth を 定義、 混同行列 P/R/F1 を 計算可能に。
| file | 設定 | ground truth | v0.7 予測 quadrant |
|---|---|---|---|
| src/entry.ts | entry point、 3 import (2 with ext + 1 bare) | not-orphan | ORPHAN (no incoming) |
| src/live1.ts | entry で .ts extension import | not-orphan | LIVE |
| src/live2.ts | entry で 拡張子省略 bare import | not-orphan | ORPHAN (regex miss) |
| src/orphan1.ts | 誰も 参照しない | orphan | ORPHAN |
| src/stale_ref.ts | entry + dead_source 両方から | not-orphan | LIVE |
| src/dead_source.ts | 誰も import しない、 outgoing のみ | orphan | ORPHAN |
| src/only_ref_by_dead.ts | DEAD source のみから参照 | orphan | LIVE (v0.7 は count 1 で LIVE) |
v0.7 baseline: TP=2 FP=2 FN=1 TN=2 | P=0.5000 R=0.6667 F1=0.5714
chat-Claude review item C の 2 gap を 塞ぐ:
import "./foo" を v0.7 regex は 拾えないreference-graph.ts): import|export|require|import() の 4 pattern 検出、 relative .//../ resolution + candidate extension lookup (.ts/.tsx/.js/.jsx/.mjs/.cjs/.d.ts + /index.*)GaugeConfig.entryPoints?: string[] opt-in、 BFS closure、 unreachable source からの ref は count しない。 verdict に reachableFromEntry: boolean populatebuildOutgoingRefs / computeReachableSet / countIncomingFromOutgoing 3 new exportv0.8 no-entry (bare-import 単独): TP=2 FP=1 FN=1 TN=3 | P=0.6667 R=0.6667 F1=0.6667 v0.8 +entryPoints=[src/entry.ts]: TP=3 FP=1 FN=0 TN=3 | P=0.7500 R=1.0000 F1=0.8571
chat-Claude review item A の 実装。 「意図して 保存 する 仕組み」 「RUIN ∧ 宣言あり → 正常、 RUIN ∧ 宣言なし → 規律違反」 を 具体化。
// orphan-gauge: keep // orphan-gauge: keep = "top-level CLI, imported by shell wrapper" --- orphan-gauge: keep ---
ArtifactVerdict.intentDeclared = true + optional intentReasoncomputeRecallMetrics が declared を 「predicted not-orphan」 に override。 quadrant field 自体 は 変えず (dashboard 側 で 「flag + reason 表示」 等 独立 filter 可能)GaugeOptions.skipIntentScan: true で v0.8 semantics 回帰v0.9 no-entry (intent 単独): TP=2 FP=0 FN=1 TN=4 | P=1.0000 R=0.6667 F1=0.8000 v0.9 +entryPoints+intent: TP=3 FP=0 FN=0 TN=4 | P=1.0000 R=1.0000 F1=1.0000
| item | 内容 | 対応 STEP | status |
|---|---|---|---|
| 1 | mtime > commit 解釈 危うい | v0.6.1 (STEP 2174) | FIXED |
| 2 | 決定材料 = 象限 flip 件数 | v0.6.1 (STEP 2174) | FIXED |
| 3 | ctime naming 混同 | v0.6.1 (STEP 2174) | FIXED |
| 4 | test 件数 算数 (私 report 誤り) | 私 発話 訂正 | CORRECTED |
| 5 | exit 1 blast radius | verify zero | NO-OP |
| A | 意図宣言軸 (manifest / frontmatter) | v0.9 (STEP 2181) | LANDED |
| B | recall (偽陰性) 未測 | v0.7 (STEP 2176) | LANDED |
| C 前半 | regex 拡張 + entry-point reachability | v0.8 (STEP 2180) | LANDED |
| C 後半 | n=50 manual audit やり直し | (手動 audit) | DEFER — 藤本さん judgment 待ち |
| D + #1 | cap-hit + git-ctime diff | v0.6 (STEP 2171) | FIXED |
| test file | count | domain |
|---|---|---|
test/step1926-orphan-gauge-test.ts | 90/90 PASS | v0.1 → v0.6.1 累積 (regression preserve、 deprecated alias 経路 verify 込) |
test/step2176-orphan-gauge-recall-fixture-test.ts | 58/58 PASS | v0.7/0.8/0.9 chain fixture + metric + reachability + intent + skipIntentScan regression |
paths alias 対応 (chat-Claude item 4c) = 別 STEP defer (tsconfig パーサ + resolver 必要)orphan-gauge: keep string で 意図せず declared 化 の corner case.orphan-gauge-keep) 対応 は 未実装 = per-file marker のみ、 別 STEP deferPattern: 分類器 の 精度 を 追う 時、 「fixture 上 F1=1.00」 と 「real repo 上 F1=1.00」 は 全く 別 の 主張。 fixture は 「該当 4 case を 全て 拾う」 の 確認、 real repo は 「該当 4 case 以外 の failure mode が 見えない」 blind spot が 残る。 honest scope で 「fixture 上」 の 限定 を 必ず 明記。
Prevention: real repo で 発見された 新 failure mode は fixture case に 追加、 baseline 更新、 対策 実装 (chain 継続)。 「4 case 完全対応」 で 満足 せず 「real 側 の unknown case」 を 常に 想定。
Recovery: v0.10+ で real repo audit で 新 pattern emerge したら 対応 STEP を chain に 継足す。 chat-Claude review が 4 case を 「代表的」 と 明示していた 通り、 網羅ではない。