# Phase 287: Developer Hygiene（big files / smoke / normalizer）

**Status**: Complete (P0-P8)
**Date**: 2025-12-27
**Previous**: Phase 286 (Plan Line完全運用化)

## 概要（SSOT）

Phase 287 は「開発導線の整備（意味論不変）」を優先して、巨大ファイルの責務分離（big files refactoring）と、既存の hygiene（smoke/normalizer）を扱う。

## 2025-12-27 Update: Big Files Refactoring（P0）✅

`merge/mod.rs` を modularize（意味論不変）し、SSOT（boundary-first / continuation SSOT）を強化した。

- 入口: `docs/development/current/main/phases/phase-287/P0-BIGFILES-REFACTORING-INSTRUCTIONS.md`

## 2025-12-27 Update: AST Feature Extractor modularization（P1）✅

`ast_feature_extractor.rs` を facade にして、`pattern_recognizers/` 配下へ recognizer 単位で分割した（意味論不変）。

- 入口: `docs/development/current/main/phases/phase-287/P1-AST_FEATURE_EXTRACTOR-INSTRUCTIONS.md`
- 次（P2）: `docs/development/current/main/phases/phase-287/P2-CONTRACT_CHECKS-MODULARIZATION-INSTRUCTIONS.md`（完了）

---

## 2025-12-27 Update: Contract Checks modularization（P2）✅

- `contract_checks.rs` を facade 化して、契約検証を “1 module = 1 契約” に分割した（意味論不変）。
  - 指示書: `docs/development/current/main/phases/phase-287/P2-CONTRACT_CHECKS-MODULARIZATION-INSTRUCTIONS.md`

---

## 2025-12-27 Update: Instruction Rewriter stage split（P3）✅

- `merge/instruction_rewriter.rs` を “Scan/Plan/Apply” の stage 単位に分割し、facade（orchestrator）へ縮退した（意味論不変）。
  - 指示書: `docs/development/current/main/phases/phase-287/P3-INSTRUCTION_REWRITER-MODULARIZATION-INSTRUCTIONS.md`

---

## 2025-12-27 Update: Plan stage modularization（P4）✅

- `rewriter/stages/plan.rs` を facade 化し、`rewriter/stages/plan/` 配下へ責務単位で分割した（意味論不変）。
  - 指示書: `docs/development/current/main/phases/phase-287/P4-PLAN_STAGE-MODULARIZATION-INSTRUCTIONS.md`

---

## 2025-12-27 Update: Stages facade（P5）✅

- pipeline 関数（scan/plan/apply）を `stages/mod.rs` から re-export し、呼び出し側 import を単一入口へ統一した（意味論不変）。
  - 指示書: `docs/development/current/main/phases/phase-287/P5-STAGES-VISIBILITY-FACADE-INSTRUCTIONS.md`

---

## 2025-12-27 Update: Remove scan stage（P6）✅

- Scan stage を削除し、pipeline を 2-stage（Plan→Apply）へ単純化した（意味論不変）。
  - 指示書: `docs/development/current/main/phases/phase-287/P6-SCAN_PLAN-INTEGRATION-INSTRUCTIONS.md`

---

## 2025-12-27 Update: Rewriter scaffolding cleanup（P7）✅

- pipeline の古い scaffolding（`apply_box.rs` / `parameter_binding_box.rs` / `tail_call_detector_box.rs`）を削除し、SSOT を `rewriter/stages/*` に寄せた（意味論不変）。
  - 指示書: `docs/development/current/main/phases/phase-287/P7-REWRITER-BOX-SCAFFOLDING-CLEANUP-INSTRUCTIONS.md`

---

## 2025-12-27 Update: Rewriter README / guard（P8）✅

- `rewriter/README.md` を追加し、責務境界と SSOT（Plan→Apply）を明文化した（docs-only）。
  - 指示書: `docs/development/current/main/phases/phase-287/P8-REWRITER-README-GUARD-INSTRUCTIONS.md`
  - 成果物: `src/mir/builder/control_flow/joinir/merge/rewriter/README.md`

