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:
nyash-codex
2025-12-16 05:10:29 +09:00
parent 2bdf1abe78
commit ec1ff5b766
7 changed files with 57 additions and 10 deletions

View File

@ -28,6 +28,7 @@
- **Phase 134 完了**: Plugin loader best-effort loading決定的順序 + failure 集約 + 継続)を導入。
- **Phase 135 完了**: ConditionLoweringBox allocator SSOTP0: 根治修正 + 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 完了**: P0ContinueReturn detector+ P1lowering 実装)完了。
- **Phase 90 完了**: ParseStringComposite + `Null` literal + ContinueReturn同一値の複数 return-ifを dev-only fixture で固定。
@ -52,21 +53,23 @@
## 次の指示書(優先順位)
### P0: Loop Canonicalizer の設計(設計待ち - 外部検討中
### P0: Loop Canonicalizer の Phase 2dev-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 候補)

View File

@ -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 BuilderContext 分割の入口)
- `src/mir/builder/README.md`
7. Scope/BindingIdshadowing・束縛同一性の段階移行

View File

@ -27,6 +27,12 @@
- Phase 136: MirBuilder の Context 分割を完了し、状態の SSOT を Context に一本化。
- 詳細: `docs/development/current/main/phases/phase-136/README.md`
## 20251216Phase 1371短報
- Loop Canonicalizer の Phase 1型/語彙の SSOTを導入routing/lowering には未介入)。
- 設計 SSOT: `docs/development/current/main/design/loop-canonicalizer.md`
- 実装: `src/mir/loop_canonicalizer/mod.rs`
## 20251214現状サマリ
補足docs が増えて迷子になったときの「置き場所ルールSSOT」:

View File

@ -105,6 +105,7 @@ flowchart LR
- TraceJoinIR ルートの統一トレース): [`src/mir/builder/control_flow/joinir/trace.rs`](../../../../../src/mir/builder/control_flow/joinir/trace.rs)
- Error tagsSSOT: [`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)
---

View File

@ -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` に追記してから実装

View File

@ -9,6 +9,7 @@
- **Phase 134**: Plugin loader best-effort loading
- **Phase 135**: ConditionLoweringBox allocator SSOTValueId 衝突の根治)
- **Phase 136**: MirBuilder Context SSOT 化(+ ValueId allocator 掃討)
- **Phase 137**: Loop Canonicalizer前処理 SSOT導入
## Phase フォルダ構成(推奨)

View 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`