Commit Graph

166 Commits

Author SHA1 Message Date
c8c99174af docs(phase29aa): queue P6 intersection join 2025-12-28 04:44:18 +09:00
02c01758b3 phase29aa(p5): multi-pred return join when states match 2025-12-28 04:43:19 +09:00
bf7b203586 phase29aa(p4): propagate rc state along jump chain to return 2025-12-28 01:56:36 +09:00
d70d9e3b89 docs(phase29aa): mark P3 complete and queue P4 2025-12-28 01:43:03 +09:00
94ad562aa5 Phase 29aa P3: Jump→Return single-pred rc propagation 2025-12-28 01:16:52 +09:00
7be0b0c28e phase29aa: RcPlan + guard no cleanup on jump/branch 2025-12-27 16:09:26 +09:00
b6e80943a3 phase29aa(p1): rc insertion plan/apply refactor 2025-12-27 16:02:32 +09:00
d32b72653c docs(phase29aa): mark P1 pending until code lands 2025-12-27 15:49:42 +09:00
91adbd0547 docs(now): mark phase29z P2 closeout 2025-12-27 15:41:46 +09:00
b895f67e07 docs(phase29aa): add P0 CFG-aware design and link from 29z 2025-12-27 15:38:18 +09:00
a916066631 phase29z(p2): return cleanup and null propagation doc alignment 2025-12-27 15:26:42 +09:00
084277ee18 docs(phase29z): P2 closeout markers and next steps 2025-12-27 15:21:40 +09:00
5a3d45ce53 phase29z(p1): handle explicit drop in rc insertion 2025-12-27 15:16:46 +09:00
977f105e4e phase29z(p0): minimal RC insertion overwrite release 2025-12-27 15:03:05 +09:00
2223c1309b docs(phase29z): Add RC insertion minimal instructions 2025-12-27 14:18:33 +09:00
292fb83dcb docs(phase29y): Finalize P0 SSOT 2025-12-27 14:17:18 +09:00
9c6b725e3e docs(phase29y): Add P0 docs-finalize instructions 2025-12-27 14:04:56 +09:00
60e3510b26 docs(phase287): Complete P9 closeout 2025-12-27 14:02:53 +09:00
25bd15a64c docs(phase287): Add P9 closeout instructions 2025-12-27 13:57:33 +09:00
74c6df1acb docs(phase287): Mark P7 complete, add P8 instructions 2025-12-27 13:39:04 +09:00
df4d0b1776 docs(phase287): Mark P6 complete, add P7 instructions 2025-12-27 13:26:33 +09:00
8d4472ddd3 docs(phase287): Mark P5 complete, add P6 instructions 2025-12-27 13:20:16 +09:00
ad5b6085c1 docs(phase287): Mark P4 complete, add P5 instructions 2025-12-27 12:50:17 +09:00
2f7061e2e5 docs(phase287): Mark P3 complete, add P4 instructions 2025-12-27 12:17:47 +09:00
fe895e8838 refactor(joinir): Phase 287 P2 - Modularize contract_checks (facade pattern)
- contract_checks.rs (846行) を facade 化
- 6モジュールへ分割(1 module = 1 contract):
  - terminator_targets.rs (208行) - Branch/Jump検証
  - exit_bindings.rs (35行) - exit_bindings ↔ exit_phis
  - carrier_inputs.rs (145行) - carrier_inputs完全性
  - boundary_creation.rs (160行) - B1/C2不変条件
  - entry_params.rs (317行) - Entry param一貫性
  - mod.rs (30行) - Facade
- Total: 846 → 895行(+49行モジュール境界オーバーヘッド)
- 意味論不変: エラータグ/ヒント文すべて保存
- Fail-Fast遵守: silent fallback追加なし
- 検証: Build 0 errors / Pattern6 RC=9 / quick 154/154 PASS

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 11:05:40 +09:00
433e1d45c0 refactor(joinir): Phase 287 P0.1 - Move verification to debug_assertions
- Move verify_no_phi_dst_overwrite() to debug_assertions.rs
- Move verify_phi_inputs_defined() to debug_assertions.rs
- Move verify_joinir_contracts() to debug_assertions.rs
- Remove duplicate get_instruction_dst() from mod.rs
- mod.rs: 1,555 → ~1,380 lines (-176 lines)
- Semantic invariance: 154/154 smoke tests PASS, Pattern6 RC:9

Phase 287 P0: Big Files Refactoring (意味論不変)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 10:10:59 +09:00
a04b48416e fix(joinir): Phase 287 P2 - Pattern6 nested loop latch overwrite fix
Fix infinite loop in Pattern6 (nested loop minimal) caused by main→loop_step
overwriting k_inner_exit→loop_step latch values.

Root cause: JoinIR main entry block was incorrectly treated as BackEdge,
causing it to overwrite the correct latch incoming values set by the true
back edge (k_inner_exit → loop_step).

Solution:
- Restrict latch recording to TailCallKind::BackEdge only
- Treat only MAIN's entry block as entry-like (not loop_step's entry block)
- Add debug_assert! to detect double latch set in future

Refactoring:
- Extract latch recording to latch_incoming_recorder module (SSOT)
- Add boundary.loop_header_func_name for explicit header identification
- Strengthen tail_call_classifier with is_source_entry_like parameter

Tests: apps/tests/phase1883_nested_minimal.hako → RC:9 (was infinite loop)
Smoke: 154/154 PASS, no regressions

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 09:39:29 +09:00
bbfc3c1d94 refactor(joinir): Phase 287 P2 - Strengthen BackEdge/latch conditions (WIP)
**Problem**: Phase 188.3 Pattern6 (nested loop) encounters infinite loop
- inner_step → inner_step (self-recursion) incorrectly classified as BackEdge
- → redirects to outer header (loop_step) instead of inner_step entry
- is_recursive_call causes inner recursion to overwrite outer latch values
- → PHI receives wrong values → i doesn't increment → infinite loop

**Fix 1: BackEdge classification strictness** (tail_call_classifier.rs)
- Add `is_target_loop_entry` parameter to classify_tail_call()
- BackEdge ONLY when target==loop_step (entry_func), not inner_step
- Prevents inner_step → inner_step from redirecting to outer header

**Fix 2: latch_incoming guard** (instruction_rewriter.rs)
- Change condition from `is_recursive_call || is_target_loop_entry`
  to `is_target_loop_entry` only
- Prevents inner_step self-recursion from overwriting outer loop's latch
- set_latch_incoming() now called with correct values (verified by debug)

**Status**: 🚧 WIP - Infinite loop still occurs
- set_latch_incoming('i', BasicBlockId(8), ValueId(21))  Called correctly
- But final PHI: `phi [%4, bb8]` instead of `phi [%21, bb8]` 
- Root cause likely in PHI generation (merge/mod.rs), not latch_incoming
- Next: Investigate why latch_incoming values aren't used in PHI

**Files**:
- src/mir/builder/control_flow/joinir/merge/tail_call_classifier.rs
- src/mir/builder/control_flow/joinir/merge/instruction_rewriter.rs

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 08:32:14 +09:00
c6ffc06660 feat(joinir): Phase 188.3-P3.1,3.2 - AST extraction & validation helpers
Phase 3-1 完了: extract_inner_loop_ast() 実装
- 外側 loop body から内側 loop を抽出
- 正確に 1 つの inner loop を検証
- 0 個 or 2+ 個の場合は明示エラー (Fail-Fast)

Phase 3-2 完了: validate_strict_mode() プレースホルダー
- 現在は大半の検証を is_pattern6_lowerable() で実施
- 将来の strict mode チェック用の足場

ドキュメント追加:
- P1-INSTRUCTIONS.md: Phase 3-3 実装指示書 (4関数モデル詳細)
- README.md: max_loop_depth 定義の明確化
- 10-Now.md: Phase 188.3 方針の整合性維持

次タスク: Phase 3-3 (Continuation 生成) - P1-INSTRUCTIONS.md 参照

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 06:22:59 +09:00
a2c5fd90fe feat(joinir): Phase 188.3 - Pattern6 (NestedLoopMinimal) 選択ロジック実装
## Phase 188.3 進捗: Phase 2 完了 (6/13 tasks)

### 実装完了 

**Phase 1: Fixture作成**
- apps/tests/phase1883_nested_minimal.hako 追加
  - Add/Compare のみ(乗算なし)
  - 期待 exit code: 9 (3×3 nested loops)
- 既存 lowering で fallback 動作確認

**Phase 2: 選択ロジック (SSOT)**
- LoopPatternContext に step_tree_max_loop_depth フィールド追加
- choose_pattern_kind() に Pattern6 選択ロジック実装:
  1. Cheap check (has_inner_loop)
  2. StepTree 構築 (max_loop_depth 取得)
  3. AST validation (is_pattern6_lowerable)
- pattern6_nested_minimal.rs モジュール作成 (stub)
- LOOP_PATTERNS に Pattern6 entry 追加
- **検証**: Pattern6 が正しく選択される 

### 設計原則 (確認済み)

1. **Fail-Fast**: Pattern6 選択後は Ok(None) で逃げない
2. **outer 変数 write-back 検出 → validation false** (Phase 188.4+)
3. **最小実装**: inner local だけ、Pattern1 モデル二重化
4. **cfg! 依存なし**: production で動作

### 検証結果

```
[choose_pattern_kind] has_inner_loop=true
[choose_pattern_kind] max_loop_depth=2
[choose_pattern_kind] is_pattern6_lowerable=true
 Pattern6 SELECTED!
```

Stub からの期待エラー:
```
[ERROR]  [Pattern6] Nested loop lowering not yet implemented
```

### 次: Phase 3 (Lowering 実装 - 推定4時間)

残りタスク:
- Phase 3-1: AST 抽出ヘルパー
- Phase 3-2: Validation ヘルパー
- Phase 3-3: Continuation 生成 (outer_step, inner_step, k_inner_exit)
- Phase 3-4: fixture が exit=9 を返すことを検証

### 変更ファイル

**新規**:
- apps/tests/phase1883_nested_minimal.hako
- src/mir/builder/control_flow/joinir/patterns/pattern6_nested_minimal.rs
- docs/development/current/main/phases/phase-188.{1,2,3}/README.md

**変更**:
- src/mir/builder/control_flow/joinir/routing.rs (Pattern6 選択)
- src/mir/builder/control_flow/joinir/patterns/router.rs (Context 拡張)
- src/mir/builder/control_flow/joinir/patterns/mod.rs (module 宣言)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 05:45:12 +09:00
26a739189d docs(phase-29y): note pilot plumbing completion in Now/Backlog 2025-12-27 02:07:54 +09:00
348b19f42d docs(phase-29y): self-contained consult packet + entry 2025-12-27 01:03:24 +09:00
bd0783fa85 docs(phase-285): Complete P4 Post-Completion documentation
Phase 285 P4 Post-Completion activities (2025-12-27):

1. Phase 284 P2 Integration Fix (commit 225600b5f)
   - Fixed phase284_p2_return_in_loop_llvm (unreachable instruction)
   - Integration LLVM tests: 3/3 PASS (no FAIL remaining)

2. ret.py Box-First Refactoring (commits 32aa0ddf6, 5a88c4eb2)
   - Phase 1-2: UnreachableReturnHandlerBox + ReturnTypeAdjusterBox
   - Phase 3: StringBoxerBox + ReturnPhiSynthesizerBox
   - Reduced lower_return(): 166→117 lines (-29%)

3. Code Quality Improvements (4 commits)
   - LLVM exit code SSOT (d7c6df367)
   - nyash_kernel FFI split (798c193cb)
   - LLVM detection consolidation (1869396fd)
   - auto_detect.conf clarity (095213c58)

Final status:
- Integration LLVM tests: 3/3 PASS
- Quick profile: 154/154 PASS
- Current Focus: Phase 29y (post self-host, docs-first)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 00:31:29 +09:00
606e236d6d fix(phase-285): restore weak_basic_llvm + complete LLVM detection/quick SSOT 2025-12-26 16:32:37 +09:00
72552cddfb docs(phase-285): add P3 LLVM one-pass instructions 2025-12-26 14:21:12 +09:00
fbd9c83b62 docs: reflect Phase 285 P2.2 completion (KeepAlive/ReleaseStrong) 2025-12-26 14:17:19 +09:00
58ceb3de2f feat(smoke): Phase 285 P2 - weak conformance smokes (success pattern)
Phase 285 P2: weak の意味論(weak <expr> + weak_to_strong() 成功/失敗)を integration smoke で固定

実装内容:
- Fixture A(成功パターン): exit 0 → exit 2 に変更(fail=1, success=2 で明確化)
- Fixture B(失敗パターン): 明示 drop (x = null) 方式で作成
- VM smoke success: PASS
- LLVM smoke success: SKIP(backend unavailable)
- VM/LLVM smoke fail: SKIP(hidden root 問題で理由付き)

既知の問題:
- x = null で明示 drop しても weak_to_strong が成功(hidden root が strong ref を保持)
- Phase 285 P2.1 (investigation) で root 保持箇所を棚卸し予定

スコープ:
- Block scope drop conformance は別タスク(未整合の可能性あり)
- P2 では明示 drop 方式で weak の最小意味論(non-owning)のみを検証

検証:
- quick smoke 154/154 PASS 維持
- integration smoke 4本(success 2本 PASS/SKIP、fail 2本 SKIP)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 11:33:12 +09:00
5ec0056059 docs(lifecycle): Phase 285 P0 - Box lifecycle/weakref/GC SSOT 固定
## 言語 SSOT との境界明文化
- lifecycle/weak/fini: lifecycle.md
- null/void/truthiness: types.md
- Phase 285 は実装状況・差分追跡のみ(言語SSOT書き換えなし)

## 用語・禁止事項固定
- Roots/Strong/Weak/Finalizer/GC 定義
- 禁止: finalizer 再入・例外・allocation・silent fallback

## VM/LLVM 差分分類
- (A) 仕様通り: weak/weak_to_strong/leak report
- (B) 未実装: finalizer/GC cycle collection

## P1/P2 導線
- P1: 棚卸し対象ファイル一覧(value.rs, finalization.rs等)
- P2: smoke 候補(weak_basic, weak_to_strong_fail, leak_report)

quick smoke 154/154 PASS

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 10:51:17 +09:00
03f9bbe1aa feat(smoke): Phase 284 P2 - return-in-loop VM/LLVM parity smoke
- VM smoke: phase284_p2_return_in_loop_vm.sh (PASS)
- LLVM smoke: phase284_p2_return_in_loop_llvm.sh (SKIP if no LLVM feature)
- Reuse existing fixture: phase286_pattern5_return_min.hako (exit 7)
- P2-INSTRUCTIONS.md: 手順書作成
- quick smoke 154/154 PASS

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 10:45:54 +09:00
22945c190c feat(joinir): Phase 286 P3.2 - Pattern5 Plan line (loop(true) + early exit)
- Pattern5InfiniteEarlyExitPlan (Return/Break variants)
- extract_pattern5_plan() for loop(true) literal only
- normalize_pattern5_return(): 5 blocks CFG (header→body→found/step)
- normalize_pattern5_break(): 6 blocks CFG with carrier PHI
- NormalizationPlanBox exclusion for Pattern5-style loops
- Fixtures: phase286_pattern5_{return,break}_min.hako
- quick smoke 154/154 PASS

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 09:56:34 +09:00
65304ec0c4 docs(joinir): Phase 286 Pattern2調査・設計相談パケット追加
- phase286_pattern2_frag_poc.hako: Pattern2 PoC fixture
- phase286_pattern2_frag_poc.sh: integration smoke
- phase-286-plan-normalization-consult.md: Plan正規化の設計相談
- 10-Now.md, 30-Backlog.md: 進捗更新
- pattern2-deferred.md: 更新

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 04:58:38 +09:00
6656098c95 docs(phase-286): P2.2 完了 + P2.3 準備中の進捗記載
更新内容:
- Phase 286 README に P2.2  COMPLETE セクション追加
  - extractor helper化(extract_loop_increment_plan 統一)の内容
  - router helper化(lower_via_plan() 追加)の内容
  - 削減行数(~65行)と検証結果(quick 154 PASS, PoC 両方 PASS)

- 10-Now.md の Current Focus を Phase 286 P2.3 に更新
  - P2/P2.1/P2.2 の完了を時系列記載
  - Pattern9 (AccumConstLoop) を次の PoC 対象に決定

- CURRENT_TASK.md の Handoff(現状)を更新
  - P2.2 COMPLETE の記載(hygiene 内容 + 成果)
  - P2.3 準備中(Pattern9 PoC 準備)の1段落を追加

- pattern2-deferred.md 新規作成
  - Pattern2 の複雑性(break値再接続)を説明
  - 再開条件(after_bb PHI + compose::loop_ + Break wiring)を明文化
  - Phase 286 P2.2 として後続タスク化

関連 issues: Phase 286 JoinIR Line Absorption

🤖 Generated with Claude Code

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-26 02:03:34 +09:00
55d30c9845 docs(repl): record Phase 288.1 contract and results
更新内容:
- docs/reference/language/repl.md
  - Phase 288.1 完了ステータスに更新
  - Implementation Architecture セクション追加(AST rewrite 方式説明)
  - AST Rewriter の動作フロー追加(Variable/Assignment 変換ロジック)
  - ExternCall Bridge の仕組み追加(__repl.get/set → VMValue)
  - Expression Detection ロジック追加(wrapper AST 判定)
  - 動作例を完全に更新(全機能が動作済み)

- docs/development/current/main/phases/phase-288/README.md
  - Phase 288.1 完了セクション追加
  - 変更ファイル一覧(8ファイル, +592行)記録
  - 確認コマンド 4種 記録(変数永続化/式表示/_変数/リセット)
  - 回帰テスト結果記録(154/154 PASS)

- docs/development/current/main/10-Now.md
  - "Phase 288.1 完了" に更新
  - 次の候補(REPL UX 改善 / JoinIR 設計作業)を追記

- CURRENT_TASK.md
  - 1段落サマリー更新(288.1 完了、次の方向性)

Phase 288.1 成果(SSOT記録):
 変数永続化(session → eval bridge)
 式自動表示(pure expression auto-output)
 _ 変数(last displayed value)
 Fail-Fast 未定義エラー + ヒント
 セッションリセット(.reset)
 154/154 smoke tests PASS(file mode 不変)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-25 23:05:20 +09:00
2b86b658d8 docs(repl): Phase 288 documentation cleanup
Updated documentation to reflect actual implementation status:
- docs/reference/language/repl.md: Corrected examples (variable persistence TODO)
- docs/development/current/main/10-Now.md: Phase 288 completion noted
- docs/development/current/main/30-Backlog.md: Updated with Phase 288.1 tasks
- docs/development/current/main/phases/phase-288/: Added phase documentation

Accurate REPL behavior examples:
- x = 1 works (implicit local)
- print(x) errors (persistence in Phase 288.1)
- Expression auto-display deferred

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-25 14:01:32 +09:00
4cc324c06e smokes(v2): Slim quick profile (Phase 287 P1)
Phase 287 P1 completed: Quick profile optimization

Changes:
- Moved 204 heavy tests from quick to integration profile
- Reduced execution time: 449.1s → 55.0s (88% reduction)
- Reduced test count: 651 → 447 tests (31% reduction)
- Maintained relative path structure for --filter compatibility

Moved test directories (14 total):
- phase2100, phase2211, phase2120, phase2220, phase251
- phase2160, phase2047-2051 (7 dirs), analyze

Profile responsibilities:
- quick: Fast feedback (55s, 447 tests)
- integration: Comprehensive validation (selfhost, S3, LLVM)

Documentation updates:
- tools/smokes/v2/README.md: Profile definitions
- docs/development/current/main/phases/phase-287/README.md: P1 results

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-25 07:48:18 +09:00
f740e6542f feat(phase285): Complete weak reference implementation (VM + LLVM harness)
Phase 285LLVM-1.1 to 1.4 + weak reference infrastructure:

**LLVM Harness** (Phase 285LLVM-1.x):
- 285LLVM-1.1: User Box registration & debug output
- 285LLVM-1.2: WeakRef basic operations (identity deferred)
- 285LLVM-1.3: InstanceBox field access (getField/setField)
- 285LLVM-1.4: print Handle resolution (type tag propagation)

**VM Runtime** (nyash_kernel):
- FFI functions: nyrt_weak_new, nyrt_weak_to_strong, nyrt_weak_drop
  (crates/nyash_kernel/src/lib.rs: +209 lines)
- WeakRef plugin invoke support
  (crates/nyash_kernel/src/plugin/invoke.rs: +250 lines)
- weak_handles.rs: WeakRef handle registry (NEW)

**LLVM Python Backend**:
- WeakRef instruction lowering (weak.py: NEW)
- Entry point integration (entry.py: +93 lines)
- Instruction lowering (instruction_lower.py: +13 lines)
- LLVM harness runner script (tools/run_llvm_harness.sh: NEW)

**MIR & Runtime**:
- WeakRef emission & validation
- MIR JSON export for weak instructions
- Environment variable support (NYASH_WEAK_*, HAKO_WEAK_*)

**Documentation**:
- CLAUDE.md: Phase 285 completion notes
- LANGUAGE_REFERENCE_2025.md: Weak reference syntax
- 10-Now.md & 30-Backlog.md: Phase 285 status updates

Total: +864 lines, 24 files changed

SSOT: docs/reference/language/lifecycle.md
Related: Phase 285W-Syntax-0, Phase 285W-Syntax-0.1
2025-12-25 00:11:34 +09:00
661bbe1ab7 feat(phase284): P1 Complete - Return in Loop with Block Remap Fix
## Summary

Completed Phase 284 P1: Enable return statements in Pattern4/5 loops via
JoinInst::Ret infrastructure (100% pre-existing, no new infrastructure needed).

