docs: update Phase104 status and JoinIR map

This commit is contained in:
nyash-codex
2025-12-17 21:47:37 +09:00
parent 368b363694
commit 712e1ad755
3 changed files with 15 additions and 9 deletions

View File

@ -6,6 +6,7 @@
- read_digits_from 形の `loop(true)` を Pattern2 で受理loop var 抽出 + break cond 正規化)
- fixture: `apps/tests/phase104_read_digits_loop_true_min.hako`expected: `2`, `1`
- smoke: `tools/smokes/v2/profiles/integration/apps/phase104_read_digits_vm.sh` / `tools/smokes/v2/profiles/integration/apps/phase104_read_digits_llvm_exe.sh`
- P2: json_cur 由来の回帰面を追加fixture+VM/LLVM EXE smoke
## 2025-12-17Phase 103 P0 完了 ✅

View File

@ -10,9 +10,9 @@ Related:
- **real-app loop regression の横展開VM + LLVM EXE**
- ねらい: 実コード由来ループを 1 本ずつ最小抽出して fixture/smoke で固定する(段階投入)。
- 現状: Phase 102read_quoted)まで固定済み。
- 次候補: `parse_object` / `parse_array` の key/value ループ、read_digits 系
- 入口: `docs/development/current/main/phases/phase-102/README.md`
- 現状: Phase 104read_digits / json_cur 由来)まで固定済み。
- 次候補: `apps/libs/json_cur.hako` `find_balanced_array_end` / `find_balanced_object_end`depth scan + nested if
- 入口: `docs/development/current/main/phases/phase-104/README.md`
- **P5b “完全E2E”**escape skip の実ループを end-to-end で固定)
- 現状: Phase 94 で VM E2E まで固定済み。次は selfhost 実コード(`apps/selfhost-vm/json_loader.hako`)へ横展開して回帰を減らす。
@ -24,10 +24,6 @@ Related:
## 中期(ループ在庫の残り)
- **loop(true) + break-onlydigit scan など)**
- ねらい: bounded ではない実ループを段階的に飲み込むfixture + shape guard + Fail-Fast
- 方針: “新パターン増殖”よりも Pattern5 系infinite loop familyとして扱う設計を先に固める。
- **P5guard-bounded**: 大型ループを “小粒度” に割ってから取り込む(分割 or 新契約)
- **P6nested loops**: capability guard で Fail-Fast 維持しつつ、解禁時の契約を先に固定

View File

@ -60,9 +60,9 @@ flowchart LR
| 領域 | 役割(何を決めるか) | 主な入口/箱SSOT寄り | 主な出力 | Fail-Fast典型 |
|---|---|---|---|---|
| Pattern検出 | ループ形を分類し、どの lowerer に渡すか決める | [`src/mir/builder/control_flow/joinir/patterns/router.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/router.rs), [`src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs), [`src/mir/loop_pattern_detection/mod.rs`](../../../../../src/mir/loop_pattern_detection/mod.rs) | `LoopPatternKind` / Pattern 選択 | 「分類不能」→ 明示的に Errサイレントな非JoinIR退避は禁止 |
| Pattern検出 | ループ形を分類し、どの lowerer に渡すか決める | [`src/mir/builder/control_flow/joinir/patterns/router.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/router.rs), [`src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/ast_feature_extractor.rs), [`src/mir/builder/control_flow/joinir/patterns/pattern2_inputs_facts_box.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/pattern2_inputs_facts_box.rs), [`src/mir/builder/control_flow/joinir/patterns/policies/`](../../../../../src/mir/builder/control_flow/joinir/patterns/policies/), [`src/mir/loop_pattern_detection/mod.rs`](../../../../../src/mir/loop_pattern_detection/mod.rs) | `LoopPatternKind` / Pattern 選択 | 「分類不能」→ 明示的に Errサイレントな非JoinIR退避は禁止 |
| shape guard | 「この shape なら lower/merge 契約が成立する」を保証する | [`src/mir/join_ir/normalized/shape_guard.rs`](../../../../../src/mir/join_ir/normalized/shape_guard.rs), `src/mir/builder/control_flow/joinir/patterns/*_validator.rs` | shape OK / 詳細診断 | shape 不一致を握りつぶさず Err |
| lowering | JoinIRStructured/Normalizedを生成する | [`src/mir/join_ir/lowering/mod.rs`](../../../../../src/mir/join_ir/lowering/mod.rs), `src/mir/builder/control_flow/joinir/patterns/pattern*_*.rs` | `JoinModule` | 未対応の構造は `error_tags::freeze(...)` 等で Err |
| lowering | JoinIRStructured/Normalizedを生成する | [`src/mir/join_ir/lowering/mod.rs`](../../../../../src/mir/join_ir/lowering/mod.rs), [`src/mir/builder/control_flow/joinir/patterns/pattern2_lowering_orchestrator.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/pattern2_lowering_orchestrator.rs), `src/mir/builder/control_flow/joinir/patterns/pattern*_*.rs` | `JoinModule` | 未対応の構造は `error_tags::freeze(...)` 等で Err |
| merge | JoinIR→MIR 変換後、ホスト関数に統合する | [`src/mir/builder/control_flow/joinir/patterns/conversion_pipeline.rs`](../../../../../src/mir/builder/control_flow/joinir/patterns/conversion_pipeline.rs), [`src/mir/builder/control_flow/joinir/merge/mod.rs`](../../../../../src/mir/builder/control_flow/joinir/merge/mod.rs) | ホスト MIR のブロック/ValueId 更新 | ValueId 競合、ExitLine 未接続、PHI 破綻を Err |
| ExitMeta | 「出口でどの carrier をどの host slot に戻すか」のメタ | [`src/mir/join_ir/lowering/carrier_info.rs`](../../../../../src/mir/join_ir/lowering/carrier_info.rs), [`src/mir/builder/control_flow/joinir/merge/exit_line/meta_collector.rs`](../../../../../src/mir/builder/control_flow/joinir/merge/exit_line/meta_collector.rs) | `ExitMeta` / `exit_bindings` | carrier 不整合(不足/過剰)を Err |
| CarrierInit | carrier 初期化の SSOTFromHost/Const/LoopLocal | [`src/mir/builder/control_flow/joinir/merge/carrier_init_builder.rs`](../../../../../src/mir/builder/control_flow/joinir/merge/carrier_init_builder.rs), [`src/mir/join_ir/lowering/carrier_info.rs`](../../../../../src/mir/join_ir/lowering/carrier_info.rs) | 初期値 `ValueId` | 初期化経路の分岐が散らばらないSSOT を使う) |
@ -187,6 +187,15 @@ Box を新規実装・変更した際は以下を必ず確認:
---
## SmokeLLVM EXESSOTintegration
LLVM EXE の integration smoke は、原則として共通ヘルパーに寄せる(重複禁止 / SKIP 規約の統一)。
- SSOT helper: `tools/smokes/v2/lib/llvm_exe_runner.sh`
- LLVM 前提チェック(`llvm-config-18` / `llvmlite` / `--backend llvm`
- 必須プラグインの dlopen gating + 必要時だけ `tools/plugins/build-all.sh`
- build → run → 数値行だけ抽出して比較(デバッグログ混入耐性)
## スコープ解決の SSOTPinned ReadOnly Captures
JoinIR lowering では「ループ内で参照される値」を次の層で解決する(探索順 SSOT: