feat(box_factory): Phase 86 BoxFactory Priority normalization

Phase 86: BoxFactory Priority 正常化プロジェクト完了

目的:
- BoxFactory のデフォルトポリシーを BuiltinFirst から StrictPluginFirst に変更
- プラグイン版 StringBox/ArrayBox/MapBox が正常に使用できるよう正常化
- Phase 85 (Ring0/Ring1-Core 境界設計) の土台準備

実装内容:
1. ドキュメント作成
   - docs/development/current/main/factory_priority.md: 完全仕様文書化

2. コード修正 (1行のみ)
   - UnifiedBoxRegistry::new() が with_env_policy() を使用
   - デフォルトポリシーが StrictPluginFirst に変更

3. テスト追加 (5件, 全パス)
   - test_default_policy_is_strict_plugin_first: デフォルトポリシー確認
   - test_env_policy_override: 環境変数制御確認
   - test_reserved_type_protection: 予約型保護動作確認
   - test_plugin_override_with_env: 予約型 override 確認
   - test_non_reserved_plugin_priority: 非予約型プラグイン優先確認

効果:
-  プラグイン版 StringBox/ArrayBox/MapBox が正常に使用可能
-  core_required Box の予約名保護維持
-  環境変数による柔軟な制御が可能
-  テスト改善: 500→506 passed, 34→33 failed (+6 passed, -1 failed)

core_required Box リスト (暫定):
- Core value types: StringBox, IntegerBox, BoolBox, FloatBox, NullBox
- Core containers: ArrayBox, MapBox, ResultBox
- Core method indirection: MethodBox

環境変数:
- NYASH_BOX_FACTORY_POLICY: ポリシー選択 (default: strict_plugin_first)
- NYASH_USE_PLUGIN_BUILTINS: core_required override 許可
- NYASH_PLUGIN_OVERRIDE_TYPES: 個別 Box override 許可

Phase 85 準備:
- Ring0/Ring1-Core 境界設計の土台が整った
- ConsoleBox の扱いは Phase 85 で最終決定

完了条件:
-  factory_priority.md 作成完了
-  UnifiedBoxRegistry::new() 修正完了
-  デフォルトポリシー StrictPluginFirst 確定
-  テスト 5件追加・全パス
-  CURRENT_TASK.md 更新完了
-  Phase 85 README 準備完了

参考:
- 設計文書: docs/development/current/main/factory_priority.md
- Phase 85 計画: docs/private/roadmap2/phases/phase-85-ring0-runtime/README.md

🎉 Phase 86 完了!次は Phase 85 で Ring0/Ring1-Core 境界の文書化へ
This commit is contained in:
nyash-codex
2025-12-02 21:52:18 +09:00
parent 7dbe0a682c
commit 268a56fdfe
4 changed files with 530 additions and 2 deletions

View File

@ -205,7 +205,26 @@
- `src/mir/builder/utils.rs``infer_boxcall_return_type()` ヘルパーを追加し、StringBox/IntegerBox/BoolBox/ArrayBox/MapBox/Result-likeQMark 相当)/Stage1CliBox など計 27 メソッドの戻り値型を一元管理。
- BoxCall lowering 経路emit_box_or_plugin_call 相当)から `infer_boxcall_return_type()` を呼び出し、戻り値 ValueId に対応する MirType を `value_types` に登録。
- Await/QMark 系は BoxCall 経路の型登録で全て解消され、追加の Await 専用実装は不要。
- `NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib` 実行時の Case D panic は 4 件 → 0 件となり、Case D 完全解消を達成。型生成Const/BoxCall・型伝播CopyTypePropagator/PhiTypeResolver・統合GenericTypeResolverの 3 層構造が箱として完成し、次フェーズでの if_phi フォールバック削除に進める状態になった。
- `NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib` 実行時の Case D panic は 4 件 → 0 件となり、Case D 完全解消を達成。型生成Const/BoxCall・型伝播CopyTypePropagator/PhiTypeResolver・統合GenericTypeResolverの 3 層構造が箱として完成し、if_phi フォールバック削除に進める状態になったPhase 84-5 / 82 の最終仕上げ)
11. **Phase 85-ring0-runtime: Ring0/Ring1/Plugin 層の設計整理****設計中**
- Ring0 は Box を知らない最小カーネル APIMem/Io/Time/Log 等)に限定し、実装は `Ring0Context` + adapter 1 箇所に集約する方針を docs に固定。
- Ring1-coreStringBox/ArrayBox/MapBox/FileBox/ConsoleBox 等)と ring1-optional/selfhost/user_plugin を 4 層に分類し、「core_required は静的必須セット、optional と user は PluginHost の上に載る」設計を言語化。
- `docs/development/current/main/ring0-inventory.md` に println!/eprintln! を含む Ring0 候補呼び出しや Box/プラグイン/カーネル実装数の調査結果をまとめ、Phase 86 以降で Ring0Context に寄せていくためのインベントリを準備。
12. **Phase 86: BoxFactory Priority 正常化****完了**2025-12-02
- **目的**: BoxFactory のデフォルトポリシーを `BuiltinFirst` から `StrictPluginFirst` に変更し、プラグイン版 Box が正常に使用できるよう正常化。
- **実装内容**:
- ✅ 現状仕様の文書化(`docs/development/current/main/factory_priority.md`
-`UnifiedBoxRegistry::new()` を 1 行修正(`with_policy(BuiltinFirst)``with_env_policy()`
- ✅ テスト 5 件追加・全パスdefault policy / env override / reserved protection / plugin override / non-reserved priority
- ✅ Phase 85 README 準備完了(`docs/private/roadmap2/phases/phase-85-ring0-runtime/README.md`
- **効果**:
- プラグイン版 StringBox/ArrayBox/MapBox が正常に使用可能に
- core_required BoxStringBox/IntegerBox/BoolBox/ArrayBox/MapBox 等)の予約名保護維持
- 環境変数 `NYASH_BOX_FACTORY_POLICY` による柔軟な制御が可能
- テスト改善500 passed, 34 failed → 506 passed, 33 failed+6 passed, -1 failed
- **詳細**: [factory_priority.md](docs/development/current/main/factory_priority.md)
### バックログ