feat(joinir): Phase 248 - Normalized JoinIR infrastructure

Major refactoring of JoinIR normalization pipeline:

Key changes:
- Structured→Normalized→MIR(direct) pipeline established
- ShapeGuard enhanced with Pattern2 loop validation
- dev_env.rs: New development fixtures and env control
- fixtures.rs: jsonparser_parse_number_real fixture
- normalized_bridge/direct.rs: Direct MIR generation from Normalized
- pattern2_step_schedule.rs: Extracted step scheduling logic

Files changed:
- normalized.rs: Enhanced NormalizedJoinModule with DevEnv support
- shape_guard.rs: Pattern2-specific validation (+300 lines)
- normalized_bridge.rs: Unified bridge with direct path
- loop_with_break_minimal.rs: Integrated step scheduling
- Deleted: step_schedule.rs (moved to pattern2_step_schedule.rs)

New files:
- param_guess.rs: Loop parameter inference
- pattern2_step_schedule.rs: Step scheduling for Pattern2
- phase43-norm-canon-p2-mid.md: Design doc

Tests: 937/937 PASS (+6 from baseline 931)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-12 03:15:45 +09:00
parent 59caf5864c
commit ed8e2d3142
32 changed files with 1559 additions and 421 deletions

View File

@ -1,5 +1,8 @@
# Phase 181: JsonParser 残りループ設計調査
Status: Historical + Updated in Phase 42
Note: Phase 181 時点の設計調査に基づくドキュメントだよ。最新の P2 分類と JoinIR/Normalized 状態は、このファイル内の「Phase 42 時点の P2 インベントリ」と `joinir-architecture-overview.md` を SSOT として見てね。
## 概要
JsonParser`tools/hako_shared/json_parser.hako`の全11ループを詳細に分析し、
@ -201,6 +204,34 @@ loop(i < len) {
**実行可能性**: Phase 182+ で実装可能Pattern2 Break_atoi の後継
## Phase 42 時点の P2 インベントリJsonParser
Phase 42 では上の 11 ループについてP2 としてどこまで JoinIR / Normalized で扱えているかを棚卸ししてP2-Core / P2-Mid / P2-Heavy 3 クラスに整理したよ
### 1. 分類ポリシー
- **P2-Core**: 既に NormalizedMIR(direct) まで実装されPhase 41 canonical route既定経路として扱っているループ群
- **P2-Mid**: JoinIR(Structured) には載っているがNormalized はこれから本格対応する次候補のループ群
- **P2-Heavy**: MethodCall 多数複雑キャリアなどの理由でNormalized 対応は Phase 43 以降に送っている重めのループ群
### 2. JsonParser ループの現在ステータス202512 時点)
| # | ループ | Pattern | P2 クラス | JoinIR 状態 | Normalized 状態 | 備考 |
|----|--------|---------|-----------|-------------|-----------------|------|
| 1 | _skip_whitespace | P2 / P5 Trim | P2-Core | JoinIR OKPhase 173, 197, 245 | NormalizedMIR(direct) / canonicalPhase 37, 41 | mini / real の両方をフィクスチャ化して dev / canonical で比較済み |
| 2 | _trim (leading) | P2 / P5 Trim | P2-Heavy | JoinIR OKTrimLoopHelper 経由 | 未対応P5 専用経路のまま | Trim/P5 専用 lowerer で処理Normalized 対応は将来検討 |
| 3 | _trim (trailing) | P2 / P5 Trim | P2-Heavy | JoinIR OK | 未対応 | leading と同様に Trim/P5 ラインで運用 |
| 4 | _parse_number | P2 Break | P2-Mid | JoinIR OKPhase 245-EX | dev NormalizedMIR(direct)Phase 43-Cフィクスチャ `jsonparser_parse_number_real`num_str は現状仕様のまま据え置き | header/break/p 更新は JoinIR 経路に載せ済み数値正規化は Phase 43 以降で拡張予定 |
| 5 | _parse_string | P2/P4 | P2-Heavy | 部分的に JoinIR 対応Pattern3/4 拡張後に対象 | 未対応 | return/continue複数キャリアを含むため heavy クラス扱い |
| 6 | _atoi | P2 Break | P2-Mid | JoinIR OKPhase 246-EX | dev NormalizedMIR(direct)mini + 本体符号あり/なしPhase 43-A | P2-Core には `_atoi` mini fixture が入っている本体は Phase 43 以降で canonical 化予定 |
| 7 | _match_literal | P1 Simple | P1 | JoinIR OK | Normalized 対応は P1 ラインで別途管理 | P1 simple なので P2 クラス分類の対象外Phase 197 JoinIR E2E 検証済み |
| 8 | _parse_array | P4 Continue | P2-Heavy | Deferred複数 MethodCall | 未対応 | continue + MethodCall 多数のため heavy クラスConditionEnv/MethodCall 拡張後に扱う |
| 9 | _parse_object | P4 Continue | P2-Heavy | Deferred | 未対応 | _parse_array と同種の heavy ループ |
| 10 | _unescape_string | P4 Continue | P2-Heavy | Deferred | 未対応 | 複数キャリア + flatten を含むPattern3/4 拡張後の対象 |
| 11 | _atof_loop | P2 Break | P2-Mid | JoinIR 対応候補_atoi と同型 | 未対応 | `_atoi` 後継として P2-Mid 候補に分類Phase 43 以降で `_atoi` 本体と一緒に扱う想定 |
最新の canonical / dev Normalized 経路や Shape 判定ロジックの詳細は `joinir-architecture-overview.md`Phase 3541 セクションを参照してね
## Pattern × Box マトリクスJsonParser全体
```