chore: Phase 25.1 完了 - LoopForm v2/Stage1 CLI/環境変数削減 + Phase 26-D からの変更

Phase 25.1 完了成果:
-  LoopForm v2 テスト・ドキュメント・コメント完備
  - 4ケース(A/B/C/D)完全テストカバレッジ
  - 最小再現ケース作成(SSAバグ調査用)
  - SSOT文書作成(loopform_ssot.md)
  - 全ソースに [LoopForm] コメントタグ追加

-  Stage-1 CLI デバッグ環境構築
  - stage1_cli.hako 実装
  - stage1_bridge.rs ブリッジ実装
  - デバッグツール作成(stage1_debug.sh/stage1_minimal.sh)
  - アーキテクチャ改善提案文書

-  環境変数削減計画策定
  - 25変数の完全調査・分類
  - 6段階削減ロードマップ(25→5、80%削減)
  - 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG)

Phase 26-D からの累積変更:
- PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等)
- MIRビルダーリファクタリング
- 型伝播・最適化パス改善
- その他約300ファイルの累積変更

🎯 技術的成果:
- SSAバグ根本原因特定(条件分岐内loop変数変更)
- Region+next_iパターン適用完了(UsingCollectorBox等)
- LoopFormパターン文書化・テスト化完了
- セルフホスティング基盤強化

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
Co-Authored-By: Task Assistant <task@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-21 06:25:17 +09:00
parent baf028a94f
commit f9d100ce01
366 changed files with 14322 additions and 5236 deletions

View File

@ -1,5 +1,7 @@
# Phase 25.3 — FuncScanner / StageB defs 安定化
Status: 完了StageB fib defs canary 緑2025-11 時点)
## スコープ / ゴール
- 対象レイヤ
@ -22,6 +24,30 @@
- Loop/PHI の意味論は **LoopFormBuilder + LoopSnapshotMergeBox** に完全委譲したまま、
- FuncScanner / StageB は「テキストスキャンJSON 組み立て」の箱として綺麗に分離された状態にする。
## 完了ステータス2024-11-20 時点)
- `tools/smokes/v2/profiles/quick/core/phase251/stageb_fib_program_defs_canary_vm.sh` が緑Phase 25.3 の完了条件)。
- `defs``TestBox.fib` / `Main.main` が入り、`TestBox.fib.body.body[*]``Loop` ノードが含まれる状態を固定。
- StageB 本線の整理:
- `StageBDriverBox.main`: main 本文は `{…}` で包んだ block パーサ優先で JSON 化し、defs 側は `{"type":"Block","body":[…]}` に構造化して注入。
- `StageBFuncScannerBox._scan_methods`: block パーサ優先に揃え、Program パーサは `HAKO_STAGEB_FUNC_SCAN_PROG_FALLBACK=1` の opt-in 時だけ使う安全側トグルに変更skip_ws 崩れの再発防止)。
- Rust 層は無改変LoopForm v2 / LoopSnapshotMergeBox の SSOT をそのまま利用)。
## JSON v0 フロントと AOT ルートの契約Phase 25.3 時点)
- Program(JSON v0) の形:
- ルートは常に `{"version":0,"kind":"Program","body":[...]}`
- defs は `\"defs\":[{ \"name\", \"params\", \"box\", \"body\" }]` を追加する形で注入する。
- StageB / FuncScanner 経由の `defs[*].body` は必ず `{\"type\":\"Block\",\"body\":[Stmt...]}` でラップし、AOT/VM 側からは「通常の Block ノード」として読めるようにする。
- フロント/バックエンドの責務分離:
- StageB / FuncScanner: `.hako` テキスト → Program(JSON v0) まで(ループ/PHI の意味論は持たない)。
- Rust 側 LoopForm v2 / JSON v0 Bridge: Program(JSON v0) → MIR/AOT までLoop/PHI/SSA の SSOT
- StageB トグル整理(抜粋):
- `HAKO_STAGEB_FUNC_SCAN=1`(既定): defs を常に埋める。`0` で StageB からの defs 注入を無効化。
- `HAKO_STAGEB_PROGRAM_PARSE_FALLBACK=1`: main 本文で Program パーサ fallback を有効化(既定は OFF、block パーサ優先)。
- `HAKO_STAGEB_FUNC_SCAN_PROG_FALLBACK=1`: FuncScanner 側で Program パーサ fallback を有効化(既定は OFF
通常の開発・CI ではいずれも OFF にしておき、VM/パーサ調査時だけ optin で使う想定。
## すでに前提としている状態
- LoopForm v2 / PHI / snapshot:
@ -118,27 +144,28 @@ FuncScanner / StageB のデバッグ時には、`scan_all_boxes` のループ
- ここでの主なバグは「SSA ではなく、StageB が fib ソースから defs を組み立てきれていないこと」なので、
ループ構造や LoopForm には手を入れず、StageB 側のテキスト処理と defs 生成パスを中心に見る。
### 4. fib defs canary & ドキュメント更新
### 4. fib defs canary & ドキュメント更新(完了)
- 対象:
- `tools/smokes/v2/profiles/quick/core/phase251/stageb_fib_program_defs_canary_vm.sh`
- `docs/development/roadmap/phases/phase-25.1q/README.md`
- `CURRENT_TASK.md`
- やること:
- canary スクリプトで:
- `Program.kind == "Program"`
- `defs``TestBox.fib` が存在すること。
- `TestBox.fib.body` `Loop` ノードが含まれること。
を満たした状態で `rc=0` になるまで確認する
- Phase 25.1q / 25.2 の README には、
- 「loop/PHI/スナップショットの SSOT は LoopForm v2 + LoopSnapshotMergeBox」
- 「Phase 25.3 で FuncScanner / StageB defs もこの土台の上に載せた」
というつながりを 1〜2 行で追記する。
- `CURRENT_TASK.md` には:
- Phase 25.3 のタスク完了状況(FuncScanner fib / StageB fib canary 緑)と、
- その後に繋がる Stage1 UsingResolver / Stage1 CLI selfhost ラインへのブリッジ
を短く整理しておく。
今回の結果:
- `tools/smokes/v2/profiles/quick/core/phase251/stageb_fib_program_defs_canary_vm.sh``rc=0` で安定緑。
- canary 内部で確認している条件:
- `Program.kind == "Program"`
- `defs``TestBox.fib` / `Main.main` が含まれていること。
- `TestBox.fib.body` の直下(`body.body[*]`)に `Loop` ノードが最低 1 つ含まれていること
- これにより、FuncScanner / StageB 経由の fib defs ラインは LoopForm v2 + LoopSnapshotMergeBox の上で構造的に安定したとみなせる。
ドキュメント側:
- Phase 25.1q / 25.2 の README には、
- 「loop/PHI/スナップショットの SSOT は LoopForm v2 + LoopSnapshotMergeBox」
- Phase 25.3 FuncScanner / StageB defs もこの土台の上に載せた」
という関係を 1〜2 行で追記済み。
- `CURRENT_TASK.md` では Phase 25.3 を「StageB fib defs canary 緑」まで完了したフェーズとして整理し、
次フェーズを Stage1 UsingResolver ループ整理 / Stage1 CLI program-json selfhost 導線に設定した。
### 5. mir_funcscanner_skip_ws 系テストの扱いflaky → dev 専用)