**Critical Bug Fix**: Block ID remap priority
- Fixed: local_block_map must take precedence over skipped_entry_redirects
- Root cause: Function-local block IDs can collide with global remap entries
  (example: loop_step:bb4 vs k_exit:bb4 after merge allocation)
- Impact: Conditional Jump else branches were incorrectly redirected to exit
- Solution: Check local_block_map FIRST, then skipped_entry_redirects

## Implementation

### New Files
- `src/mir/join_ir/lowering/return_collector.rs` - Return detection SSOT (top-level only, P1 scope)
- `apps/tests/phase284_p1_return_in_loop_min.hako` - Test fixture (exit code 7)
- Smoke test scripts (VM/LLVM)

### Modified Files
- `loop_with_continue_minimal.rs`: Return condition check + Jump generation
- `pattern4_with_continue.rs`: K_RETURN registration in continuation_funcs
- `canonical_names.rs`: K_RETURN constant
- `instruction_rewriter.rs`: Fixed Branch remap priority (P1 fix)
- `terminator.rs`: Fixed Jump/Branch remap priority (P1 fix)
- `conversion_pipeline.rs`: Return normalization support

## Testing

 VM: exit=7 PASS
 LLVM: exit=7 PASS
 Baseline: 46 PASS, 1 FAIL (pre-existing emit issue)
 Zero regression

## Design Notes

- JoinInst::Ret infrastructure was 100% complete before P1
- Bridge automatically converts JoinInst::Ret → MIR Return terminator
- Pattern4/5 now properly merge k_return as non-skippable continuation
- Correct semantics: true condition → return, false → continue loop

## Next Phase (P2+)

- Refactor: Block remap SSOT (block_remapper.rs)
- Refactor: Return jump emitter extraction
- Scope: Nested if/loop returns, multiple returns
- Design: Standardize early exit pattern (return/break/continue as Jump with cond)

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

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-23 14:21:27 +09:00
41d92bedb9 refactor(extractors): Phase 282 P9a - CommonExtractionHelpers SSOT統合(スコープ限定版)
# Phase 282 P9a 完了 (Scope-Limited Integration)

## 実装内容
- **common_helpers.rs 作成**: 4グループの共通ヘルパー統合 (316行)
  - Group 1: Control Flow Counting (count_control_flow - 汎用カウンター)
  - Group 2: Control Flow Detection (has_break/continue/return_statement)
  - Group 3: Condition Validation (extract_loop_variable, is_true_literal)
  - Group 4: Pattern5専用ヘルパー (validate_continue_at_end, validate_break_in_simple_if)

- **Pattern統合完了**: Pattern5 → Pattern4 → Pattern2 → Pattern1
  - Pattern5: ~90行削減 (5 tests PASS)
  - Pattern4: ~66行削減 (5 tests PASS)
  - Pattern2: ~67行削減 (4 tests PASS)
  - Pattern1: ~28行削減 (3 tests PASS)
  - Pattern3: 別フェーズに延期(pattern固有ロジック除外)

## 成果
- **コード削減**: ~251行(Pattern3除く、total ~400行見込み)
- **テスト**: 40 unit tests PASS (23 common_helpers + 17 extractors)
- **スモークテスト**: 45 PASS, 1 pre-existing FAIL(退行ゼロ)
- **ビルド警告**: 130 → 120 (-10)

## USER CORRECTIONS適用済み
1.  スコープ限定(共通ロジックのみ、pattern固有除外)
2.  Placeholder禁止(SSOT違反排除)
3.  統合順序変更(Pattern3を最後/別フェーズへ)

## 追加ドキュメント
- Phase 284 計画追加(Return as ExitKind SSOT)
- 10-Now.md, 30-Backlog.md 更新

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 11:14:28 +09:00
bfbc9b26bf fix(joinir): Phase 283 P0 - Pattern3 Undefined ValueId Bug Fix
- Fix: extract_if_condition() moved after local_cond_env construction
  (loop_with_if_phi_if_sum.rs:175)
  - Root cause: condition extraction before i_param/sum_param creation
  - Result: i % 2 referenced caller's ConditionEnv with unmapped ValueId
- Fail-Fast: Add condition_bindings validation in merge (mod.rs)
- Fixture: Update loop_if_phi.hako for C2 compatibility (sum.toString())
- Verified: VM execution outputs sum=9 

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 08:14:27 +09:00
a744be929a feat(edgecfg): Phase 281 P3 - cleanup Normal wiring + docs 2025-12-23 04:11:02 +09:00