Phase 53 成果を踏まえ、構造シグネチャ軸を 5+ に育て、
偽陽性観測テストで name ガード縮小準備を整えた。
方針変更: 新ループ追加 → 構造軸育成 + 偽陽性率測定に焦点変更
- 理由: Phase 53 で selfhost P2/P3 実戦パターン追加済み
- 焦点: 既存ループに対する構造軸拡張 + 精度測定
主な成果:
1. 構造軸 5+ 達成:
- carrier 数
- carrier 型
- Compare パターン
- branch 構造
- NEW: Compare op 分布 (count_compare_ops ヘルパー)
2. 偽陽性観測テスト追加:
- test_phase54_structural_axis_discrimination_p2()
- test_phase54_structural_axis_discrimination_p3()
3. 重要な発見 - 偽陽性率 ~50%:
- P2: selfhost P2 が正しく検出されず (name ガード依存)
- P3: selfhost P3 が Pattern4ContinueMinimal と誤検出 (構造的類似性)
- 結論: 構造判定のみでは分離不十分、name ガード必須と判明
変更内容:
- shape_guard.rs (+80 lines):
- count_compare_ops() 構造軸ヘルパー追加
- detect_shapes() pub 化 (テストから呼び出し可能に)
- SelfhostVerifySchemaP2/SelfhostDetectFormatP3 enum 追加 (将来用)
- normalized_joinir_min.rs (+110 lines):
- 偽陽性観測テスト 2 個追加 (P2/P3 各1)
- canonical shapes vs selfhost shapes 構造判定精度測定
- phase49 doc (+200 lines):
- Phase 54 節完成版
- 偽陽性分析結果記録
- name ガード縮小方針明記
- enum 拡張対応:
- bridge.rs (+8 lines)
- normalized.rs (+8 lines)
- ast_lowerer/mod.rs (+2 lines)
偽陽性観測結果 (2025-12-12):
- P2 構造判定: selfhost P2 検出失敗 → name ガード必須
- P3 構造判定: selfhost P3 が Pattern4 と誤判定 → 構造的類似性問題
- 総合: 偽陽性率 ~50% → 構造軸 5 本では不十分
次フェーズ方針 (Phase 55+):
- Phase 55-A: 条件複雑度軸追加 (BinOp/UnaryOp ネスト深度)
- Phase 55-B: 算術パターン軸追加 (Mul/Sub/Div 出現パターン)
- Phase 56: selfhost 実戦ループ追加 (6 本以上蓄積)
- Phase 57: 誤判定率 < 5% 達成後に name ガード縮小開始
name ガード撤去条件 (Phase 57):
- 構造軸 8+ 本確立
- selfhost P2/P3 各 6 本以上蓄積
- 誤判定率 < 5% 達成
- 複合的特徴量ベース判定実装
回帰テスト: ✅ 939 PASS, 0 FAIL (既存挙動不変)
Files Modified: 8 files
Lines Added: ~408 lines (net)
Implementation: Pure additive (feature-gated)
Phase 54 完了!構造軸育成・偽陽性観測基盤確立!
237 lines
22 KiB
Markdown
237 lines
22 KiB
Markdown
# Current Task
|
||
|
||
このファイルは「いま何に集中しているか」と「次にやり得る候補」だけを書く軽量ビューだよ。
|
||
詳細なログや過去フェーズの記録は `docs/development/current/main/` 以下の各 `phase-*.md` と
|
||
`docs/development/current/main/joinir-architecture-overview.md` を真実のソースとして扱うよ。
|
||
|
||
---
|
||
|
||
## 🎯 今フォーカスしているテーマ(2025-12-12 時点のスナップショット)
|
||
|
||
### 0. ✅ Phase 43/245B Normalized JoinIR Infrastructure COMPLETE (Phase 26-45)
|
||
|
||
**完全サマリ**: [PHASE_43_245B_NORMALIZED_COMPLETION.md](docs/development/current/main/PHASE_43_245B_NORMALIZED_COMPLETION.md)
|
||
|
||
- **達成内容**:
|
||
- Structured→Normalized→MIR(direct) パイプライン確立
|
||
- P1/P2 + JsonParser (skip_ws/atoi/parse_number) 全対応
|
||
- Mode system (Phase 45), Capability system (Phase 44) 完成
|
||
- 937/937 tests PASS
|
||
- **主要コンポーネント**:
|
||
- JoinIrMode enum (StructuredOnly/NormalizedDev/NormalizedCanonical)
|
||
- ShapeCapabilityKind (P2CoreSimple/P2CoreSkipWs/P2CoreAtoi/P2MidParseNumber)
|
||
- CarrierRole (LoopState/ConditionOnly), CarrierInit
|
||
- DigitPos dual-value (is_digit_pos + digit_value)
|
||
- NumberAccumulation, Step scheduling, Exit PHI & Jump args
|
||
- **今後の拡張候補**(計画のみ):
|
||
- Phase 46+: Canonical set 拡張 (capability-based)
|
||
- Pattern3/4 Normalized 適用
|
||
- Selfhost loops 対応
|
||
|
||
### 0-B. JoinIR / ExprLowerer / Pattern2–4 + JsonParser `_parse_number` / DigitPos ライン(Phase 230–247-EX 完了)✅
|
||
|
||
- Pattern1–4(while / break / if‑PHI / continue)+ P5(Trim) でループ lowering を JoinIR 経路に一本化。
|
||
- Phase 231/236/240-EX:
|
||
- Pattern2 の header / break 条件を ExprLowerer/ScopeManager 経由(対応パターンのみ)で本番導線化。
|
||
- ConditionEnv ベースの意味論と RC/JoinIR 構造が一致することをテストとカタログで確認済み。
|
||
- Phase 237–238-EX:
|
||
- JsonParser/selfhost の条件パターンをカタログ化し、ExprLowerer/ScopeManager/ConditionEnv の責務境界を docs/README で固定。
|
||
- Phase 241–242-EX:
|
||
- array_filter 系 3 FAIL を「構造で」解消(hardcode `"sum"` チェック削除、CarrierInfo/ExitMeta 経由に統一)。
|
||
- Pattern3 if‑sum / Pattern4 continue から legacy lowerer と by-name `"sum"`/`"count"` を完全削除。
|
||
- 複雑条件(`i % 2 == 1`)を ConditionPattern/if-sum lowerer で安全に扱えるよう整理(Fail-Fast + テスト付き)。
|
||
- Phase 243–244-EX:
|
||
- Pattern3/4 の公開 API を `can_lower + lower` の最小セットに整理し、内部 helper を箱の中に閉じた。
|
||
- `loop_pattern_detection` の classify() が代表ループを P1〜P4 に分類することをユニットテストで固定。
|
||
- Phase 245-EX / 245C:
|
||
- `_parse_number` のループについて、ループ変数 `p` の header/break 条件と `p = p + 1` 更新を Pattern2 + ExprLowerer 経路に載せて本番化。
|
||
- FunctionScopeCapture / CapturedEnv を拡張し、関数パラメータ(例: `s`, `len`)をループ条件/本体で読み取り専用なら CapturedEnv 経由で ConditionEnv に載せるようにした。
|
||
- これにより、`p < s.length()` のような header 条件や JsonParser 系ループでのパラメータ参照が、ExprLowerer/ScopeManager から安全に解決される。
|
||
- Phase 245B-IMPL:
|
||
- `_parse_number` 本体で `num_str = num_str + ch` を LoopState キャリアとして扱い、Program(JSON) フィクスチャ `jsonparser_parse_number_real` を Structured→Normalized→MIR(direct) で dev テスト固定(出力は num_str 文字列)。
|
||
- Phase 247-EX:
|
||
- DigitPos promotion を二重値化し、`digit_pos` から boolean carrier `is_digit_pos`(ConditionOnly)と integer carrier `digit_value`(LoopState)を生成。
|
||
- UpdateEnv で `digit_pos` 解決時に `digit_value` を優先し、NumberAccumulation(`result = result * 10 + digit_pos`)と break 条件の両方で DigitPos パターンが安全に利用可能に。
|
||
- 現在: `cargo test --release --lib` で 931/931 テスト PASS(既知 FAIL なし)。
|
||
- Phase 28-NORM-P2(dev-only):
|
||
- Normalized JoinIR のミニ実装を Pattern1 に続き Pattern2 最小ケースまで拡張(Structured→Normalized→Structured を比較)。
|
||
- 対応外の Structured JoinModule では normalize_pattern2_minimal が Fail-Fast するようガードを追加し、normalized_dev テストで固定。
|
||
- Phase 29-NORM-P2-APPLY(dev-only):
|
||
- Phase 34 の break fixture(i/acc/n の単純 break ループ)を Structured→Normalized→Structured の往復に通し、VM 実行結果が Structured 直経路と一致することを dev テストで固定。
|
||
- ガードは 3 パラメータまで緩和しつつ、DigitPos/Trim などの重いキャリアはまだ非対応のまま。
|
||
- Phase 30-NORM-P2-DEV-RUN(dev-only):
|
||
- JoinIR runner に `NYASH_JOINIR_NORMALIZED_DEV_RUN=1` を追加し、Pattern1/2 ミニケースだけ Structured→Normalized→Structured を挟んで dev 実行できるようにした(`normalized_dev` + debug 限定)。通常経路(Structured→MIR)は不変。
|
||
- Phase 31-NORM-JP-MINI(dev-only):
|
||
- JsonParser 系のシンプルな P2 ループ(skip_whitespace ミニ fixture)を Structured→Normalized→Structured 経由でも実行し、runner dev スイッチの比較テストで Structured 直経路と一致することを固定。
|
||
- Phase 32-NORM-CANON-PREP(dev-only):
|
||
- JoinIR→MIR ブリッジの入口を `bridge_joinir_to_mir` に一本化し、normalized_dev スイッチ(feature + env)で Structured→Normalized→Structured の dev roundtrip を切り替える準備を整えた。P1/P2/JP mini の比較テストも VM ブリッジ経路で追加。
|
||
- Phase 33-NORM-CANON-TEST(dev-only):
|
||
- P1/P2(Phase 34 break fixture)/JsonParser skip_ws mini について、normalized_dev ON 時は shape_guard 経由で必ず Normalized roundtrip を通すようブリッジと runner を固めた。normalized_joinir_min.rs の runner/VM 比較テストを拡張し、Normalized が壊れたら dev スイートが必ず赤になるようにした(本番 CLI は従来どおり Structured→MIR)。
|
||
- Phase 34-NORM-ATOI-DEV(dev-only):
|
||
- JsonParser `_atoi` ミニループ(digit_pos→digit_value + NumberAccumulation)を normalized_dev 経路に載せ、Structured↔Normalized↔Structured の VM 実行結果が一致することをフィクスチャテストで固定。`jsonparser_atoi_mini` を shape_guard で認識し、既定経路は引き続き Structured→MIR のまま。
|
||
- Phase 35-NORM-BRIDGE-MINI(dev-only):
|
||
- P1/P2 ミニ + JsonParser skip_ws/atoi ミニを Normalized→MIR 直ブリッジで実行できるようにし、normalized_dev ON 時は Structured→Normalized→MIR(復元なし)経路との比較テストで結果一致を固定。既定経路(Structured→MIR)は不変。
|
||
- Phase 36-NORM-BRIDGE-DIRECT(dev-only):
|
||
- Normalized ブリッジを direct 実装(Normalized→MIR)と Structured 再構成に分離し、shape_guard で P1/P2 ミニ + JsonParser skip_ws/atoi ミニだけ direct 経路に通すよう整理。非対応は `[joinir/normalized-bridge/fallback]` ログ付きで再構成に落とし、テストで direct/従来経路の VM 出力一致を固定。
|
||
- Phase 37-NORM-JP-REAL(dev-only):
|
||
- JsonParser `_skip_whitespace` 本体の P2 ループを Program(JSON) フィクスチャで Structured→Normalized→MIR(direct) に通し、Structured 直経路との VM 出力一致を比較するテストを追加。`extract_value` が `&&`/`||` を BinOp として扱えるようにし、Break パターンの param 推定を柔軟化して real 形状でも panic しないようにした。
|
||
- Phase 38-NORM-OBS(dev-only):
|
||
- Normalized/JoinIR dev 経路のログカテゴリを `[joinir/normalized-bridge/*]` / `[joinir/normalized-dev/shape]` に統一し、`JOINIR_TEST_DEBUG` 下だけ詳細を出すよう静音化。Verifier/Fail‑Fast メッセージも shape/役割付きに整え、デバッグ観測性を上げつつ通常実行のノイズを減らした。
|
||
- Phase 43-A(dev-only):
|
||
- JsonParser `_atoi` 本体の Program(JSON) フィクスチャを normalized_dev に追加し、Structured→Normalized→MIR(direct) と Structured→MIR の VM 出力を比較するテストで一致を固定(符号あり/なしの簡易パス対応。canonical 切替は後続フェーズ)。
|
||
- Phase 43-C(dev-only):
|
||
- JsonParser `_parse_number` 本体の Program(JSON) フィクスチャを normalized_dev に追加し、Structured→Normalized→MIR(direct) と Structured→MIR の VM 出力を比較するテストで一致を固定(num_str は現状仕様のまま据え置き、P2-Mid の足慣らし)。
|
||
- **Phase 46-NORM-CANON-P2-MID(実装済み✅ 2025-12-12)**:
|
||
- P2-Mid パターン(_atoi real, _parse_number real)を canonical Normalized に昇格。
|
||
- Canonical set 拡張: P2-Core(mini + skip_ws + atoi mini)+ P2-Mid(atoi real + parse_number real)。
|
||
- JsonParser P2 ライン(_skip_whitespace/_atoi/_parse_number)全て canonical Normalized 化完了。
|
||
- P3/P4 Normalized 対応は NORM-P3/NORM-P4 フェーズで実施(今回スコープ外)。
|
||
- 937/937 tests PASS。
|
||
- **Phase 47-B/C(P3 if-sum 拡張 + canonical 化 ✅ 2025-12-21)**:
|
||
- フィクスチャ追加: `pattern3_if_sum_multi_min`(sum+count)/ `jsonparser_if_sum_min`(JsonParser 簡約形)
|
||
- ShapeGuard: `Pattern3IfSumMulti` / `Pattern3IfSumJson` 追加、capability=P3IfSum、canonical set に P3 minimal/multi/json を追加
|
||
- Normalizer/Bridge: P3 if-sum minimal/multi/json を Structured→Normalized→MIR(direct) で dev A/B、canonical ルートでも常時 Normalized 経由
|
||
- テスト: normalized_joinir_min.rs に P3 if-sum multi/json の VM ブリッジ比較テスト追加(Structured と一致)
|
||
- **Phase 45-NORM-MODE(実装済み✅ 2025-12-12)**:
|
||
- JoinIR モード一本化: バラバラだったフラグ/feature を `JoinIrMode` enum に集約(StructuredOnly / NormalizedDev / NormalizedCanonical)。
|
||
- `current_joinir_mode()` でモード取得、bridge/runner で `normalized_dev_enabled()` → mode pattern matching に移行。
|
||
- Canonical P2-Core は mode 無視で常に Normalized→MIR(direct)、それ以外は mode に従う統一ルーティング。
|
||
- 937/937 tests PASS(既存挙動完全保持のリファクタ)。
|
||
- **Phase 44-SHAPE-CAP(実装済み✅ 2025-12-12)**:
|
||
- Shape検出を capability-based に変更: `NormalizedDevShape` → `ShapeCapability` 抽象化層導入。
|
||
- `ShapeCapabilityKind` 4種: P2CoreSimple / P2CoreSkipWs / P2CoreAtoi / P2MidParseNumber。
|
||
- Shape-level (`is_canonical_shape`) と Capability-level (`is_p2_core_capability`) の二層 API でパターン拡張性を確保。
|
||
- 既存挙動完全保持(canonical set: Pattern2Mini, skip_ws mini/real, atoi mini のまま)、937/937 tests PASS。
|
||
|
||
### 1. いまコード側で意識しておきたいフォーカス
|
||
|
||
- **Phase 43/245B Normalized 完了** により JoinIR ループ基盤(Pattern1–4 + ExprLowerer + ScopeManager + CapturedEnv + Normalized layer)は一応の完成状態に入ったので、当面は:
|
||
- 既存パターン/箱の範囲内での **バグ修正・Fail‑Fast/invariant 追加・テスト強化** を優先する。
|
||
- JsonParser/selfhost への新しい適用や大きな仕様拡張は、docs 側で Phase 設計が固まってからコード側に持ち込む。
|
||
- 直近のコード側フォーカス候補:
|
||
- ~~Phase 246-EX(コード)~~: ✅ 完了(_atoi Integration, Phase 43/245B の一部)
|
||
- Pattern1–4 / ExprLowerer / ScopeManager まわりで、by-name ハードコードやサイレントフォールバックが見つかった場合は、
|
||
CarrierInfo / ConditionEnv / Scope 情報を使って「構造で」直す。
|
||
|
||
### 2. 直近で意識しておきたい設計の芯
|
||
|
||
- **Loop パターン空間**は有限で整理済み:
|
||
- P1: Simple While
|
||
- P2: Break
|
||
- P3: If‑PHI(単一/複数キャリア)
|
||
- P4: Continue(then/else‑continue 正規化込み)
|
||
- P5: LoopBodyLocal 昇格(Trim/JsonParser 用の部分適用)
|
||
- 「増やすべき」は新しい Pattern ではなく、既存 Pattern の前処理箱:
|
||
- BoolExprLowerer / ConditionEnv / LoopConditionScopeBox / LoopBodyCarrierPromoter /
|
||
TrimLoopHelper / ComplexAddendNormalizer / LoopBodyLocalEnv / UpdateEnv などで
|
||
条件式とキャリア更新を吸収し、Pattern1–4 は「ループ骨格」に専念させる方針。
|
||
- Fail‑Fast 原則:
|
||
- JoinIR 以外のループ lowering パスは存在しない(LoopBuilder は削除済み)。
|
||
- 「わからないパターン」は必ず `[joinir/freeze]` 系の明示エラーにして、サイレントフォールバックはしない。
|
||
|
||
---
|
||
|
||
## ✅ 最近まとまった大きな塊(超要約)
|
||
|
||
ここ半年くらいで終わっている主な塊だけをざっくり書くね。
|
||
細かいタスク・バグ票・議論は `docs/development/current/main/phase-*.md` と
|
||
`docs/development/current/main/joinir-architecture-overview.md` に全部残っているので、必要になったときだけそちらを読む想定。
|
||
|
||
- **LoopBuilder 削除ライン(Phase 180 前後)**
|
||
- LoopBuilder を dev‑only → hard freeze → 物理削除まで完了。
|
||
- Loop lowering の SSOT を JoinIR に一本化。
|
||
- **LoopPattern / Router ライン(Phase 170–179, 244-EX)**
|
||
- LoopFeatures / LoopPatternKind / PatternRouter / PatternPipelineContext を整備。
|
||
- Pattern1–4 の検出・ルーティングを「構造ベース+AST features」で統一(関数名ベタ書き依存を除去)。
|
||
- Phase 244-EX で代表ループ(P1〜P4)の classify() 結果をユニットテストで固定。
|
||
- **Exit / Boundary / ValueId ライン(Phase 172–205)**
|
||
- ExitMeta / ExitLineReconnector / JoinInlineBoundary(+Builder) / LoopHeaderPhiBuilder を箱化。
|
||
- JoinValueSpace(Param/Local 領域)+ PHI 契約 Verifier で ValueId 衝突と PHI 破損を根治。
|
||
- **P5(Trim/JsonParser) ライン(Phase 171–176, 173–175, 190–193)**
|
||
- LoopBodyLocal 昇格パイプライン(Trim, `_skip_whitespace`, `_parse_string` 簡易版)を構築。
|
||
- StringAppend / NumberAccumulation / Complex addend 正規化など、更新式まわりの箱を揃えた。
|
||
- **P3/P4 (If‑PHI / Continue) 汎用化ライン(Phase 195–196, 212–215, 220–242-EX)**
|
||
- multi‑carrier P3 の JoinIR 生成を整理し、if‑sum 最小パターンを AST ベースで一般化(sum+count まで無改造対応)。
|
||
- Pattern3/4 if‑sum/continue lowerer を分離箱にして、legacy PoC lowerer と by-name ハードコード(`"sum"`, `"count"`)を削除。
|
||
- Pattern4CarrierAnalyzer を純粋な「キャリア解析箱」として仕上げ、continue 正規化・更新式解析をユニットテストで固定。
|
||
|
||
このあたりが「JoinIR ループ基盤の芯」で、以降の Phase は JsonParser/selfhost の各ループへの適用フェーズ、という位置づけだよ。
|
||
|
||
- **Phase 43/245B Normalized JoinIR(Phase 26–45 完了)** ✅
|
||
- Structured→Normalized→MIR(direct) パイプライン確立
|
||
- Mode system (JoinIrMode) + Capability system (ShapeCapabilityKind)
|
||
- Pattern1/2 + JsonParser (_skip_whitespace, _atoi, _parse_number) 全対応
|
||
- 詳細: [PHASE_43_245B_NORMALIZED_COMPLETION.md](docs/development/current/main/PHASE_43_245B_NORMALIZED_COMPLETION.md)
|
||
|
||
---
|
||
|
||
## 🧭 これからの候補(まだ「やる」とは決めていないメモ)
|
||
|
||
ここは「やることリスト」ではなく「今後やるとしたらこの辺」というメモだよ。
|
||
実際に着手するタイミングで、別途 Phase/タスクを切る想定。
|
||
|
||
1. ~~Phase 245B(コード)~~: ✅ 完了(Phase 43/245B の一部)
|
||
2. ~~Phase 246-EX(コード)~~: ✅ 完了(Phase 43/245B の一部)
|
||
3. **Phase 47-NORM-P3(設計完了+最小dev+direct✅ 2025-12-12)**: Pattern3 Normalized 設計
|
||
- 設計詳細: [phase47-norm-p3-design.md](docs/development/current/main/phase47-norm-p3-design.md)
|
||
- P3 if-sum を Normalized JoinIR に載せる設計。P2 と同じ ConditionEnv/CarrierInfo/ExitLine インフラを再利用。
|
||
- Phase 47-A: Minimal sum_count(dev-only)として、`phase212_if_sum_min.hako` 相当の最小 if-sum ループを AST ベース lowerer + Structured→Normalized→Structured roundtrip(Runner 経路)+ Normalized→MIR(direct) で検証済み。
|
||
- Phase 47-B 以降: array_filter など body-local/MethodCall を含む P3 ループや canonical 昇格は今後の実装フェーズで扱う。
|
||
4. **Phase 48-NORM-P4(設計完了✅+48-A/B/C canon 完了✅ 2025-12-12→2026-01-XX)**: Pattern4 (continue) Normalized 設計+実装
|
||
- 設計詳細: [phase48-norm-p4-design.md](docs/development/current/main/phase48-norm-p4-design.md)
|
||
- ターゲットループ決定: _parse_array skip whitespace(◎ PRIMARY)、_parse_object(○)、_unescape_string/parse_string(△)
|
||
- 設計骨格: `continue` = 即座の `TailCallFn(loop_step, ...)` (新命令不要)
|
||
- P1/P2/P3 と同じ `loop_step(env, k_exit)` 骨格に載せる
|
||
- インフラ再利用率: 95%+ (StepKind の ContinueCheck のみ追加)
|
||
- **Phase 48-A実装(minimal dev-only)完了✅** / **Phase 48-B dev(JsonParser skip_ws continue)完了✅**:
|
||
- P4 minimal フィクスチャ追加(skip i==2 パターン、単一 carrier `acc`)+ JsonParser continue skip_ws (array/object) フィクスチャを追加
|
||
- ShapeGuard: Pattern4ContinueMinimal + JsonParser continue 形状を検出
|
||
- StepScheduleBox: ContinueCheck step 追加(評価順序: HeaderCond → ContinueCheck → Updates → Tail)
|
||
- normalize_pattern4_continue_minimal()/jsonparser_*continue* を dev 正規化に配線(P2 インフラを再利用)
|
||
- テスト完備: minimal + JsonParser continue の VM bridge 比較を normalized_dev スイートで固定
|
||
- **Phase 48-C(canonical 昇格)完了✅**:
|
||
- P4 minimal + JsonParser skip_ws array/object を canonical set に追加(env OFF でも Normalized→MIR(direct) を強制)
|
||
- Bridge/runner で Structured fallback を禁止、fail-fast 契約に統一
|
||
- canonical ルートと Structured 直経路の stdout 一致を比較するテストを追加
|
||
5. JsonParser 残りループへの JoinIR 展開
|
||
- `_parse_array` / `_parse_object` / `_unescape_string` / 本体 `_parse_string` など。
|
||
- 既存の P2/P3/P4+P5 パイプラインをどこまで延ばせるかを docs 側で設計 → コード側はその設計に沿って小さく実装。
|
||
6. **Phase 49-SELFHOST-NORM-DEPTH2(設計・コードなし)**: selfhost depth2 Normalized 設計フェーズ
|
||
- 設計詳細: [phase49-selfhost-joinir-depth2-design.md](docs/development/current/main/phase49-selfhost-joinir-depth2-design.md)
|
||
7. **Phase 50-SELFHOST-NORM-DEV(dev-only)完了✅ 2025-12-12**: selfhost 軽量 P2/P3 を dev Normalized パイプラインに載せる足慣らし
|
||
- 対象: `selfhost_token_scan_p2` / `selfhost_if_sum_p3`
|
||
- fixtures / ShapeGuard(Selfhost* 系) / VM bridge 比較テストまで整備し、Structured 直経路と一致を固定。
|
||
8. **Phase 51-SELFHOST-NORM-DEV-EXTEND(dev-only)完了✅ 2025-12-12**: selfhost 実戦寄り P2/P3 を dev Normalized に追加
|
||
- 対象: `selfhost_token_scan_p2_accum` / `selfhost_if_sum_p3_ext`
|
||
- Phase 50 と同導線で fixtures / shape / 比較テストを追加し、selfhost 断面で緑を維持。
|
||
9. **Phase 52-SELFHOST-SHAPE-STRUCT-SIGNATURE(dev-only)完了✅ 2025-12-12**: selfhost shape の構造シグネチャ育成
|
||
- selfhost P2/P3 を「構造一次判定→dev-only name ガード最終確定」の二段 detector に移行。
|
||
- 構造シグネチャの安定テストを追加し、name ガード撤去の足場を SSOT に固定。
|
||
10. **Phase 53-SELFHOST-NORM-DEV-EXPAND(dev-only)完了✅ 2025-12-12**: selfhost P2/P3 の実戦寄り形状を追加
|
||
- 対象追加: P2 `args_parse_p2` / P3 `stmt_count_p3`
|
||
- 構造一次判定(carrier 数/型/Compare/branch)→ dev-only name 最終確定の二段 detector を拡張。
|
||
- P3 carrier 上限を 2–10 に拡大し、複雑 if-else 形状を selfhost 群として取り込んだ。
|
||
- `normalized_dev` selfhost 断面/回帰テストが緑、既定挙動は不変。
|
||
11. **Phase 54-SELFHOST-SHAPE-GROWTH(dev-only)完了✅ 2025-12-12**: 構造軸の育成と偽陽性観測フェーズ
|
||
- Phase 53 で実戦ループ追加済みのため、追加投入より先に構造判定精度の測定に集中。
|
||
- 構造シグネチャ軸を 5+ に拡張(Compare op 分布など)し、P2/P3 の偽陽性観測テストを追加。
|
||
- 結果: selfhost 群の構造判定だけでは分離が不十分(偽陽性率 ~50%)。dev-only name ガードは当面必須と判断。
|
||
12. **Phase 55-SELFHOST-SHAPE-AXIS-EXPAND(次のフォーカス候補・dev-only)**: 構造軸 8+ へ拡張し誤判定を下げる足場
|
||
- 条件複雑度(ネスト/論理結合の形)、算術更新パターン、分岐ファンアウトなどの新軸を追加。
|
||
- selfhost/canonical の feature ベクトル比較と観測テストを拡充し、name ガード縮小の根拠を作る(撤去は後続)。
|
||
13. JoinIR Verify / 最適化まわり
|
||
- すでに PHI/ValueId 契約は debug ビルドで検証しているので、
|
||
必要なら SSA‑DFA や軽い最適化(Loop invariant / Strength reduction)を検討。
|
||
|
||
---
|
||
|
||
## 📎 このファイルの運用ルール(自分向けメモ)
|
||
|
||
- 過去フェーズの詳細な ToDo/Done リストは **CURRENT_TASK には書かない**。
|
||
代わりに `docs/development/current/main/phase-*.md` と `joinir-architecture-overview.md` を SSOT として維持する。
|
||
- CURRENT_TASK は「あくまで最新のフォーカスと次の候補だけ」に絞る。
|
||
目安として **このファイル自体は 2〜3画面程度(〜300行以内)** に収める。
|
||
- 新しい大フェーズを始めたら:
|
||
1. まず docs 配下に `phase-XXX-*.md` を書く。
|
||
2. CURRENT_TASK には「そのフェーズの一行要約」と「今のフォーカスかどうか」だけを書く。
|