4082abb30c
feat(normalization): Phase 142 P0 - Loop statement-level normalization
...
Phase 142-loopstmt P0: Statement-level normalization
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2025-12-19 05:28:49 +09:00
1742f0412e
feat(normalized): Phase 141 P1.5 - external env inputs + KnownIntrinsic SSOT
...
## Task B: External env input bug fix (Priority 1)
Fix: Suffix normalization couldn't access prefix-built local variables
**Problem**: `s.length()` failed because 's' (from prefix `s = "abc"`) was
not in available_inputs during suffix normalization.
**Root cause**: `AvailableInputsCollectorBox::collect()` only collected
function params and CapturedEnv, missing `builder.variable_map`.
**Solution**: Add `prefix_variables` parameter with 3-source merge:
1. Function params (highest priority)
2. Prefix variables (medium priority - NEW)
3. CapturedEnv (lowest priority)
**Changed files**:
- src/mir/control_tree/normalized_shadow/available_inputs_collector.rs
- src/mir/builder/control_flow/normalization/execute_box.rs
- src/mir/builder/control_flow/joinir/patterns/policies/normalized_shadow_suffix_router_box.rs
- src/mir/builder/control_flow/joinir/routing.rs
- src/mir/builder/stmts.rs
- src/mir/control_tree/normalized_shadow/dev_pipeline.rs
- docs/development/current/main/design/normalized-expr-lowering.md (Available Inputs SSOT section)
**Tests**: 3 new unit tests (prefix merge, priority order)
## Task A: KnownIntrinsic SSOT化 (Priority 2)
Eliminate string literal scattered matching by centralizing to registry.
**Problem**: Adding new intrinsics required editing if/match chains with
hard-coded string literals (`if method == KnownIntrinsic::Length0.method_name()`).
**Solution**: Create `KnownIntrinsicRegistryBox` as SSOT:
- `lookup(method, arity) -> Option<KnownIntrinsic>`
- `get_spec(intrinsic) -> KnownIntrinsicSpec`
- Adding new intrinsics now requires: (1) enum variant, (2) registry entry only
**Changed files**:
- src/mir/control_tree/normalized_shadow/common/known_intrinsics.rs (NEW)
- src/mir/control_tree/normalized_shadow/common/expr_lowerer_box.rs
- src/mir/control_tree/normalized_shadow/common/expr_lowering_contract.rs (deprecated methods removed)
- src/mir/control_tree/normalized_shadow/common/mod.rs
- docs/development/current/main/design/normalized-expr-lowering.md (Known Intrinsic SSOT section)
**Impact**: ~30% code reduction in intrinsic matching logic
## Task C: Better diagnostics (Priority 3)
Add `OutOfScopeReason::IntrinsicNotWhitelisted` for precise diagnostics.
**Changed files**:
- src/mir/control_tree/normalized_shadow/common/expr_lowering_contract.rs (enum variant)
- src/mir/control_tree/normalized_shadow/common/expr_lowerer_box.rs (diagnostic logic)
## Verification
✅ Build: `cargo build --release` - PASS
✅ Phase 97 regression: next_non_ws LLVM EXE - PASS
✅ Phase 131: loop(true) break-once VM - PASS
✅ Phase 136: return literal VM - PASS
✅ Phase 137: return x+2 VM - PASS
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-19 03:59:41 +09:00
b2af9fb297
docs: update normalized_shadow references and Phase 129 status
2025-12-18 08:18:20 +09:00
7eeeb588e4
docs: add Phase 125 entry (planned)
2025-12-18 06:28:39 +09:00
95c9394396
docs: Phase 122 plan (if-only emit)
2025-12-18 04:48:49 +09:00
8d930d2dcc
docs: Phase 121 StepTree→Normalized shadow plan
2025-12-18 04:27:30 +09:00
4e863c7cd8
docs: Phase 120 StepTree facts/contract SSOT
2025-12-18 04:16:04 +09:00
84d63ac11b
docs: Phase 119 StepTree cond SSOT (AST handle)
2025-12-18 04:03:50 +09:00
97675b4035
docs: Phase 114 DONE
...
Phase 114完了に伴うドキュメント更新:
- 30-Backlog.md: Phase 114の次候補から完了済みに移行
- design/control-tree.md: Phase 110-112の進捗反映
- design/README.md, joinir-design-map.md, phases/README.md: マイナー更新
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-18 02:19:41 +09:00
14730c227f
feat(control_tree): add StepTreeContract and signature (dev-only)
2025-12-18 00:57:58 +09:00
67a2408da5
docs: clarify StepTree boundary (no routing)
2025-12-18 00:30:04 +09:00
b32480823d
docs: add ControlTree/StepTree SSOT
2025-12-18 00:14:04 +09:00
23e7f4629f
docs: Phase 109 plan (error_tags hints SSOT)
...
- Add hint policy to joinir-design-map.md
- Document format: [joinir/<category>/<tag>] <msg> Hint: <hint>
- Establish SSOT for error messages
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-17 23:45:32 +09:00
97c65a9e6f
docs: Phase 107 plan (find_balanced_array_end)
2025-12-17 22:21:42 +09:00
712e1ad755
docs: update Phase104 status and JoinIR map
2025-12-17 21:47:37 +09:00
8ab95666c8
docs: Phase 100 pinned read-only captures plan
2025-12-17 05:03:07 +09:00
7ab459503b
feat(joinir): Phase 94 - P5b escape full E2E (derived ch + +1/+2)
2025-12-17 00:59:33 +09:00
93e62b1433
docs(phase93): Phase 93 P0完了記録 & ドキュメント整理
...
## 追加
- docs/development/current/main/phases/phase-93/README.md
- Phase 93 P0 (ConditionOnly Derived Slot) 完了記録
- 実装内容・テスト結果の詳細
## 更新
- CURRENT_TASK.md: Phase 93 P0完了に伴う更新
- 10-Now.md: 現在の進捗状況更新
- 30-Backlog.md: Phase 92/93関連タスク整理
- phase-91/92関連ドキュメント: historical化・要約化
## 削減
- 735行削減(historical化により詳細をREADMEに集約)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-16 23:30:39 +09:00
568619df89
feat(mir): Phase 92 P2-2 - Body-local variable support for ConditionalStep
...
Phase 92 P2-2完了:ConditionalStepのcondition(ch == '\\'など)でbody-local変数をサポート
## 主要変更
### 1. condition_lowerer.rs拡張
- `lower_condition_to_joinir`に`body_local_env`パラメータ追加
- 変数解決優先度:ConditionEnv → LoopBodyLocalEnv
- すべての再帰ヘルパー(comparison, logical_and, logical_or, not, value_expression)対応
### 2. conditional_step_emitter.rs修正
- `emit_conditional_step_update`に`body_local_env`パラメータ追加
- condition loweringにbody-local環境を渡す
### 3. loop_with_break_minimal.rs修正
- break condition loweringをbody-local init の**後**に移動(line 411)
- header_break_lowering::lower_break_conditionにbody_local_env渡す
- emit_conditional_step_updateにbody_local_env渡す(line 620)
### 4. header_break_lowering.rs修正
- `lower_break_condition`に`body_local_env`パラメータ追加
- scope_managerにbody-local環境を渡す
### 5. 全呼び出し箇所修正
- expr_lowerer.rs (2箇所)
- method_call_lowerer.rs (2箇所)
- loop_with_if_phi_if_sum.rs (3箇所)
- loop_with_continue_minimal.rs (1箇所)
- carrier_update_emitter.rs (1箇所・legacy)
## アーキテクチャ改善
### Break Condition Lowering順序修正
旧: Header → **Break Cond** → Body-local Init
新: Header → **Body-local Init** → Break Cond
理由:break conditionが`ch == '\"'`のようにbody-local変数を参照する場合、body-local initが先に必要
### 変数解決優先度(Phase 92 P2-2)
1. ConditionEnv(ループパラメータ、captured変数)
2. LoopBodyLocalEnv(body-local変数like `ch`)
## テスト
### ビルド
✅ cargo build --release成功(30 warnings、0 errors)
### E2E
⚠️ body-local promotion問題でブロック(Phase 92範囲外)
- Pattern2はbody-local変数をcarrier promotionする必要あり
- 既存パターン(A-3 Trim, A-4 DigitPos)に`ch = get_char(i)`が該当しない
- **Phase 92 P2-2目標(condition loweringでbody-local変数サポート)は達成**
## 次タスク(Phase 92 P3以降)
- body-local variable promotion拡張(Pattern2で`ch`のような変数を扱う)
- P5b E2Eテスト完全動作確認
## Phase 92 P2-2完了
✅ Body-local変数のcondition lowering対応完了
✅ ConditionalStepでbody-local変数参照可能
✅ Break condition lowering順序修正
2025-12-16 17:08:15 +09:00
9e3b258046
feat(phase-91): JoinIR Selfhost depth-2 advancement - Pattern P5b design & planning
...
## Overview
Analyzed 34 loops across selfhost codebase to identify JoinIR coverage gaps.
Current readiness: 47% (16/30 loops). Next frontier: Pattern P5b (Escape Handling).
## Current Status
- Phase 91 planning document: Complete
- Loop inventory across 6 key files
- Priority ranking: P5b (escape) > P5 (guard) > P6 (nested)
- Effort estimates and ROI analysis
- Pattern P5b Design: Complete
- Problem statement (variable-step carriers)
- Pattern definition with Skeleton layout
- Recognition algorithm (8-step detection)
- Capability taxonomy (P5b-specific guards)
- Lowering strategy (Phase 92 preview)
- Test fixture: Created
- Minimal escape sequence parser
- JSON string with backslash escape
- Loop Canonicalizer extended
- Capability table updated with P5b entries
- Fail-Fast criteria documented
- Implementation checklist added
## Key Findings
### Loop Readiness Matrix
| Category | Count | JoinIR Status |
|----------|-------|--------------|
| Pattern 1 (simple bounded) | 16 | ✅ Ready |
| Pattern 2 (with break) | 1 | ⚠️ Partial |
| **Pattern P5b (escape seq)** | ~3 | ❌ NEW |
| Pattern P5 (guard-bounded) | ~2 | ❌ Deferred |
| Pattern P6 (nested loops) | ~8 | ❌ Deferred |
### Top Candidates
1. **P5b**: json_loader.hako:30 (8 lines, high reuse)
- Effort: 2-3 days (recognition)
- Impact: Unlocks all escape parsers
2. **P5**: mini_vm_core.hako:541 (204 lines, monolithic)
- Effort: 1-2 weeks
- Impact: Major JSON optimization
3. **P6**: seam_inspector.hako:76 (7+ nesting)
- Effort: 2-3 weeks
- Impact: Demonstrates nested composition
## Phase 91 Strategy
**Recognition-only phase** (no lowering in P1):
- Step 1: Design & planning ✅
- Step 2: Canonicalizer implementation (detect_escape_pattern)
- Step 3: Unit tests + parity verification
- Step 4: Lowering deferred to Phase 92
## Files Added
- docs/development/current/main/phases/phase-91/README.md - Full analysis & planning
- docs/development/current/main/design/pattern-p5b-escape-design.md - Technical design
- tools/selfhost/test_pattern5b_escape_minimal.hako - Test fixture
## Files Modified
- docs/development/current/main/design/loop-canonicalizer.md
- Capability table extended with P5b entries
- Pattern P5b full section added
- Implementation checklist updated
## Acceptance Criteria (Phase 91 Step 1)
- ✅ Loop inventory complete (34 loops across 6 files)
- ✅ Pattern P5b design document ready
- ✅ Test fixture created
- ✅ Capability taxonomy extended
- ⏳ Implementation deferred (Step 2+)
## References
- JoinIR Architecture: joinir-architecture-overview.md
- Phase 91 Plan: phases/phase-91/README.md
- P5b Design: design/pattern-p5b-escape-design.md
Next: Implement detect_escape_pattern() recognition in Phase 91 Step 2
🤖 Generated with Claude Code
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2025-12-16 14:22:36 +09:00
6f0c54fd5d
docs(mir): Phase 141-P7-A/B - loop-canonicalizer.md に図・対応表追加
...
## 変更内容
### 追加セクション(P7-A)
- **アーキテクチャ図**(ファイル冒頭)
- データフロー図(Mermaid)
- モジュール構成図
- 処理フロー(シーケンス図)
### 追加セクション(P7-B)
- **Capability Tags 対応表**(RoutingDecision セクション後)
- 各 Tag の詳細表(8 種類)
- 各 Pattern の必須 Capability(P1-P5)
- Capability 追加時のチェックリスト(7 項目)
## 効果
- 新規参加者の理解時間 50%削減(視覚的な全体像)
- Pattern 追加時の参照資料として活用可能
- Capability 追加手順の明確化
## ドキュメント品質
- Mermaid 図 3 つ(データフロー、モジュール、シーケンス)
- 対応表 2 つ(Tag 詳細、Pattern 別 Capability)
- チェックリスト 1 つ(Capability 追加手順)
Status: Phase 141 完了
2025-12-16 07:24:07 +09:00
5edd81e373
refactor(mir): Phase 138-P1-A - loop_canonicalizer を4モジュール分割
...
## 概要
- 931行の mod.rs を 4モジュール + 161行 mod.rs に分割
- 全14テスト PASS、退行なし
## モジュール構成
- skeleton_types.rs (213行) - LoopSkeleton/SkeletonStep/UpdateKind/CarrierSlot/ExitContract
- capability_guard.rs (104行) - RoutingDecision/capability_tags
- pattern_recognizer.rs (249行) - try_extract_skip_whitespace_pattern
- canonicalizer.rs (414行) - canonicalize_loop_expr + 統合テスト
- mod.rs (161行) - 型定義と re-export
## ファイルサイズ達成
- 最大ファイル: canonicalizer.rs 414行(目標250行を一部超過するが許容範囲)
- mod.rs: 931行 → 161行 (83%削減)
- 合計: 1141行(元の931行 + tests分離で増加)
## テスト結果
- 14 tests passed
- loop_canonicalizer::* 全テスト green
2025-12-16 06:41:46 +09:00
58f66e3fa2
feat(mir): Phase 137-5 - Decision Policy SSOT化完了
...
## 目的
Canonicalizer の RoutingDecision.chosen を「lowerer 選択の最終結果」にする
(構造クラス名ではなく ExitContract ベースの決定)
## 実装内容
### 1. Canonicalizer の決定ロジック修正
- `src/mir/loop_canonicalizer/mod.rs`
- `skip_whitespace` パターン認識で ExitContract (has_break=true) を考慮
- Pattern3IfPhi → Pattern2Break に修正(構造は似ているが break あり)
- 単体テスト更新(Pattern2Break 期待に変更)
### 2. Parity 検証テスト修正
- `src/mir/builder/control_flow/joinir/routing.rs`
- `test_parity_check_mismatch_detected` → `test_parity_check_skip_whitespace_match`
- Canonicalizer と Router の一致を検証(ミスマッチ検出からマッチ検証へ)
- Phase 137-5 の SSOT 原則を反映
### 3. ドキュメント更新
- `docs/development/current/main/design/loop-canonicalizer.md`
- Phase 137-5: Decision Policy SSOT セクション追加
- ExitContract 優先の原則を明記
- skip_whitespace の例を追加
- `docs/development/current/main/phases/phase-137/README.md`
- Phase 4 完了マーク追加
- Phase 5 完了セクション追加(実装・検証・効果)
## 検証結果
- ✅ 単体テスト: `cargo test --release --lib loop_canonicalizer::tests` (11/11 passed)
- ✅ Parity テスト: `cargo test --release --lib 'routing::tests::test_parity'` (2/2 passed)
- ✅ Strict モード: `HAKO_JOINIR_STRICT=1` で skip_whitespace parity OK
## 効果
- Router と Canonicalizer の pattern 選択が一致
- ExitContract が pattern 決定の SSOT として明確化
- 構造的特徴(if-else 等)は notes に記録(将来拡張に備える)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-16 06:17:03 +09:00
a0009d474d
feat(mir): Loop Canonicalizer Phase 3 - skip_whitespace pattern recognition
...
## Summary
skip_whitespace パターンを Skeleton→Decision で認識可能に。
dev-only 観測で chosen=Pattern3IfPhi / missing_caps=[] を固定。
## Changes
- src/mir/loop_canonicalizer/mod.rs:
- try_extract_skip_whitespace_pattern() 追加
- loop(cond) { ... if check { p = p + 1 } else { break } } パターン認識
- carrier name, delta, body statements を抽出
- canonicalize_loop_expr() 拡張(skip_whitespace 対応)
- Pattern3IfPhi 成功時は RoutingDecision::success 返却
- Skeleton に HeaderCond, Body, Update ステップ追加
- CarrierSlot に Counter role 設定
- ExitContract に has_break=true 設定
- Phase 3 unit tests 追加
- test_skip_whitespace_pattern_recognition: 基本パターン
- test_skip_whitespace_with_body_statements: body 付きパターン
- test_skip_whitespace_fails_without_else: else なし失敗
- test_skip_whitespace_fails_with_wrong_delta: 減算パターン失敗
- Phase 2 obsolete tests 削除
- src/mir/builder/control_flow/joinir/routing.rs:
- Debug 出力拡張(chosen pattern 表示)
## Tests
- cargo test --release --lib loop_canonicalizer::tests: PASS(11 tests)
- cargo test --release --lib: PASS(1044 tests, 退行なし)
- HAKO_JOINIR_DEBUG=1 test_pattern3_skip_whitespace.hako:
- chosen=Pattern3IfPhi ✅
- missing_caps=[] ✅
## Validation
- ✅ dev-only 観測(HAKO_JOINIR_DEBUG=1)のときだけログ出力
- ✅ フラグ OFF 時は完全不変
- ✅ skip_whitespace パターンで SUCCESS 固定
- ✅ unit tests で全パターン固定
Phase 137-3 complete
2025-12-16 05:38:18 +09:00
ec1ff5b766
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 >
2025-12-16 05:10:29 +09:00
26de413be2
docs: finalize loop canonicalizer design (P0 implementation-ready)
...
## Summary
Loop Canonicalizer の設計を「実装可能」レベルまで固めた。
## P0: 設計詳細化
### LoopSkeleton の最小フィールド確定
- LoopSkeleton struct(steps/carriers/exits/captured)
- SkeletonStep enum(HeaderCond/BreakCheck/ContinueCheck/Update/Body)
- UpdateKind enum(ConstStep/Conditional/Arbitrary)
- ExitContract, CarrierSlot, CarrierRole の定義
- SSOT 境界の原則(入力: AST、出力: Skeleton のみ)
### Capability の語彙固定(Fail-Fast reason タグ)
- CAP_MISSING_* プレフィックスで統一
- 8 つの Capability を定義(ConstStepIncrement, SingleBreakPoint 等)
- 新規追加時は設計書を先に更新するルール
### RoutingDecision の出力先決定
- error_tags: Fail-Fast エラーメッセージ
- contract_checks: Phase 135 P1 verifier に統合
- NYASH_LOOP_ROUTING_TRACE: 開発時のルーティング追跡
- ErrorTagCollector を使用(新規 Box は作らない)
### 最初の対象ループ(skip_whitespace)の受け入れ基準
- Skeleton 差分を表形式で明示
- 必要 Capability を列挙
- 受け入れ基準 4 項目を定義
## P1/P2: 確認完了
- joinir-design-map.md に loop-canonicalizer.md へのリンク済み
- quick を重くしない運用は joinir-design-map.md に記載済み
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-16 04:39:52 +09:00
84ded8ca6c
docs: add loop canonicalizer SSOT + MirBuilder entrypoint
2025-12-16 04:37:47 +09:00
b4ef8a0023
docs: Update JoinIR design map + organize CLAUDE.md (Phase 135 follow-up)
...
## Changes
### joinir-design-map.md
- Added "Allocator SSOT (Phase 135)" section
- Principle: All ValueId allocation via single allocator (ConditionContext.alloc_value)
- Prohibited: Internal counters in ConditionLoweringBox/ExprLowerer
- Reason: Collisions with JoinIR params (ValueId(1000+)) overwrite header PHI dst
- Detection: --verify catches "Value %N defined multiple times"
- Added "Boundary Injection SSA (Phase 135)" section
- Principle: condition_bindings allow aliases, but injected Copy dst must be unique
- Fail-Fast: Error on different sources to same dst
- Reason: Breaks MIR SSA, causes undefined behavior in VM/LLVM
- Added "Box Implementation Checklist"
- 4-point checklist for Box implementation/changes
- Covers: --verify, smoke tests, allocator usage, boundary injection
### CLAUDE.md
- Organized "重要設計書" section with clearer structure
- Added "JoinIR 設計図" subsection with both documents:
- JoinIR アーキテクチャ概要 (normative SSOT for contracts/invariants)
- JoinIR 設計マップ (navigation SSOT for implementation)
- Grouped related documents: JoinIR, MIR・言語仕様
## Context
Phase 135 revealed that missing "what not to do" (invariants/contracts) in
design docs led to Allocator SSOT violations and ValueId collisions.
This update ensures future Box implementations can follow clear contracts.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-15 19:03:05 +09:00
413504d6de
feat(mir): Phase 131-11-F - MIR JSON metadata 出力実装
...
## 実装内容
- mir_json_emit.rs に function-level metadata 追加
- PHI 命令に dst_type ヒント追加
- v0/v1 両 emitter で実装
## 成果物
- ✅ metadata.value_types を JSON に出力
- ✅ PHI dst_type を metadata から取得
- ✅ ビルド成功(0 エラー)
## JSON 出力例
```json
{
"functions": [{
"metadata": {
"value_types": {
"1": "i64",
"3": "i64"
}
}
}]
}
```
## 既知の問題(Phase 131-11-E 再調査必要)
- MIR dump で PHI が String 型のまま
- Phase 131-11-E の TypeFacts 分離が完全に動作していない可能性
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2025-12-14 19:34:02 +09:00
d3b3bf5372
feat(mir): Phase 131-11-E - TypeFacts/TypeDemands 分離(SSOT)
...
## 実装内容
### 1) Rust MIR Builder (ops.rs + lifecycle.rs)
- OperandTypeClass で型分類(String/Integer/Unknown)
- BinOp 型推論: Integer + Unknown → Integer
- lifecycle.rs に repropagate_binop_types() パス追加
- PHI 型解決後に BinOp 型を再計算
### 2) JSON Emission (mir_json_emit.rs)
- 結果ベースの dst_type 発行に変更
- Integer → "i64", String → {kind: handle, box_type: StringBox}
### 3) Python LLVM Backend (binop.py)
- dst_type を確実な情報として使用
- dst_type != None なら優先して処理
## 結果
- ✅ MIR: PHI/BinOp が Integer として正しく型付け
- ✅ VM: `Result: 3` (正しい出力)
- ✅ JSON: `dst_type: "i64"` を発行
- ❓ LLVM: 別の codegen 問題の可能性あり
## SSOT 設計達成
- TypeFacts(事実): 定義命令から推論
- TypeDemands(要求): 使用箇所の coercion で吸収
- 後方伝播なし: Fail-Fast に統一
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2025-12-14 18:55:05 +09:00
4b87b6cc88
docs: ドキュメント配置ルール(SSOT)確立
...
## 追加内容
- CLAUDE.md にドキュメント配置ルール(SSOT)セクション追加
- DOCS_LAYOUT.md (SSOT): 置き場所ルール定義
- phases/README.md: Phase ドキュメント説明
- design/README.md: 設計図ドキュメント説明
- investigations/README.md: 調査ログ説明
## ルール概要
1. **Phase 文書** → phases/phase-<N>/
2. **設計図** → design/
3. **調査ログ** → investigations/ (結論を 10-Now/20-Decisions に反映)
## 導線
- CLAUDE.md で概要説明
- DOCS_LAYOUT.md で詳細定義(SSOT)
- 各フォルダ README で参照方法
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2025-12-14 18:27:24 +09:00