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

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