feat(phase92): UnifiedBoxRegistry integration roadmap complete

Phase 92 完了: UnifiedBoxRegistry 統合の導線作り

**実装内容**:
- CoreServices::required_ids() 実装
  - Phase 87 CoreBoxId の core_required (6個) を返す
  - is_core_required() との整合性を型レベルで保証
- CoreInitError enum 追加
  - MissingService, RegistryEmpty, InvalidServiceType
  - Display + std::error::Error trait 実装
- PluginHost::with_core_from_registry() skeleton
  - Phase 93 で実装予定(todo!() でプレースホルダー)
- initialize_runtime() 接続ポイント決定
  - Ring0Context と UnifiedBoxRegistry を橋渡し

**Phase 87 整合性**:
- required_ids() が is_core_required() と完全一致
- テストで整合性を検証

**テスト結果**:
- 3件追加(全て合格)
  - test_required_ids_consistency
  - test_core_init_error_display
  - test_with_core_from_registry_todo (should_panic)
- ビルド成功
- 既存テストに影響なし

**ドキュメント更新**:
- Section 9 追加(113行)
- ensure_initialized() 呼び出し場所決定(4箇所)
- Phase 93 実装計画明記

**次のステップ**: Phase 93 (with_core_from_registry 実装 & 起動パス統合)

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-12-03 07:57:21 +09:00
parent 3d253056bd
commit 2f54e64d27
4 changed files with 233 additions and 0 deletions

View File

@ -363,3 +363,107 @@ pub trait NyashPlugin: Send + Sync {
- PluginHost.optional への optional/user プラグイン登録
- 既存 Box 実装と Service trait の接続
---
## 9. Phase 92: UnifiedBoxRegistry 統合計画2025-12-03
### 9.1 CoreServices と CoreBoxId の対応テーブル
**実装**: `src/runtime/core_services.rs`
```rust
impl CoreServices {
pub fn required_ids() -> &'static [CoreBoxId] {
&[
CoreBoxId::String,
CoreBoxId::Integer,
CoreBoxId::Bool,
CoreBoxId::Array,
CoreBoxId::Map,
CoreBoxId::Console,
]
}
}
```
**Phase 87 整合性**: CoreBoxId::is_core_required() と完全一致
### 9.2 PluginHost 初期化フック
**実装**: `src/runtime/plugin_host.rs`
```rust
impl PluginHost {
pub fn with_core_from_registry(
ring0: Arc<Ring0Context>,
registry: &UnifiedBoxRegistry,
) -> Result<Self, CoreInitError> {
// Phase 93 で実装予定
todo!("Phase 93: UnifiedBoxRegistry から CoreServices への変換実装")
}
}
```
**エラー型**: `CoreInitError` で不足している core service を明示
### 9.3 Runtime 初期化接続ポイント
**実装**: `src/runtime/mod.rs`
```rust
pub fn initialize_runtime(ring0: Arc<Ring0Context>) -> Result<PluginHost, CoreInitError> {
let registry = UnifiedBoxRegistry::new();
let plugin_host = PluginHost::with_core_from_registry(ring0, &registry)?;
Ok(plugin_host)
}
```
**Phase 93 で実装**: UnifiedBoxRegistry から CoreServices への実際の変換
### 9.4 ensure_initialized() 呼び出し場所Phase 93 実装予定)
**決定事項**: Phase 93 以降で以下の4箇所で呼び出す
1. **selfhost ランナー起動時**`src/runner/selfhost.rs`
```rust
pub fn run_selfhost(config: &Config) -> Result<(), Error> {
let plugin_host = initialize_runtime(get_global_ring0())?;
plugin_host.ensure_core_initialized();
// ...
}
```
2. **hack_check 実行前**`src/runner/hack_check.rs`
```rust
pub fn run_hack_check() -> Result<(), Error> {
let plugin_host = initialize_runtime(get_global_ring0())?;
plugin_host.ensure_core_initialized();
// ...
}
```
3. **VM バックエンド起動時**`src/runner/modes/vm.rs`
```rust
pub fn run_vm(program: &str) -> Result<(), Error> {
let plugin_host = initialize_runtime(get_global_ring0())?;
plugin_host.ensure_core_initialized();
// ...
}
```
4. **統合テスト setup**`tests/integration/setup.rs`
```rust
pub fn setup_test_runtime() -> PluginHost {
let plugin_host = initialize_runtime(get_global_ring0()).unwrap();
plugin_host.ensure_core_initialized();
plugin_host
}
```
### 9.5 Phase 93 実装計画
- UnifiedBoxRegistry から core_required Box の取得
- Box → Service trait への変換ロジック
- CoreServices の自動構築
- ensure_initialized() の4箇所への配置