Files
hakorune/docs/development/current/main/phases/phase-287
..

Phase 287: Developer Hygienebig files / smoke / normalizer

Status: In progress (P0/P1/P2/P3/P4/P5 complete, P6 next) Date: 2025-12-27 Previous: Phase 286 (Plan Line完全運用化)

概要SSOT

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

2025-12-27 Update: Big Files RefactoringP0

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

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

2025-12-27 Update: AST Feature Extractor modularizationP1

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 modularizationP2

  • 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 splitP3

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

2025-12-27 Update: Plan stage modularizationP4

  • 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 facadeP5

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

Next (P6)

  • Stage-1/2/3 の “scan plan” が未使用なので、設計を固定してから統合する(または削除する)ための docs-first 指示書を作る。
    • 指示書: docs/development/current/main/phases/phase-287/P6-SCAN_PLAN-INTEGRATION-INSTRUCTIONS.md

Legacy / Historical (2025-12-26 plan)

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

Legacy docssmoke quick

  • P1legacy: quick 軽量化(~45s 目標): docs/development/current/main/phases/phase-287/P1-INSTRUCTIONS.md
  • P2legacy, 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.rsLOOP_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 クリーンアップ

実行コマンド:

cargo fix --lib -p nyash-rust --allow-dirty

修正内容:

  • 1件の自動修正normalizer.rs
  • 未使用 import などを自動修正

ビルド&テスト確認

ビルド結果:

cargo build --release
# → 成功130 warnings、エラーなし

テスト結果:

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.rsLOOP_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 完了検証

  • Pattern5 ファイル削除488行
  • router.rs の LOOP_PATTERNS から Pattern5 エントリ削除
  • mod.rs から Pattern5 宣言削除
  • cargo fix 実行Warning クリーンアップ)
  • cargo build --release 成功0エラー
  • quick smoke 154/154 PASS
  • 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として計画のみ