feat(phase110): FileHandleBox実装(ハンドルベース複数回アクセス)

Phase 110 完全実装完了:
- FileHandleBox struct で open → read/write → close の複数回アクセスをサポート
- 各インスタンスが独立した Ring0FsFileIo を保持
- Fail-Fast 原則:二重 open、close後アクセス、NoFsプロファイル全て即座にエラー
- RuntimeProfile 対応:Default で使用可能、NoFs で禁止

実装ファイル:
- src/boxes/file/handle_box.rs (新規, 450行)
- src/boxes/file/mod.rs (修正, export追加)

テスト: 7/7 PASS 
- test_filehandlebox_basic_write_read
- test_filehandlebox_double_open_error
- test_filehandlebox_closed_access_error
- test_filehandlebox_write_wrong_mode
- test_filehandlebox_multiple_writes
- test_filehandlebox_unsupported_mode
- test_filehandlebox_independent_instances

ドキュメント更新:
- core_boxes_design.md (Section 16 追加)
- ring0-inventory.md (Phase 110完了)
- CURRENT_TASK.md (Phase 110完了セクション)

設計原則:
- FileBox: ワンショット I/O(open/close隠蔽)
- FileHandleBox: ハンドルベース I/O(複数回アクセス対応)
- Ring0FsFileIo を内部で再利用

次フェーズ: Phase 111(append mode + metadata)

🤖 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 20:28:33 +09:00
parent bc1fce3dfe
commit acd1b54ef9
5 changed files with 695 additions and 5 deletions

View File

@ -579,13 +579,18 @@ Phase 106108 では FileBox provider_lock / Ring0FsFileIo / write/write_all
今後の候補フェーズ(優先度の高い順):
- **Phase 109: runtime profilesdefault/no-fs**
- **Phase 109: runtime profilesdefault/no-fs** (COMPLETED)
- `NYASH_PROFILE={default|no-fs}` などのプロファイル導入
- default では FileBox 必須、no-fs では FileBox provider 未登録(エラー文字列で通知)
- **Phase 110: FileHandleBox**
- **Phase 110: FileHandleBox** (COMPLETED - 2025-12-03)
- FileBox を「1ファイル専用」に保ちつつ、複数ファイル同時アクセスは FileHandleBox 側に切り出す
- Ring0FsFileIo を再利用してハンドル単位の管理を行う
- **Phase 111: Fs metadata 拡張**
- ハンドルベース複数回アクセス I/O 完全実装
- 実装: `src/boxes/file/handle_box.rs` (7テスト全PASS)
- API: open(path, mode) → read/write → close()
- プロファイル対応: Default ✅、NoFs ❌
- **Phase 111: Fs metadata 拡張 + append mode**
- FileHandleBox に append mode ("a") を追加
- `exists/metadata/canonicalize` を FileIo / FileBox 側にきちんとエクスポート
- Ring0.FsApi の stat 情報を Nyash 側から扱えるようにする