feat(phase106): FileBox provider_lock整理 & Fail-Fast強化(案B統一版)
Task 1: CoreBoxId.category() 修正 - File を CoreRequired 側に移動(L126) - テスト期待値修正(L371) - Phase 106 intent コメント更新(L107-115) Task 2: provider_lock API 確認 - 変更なし(既存の set/get API をそのまま使用) - get_filebox_provider_strict() は追加しない(シンプルに保つ) Task 3: FileBox SSOT コメント追加 - L5-7 に責務明示コメント追加 Task 4: PluginHost に FileBox provider チェック追加 - with_core_from_registry_optional() に Phase 106 チェック追加(L158-167) - test_with_core_from_registry_filebox_required() 追加(L413-445) - 既存テスト2件を FileBox provider 初期化対応(L301-321, L323-351) - test_with_core_from_registry_missing_box() をエラーメッセージ拡張(L386-410) Task 5: ドキュメント更新 - core_boxes_design.md に Phase 106 セクション追加(L248-265) - 責務分離原則・Ring0.FsApi 延期を明記 完了条件: ✅ ビルド成功(cargo build --release) ✅ テスト全PASS(cargo test --lib runtime: 64 passed; 0 failed) ✅ 指示書の実装チェックリスト全て completed
This commit is contained in:
@ -226,13 +226,43 @@ pub struct Ring0Context { pub io: Box<dyn IoApi>, /* ... */ }
|
||||
| SSOT | 分散 | 1ファイル | 保守性向上 |
|
||||
| IDE支援 | なし | 補完可能 | 開発体験向上 |
|
||||
|
||||
### 5.3 Phase 85 との関係
|
||||
### 5.3 Phase 85 との関係(FileBox 再分類)
|
||||
|
||||
Phase 85 の調査結果を完全反映:
|
||||
Phase 85 の時点では、次の 3 区分で Box を分類していた:
|
||||
- **core_required (6個)**: StringBox, IntegerBox, BoolBox, ArrayBox, MapBox, ConsoleBox
|
||||
- **core_optional (9個)**: FloatBox, NullBox, FileBox, PathBox, RegexBox, MathBox, TimeBox, JsonBox, TomlBox
|
||||
- **特殊型 (4個)**: FunctionBox, ResultBox, MethodBox, MissingBox
|
||||
|
||||
その後、Ring0/Ring1-Core の整理と selfhost ラインの安定化を進める中で、
|
||||
FileBox は selfhost/通常ランタイムでは事実上必須(ログ・ツール・ハコチェックなどで常用)
|
||||
であることが明確になったため、「core_required 相当」として扱うよう設計を更新した。
|
||||
|
||||
現行の分類は次の通り:
|
||||
- **core_required (7個)**: StringBox, IntegerBox, BoolBox, ArrayBox, MapBox, ConsoleBox, FileBox
|
||||
- **core_optional (8個)**: FloatBox, NullBox, PathBox, RegexBox, MathBox, TimeBox, JsonBox, TomlBox
|
||||
- **特殊型 (4個)**: FunctionBox, ResultBox, MethodBox, MissingBox
|
||||
|
||||
最終的なソース・オブ・トゥルースは `src/runtime/core_box_ids.rs` の `CoreBoxId::is_core_required()` /
|
||||
`CoreBoxId::category()` であり、このドキュメントはその意図を補足する設計メモとして位置づけている。
|
||||
|
||||
## Phase 106: 設計統一(案B)
|
||||
|
||||
### 責務分離原則
|
||||
|
||||
- **CoreBoxId**: 「必須かどうか」の判定(is_core_required() / category())
|
||||
- selfhost/default では File が必須
|
||||
- 将来 minimal/no-fs プロファイルでは optional に変更可能
|
||||
- **provider_lock**: 「FileBox provider を登録・読む」のみ(シンプルなロック機構)
|
||||
- **PluginHost**: startup 時に CoreBoxId.is_core_required() で provider をチェック
|
||||
- 未登録なら CoreInitError::MissingService で fail-fast
|
||||
|
||||
### Ring0.FsApi との関係(Phase 107 延期)
|
||||
|
||||
Ring0.FsApi(write 能力あり)と FileIo trait(read-only)の統合は、
|
||||
Phase 107+ で実施予定。現在は概念を分離したまま。
|
||||
|
||||
(理由: Phase 106 は provider_lock 整理に専念し、FsApi 統合は別 phase で)
|
||||
|
||||
### 5.4 今後の拡張
|
||||
|
||||
新しいメソッド追加は `src/runtime/core_box_ids.rs` の編集のみで完結:
|
||||
|
||||
Reference in New Issue
Block a user