---

## 2025-12-27 Update: Phase closeout（P9）✅

- Phase 287 完了状態を docs に反映し、Now/Backlog を次フェーズへ切り替えた（docs-only）。
  - 指示書: `docs/development/current/main/phases/phase-287/P9-PHASE-CLOSEOUT-INSTRUCTIONS.md`

---

## Summary

**Phase 287 完了項目（P0-P8）**:
- ✅ P0: `merge/mod.rs` modularization (1,555 → 1,053 lines)
- ✅ P1: `ast_feature_extractor.rs` facade化 (1,148 → 135 lines)
- ✅ P2: `contract_checks.rs` facade化 & 契約単位分割
- ✅ P3: `instruction_rewriter.rs` stage分割 (Scan/Plan/Apply)
- ✅ P4: `rewriter/stages/plan.rs` facade化 (741 → 120 lines)
- ✅ P5: `stages/mod.rs` facade & re-export統一
- ✅ P6: Scan stage削除 (Plan→Apply 2-stage pipeline)
- ✅ P7: 未使用Box雛形削除 (apply_box, tail_call_detector_box, parameter_binding_box)
- ✅ P8: `rewriter/README.md` 追加 (責務境界明文化)
- ✅ P9: Phase closeout (docs更新)

**検証結果**: quick 154/154 PASS維持、意味論不変

**Next**: None (Phase 287 complete)

## Legacy / Historical (2025-12-26 plan)

以下は「Phase 287 を hygiene として計画していた時期のログ」。今後の候補として残すが、P0/P1（big files）とは別系統。

### Legacy docs（smoke quick）

- P1（legacy）: quick 軽量化（~45s 目標）: `docs/development/current/main/phases/phase-287/P1-INSTRUCTIONS.md`
- P2（legacy, optional）: quick をさらに 45s へ寄せる: `docs/development/current/main/phases/phase-287/P2-INSTRUCTIONS.md`

## Phase 286 完了作業（historical）

### ✅ Legacy Pattern5 削除（488行）

**削除理由**: Plan line 完全運用化により、legacy Pattern5 は完全にデッドコード化

**削除ファイル**:
- `src/mir/builder/control_flow/joinir/patterns/pattern5_infinite_early_exit.rs` (488行)

**関連削除**:
- `router.rs` の `LOOP_PATTERNS` テーブルから Pattern5 エントリ削除
- `mod.rs` から `pub mod pattern5_infinite_early_exit;` 削除
- `router.rs` のドキュメント更新（Pattern5 → Pattern4 優先順位へ）

**影響範囲**:
- Pattern5 は Plan line の `extract_pattern5_plan()` 経由で処理されるため、機能退行なし
- `LOOP_PATTERNS` テーブルの優先順位: Pattern5 → Pattern4 → Pattern8... から Pattern4 → Pattern8... に変更

### ✅ Warning クリーンアップ

**実行コマンド**:
```bash
cargo fix --lib -p nyash-rust --allow-dirty
```

**修正内容**:
- 1件の自動修正（`normalizer.rs`）
- 未使用 import などを自動修正

### ✅ ビルド＆テスト確認

**ビルド結果**:
```bash
cargo build --release
# → 成功（130 warnings、エラーなし）
```

**テスト結果**:
```bash
tools/smokes/v2/run.sh --profile quick
# → 154/154 PASS ✅
```

**退行なし**: quick smoke 154/154 PASS を維持

## 削除前後の統計

### コード削減

| 項目 | 削減数 |
|------|--------|
| ソースファイル | 1ファイル (pattern5_infinite_early_exit.rs) |
| 総削減行数 | 488行 |
| router.rs エントリ | 5行（Pattern5 エントリ） |
| mod.rs 宣言 | 1行 |

### Pattern優先順位の変更

**削除前**（Phase 131-11+）:
```
Pattern5 (most specific) → Pattern4 → Pattern3 → Pattern1 → Pattern2
```

**削除後**（Phase 286+）:
```
Pattern4 → Pattern8 → Pattern9 → Pattern3 → Pattern1 → Pattern2
```

