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:
@ -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, ®istry)?;
|
||||
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箇所への配置
|
||||
|
||||
|
||||
Reference in New Issue
Block a user