feat(phase93): with_core_from_registry implementation complete
Phase 93 完了: UnifiedBoxRegistry 統合実装 & 起動パス統合 **実装内容**: - with_core_from_registry() 実装 - UnifiedBoxRegistry.has_type() で core Box の存在確認 - 不足時は CoreInitError::MissingService を返す - ダミー Service 実装で CoreServices を構築 - ダミー Service 実装を pub に - DummyStringService, DummyIntegerService 等を公開 - Phase 94 の実変換までの橋渡し - CoreServices::dummy() ヘルパー追加 - フォールバック用ダミー実装 - initialize_runtime() 実装(環境変数制御) - NYASH_USE_PLUGIN_HOST=1 で PluginHost 有効化 - 環境変数なしで従来通り動作(後方互換性) - selfhost に PluginHost 初期化追加 - CoreInitError 発生時は fail-fast - 既存ロジックは変更なし **Fail-Fast 設計**: - 起動時に core Box 不足を即座に検出 - CoreInitError で明示的なエラーメッセージ - デバッグ容易(ランタイムエラーではなく起動時エラー) **テスト結果**: - test_with_core_from_registry_missing_box 追加 - 7件全て成功 - ビルド成功(1分4秒) - 526 passed(既存36失敗は Phase 93 と無関係) **動作確認**: - 環境変数なし: 従来通り動作 ✅ - NYASH_USE_PLUGIN_HOST=1: PluginHost 初期化成功 ✅ - selfhost: fail-fast 動作確認済み ✅ **ドキュメント更新**: - Section 10 追加(77行) - 段階的展開戦略、Fail-Fast 設計を文書化 **次のステップ**: Phase 94 (実際の Box → Service 変換) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -59,18 +59,31 @@ pub use unified_registry::{
|
||||
// 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: 接続ポイント決定)
|
||||
/// Runtime 初期化(Phase 93: 実装完了)
|
||||
///
|
||||
/// Phase 93 で実装予定の接続ポイント。
|
||||
/// Phase 92 では skeleton のみ(todo!() を呼ぶ)。
|
||||
#[allow(dead_code)]
|
||||
/// 環境変数 NYASH_USE_PLUGIN_HOST=1 で PluginHost を有効化。
|
||||
pub fn initialize_runtime(ring0: std::sync::Arc<Ring0Context>) -> Result<plugin_host::PluginHost, CoreInitError> {
|
||||
use crate::box_factory::UnifiedBoxRegistry;
|
||||
|
||||
let registry = UnifiedBoxRegistry::new();
|
||||
let registry = UnifiedBoxRegistry::with_env_policy();
|
||||
|
||||
// Phase 92: 接続ポイント決定(実装は Phase 93)
|
||||
let plugin_host = plugin_host::PluginHost::with_core_from_registry(ring0, ®istry)?;
|
||||
// Phase 93: 環境変数で有効化(段階的展開)
|
||||
let use_plugin_host = std::env::var("NYASH_USE_PLUGIN_HOST")
|
||||
.ok()
|
||||
.and_then(|v| if v == "1" { Some(()) } else { None })
|
||||
.is_some();
|
||||
|
||||
Ok(plugin_host)
|
||||
if use_plugin_host {
|
||||
let plugin_host = plugin_host::PluginHost::with_core_from_registry(ring0, ®istry)?;
|
||||
plugin_host.ensure_core_initialized();
|
||||
Ok(plugin_host)
|
||||
} else {
|
||||
// フォールバック(Phase 94 で削除予定)
|
||||
let core = core_services::CoreServices::dummy();
|
||||
Ok(plugin_host::PluginHost {
|
||||
ring0,
|
||||
core,
|
||||
optional: std::collections::HashMap::new(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user