**注**: Pattern5/6/7 は Plan line 経由で処理（`PLAN_EXTRACTORS` テーブル）

## Legacy backlog (post-2025-12-27)

### (legacy) normalizer.rs 分割計画

**現状**: `src/mir/builder/control_flow/plan/normalizer.rs` が大きすぎる（推定 1,500+ 行）

**分割案**:

#### 1. Pattern5 正規化ロジック分離（430行）
- `normalizer/pattern5.rs` - Pattern5 専用正規化
- Pattern5 の複雑な構造展開ロジックを独立モジュール化

#### 2. Helper 関数共通化（700行）
- `normalizer/helpers.rs` - 共通ヘルパー関数
- 複数パターンで使用される変換ロジック

#### 3. コアロジック残存（300行）
- `normalizer.rs` - PlanNormalizer struct & normalize() エントリーポイント
- パターン横断的な正規化インターフェース

**期待効果**:
- メンテナンス性向上
- テスト分離（Pattern5 正規化のみをユニットテスト）
- 責任分離（SRP原則）

### (legacy) LOOP_PATTERNS テーブル完全削除

**背景**: 全Pattern が Plan line 経由になれば、`LOOP_PATTERNS` テーブルは不要

**前提条件**:
- Pattern1-4 の Plan line 移行完了（Phase 286 でPattern1-4はPlan line化済み）
- Pattern8-9 の Plan line 移行完了（Phase 286 でPlan line化済み）

**削除対象**:
- `router.rs` の `LOOP_PATTERNS` static テーブル（40行程度）
- `LoopPatternEntry` struct（不要化）

**残存**:
- `PLAN_EXTRACTORS` テーブルのみ（SSOT）

**期待効果**:
- 二重管理解消（LOOP_PATTERNS vs PLAN_EXTRACTORS）
- ルーティングロジック一本化

## 実装方針

### フェーズ分割

1. **Phase 286（完了）**: Legacy Pattern5 削除 + Warning クリーンアップ
2. **Phase 287-P0（保留）**: normalizer.rs 分割（P0優先度は低い）
3. **Phase 287-P1（将来）**: LOOP_PATTERNS テーブル削除（全Pattern Plan line化後）

### 段階的移行

- 急がない：normalizer.rs 分割は緊急度低（機能的に問題なし）
- 機会を待つ：P1 はPattern1-4完全移行のタイミングで実施

## 関連ドキュメント

- [Phase 286 計画](../phase-286/README.md) - Plan Line完全運用化
- [Plan Line アーキテクチャ](../../design/plan-line-architecture.md) - Extractor → Normalizer → Verifier → Lowerer
- [Pattern移行ログ](../phase-273/README.md) - Pattern6/7 Plan line移行（Phase 273）

## 検証項目

### ✅ Phase 286 完了検証

- [x] Pattern5 ファイル削除（488行）
- [x] router.rs の LOOP_PATTERNS から Pattern5 エントリ削除
- [x] mod.rs から Pattern5 宣言削除
- [x] `cargo fix` 実行（Warning クリーンアップ）
- [x] `cargo build --release` 成功（0エラー）
- [x] quick smoke 154/154 PASS
- [x] Phase 287 ドキュメント作成

### 📋 Phase 287-P0/P1 検証（将来）

- [ ] normalizer.rs 分割完了（P0）
  - [ ] pattern5.rs 独立（430行）
  - [ ] helpers.rs 共通化（700行）
  - [ ] normalizer.rs 縮小（300行）
- [ ] LOOP_PATTERNS テーブル削除（P1）
  - [ ] 全Pattern Plan line経由確認
  - [ ] `LOOP_PATTERNS` static削除
  - [ ] `LoopPatternEntry` struct削除

## 備考

**注意**: normalizer.rs の分割は行わない（本Phase完了時点では保留）

**理由**:
- 機能的に問題なし（現在の構造で動作）
- 緊急度低（開発速度への影響なし）
- 別Phase対応が適切（Phase 287-P0として計画のみ）
