Files
hakorune/docs/development/current/main/phases/phase-125/FEEDBACK.md
nyash-codex aabb67cdc2 docs: Phase 125 P2-P5 feedback (boxification review)
Feedback summary:
- 単一責任: EnvLayout / lower_return_value
- SSOT: reads ∩ available_inputs
- Fail-Fast: 構造化エラー + hint
- 段階的投入: 構造のみ(P3 で完成)

Good:
- Single responsibility principle maintained
- SSOT approach for env layout
- Fail-Fast with structured errors
- Graceful degradation (Ok(None))

Improvement proposals:
- P3 wiring clarification
- EnvLayout responsibility scope
- Error hint context-awareness
- Fixture completeness after P3

Next: Phase 125 P3 (available_inputs wiring)

Ref: docs/development/current/main/phases/phase-125/FEEDBACK.md
2025-12-18 06:33:55 +09:00

4.8 KiB
Raw Blame History

Phase 125 P2-P5 Implementation Feedback

完了状況

P0: docs-only

  • README.md 作成
  • 方針固定reads-only inputs を env に追加)

P1: StepTreeContract に read_sources を追加しない(方針)

  • StepTree は "何を読むかreads" だけ
  • "それがどこから来るか" は builder 側で解決ScopeManager の SSOT
  • 実装変更なし、方針のみ確認

P2: Normalized builder の env を 2 レーン化

  • EnvLayout 導入writes + inputs
  • from_contract: reads ∩ available_inputs で inputs を決定
  • env_map: writes は ValueId 生成、inputs は参照
  • 実装: src/mir/control_tree/normalized_shadow/builder.rs (186行追加)

P3: dev-only 配線available_inputs を渡す ⚠️ 未実装

  • 配線点: routing.rs / lowering.rs
  • SSOT: function params + CapturedEnv (pinned/captured)
  • 現状: available_inputs は空の BTreeMapstub

P4: Return(Variable) の解決を拡張

  • lower_return_value: env (writes + inputs) から解決
  • Fail-Fast with hint: env に無い変数は構造化エラー
  • Error tags: [phase125/return/var_not_in_env]
  • Graceful degradation: Phase 125 errors → Ok(None)

P5: fixture + smokeVM

  • fixture: apps/tests/phase125_if_only_return_readonly_input_min.hako
  • smoke: tools/smokes/v2/profiles/integration/apps/phase125_if_only_return_input_vm.sh
  • 結果: PASS (exit code 7)
  • Note: 構造のみP3 実装後に完全動作)

P6: docs 完了

  • 10-Now.md 更新
  • Phase 125 P2-P5 完了記録

テスト結果

Unit Tests

  • 全 18 tests PASS (normalized_shadow module)
  • 全 1160 tests PASS (lib全体)
  • 新規テスト:
    • test_return_variable_from_inputs_stub: PASS
    • test_return_variable_out_of_scope: PASS (Phase 125 対応更新)

Integration Smoke

  • Phase 125: PASS (phase125_if_only_return_input_vm.sh)
  • Regression: 全 PASS
    • phase124_if_only_return_var_vm: PASS
    • phase123_if_only_normalized_semantics_vm: PASS
    • phase121_shadow_if_only_vm: PASS (3/3)
    • phase118_loop_nested_if_merge_vm: PASS

箱化モジュール化の観点でのフィードバック

良い点

  1. 単一責任の原則

    • EnvLayout: env レイアウト決定のみ
    • from_contract: 入力から決定的に導出idempotent
    • lower_return_value: return 値の lowering のみ
  2. SSOT 化

    • EnvLayout.from_contract: reads ∩ available_inputs が SSOT
    • AST から推測しないPhase 100 の pinned と混同しない)
    • BTreeMap で決定的順序保証
  3. Fail-Fast 原則

    • env に無い変数は即座にエラー
    • 構造化エラー tags: [phase125/return/var_not_in_env]
    • Hint 必須("Pass as param, add to pinned capture, or define before if"
  4. 段階的投入

    • P2-P5: 構造のみ実装available_inputs は空)
    • P3: 配線(別 Phase として分離可能)
    • 既定挙動不変dev-only

改善提案

  1. P3 配線の明確化

    • 現状: available_inputs は空 BTreeMapstub
    • 提案: P3 で明示的に配線点を文書化
    • SSOT: function params + CapturedEnv (pinned/captured)
    • Phase 121/122 の配線と同じ場所
  2. EnvLayout の責務拡大の懸念

    • 現状: writes + inputs の決定のみ
    • 将来: outputs, side_effects なども追加される可能性
    • 提案: EnvLayout を "環境レイアウト決定" の SSOT として明確化
    • 別の BoxEnvLayoutBuilder など)への分離も検討
  3. Error hint の改善可能性

    • 現状: 固定文字列 hint
    • 提案: 文脈に応じた hint例: "x is in reads but not in function params"
    • Phase 109 の error_tags hints SSOT に統合
  4. fixture の完全性

    • 現状: P3 未実装のため、fixture は構造のみ
    • 提案: P3 完了後、"真の reads-only input" fixture を追加
    • 例: local x=7; if flag==0 { /* no writes */ } return x

レガシー発見

なしPhase 125 は新規機能のため)

次のステップPhase 125 P3 以降)

P3: available_inputs wiring

  • 配線点: src/mir/builder/control_flow/joinir/routing.rs または src/mir/builder/calls/lowering.rs
  • SSOT: ScopeManager / CapturedEnv / function params
  • inputs が実際に env に載るようになる

将来の拡張

  • 複雑な条件式BinOp, MethodCall など)の reads 抽出
  • loop との統合loop 内の reads を継続的に追跡)
  • if-else merge で reads-only 変数の扱い

総評

Phase 125 P2-P5 は、箱化モジュール化の観点で良好な実装。

  • 単一責任: EnvLayout / lower_return_value
  • SSOT: reads ∩ available_inputs
  • Fail-Fast: 構造化エラー + hint
  • 段階的投入: 構造のみ実装P3 で完成)

P3 の配線が完了すれば、Phase 125 の完全な機能が動作する見込み。