@ -1,12 +1,12 @@
# Phase 29y (future, post self-host / docs-first): MIR lifecycle vocab freeze( RC/weak/ABI)
Status: Ready (docs-first)
Scope: self-host 後に “ 脱Rustランタイム( NyRT/.hako) ” を進める前提で、MIR の lifecycle/RC/weak を **どこまで語彙として固定**し、どこからを **runtime ABI( NyRT) **に委譲するかを SSOT 化する。
Status: Ready (P0 complete - docs-first SSOT finalized)
Scope: self-host 後に " 脱Rustランタイム( NyRT/.hako) " を進める前提で、MIR の lifecycle/RC/weak を **どこまで語彙として固定**し、どこからを **runtime ABI( NyRT) **に委譲するかを SSOT 化する。
## Entry
- 相談パケット( SSOT) : `docs/development/current/main/investigations/phase-29y-mir-lifecycle-vocab-consult.md`
- 次の指示書( P0, docs-only) : `docs/development/current/main/phases/phase-29y/P0-DOCS-FINALIZE-INSTRUCTIONS.md`
- ~~ 次の指示書( P0, docs-only) ~~ ✅ 完了 : `docs/development/current/main/phases/phase-29y/P0-DOCS-FINALIZE-INSTRUCTIONS.md`
## Non-goals (Phase 29y ではやらない)
@ -22,10 +22,10 @@ Phase 29y を “締める” 条件は実装ではなく、次フェーズへ
2. **RC insertion SSOT** : retain/release/weak_drop の発火点を “1箇所” に寄せる設計( Frag 前後)を docs に固定
3. **Observability SSOT** : hidden root を追える観測点( root面の定義、診断API、smokeは exit code SSOT) を docs に固定
Docs( Phase 29y 内の SSOT) :
- ABI SSOT: `docs/development/current/main/phases/phase-29y/10-ABI-SSOT.md`
- RC insertion SSOT: `docs/development/current/main/phases/phase-29y/20-RC-INSERTION-SSOT.md`
- Observability SSOT: `docs/development/current/main/phases/phase-29y/30-OBSERVABILITY-SSOT.md`
Docs( Phase 29y 内の SSOT - ✅ P0 complete, all Ready ) :
- ABI SSOT: `docs/development/current/main/phases/phase-29y/10-ABI-SSOT.md` ✅ Ready
- RC insertion SSOT: `docs/development/current/main/phases/phase-29y/20-RC-INSERTION-SSOT.md` ✅ Ready
- Observability SSOT: `docs/development/current/main/phases/phase-29y/30-OBSERVABILITY-SSOT.md` ✅ Ready
## Implementation Pilot (Phase 29y.1)
@ -52,6 +52,34 @@ Phase 29y は docs-first が主目的だが、後続の実装フェーズへ迷
- **関数ABI**: args borrowed / return owned( borrowed を保存/返す場合のみ retain)
- **weak identity**: alloc_id + generation token を SSOT 化(ログも token 表示)
## Next Steps( 実装フェーズへ切るための最小タスク)
Phase 29y は docs-first を完了し、次フェーズ( Phase 29x/29z など)へ迷わず移れる状態になった。
以下の実装タスク( 最大3つ) を次フェーズで進める:
1. **RC insertion pass の最小動作化**
- 現状: `src/mir/passes/rc_insertion.rs` は no-op skeleton
- 次: 保持・解放の1ケースだけを実装( 上書き時の release のみ)
- 目的: CFG確定後の挿入点を実証し、SSOT( 20-RC-INSERTION-SSOT.md) の妥当性を検証
2. **ABI borrowed/owned conformance smoke 追加**
- 現状: `phase29y_handle_abi_{vm,llvm}.sh` は最小ケース( 1 fixture のみ)
- 次: borrowed args / owned return の conformance を1本追加
- 目的: 関数ABI契約( 10-ABI-SSOT.md §3) を実際の smoke で固定
3. **Observability root categories 拡張**
- 現状: `leak_tracker.rs` は handles のみ可視( Phase 1 limitation)
- 次: locals または temps のいずれか1つを root summary に追加
- 目的: root面カテゴリ( 30-OBSERVABILITY-SSOT.md §1) の観測実装を1段進める
**受け入れ基準** :
- quick 154/154 PASS 維持
- integration smokes の phase29y_* が green 維持
- 恒常ログ増加なし
**Next Phase 候補** : Phase 29z( RC insertion minimal) または Phase 29x( De-Rust runtime)
## Related
- lifecycle semantics SSOT: `docs/reference/language/lifecycle.md`