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

@ -42,6 +42,7 @@ pub use box_registry::{get_global_registry, BoxFactoryRegistry, BoxProvider};
pub use core_box_ids::{CoreBoxCategory, CoreBoxId, CoreMethodId}; // Phase 87: 型安全enum
pub use plugin_config::PluginConfig;
pub use ring0::{get_global_ring0, init_global_ring0, Ring0Context}; // Phase 88: Ring0 公開 API
pub use plugin_host::CoreInitError; // Phase 92: CoreServices 初期化エラー
pub use plugin_loader_unified::{
get_global_plugin_host, init_global_plugin_host, MethodHandle, PluginBoxType, PluginHost,
PluginLibraryHandle,
@ -57,3 +58,19 @@ pub use unified_registry::{
// pub use plugin_box::PluginBox; // legacy
// Use unified plugin loader (formerly v2)
// pub use plugin_loader::{PluginLoaderV2 as PluginLoader, get_global_loader_v2 as get_global_loader}; // legacy
/// Runtime 初期化Phase 92: 接続ポイント決定)
///
/// Phase 93 で実装予定の接続ポイント。
/// Phase 92 では skeleton のみtodo!() を呼ぶ)。
#[allow(dead_code)]
pub fn initialize_runtime(ring0: std::sync::Arc<Ring0Context>) -> Result<plugin_host::PluginHost, CoreInitError> {
use crate::box_factory::UnifiedBoxRegistry;
let registry = UnifiedBoxRegistry::new();
// Phase 92: 接続ポイント決定(実装は Phase 93
let plugin_host = plugin_host::PluginHost::with_core_from_registry(ring0, &registry)?;
Ok(plugin_host)
}