Files
hakorune/CURRENT_TASK.md
nyash-codex 7b56a7c01d docs(joinir): Phase 70-A - Relay Runtime Guard (dev-only)
Phase 66で analysis/plan層はmultihop受理可能になったが、runtime lowering
(実行導線)はまだ未対応。このPhaseでは「未対応は同じタグで必ず落ちる」を
docs + テストで固定する。

Key changes:
- phase70-relay-runtime-guard.md: Runtime guard設計doc新規追加
  - 現状(plan OK / runtime NG)の明確化
  - Fail-Fastタグ [ownership/relay:runtime_unsupported] の標準化
  - Phase 70-B以降の解除条件

- pattern3_with_if_phi.rs: エラーメッセージのタグ統一
  - [ownership/relay:runtime_unsupported] 形式に変更
  - var/owner_scope/relay_path の診断情報追加

- normalized_joinir_min.rs: 固定テスト追加
  - test_phase70a_multihop_relay_runtime_unsupported_tag
  - Plan層のmultihop受理確認 + runtime拒否の文書化

Tests: normalized_dev 50/50 PASS (+1), lib 950/950 PASS

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 02:22:29 +09:00

30 KiB
Raw Blame History

Current Task

このファイルは「いま何に集中しているか」と「次にやり得る候補」だけを書く軽量ビューだよ。
詳細なログや過去フェーズの記録は docs/development/current/main/ 以下の各 phase-*.md
docs/development/current/main/joinir-architecture-overview.md を真実のソースとして扱うよ。


🎯 今フォーカスしているテーマ2025-12-12 時点のスナップショット)

0. Phase 43/245B Normalized JoinIR Infrastructure COMPLETE (Phase 26-45)

完全サマリ: PHASE_43_245B_NORMALIZED_COMPLETION.md

  • 達成内容:
    • Structured→Normalized→MIR(direct) パイプライン確立
    • P1/P2 + JsonParser (skip_ws/atoi/parse_number) 全対応
    • Mode system (Phase 45), Capability system (Phase 44) 完成
    • 937/937 tests PASS
  • 主要コンポーネント:
    • JoinIrMode enum (StructuredOnly/NormalizedDev/NormalizedCanonical)
    • ShapeCapabilityKind (P2CoreSimple/P2CoreSkipWs/P2CoreAtoi/P2MidParseNumber)
    • CarrierRole (LoopState/ConditionOnly), CarrierInit
    • DigitPos dual-value (is_digit_pos + digit_value)
    • NumberAccumulation, Step scheduling, Exit PHI & Jump args
  • 今後の拡張候補(計画のみ):
    • Phase 46+: Canonical set 拡張 (capability-based)
    • Pattern3/4 Normalized 適用
    • Selfhost loops 対応

