## 課題 / 目的\nOpenScreenの録画中に空き容量が尽きて全体を撮り直す事態を防ぐ。危険水準の前に現在の録画を正常確定して一時停止し、容量確保後に同じ撮影セッションへ続きを追加できるようにする。\n\n## 利用者 / 成功状態\n- 利用者: 長時間の画面録画を行う本人\n- 成功状態: 低容量で途中までの映像を失わず停止し、容量確保後に再開でき、前後の区間を同じプロジェクトで扱える。\n\n## 対象範囲\n- 録画中の保存先ボリューム空き容量監視\n- 安全余裕を下回る前の自動停止と部分録画の正常確定\n- 低容量停止理由と再開方法の表示\n- 同一撮影セッションへの後続セグメント追加\n- 既存ローカル録画の回帰防止\n\n## 対象外\n- 停止中の映像記録\n- 容量が完全に枯渇した後の破損ファイル完全復旧\n- 自動ファイル削除\n- クラウド直接録画\n- 人間承認前のリリース・インストール\n\n## 仕様上の判断\n- 固定値だけでなく、現在の書き込み速度から「正常確定に必要な時間」を見込んだ安全余裕で停止する。\n- 自動停止時点までの録画を必ず既存のfinalize経路で確定する。\n- 容量確保後の再開は明示操作とし、誤って録画が始まらないようにする。\n- 前後の動画は非破壊の複数セグメントとして同一プロジェクトへ並べる。\n- OSや他アプリの書き込みがあるため容量枯渇を絶対に防ぐ保証はしない。\n\n## 完了条件\n- [ ] 録画先と同じボリュームの空き容量を録画中に監視する。\n- [ ] 危険水準到達時に停止処理を一度だけ発火し、録画済み区間を確定する。\n- [ ] 停止理由と「容量を空けて再開」の導線が表示される。\n- [ ] 再開した区間が同じプロジェクトへ時系列順に追加される。\n- [ ] 停止中の空白が記録されないことを表示する。\n- [ ] 手動停止、通常録画、異常停止復旧に回帰がない。\n- [ ] unit、typecheck(app/tests)、lint、関連build、macOS実機E2Eの証跡がある。\n\n## テスト / CI計画\n- TC-LOWDISK-01 空き容量応答と保存先ボリューム解決\n- TC-LOWDISK-02 閾値到達時の一度だけの安全停止\n- TC-LOWDISK-03 finalize失敗時の誤成功防止\n- TC-LOWDISK-04 容量回復後の明示再開と同一プロジェクトへの追加\n- TC-LOWDISK-05 手動停止・正常録画・異常停止の回帰\n- TC-LOWDISK-06 macOS実録画での停止・再開・編集確認\n\n## Readiness\n- System Readiness: pass(DB・認証・外部連携なし。正本は既存プロジェクトファイルと録画セグメント)\n- Design Readiness: small-change(既存HUDの状態表示と再開導線のみ。大幅な画面設計変更なし)\n- unresolved: 0\n- SYSTEM_READY: yes\n- DESIGN_READY: yes(既存コンポーネントに沿う小規模変更として委任済み)\n- ユーザー最終確認: 2026-09-09 「実装してほしい」\n- 人間承認点: merge / release / インストール / 削除\n\n## 実装計画\n1. 既存の停止・finalize・プロジェクト生成経路を調査する。\n2. 空き容量IPCと監視判断をテストから実装する。\n3. 自動停止状態と再開セッションを接続する。\n4. 関連テストと実機E2Eを実行する。\n5. checker確認、Issueログ、commit、push、Draft PRまで行う。\n\n## ナレッジログ\n- Issue #7はScreenCaptureKit異常停止時の部分保存を扱う。今回の低容量停止は原因と再開要件が異なるため別Issueとする。\n- Cursor Context ScoutはAPIキー未設定のため利用できず、直接ソース探索へ切り替えた。\n
Activity
nanameru commentedon Sep 9, 2026
テストケース
正本:
test-board.yamlnanameru commentedon Sep 9, 2026
テスト結果(2026-09-09)
検証: 全183テストファイル(2,169件)成功、typecheck成功、Biome成功、
npm run build-vite成功。macOS 26.3の隔離データ領域で、5.067秒の初回録画と5.010秒の続き録画が2クリップ・合計10.077秒として連続することを確認。判断: 録画ビットレートに対して十分な終了処理猶予を確保するため、保存先の空き容量を5秒間隔で確認し、標準では1 GiB以下で安全停止する。開発・E2E時だけ環境変数で閾値を差し替え可能。
nanameru commentedon Sep 9, 2026
運用上の制約
横断ルールの
【repo名】先頭指定と、当リポジトリのsemantic-pr(タイトル先頭にfeat:等を要求)が競合した。CIを再現可能な品質ゲートとして通すため、PRタイトルはfeat: 【openscreen】...とし、リポジトリ識別子を保持した。nanameru commentedon Sep 9, 2026
完了ログ
de99dc25nanameru commentedon Sep 9, 2026
仕様更新: 録画ライブラリ方式(ユーザー承認 2026-09-09)
目的
録画の再開だけを特殊扱いせず、保存済み録画をMediaから選び、任意のプロジェクトのタイムラインへ再利用できるようにする。
受け入れ条件
データ・UI境界
recordingsディレクトリと.session.jsonBeads TODO
herdr-bpuherdr-bpu.1〜herdr-bpu.6feat: add reusable recording library Refs #12
[-]【openscreen】容量不足前に録画を保存して続きから再開できるようにする[/-][+]【openscreen】容量不足録画を保存ライブラリから再利用できるようにする[/+]nanameru commentedon Sep 9, 2026
実装更新(commit 74858a7)
検証: 対象5ファイル41テスト、build-vite、変更ファイルBiome、i18n、docsは成功。全テストは146 suites / 1,864 tests成功後、端末の空き容量枯渇(ENOSPC)で残り37 suitesを開始できず。MediaライブラリのmacOS実機E2Eも空き1 GiB未満の安全基準により保留。test-boardのTC-LOWDISK-04をdoingとして残した。
nanameru commentedon Sep 9, 2026
CI最終結果: 全チェック成功。Test / Build / Lint / Type Check / test typecheck / Docs / AppStream / Swift / Rust(macOS・Linux・Windows)/ diagnostic bundle / PR title validation を含む。Draft PRのまま、マージ・配布は未実施。残りは空き容量を確保した後のmacOS実機UI確認(TC-LOWDISK-04)。
fix: cache recording duration before timeline insert Refs #12
test: record macOS recording library E2E Refs #12
nanameru commentedon Sep 9, 2026
macOS実機E2E結果(2026-09-09)
dd51207aで検証記録と test-board を更新しました。OPENSCREEN_TEST_USER_DATA_DIRを使用OPENSCREEN_LOW_DISK_STOP_BYTES=3000000000で容量不足を再現stopReason: low-diskを保存returnProjectIdを保持して同じプロジェクトへ復帰0:05.0、6 MB、容量不足前に保存と表示未確認範囲: system audio、microphone、webcam、export、packaged app、Windows、Linux。