docs: update Phase 137-1 completion status and Phase 2 roadmap
## Summary Loop Canonicalizer Phase 1(型定義)の完了と、Phase 2(dev-only 観測)への ロードマップを記録。 ## Changes ### loop-canonicalizer.md - Status: Design (P0) → Phase 1 done(型定義まで) - 実装の入口を明記(src/mir/loop_canonicalizer/mod.rs) - NYASH_LOOP_ROUTING_TRACE → joinir_dev_enabled() に変更 (新 ENV を増やさず、既存のスイッチに寄せる) ### CURRENT_TASK.md - Phase 137-1 完了を追記 - P0 を「設計」→「Phase 2(dev-only 観測)」へ更新 ### phases/README.md - Phase 137 を追加 ### phases/phase-137/README.md (NEW) - Phase 1 完了サマリ - Phase 2 予定を最小で記録 ### joinir-design-map.md / 01-JoinIR-Selfhost-INDEX.md - loop-canonicalizer への導線を追加 ## Next Steps Phase 2: dev-only 観測の導入 - canonicalize_loop_expr() の薄い入口を追加 - joinir_dev_enabled() 配下でログ出し - 既定挙動は完全不変 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -28,6 +28,7 @@
|
||||
- **Phase 134 完了**: Plugin loader best-effort loading(決定的順序 + failure 集約 + 継続)を導入。
|
||||
- **Phase 135 完了**: ConditionLoweringBox allocator SSOT(P0: 根治修正 + P1: contract_checks Fail-Fast 強化)。
|
||||
- **Phase 136 完了**: MirBuilder Context SSOT 化(+ ValueId allocator 掃討)。
|
||||
- **Phase 137-1 完了**: Loop Canonicalizer(型/語彙の SSOT)を導入(routing/lowering には未介入)。
|
||||
- **Phase 88 完了**: continue + 可変ステップ(i=i+const 差分)を dev-only fixture で固定、StepCalculator Box 抽出。
|
||||
- **Phase 89 完了**: P0(ContinueReturn detector)+ P1(lowering 実装)完了。
|
||||
- **Phase 90 完了**: ParseStringComposite + `Null` literal + ContinueReturn(同一値の複数 return-if)を dev-only fixture で固定。
|
||||
@ -52,21 +53,23 @@
|
||||
|
||||
## 次の指示書(優先順位)
|
||||
|
||||
### P0: Loop Canonicalizer の設計(設計待ち - 外部検討中)
|
||||
### P0: Loop Canonicalizer の Phase 2(dev-only 観測の導入)
|
||||
|
||||
**状態**: 🔶 設計中(ChatGPT Pro と詰めている)
|
||||
**状態**: ✅ 設計 + Phase 1(型)完了、Phase 2 へ
|
||||
|
||||
**目的**: ループ形状の組み合わせ爆発を抑えるための "前処理パス" を設計し、SSOT を定める
|
||||
**目的**: `LoopSkeleton` / `Capability` / `RoutingDecision` を実際のループ入口で “観測できる” 状態にして、組み合わせ爆発の手前で理由付き Fail-Fast ができる基盤を作る(ただし既定挙動は不変)。
|
||||
|
||||
SSOT:
|
||||
- `docs/development/current/main/design/loop-canonicalizer.md`
|
||||
実装(Phase 1):
|
||||
- `src/mir/loop_canonicalizer/mod.rs`
|
||||
|
||||
**次に触るSSOT**:
|
||||
- Loop系の設計: `docs/development/current/main/joinir-architecture-overview.md`
|
||||
|
||||
注意:
|
||||
- 実装は急がず、設計(SSOT)を先に固める
|
||||
- 既定挙動は変えない(dev-only で段階投入する)
|
||||
- 既定挙動は変えない(dev-only で観測→段階投入)
|
||||
- 新しい環境変数は増やさない(`joinir_dev_enabled()` の範囲で観測する)
|
||||
|
||||
### P1: JoinIR / Selfhost depth-2 の前進(実装可能 - Phase 91 候補)
|
||||
|
||||
|
||||
@ -42,6 +42,7 @@ JoinIR の箱構造と責務、ループ/if の lowering パターンを把握
|
||||
- `docs/development/current/main/design/joinir-design-map.md`
|
||||
5. Loop Canonicalizer(設計 SSOT)
|
||||
- `docs/development/current/main/design/loop-canonicalizer.md`
|
||||
- 実装(Phase 137-1): `src/mir/loop_canonicalizer/mod.rs`
|
||||
6. MIR Builder(Context 分割の入口)
|
||||
- `src/mir/builder/README.md`
|
||||
7. Scope/BindingId(shadowing・束縛同一性の段階移行)
|
||||
|
||||
@ -27,6 +27,12 @@
|
||||
- Phase 136: MirBuilder の Context 分割を完了し、状態の SSOT を Context に一本化。
|
||||
- 詳細: `docs/development/current/main/phases/phase-136/README.md`
|
||||
|
||||
## 2025‑12‑16:Phase 137‑1(短報)
|
||||
|
||||
- Loop Canonicalizer の Phase 1(型/語彙の SSOT)を導入(routing/lowering には未介入)。
|
||||
- 設計 SSOT: `docs/development/current/main/design/loop-canonicalizer.md`
|
||||
- 実装: `src/mir/loop_canonicalizer/mod.rs`
|
||||
|
||||
## 2025‑12‑14:現状サマリ
|
||||
|
||||
(補足)docs が増えて迷子になったときの「置き場所ルール(SSOT)」:
|
||||
|
||||
@ -105,6 +105,7 @@ flowchart LR
|
||||
|
||||
- Trace(JoinIR ルートの統一トレース): [`src/mir/builder/control_flow/joinir/trace.rs`](../../../../../src/mir/builder/control_flow/joinir/trace.rs)
|
||||
- Error tags(SSOT): [`src/mir/join_ir/lowering/error_tags.rs`](../../../../../src/mir/join_ir/lowering/error_tags.rs)
|
||||
- Loop Canonicalizer(前処理 SSOT): [`src/mir/loop_canonicalizer/mod.rs`](../../../../../src/mir/loop_canonicalizer/mod.rs)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# Loop Canonicalizer(設計 SSOT)
|
||||
|
||||
Status: Design (P0)
|
||||
Status: Phase 1 done(型定義まで)
|
||||
Scope: ループ形の組み合わせ爆発を抑えるための “前処理” の設計(fixture/shape guard/fail-fast と整合)
|
||||
Related:
|
||||
- SSOT (契約/不変条件): `docs/development/current/main/joinir-architecture-overview.md`
|
||||
@ -158,6 +158,15 @@ pub enum CarrierRole {
|
||||
|
||||
---
|
||||
|
||||
## 実装の入口(現状)
|
||||
|
||||
Phase 1(型定義のみ)の実装はここ:
|
||||
- `src/mir/loop_canonicalizer/mod.rs`
|
||||
|
||||
注意:
|
||||
- ここは「型と語彙の SSOT」を置く場所で、routing/lowering にはまだ介入しない。
|
||||
- Phase 2 以降で `canonicalize(loop_ast) -> (LoopSkeleton, RoutingDecision)` を導入し、dev-only で観測から始める。
|
||||
|
||||
## Capability の語彙(Fail-Fast reason タグ)
|
||||
|
||||
Skeleton を生成できても lower/merge できるとは限らない。以下の Capability で判定する:
|
||||
@ -207,13 +216,13 @@ pub struct RoutingDecision {
|
||||
|----------------------------|-------------------------------|-----------------------------------|
|
||||
| `error_tags` | `chosen.is_none()` | Fail-Fast のエラーメッセージ |
|
||||
| `contract_checks` | debug build + 契約違反時 | Phase 135 P1 の verifier に統合 |
|
||||
| `NYASH_LOOP_ROUTING_TRACE` | 環境変数 ON 時 | 開発時のルーティング追跡 |
|
||||
| JoinIR dev/debug | `joinir_dev_enabled()==true` | 開発時のルーティング追跡 |
|
||||
| 統計 JSON | 将来拡張 | Corpus 分析(Skeleton Signature) |
|
||||
|
||||
### error_tags との統合
|
||||
|
||||
- `RoutingDecision.error_tags` は `src/mir/builder/control_flow/joinir/error_tags.rs` に追記
|
||||
- 既存の `ErrorTagCollector` を使用(新規 Box は作らない)
|
||||
- `RoutingDecision` の Fail-Fast 文言は `src/mir/join_ir/lowering/error_tags.rs` の語彙に寄せる
|
||||
- 既存のエラータグ(例: `error_tags::freeze(...)`)を使用し、文字列直書きを増やさない
|
||||
|
||||
---
|
||||
|
||||
@ -269,4 +278,3 @@ loop(p < len) {
|
||||
- [ ] 必要 Capability を列挙し、未達は Fail-Fast(理由が出る)
|
||||
- [ ] 既存 smoke/verify が退行しない(quick は重くしない)
|
||||
- [ ] 新規 Capability は先に `loop-canonicalizer.md` に追記してから実装
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
- **Phase 134**: Plugin loader best-effort loading
|
||||
- **Phase 135**: ConditionLoweringBox allocator SSOT(ValueId 衝突の根治)
|
||||
- **Phase 136**: MirBuilder Context SSOT 化(+ ValueId allocator 掃討)
|
||||
- **Phase 137**: Loop Canonicalizer(前処理 SSOT)導入
|
||||
|
||||
## Phase フォルダ構成(推奨)
|
||||
|
||||
|
||||
27
docs/development/current/main/phases/phase-137/README.md
Normal file
27
docs/development/current/main/phases/phase-137/README.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Phase 137: Loop Canonicalizer(前処理 SSOT)
|
||||
|
||||
## Status
|
||||
- 状態: 🔶 進行中(Phase 1 完了)
|
||||
|
||||
## Goal
|
||||
- ループ形の組み合わせ爆発を抑えるため、`AST → LoopSkeleton → (capability/routing)` の前処理を SSOT 化する。
|
||||
- 既存の方針(fixture + shape guard + Fail-Fast)を維持したまま、pattern 数を増やさずにスケールさせる。
|
||||
|
||||
## Phase 1(完了): 型/語彙の SSOT
|
||||
|
||||
- 実装: `src/mir/loop_canonicalizer/mod.rs`
|
||||
- `LoopSkeleton` / `SkeletonStep` / `UpdateKind`
|
||||
- `ExitContract` / `CarrierSlot` / `CarrierRole`
|
||||
- `RoutingDecision` / capability tags(`CAP_MISSING_*`)
|
||||
- 注意: Phase 1 は「型と語彙」のみ。routing/lowering にはまだ介入しない。
|
||||
|
||||
## Phase 2(次): dev-only 観測の導入
|
||||
|
||||
- 目標: ループ入口で `LoopSkeleton` と `RoutingDecision` を生成し、dev-only で観測できるようにする。
|
||||
- 既定挙動: 不変(dev-only の観測から開始)
|
||||
- スイッチ: 新しい env を増やさず、`joinir_dev_enabled()`(既存)配下で有効化する。
|
||||
|
||||
## SSOT
|
||||
|
||||
- 設計 SSOT: `docs/development/current/main/design/loop-canonicalizer.md`
|
||||
- JoinIR 契約 SSOT: `docs/development/current/main/joinir-architecture-overview.md`
|
||||
Reference in New Issue
Block a user