0-B. JoinIR / ExprLowerer / Pattern24 + JsonParser _parse_number / DigitPos ラインPhase 230247-EX 完了)

  • Pattern14while / break / ifPHI / continue P5(Trim) でループ lowering を JoinIR 経路に一本化。
  • Phase 231/236/240-EX:
    • Pattern2 の header / break 条件を ExprLowerer/ScopeManager 経由(対応パターンのみ)で本番導線化。
    • ConditionEnv ベースの意味論と RC/JoinIR 構造が一致することをテストとカタログで確認済み。
  • Phase 237238-EX:
    • JsonParser/selfhost の条件パターンをカタログ化し、ExprLowerer/ScopeManager/ConditionEnv の責務境界を docs/README で固定。
  • Phase 241242-EX:
    • array_filter 系 3 FAIL を「構造で」解消hardcode "sum" チェック削除、CarrierInfo/ExitMeta 経由に統一)。
    • Pattern3 ifsum / Pattern4 continue から legacy lowerer と by-name "sum"/"count" を完全削除。
    • 複雑条件(i % 2 == 1)を ConditionPattern/if-sum lowerer で安全に扱えるよう整理Fail-Fast + テスト付き)。
  • Phase 243244-EX:
    • Pattern3/4 の公開 API を can_lower + lower の最小セットに整理し、内部 helper を箱の中に閉じた。
    • loop_pattern_detection の classify() が代表ループを P1〜P4 に分類することをユニットテストで固定。
  • Phase 245-EX / 245C:
    • _parse_number のループについて、ループ変数 p の header/break 条件と p = p + 1 更新を Pattern2 + ExprLowerer 経路に載せて本番化。
    • FunctionScopeCapture / CapturedEnv を拡張し、関数パラメータ(例: s, len)をループ条件/本体で読み取り専用なら CapturedEnv 経由で ConditionEnv に載せるようにした。
    • これにより、p < s.length() のような header 条件や JsonParser 系ループでのパラメータ参照が、ExprLowerer/ScopeManager から安全に解決される。
  • Phase 245B-IMPL:
    • _parse_number 本体で num_str = num_str + ch を LoopState キャリアとして扱い、Program(JSON) フィクスチャ jsonparser_parse_number_real を Structured→Normalized→MIR(direct) で dev テスト固定(出力は num_str 文字列)。
  • Phase 247-EX:
    • DigitPos promotion を二重値化し、digit_pos から boolean carrier is_digit_posConditionOnlyと integer carrier digit_valueLoopStateを生成。
    • UpdateEnv で digit_pos 解決時に digit_value を優先し、NumberAccumulationresult = result * 10 + digit_pos)と break 条件の両方で DigitPos パターンが安全に利用可能に。
  • 現在: cargo test --release --lib で 931/931 テスト PASS既知 FAIL なし)。
  • Phase 28-NORM-P2dev-only:
    • Normalized JoinIR のミニ実装を Pattern1 に続き Pattern2 最小ケースまで拡張Structured→Normalized→Structured を比較)。
    • 対応外の Structured JoinModule では normalize_pattern2_minimal が Fail-Fast するようガードを追加し、normalized_dev テストで固定。
  • Phase 29-NORM-P2-APPLYdev-only:
    • Phase 34 の break fixturei/acc/n の単純 break ループ)を Structured→Normalized→Structured の往復に通し、VM 実行結果が Structured 直経路と一致することを dev テストで固定。
    • ガードは 3 パラメータまで緩和しつつ、DigitPos/Trim などの重いキャリアはまだ非対応のまま。
  • Phase 30-NORM-P2-DEV-RUNdev-only:
    • JoinIR runner に NYASH_JOINIR_NORMALIZED_DEV_RUN=1 を追加し、Pattern1/2 ミニケースだけ Structured→Normalized→Structured を挟んで dev 実行できるようにした(normalized_dev + debug 限定。通常経路Structured→MIRは不変。
  • Phase 31-NORM-JP-MINIdev-only:
    • JsonParser 系のシンプルな P2 ループskip_whitespace ミニ fixtureを Structured→Normalized→Structured 経由でも実行し、runner dev スイッチの比較テストで Structured 直経路と一致することを固定。
  • Phase 32-NORM-CANON-PREPdev-only:
    • JoinIR→MIR ブリッジの入口を bridge_joinir_to_mir に一本化し、normalized_dev スイッチfeature + envで Structured→Normalized→Structured の dev roundtrip を切り替える準備を整えた。P1/P2/JP mini の比較テストも VM ブリッジ経路で追加。
  • Phase 33-NORM-CANON-TESTdev-only:
    • P1/P2Phase 34 break fixture/JsonParser skip_ws mini について、normalized_dev ON 時は shape_guard 経由で必ず Normalized roundtrip を通すようブリッジと runner を固めた。normalized_joinir_min.rs の runner/VM 比較テストを拡張し、Normalized が壊れたら dev スイートが必ず赤になるようにした(本番 CLI は従来どおり Structured→MIR
  • Phase 34-NORM-ATOI-DEVdev-only:
    • JsonParser _atoi ミニループdigit_pos→digit_value + NumberAccumulationを normalized_dev 経路に載せ、Structured↔Normalized↔Structured の VM 実行結果が一致することをフィクスチャテストで固定。jsonparser_atoi_mini を shape_guard で認識し、既定経路は引き続き Structured→MIR のまま。
  • Phase 35-NORM-BRIDGE-MINIdev-only:
    • P1/P2 ミニ + JsonParser skip_ws/atoi ミニを Normalized→MIR 直ブリッジで実行できるようにし、normalized_dev ON 時は Structured→Normalized→MIR復元なし経路との比較テストで結果一致を固定。既定経路Structured→MIRは不変。
  • Phase 36-NORM-BRIDGE-DIRECTdev-only:
    • Normalized ブリッジを direct 実装Normalized→MIRと Structured 再構成に分離し、shape_guard で P1/P2 ミニ + JsonParser skip_ws/atoi ミニだけ direct 経路に通すよう整理。非対応は [joinir/normalized-bridge/fallback] ログ付きで再構成に落とし、テストで direct/従来経路の VM 出力一致を固定。
  • Phase 37-NORM-JP-REALdev-only:
    • JsonParser _skip_whitespace 本体の P2 ループを Program(JSON) フィクスチャで Structured→Normalized→MIR(direct) に通し、Structured 直経路との VM 出力一致を比較するテストを追加。extract_value&&/|| を BinOp として扱えるようにし、Break パターンの param 推定を柔軟化して real 形状でも panic しないようにした。
  • Phase 38-NORM-OBSdev-only:
    • Normalized/JoinIR dev 経路のログカテゴリを [joinir/normalized-bridge/*] / [joinir/normalized-dev/shape] に統一し、JOINIR_TEST_DEBUG 下だけ詳細を出すよう静音化。Verifier/FailFast メッセージも shape/役割付きに整え、デバッグ観測性を上げつつ通常実行のノイズを減らした。
  • Phase 43-Adev-only:
    • JsonParser _atoi 本体の Program(JSON) フィクスチャを normalized_dev に追加し、Structured→Normalized→MIR(direct) と Structured→MIR の VM 出力を比較するテストで一致を固定(符号あり/なしの簡易パス対応。canonical 切替は後続フェーズ)。
  • Phase 43-Cdev-only:
    • JsonParser _parse_number 本体の Program(JSON) フィクスチャを normalized_dev に追加し、Structured→Normalized→MIR(direct) と Structured→MIR の VM 出力を比較するテストで一致を固定num_str は現状仕様のまま据え置き、P2-Mid の足慣らし)。
  • Phase 46-NORM-CANON-P2-MID実装済み 2025-12-12:
    • P2-Mid パターン_atoi real, _parse_number realを canonical Normalized に昇格。
    • Canonical set 拡張: P2-Coremini + skip_ws + atoi mini+ P2-Midatoi real + parse_number real
    • JsonParser P2 ライン_skip_whitespace/_atoi/_parse_number全て canonical Normalized 化完了。
    • P3/P4 Normalized 対応は NORM-P3/NORM-P4 フェーズで実施(今回スコープ外)。
    • 937/937 tests PASS。
  • Phase 47-B/CP3 if-sum 拡張 + canonical 化 2025-12-21:
    • フィクスチャ追加: pattern3_if_sum_multi_minsum+count/ jsonparser_if_sum_minJsonParser 簡約形)
    • ShapeGuard: Pattern3IfSumMulti / Pattern3IfSumJson 追加、capability=P3IfSum、canonical set に P3 minimal/multi/json を追加
    • Normalizer/Bridge: P3 if-sum minimal/multi/json を Structured→Normalized→MIR(direct) で dev A/B、canonical ルートでも常時 Normalized 経由
    • テスト: normalized_joinir_min.rs に P3 if-sum multi/json の VM ブリッジ比較テスト追加Structured と一致)
  • Phase 45-NORM-MODE実装済み 2025-12-12:
    • JoinIR モード一本化: バラバラだったフラグ/feature を JoinIrMode enum に集約StructuredOnly / NormalizedDev / NormalizedCanonical
    • current_joinir_mode() でモード取得、bridge/runner で normalized_dev_enabled() → mode pattern matching に移行。
    • Canonical P2-Core は mode 無視で常に Normalized→MIR(direct)、それ以外は mode に従う統一ルーティング。
    • 937/937 tests PASS既存挙動完全保持のリファクタ
  • Phase 44-SHAPE-CAP実装済み 2025-12-12:
    • Shape検出を capability-based に変更: NormalizedDevShapeShapeCapability 抽象化層導入。
    • ShapeCapabilityKind 4種: P2CoreSimple / P2CoreSkipWs / P2CoreAtoi / P2MidParseNumber。
    • Shape-level (is_canonical_shape) と Capability-level (is_p2_core_capability) の二層 API でパターン拡張性を確保。
    • 既存挙動完全保持canonical set: Pattern2Mini, skip_ws mini/real, atoi mini のまま、937/937 tests PASS。

1. いまコード側で意識しておきたいフォーカス

  • Phase 43/245B Normalized 完了 により JoinIR ループ基盤Pattern14 + ExprLowerer + ScopeManager + CapturedEnv + Normalized layerは一応の完成状態に入ったので、当面は:
    • 既存パターン/箱の範囲内での バグ修正・FailFast/invariant 追加・テスト強化 を優先する。
    • JsonParser/selfhost への新しい適用や大きな仕様拡張は、docs 側で Phase 設計が固まってからコード側に持ち込む。
  • 直近のコード側フォーカス候補:
    • Phase 246-EXコード: 完了_atoi Integration, Phase 43/245B の一部)
    • Pattern14 / ExprLowerer / ScopeManager まわりで、by-name ハードコードやサイレントフォールバックが見つかった場合は、 CarrierInfo / ConditionEnv / Scope 情報を使って「構造で」直す。

2. 直近で意識しておきたい設計の芯

  • Loop パターン空間は有限で整理済み:
    • P1: Simple While
    • P2: Break
    • P3: IfPHI単一/複数キャリア)
    • P4: Continuethen/elsecontinue 正規化込み)
    • P5: LoopBodyLocal 昇格Trim/JsonParser 用の部分適用)
  • 「増やすべき」は新しい Pattern ではなく、既存 Pattern の前処理箱:
    • BoolExprLowerer / ConditionEnv / LoopConditionScopeBox / LoopBodyCarrierPromoter / TrimLoopHelper / ComplexAddendNormalizer / LoopBodyLocalEnv / UpdateEnv などで
      条件式とキャリア更新を吸収し、Pattern14 は「ループ骨格」に専念させる方針。
  • FailFast 原則:
    • JoinIR 以外のループ lowering パスは存在しないLoopBuilder は削除済み)。
    • 「わからないパターン」は必ず [joinir/freeze] 系の明示エラーにして、サイレントフォールバックはしない。

最近まとまった大きな塊(超要約)

ここ半年くらいで終わっている主な塊だけをざっくり書くね。
細かいタスク・バグ票・議論は docs/development/current/main/phase-*.md
docs/development/current/main/joinir-architecture-overview.md に全部残っているので、必要になったときだけそちらを読む想定。

  • LoopBuilder 削除ラインPhase 180 前後)
    • LoopBuilder を devonly → hard freeze → 物理削除まで完了。
    • Loop lowering の SSOT を JoinIR に一本化。
  • LoopPattern / Router ラインPhase 170179, 244-EX
    • LoopFeatures / LoopPatternKind / PatternRouter / PatternPipelineContext を整備。
    • Pattern14 の検出・ルーティングを「構造ベースAST features」で統一関数名ベタ書き依存を除去
    • Phase 244-EX で代表ループP1〜P4の classify() 結果をユニットテストで固定。
  • Exit / Boundary / ValueId ラインPhase 172205
    • ExitMeta / ExitLineReconnector / JoinInlineBoundary(+Builder) / LoopHeaderPhiBuilder を箱化。
    • JoinValueSpaceParam/Local 領域)+ PHI 契約 Verifier で ValueId 衝突と PHI 破損を根治。
  • P5(Trim/JsonParser) ラインPhase 171176, 173175, 190193
    • LoopBodyLocal 昇格パイプラインTrim, _skip_whitespace, _parse_string 簡易版)を構築。
    • StringAppend / NumberAccumulation / Complex addend 正規化など、更新式まわりの箱を揃えた。
  • P3/P4 (IfPHI / Continue) 汎用化ラインPhase 195196, 212215, 220242-EX
    • multicarrier P3 の JoinIR 生成を整理し、ifsum 最小パターンを AST ベースで一般化sum+count まで無改造対応)。
    • Pattern3/4 ifsum/continue lowerer を分離箱にして、legacy PoC lowerer と by-name ハードコード("sum", "count")を削除。
    • Pattern4CarrierAnalyzer を純粋な「キャリア解析箱」として仕上げ、continue 正規化・更新式解析をユニットテストで固定。

このあたりが「JoinIR ループ基盤の芯」で、以降の Phase は JsonParser/selfhost の各ループへの適用フェーズ、という位置づけだよ。

  • Phase 43/245B Normalized JoinIRPhase 2645 完了)
    • Structured→Normalized→MIR(direct) パイプライン確立
    • Mode system (JoinIrMode) + Capability system (ShapeCapabilityKind)
    • Pattern1/2 + JsonParser (_skip_whitespace, _atoi, _parse_number) 全対応
    • 詳細: PHASE_43_245B_NORMALIZED_COMPLETION.md

🧭 これからの候補(まだ「やる」とは決めていないメモ)

ここは「やることリスト」ではなく「今後やるとしたらこの辺」というメモだよ。 実際に着手するタイミングで、別途 Phase/タスクを切る想定。

  1. Phase 245Bコード: 完了Phase 43/245B の一部)
  2. Phase 246-EXコード: 完了Phase 43/245B の一部)
  3. Phase 47-NORM-P3設計完了最小devdirect 2025-12-12: Pattern3 Normalized 設計
    • 設計詳細: phase47-norm-p3-design.md
    • P3 if-sum を Normalized JoinIR に載せる設計。P2 と同じ ConditionEnv/CarrierInfo/ExitLine インフラを再利用。
    • Phase 47-A: Minimal sum_countdev-onlyとして、phase212_if_sum_min.hako 相当の最小 if-sum ループを AST ベース lowerer + Structured→Normalized→Structured roundtripRunner 経路)+ Normalized→MIR(direct) で検証済み。
    • Phase 47-B 以降: array_filter など body-local/MethodCall を含む P3 ループや canonical 昇格は今後の実装フェーズで扱う。
  4. Phase 48-NORM-P4設計完了48-A/B/C canon 完了 2025-12-12→2026-01-XX: Pattern4 (continue) Normalized 設計+実装
    • 設計詳細: phase48-norm-p4-design.md
    • ターゲットループ決定: _parse_array skip whitespace◎ PRIMARY、_parse_object、_unescape_string/parse_string
    • 設計骨格: continue = 即座の TailCallFn(loop_step, ...) (新命令不要)
    • P1/P2/P3 と同じ loop_step(env, k_exit) 骨格に載せる
    • インフラ再利用率: 95%+ (StepKind の ContinueCheck のみ追加)
    • Phase 48-A実装minimal dev-only完了 / Phase 48-B devJsonParser skip_ws continue完了:
      • P4 minimal フィクスチャ追加skip i==2 パターン、単一 carrier acc JsonParser continue skip_ws (array/object) フィクスチャを追加
      • ShapeGuard: Pattern4ContinueMinimal + JsonParser continue 形状を検出
      • StepScheduleBox: ContinueCheck step 追加(評価順序: HeaderCond → ContinueCheck → Updates → Tail
      • normalize_pattern4_continue_minimal()/jsonparser_continue を dev 正規化に配線P2 インフラを再利用)
      • テスト完備: minimal + JsonParser continue の VM bridge 比較を normalized_dev スイートで固定
    • Phase 48-Ccanonical 昇格)完了:
      • P4 minimal + JsonParser skip_ws array/object を canonical set に追加env OFF でも Normalized→MIR(direct) を強制)
      • Bridge/runner で Structured fallback を禁止、fail-fast 契約に統一
      • canonical ルートと Structured 直経路の stdout 一致を比較するテストを追加
  5. JsonParser 残りループへの JoinIR 展開
    • _parse_array / _parse_object / _unescape_string / 本体 _parse_string など。
    • 既存の P2/P3/P4P5 パイプラインをどこまで延ばせるかを docs 側で設計 → コード側はその設計に沿って小さく実装。
  6. Phase 49-SELFHOST-NORM-DEPTH2設計・コードなし: selfhost depth2 Normalized 設計フェーズ
  7. Phase 50-SELFHOST-NORM-DEVdev-only完了 2025-12-12: selfhost 軽量 P2/P3 を dev Normalized パイプラインに載せる足慣らし
    • 対象: selfhost_token_scan_p2 / selfhost_if_sum_p3
    • fixtures / ShapeGuard(Selfhost* 系) / VM bridge 比較テストまで整備し、Structured 直経路と一致を固定。
  8. Phase 51-SELFHOST-NORM-DEV-EXTENDdev-only完了 2025-12-12: selfhost 実戦寄り P2/P3 を dev Normalized に追加
    • 対象: selfhost_token_scan_p2_accum / selfhost_if_sum_p3_ext
    • Phase 50 と同導線で fixtures / shape / 比較テストを追加し、selfhost 断面で緑を維持。
  9. Phase 52-SELFHOST-SHAPE-STRUCT-SIGNATUREdev-only完了 2025-12-12: selfhost shape の構造シグネチャ育成
    • selfhost P2/P3 を「構造一次判定→dev-only name ガード最終確定」の二段 detector に移行。
    • 構造シグネチャの安定テストを追加し、name ガード撤去の足場を SSOT に固定。
  10. Phase 53-SELFHOST-NORM-DEV-EXPANDdev-only完了 2025-12-12: selfhost P2/P3 の実戦寄り形状を追加
  • 対象追加: P2 args_parse_p2 / P3 stmt_count_p3
  • 構造一次判定carrier 数/型/Compare/branch→ dev-only name 最終確定の二段 detector を拡張。
  • P3 carrier 上限を 210 に拡大し、複雑 if-else 形状を selfhost 群として取り込んだ。
  • normalized_dev selfhost 断面/回帰テストが緑、既定挙動は不変。
  1. Phase 54-SELFHOST-SHAPE-GROWTHdev-only完了 2025-12-12: 構造軸の育成と偽陽性観測フェーズ
  • Phase 53 で実戦ループ追加済みのため、追加投入より先に構造判定精度の測定に集中。
  • 構造シグネチャ軸を 5+ に拡張Compare op 分布などし、P2/P3 の偽陽性観測テストを追加。
  • 結果: selfhost 群の構造判定だけでは分離が不十分(偽陽性率 ~50%。dev-only name ガードは当面必須と判断。
  1. Phase 55-SELFHOST-SHAPE-AXIS-EXPANDdev-only / 保留): 構造軸を可変 feature として拡張し誤判定を下げる足場
  • Phase 5661 の Ownership-Relay ライン優先のため、selfhost shape 軸拡張は一旦保留。
  • OwnershipAnalyzer 導入後に、scope 署名owned/carriers/captures/relayを新しい構造軸として合流させる。
  1. Phase 56-OWNERSHIP-RELAY-DESIGN完了 2025-12-12: Ownership-Relay アーキテクチャ設計 + インターフェース skeleton
  • 設計詳細: phase56-ownership-relay-design.md
  • コア定義: owned / carriers / captures / relay の 4 分類を明確化
  • 不変条件: Ownership Uniqueness / Carrier Locality / Relay Propagation / Capture Read-Only
  • Module 作成: src/mir/join_ir/ownership/ - 責務は「解析のみ」
  • 型定義: ScopeId, ScopeOwnedVar, RelayVar, CapturedVar, OwnershipPlan
  • テスト: 3 つのユニットテスト追加empty plan / carriers filter / invariant verification
  • 次: Phase 57 で OwnershipAnalyzer 実装dev-only
  1. Phase 57-OWNERSHIP-ANALYZER-DEV完了 2025-12-12: OwnershipPlan を生成する解析箱の実装
  • OwnershipAnalyzer を追加し、ネスト含む reads/writes/owned を集計→ carriers/relay/captures を plan 化。
  • 既存 fixturespattern2/3, jsonparser, selfhostで plan の回帰テストを追加。
  • 設計詳細: PHASE_57_SUMMARY.md
  1. Phase 58-OWNERSHIP-PLUMB-P2-DEV完了 2025-12-12: P2 conversion helper (dev-only)
  • plan_to_p2_inputs() でOwnershipPlan→P2LoweringInputs変換
  • Fail-Fast: relay_writes 未対応Phase 60で対応予定
  • 5つのユニットテスト + 1つのintegrationテスト
  • 設計詳細: PHASE_58_SUMMARY.md
  1. Phase 59-OWNERSHIP-PLUMB-P3-DEV完了 2025-12-12: P3 conversion helper (dev-only)
  • plan_to_p3_inputs() でOwnershipPlan→P3LoweringInputs変換P2と同構造
  • Multi-carrier対応sum, count, 5+ carriers
  • Fail-Fast: relay_writes 未対応Phase 60で対応予定
  • 4つのユニットテスト + 2つのintegrationテスト
  • 設計詳細: PHASE_59_SUMMARY.md
  1. Phase 60-OWNERSHIP-RELAY-IMPL完了 2025-12-12: Relay support for P2/P3 (dev-only)
  • plan_to_p2_inputs_with_relay() / plan_to_p3_inputs_with_relay() を追加単一hopのみ許可、multi-hopはFail-Fast
  • P2 Break lowering を dev-only で ownership-with-relay に接続し、legacy 経路との VM 出力一致を比較テストで固定。
  • shape_guard の selfhost family 分離を最小更新selfhost shapes 優先時の混線を遮断)。
  1. Phase 61-IFSUM-BREAK-STRUCTURAL完了 2025-12-12: if-sum + break を別箱で構造的に導入dev-only
  • Break(P2) から P3 固有ロジックby-nameを撤去し、責務混線を解消。
  • 新箱 if_sum_break_pattern を追加し、return Var+Var を含む if-sum+break を構造判定→Fail-Fast で lowering。
  • OwnershipPlan を param order/carriers の SSOT に使い、carriers!=return vars の混線を遮断。
  • 詳細: PHASE_61_SUMMARY.md
  1. Phase 62-OWNERSHIP-P3-ROUTE-DESIGN完了 2025-12-12: P3 本番ルートへ OwnershipPlan を渡す設計
  • MIR→JoinIR の pattern3_with_if_phi.rs は OwnershipPlan を受け取らないため、AST-based ownership 解析の接続点を設計する。
  • dev-only で段階接続し、legacy と stdout/exit 一致の比較で回帰を固定(既定挙動は不変)。
  • 設計詳細: phase62-ownership-p3-route-design.md
  1. Phase 63-OWNERSHIP-AST-ANALYZER完了 2025-12-12: 本番 AST から OwnershipPlan を生成dev-only
  • AstOwnershipAnalyzer を追加し、ASTNode から owned/relay/capture を plan 化analysis-only
  • JSON v0 の "Local=rebind" ハックを排除fixture 専用のまま)。
  • 詳細: PHASE_63_SUMMARY.md
  1. Phase 64-OWNERSHIP-P3-PROD-PLUMB完了 2025-12-12: 本番 P3(if-sum) ルートへ段階接続dev-only
  • analyze_loop() helper API を追加(ast_analyzer.rs
  • pattern3_with_if_phi.rs で OwnershipPlan を導入し、整合チェック実行
  • Fail-Fast: multi-hop relay (relay_path.len() > 1)
  • Warn-only: carrier set mismatchorder SSOT は Phase 65+
  • 回帰テスト追加(test_phase64_p3_ownership_prod_integration, test_phase64_p3_multihop_relay_detection
  • テスト結果: 49/49 tests passing, 0 regressions
  • 詳細: PHASE_64_SUMMARY.md, phase64-implementation-report.md
  1. Phase 65-REFACTORING-AUDIT完了 2025-12-12: コード品質監査 + スタブドキュメント化
  • Explore agent による包括的リファクタリング監査10 opportunities identified
  • REFACTORING_OPPORTUNITIES.md ドキュメント作成
  • BID-codegen stubs へ deprecation notice + 代替パス文書化
  • quick wins (< 2時間) 実装可能な内容をドキュメント化
  • 詳細: REFACTORING_OPPORTUNITIES.md
  1. Phase 65-OWNERSHIP-RELAY-MULTIHOP-DESIGN完了 2025-12-12: Multihop relay 設計実装はPhase 66以降
  • Multihop relay 意味論の定義relay_path: 内→外の順、段階的carrier化
  • Merge relay 意味論の定義PERMIT with owner merge、複数inner loopが同一祖先owned変数を更新
  • Fail-Fast 解除条件の明文化Phase 66実装時の受け入れ基準
  • 実装箇所の特定Analyzer変更不要、plan_to_lowering/Pattern lowering変更点
  • 禁止事項の明文化by-name分岐排除、dev-only name guard対象外
  • 代表ケース3階層multihop AST例、Merge relay JSON fixture例
  • 詳細: phase65-ownership-relay-multihop-design.md
  1. Phase 66-OWNERSHIP-RELAY-MULTIHOP-IMPL完了 2025-12-12: Multihop relay 実装analysis/plan層
  • plan_to_lowering.rs の relay_path.len() > 1 制限撤去
  • 構造的 Fail-Fast ガード実装empty path, scope mismatch, owner=scope, name conflict
  • ユニットテスト追加5件: multihop accepted, empty rejected, path mismatch, owner same, name conflict
  • ast_analyzer.rs に 3階層 multihop テスト追加
  • テスト結果: normalized_dev 49/49, lib 947/947 PASS
  • 次フェーズ: Phase 70-Aruntime guard 固定)→ Phase 70-B+(実行対応)
  • 詳細: phase65-ownership-relay-multihop-design.md
  1. Phase 67-MIR-VAR-IDENTITY-SURVEY完了 2025-12-13: MIR の束縛モデルを観測して SSOT 化
  • 現状: variable_map(name→ValueId) 1枚でブロックスコープ/シャドウイング無し、未宣言代入の挙動が doc と不一致。
  • プローブvm smokesを追加して観測可能化し、Phase 68 の修正方針MIR 側で lexical scope を実装)を決定。
  • 詳細: phase67-mir-var-identity-survey.md
  1. Phase 68-MIR-LEXICAL-SCOPE完了 2025-12-13: MIR ビルダーに lexical scope を導入し、仕様に整合
  • {...}Program/ ScopeBox を lexical scope として扱い、local の shadowing を正しく復元。
  • “未宣言名への代入はエラー” を SSOTquick-reference/LANGUAGE_REFERENCEに揃えて Fail-Fast 化。
  • free-vars 解析も lexical scope に追随AST walker 重複の整理を含む)。
  • 実装コミット: 1fae4f16, 0913ee8b
  1. Phase 69-OWNERSHIP-AST-SHADOWING完了 2025-12-13: AST ownership 解析を shadowing-aware にするdev-only
  • AstOwnershipAnalyzer を内部 BindingId で分離し、ネスト block の local が loop carriers/relay に混ざらないように修正。
  • 代表テストで固定shadowing あり/なし、outer update の relay_write、ネスト block local の非混入)。
  • 実装コミット: 795d68ec
  1. JoinIR Verify / 最適化まわり
  • すでに PHI/ValueId 契約は debug ビルドで検証しているので、 必要なら SSADFA や軽い最適化Loop invariant / Strength reductionを検討。

📎 このファイルの運用ルール(自分向けメモ)

  • 過去フェーズの詳細な ToDo/Done リストは CURRENT_TASK には書かない
    代わりに docs/development/current/main/phase-*.mdjoinir-architecture-overview.md を SSOT として維持する。
  • CURRENT_TASK は「あくまで最新のフォーカスと次の候補だけ」に絞る。
    目安として このファイル自体は 2〜3画面程度〜300行以内 に収める。
  • 新しい大フェーズを始めたら:
    1. まず docs 配下に phase-XXX-*.md を書く。
    2. CURRENT_TASK には「そのフェーズの一行要約」と「今のフォーカスかどうか」だけを書く。