# creator-root-v1（作業場）契約

ライブラリの置き場は既定で作業場の `library/`。作業場が無いときは従来の `~/.akari/assets/` を使う。
`akari-assets list`（または `akari assets list`）の先頭行で実際の置き場を確認する。
以下の `<ライブラリの置き場>` はその表示先を指し、音源はその下の `audio/` に入る。

- 日付: 2026-08-02
- 状態: **v1 ドラフト・要オーナーレビュー**（設計方針はオーナー承認済み 2026-08-02。
  判断根拠・出典調査は非公開の内部記録で管理する）
- 前提: `contract-2026-07-25-project-structure-v0.md`（プロジェクト**内部**の置き場所規約。
  本契約はその**上の階層**を定めるもので、プロジェクト内部には一切触れない）、
  `contract-2026-07-25-memory-connection-v0.md`（§7 で同契約 §2 の保留裁定に回答する）、
  `contract-2026-07-17-data-contract-versioning.md`（版管理三原則の正本）
- スコープ: プロジェクト（動画 1 本）より上の階層 = **作業場（CreatorRoot）**の構造・所有権・
  誕生（初回起動動線）・可搬性・OS 別配置・既存プロジェクトの取り込み。
  **非スコープ**: チャンネル設計インタビューの中身（design.md の生成工程）、外部エージェントからの
  呼び出し規格（door）、テキスト出口への拡張 — いずれも将来の別契約（§10）

## 0. 位置づけ — 一言で言い切る

プロジェクトの上に「**作業場**」という階層を 1 つだけ新設する。作業場はクリエイター 1 人の
データ（プロジェクト・素材・設定・記憶）のすべてを収める**可視のフォルダ 1 個**であり、
アプリ本体ともマシン設定とも分離される。アプリは更新で丸ごと入れ替わってよいが、
作業場は**決して壊してはならない**。

## 1. 用語（固定）

| 用語 | 意味 |
|---|---|
| **作業場**（UI 用語）= **CreatorRoot**（設計用語） | クリエイター 1 人のデータ全体を収めるルートフォルダ。1 クリエイター = 1 作業場 |
| 孤児プロジェクト | 作業場の外で生まれたプロジェクト。**新規に作らないことが不変条件**（§6） |
| 養子縁組 | 既存の孤児プロジェクトを作業場の `videos/` へ移動して取り込むこと（§8） |
| お試しモード | 作業場なしのプロジェクト単体運用。動作は保証するが root 前提機能は無効（§9） |

## 2. 3 つの場所 — アプリとデータの分離

AKARI Video がマシン上に持ってよい場所は次の 3 つ**だけ**である:

| 場所 | macOS | Windows | 触る者 | 更新時 |
|---|---|---|---|---|
| アプリ本体（エンジン + 同梱物） | `/Applications/` 等 | `%LOCALAPPDATA%\Programs\` 等 | 誰も編集しない | 丸ごと入れ替え |
| マシン状態・設定 | `~/.akari/`（`AKARI_HOME` で上書き可）内に資格情報 `credentials.env` も置く | 同左（`%USERPROFILE%` 起点） | アプリのみ | 保持 |
| **作業場** | 既定 `~/Akari/`（2026-08-08 改訂。旧既定 `~/AkariVideo/` — §11 参照） | 既定 `%USERPROFILE%\Akari\` | 人間 + エージェント（§4 の所有権に従う） | **壊さない**（migration のみ） |

- マシン状態は `~/.akari/` に揃える（更新キャッシュ・接続マーカー・
  可搬 Node runtime・資格情報 `credentials.env` 等）。新たな隠し場所を増やさない
- 原則: マシン状態には**ユーザーの内容物（作品・素材・記憶）を置かない**。
  旧音源ライブラリの例外は 2026-09-21 の移行で回収した。素材は作業場 `library/` へ移し、
  マシン設定の `library-location.json` に置き場を固定する（作業場なし・同期フォルダは移さない）。

- **secrets（API キー・トークン類）はマシン設定にのみ置く**。作業場は可視・バックアップ・
  同期対象なので、secrets を混ぜてはならない
- Windows 実装注意 3 点: (a) 作業場の既定を「ドキュメント」配下にしない（OneDrive の
  Known Folder Move に動画素材が吸われる。ホーム直下が既定なのはこの回避のため）
  (b) `.akari/` はドット名でも Explorer で可視のため hidden 属性を付与する
  (c) パス長 260 制限 — プロジェクト名・チャンネル名は短く保つ（long path 前提にしない）
- アプリ本体は管理者権限なしで導入できる経路を維持する（既存の install.sh / shell 同梱方式）

## 3. 作業場の正準構造（`creator-root/v1`）

```
<作業場>/
├── akari.md                       # 憲法（規約・好み）。初回はスタブ生成
├── CLAUDE.md                      # 橋渡し（akari.md / design.md へ誘導）。初回はスタブ生成
├── AGENTS.md                      # 橋渡し（akari.md / design.md へ誘導）。初回はスタブ生成
├── channels/
│   └── <channel>/
│       ├── .akari/memory/word-book.json # 任意。チャンネル単語帳（word book v0 契約）
│       ├── design.md              # チャンネル設計書（任意。生成工程は非スコープ）
│       └── videos/
│           └── <project>/         # 動画プロジェクト（内部は project-structure-v0 のまま）
├── library/                       # 作業場共有の素材（プロジェクト非依存）
├── inbox/                         # 人間の投げ込み口（撮りっぱなし・メモ）
└── .akari/
    ├── root.json                  # 作業場マニフェスト（版数・チャンネル一覧・生成日）
    ├── connections.json           # provider・モデル・コスト承認ポリシーの作業場既定
    ├── memory/                    # スタイル学習・記憶（memory-connection の既定接続先 §7、word-book.json）
    └── cache/                     # 再生成可能物
```

- `CLAUDE.md` と `AGENTS.md` は Schema 層ではなく単なる橋渡し文書であり、`akari.md` の内容を複製しない。
- `root.json` は `{"schema": "creator-root/v1", ...}` を必須キーとする。
  **このファイルの存在 = そのフォルダが作業場である**の判定に使う（マーカー兼マニフェスト）
- 構造の変更は versioning 三原則に従い `creator-root/v2` として改訂する。アプリは自分の
  対応版より新しい作業場を**壊さず読み取り拒否**する（前方互換を装わない）
- `<channel>` はチャンネル未設計の初期状態では既定名 1 個（例: `my-channel/`）を自動生成する。
  design.md が空でも工場は既定値で動く

## 4. 所有権 4 層（誰が書いてよいか）

| 層 | 実体 | 起草 | 確定 | 規律 |
|---|---|---|---|---|
| Schema | `akari.md`・`design.md` | エージェント（対話起草） | **人間の承認** | 承認なしに書き換えない |
| Wiki | 企画書・レポート・索引 | エージェント | エージェント | 維持・更新してよい |
| Raw | `inbox/`・プロジェクト内 `assets/` | 人間 | 人間 | **アプリ・エージェントは書き込まない**（取り込み UI 経由の複製は可） |
| Generated | `.akari/` 全域 | 機械 | 機械 | 再生成可能に保つ。人間の手編集を前提にしない |

## 5. 誕生 — 初回起動動線

作業場は**アプリが作る**。ユーザーが手でフォルダを掘る動線を作ってはならない。

1. **接続** — LLM へのログイン / キー設定（保存先はマシン設定）。
   外部エージェント経由の利用（door・将来契約）ではこのステップをスキップできる設計とする
2. **場所** — 「作業場をどこに作りますか」1 問のみ。既定 `~/Akari/`（2026-08-08 改訂。§11）
3. **生成** — §3 の構造を生成（akari.md はスタブ・design.md は無し）。
   **生成完了の時点で動画制作を開始できる**こと（インタビュー等の追加ステップを挟まない）

- ②③は体験上 1 ステップ（確認 → 生成）。3 ステップ全体で数分以内・入力は場所の確認のみ
- 既存の作業場が見つかった場合（`root.json` 検出）は生成をスキップして開く。
  複数見つかった場合は選択させ、最後に開いた作業場をマシン設定に記録する

## 6. 不変条件（実装がどう変わっても守る）

1. **孤児プロジェクトを作らない**: アプリ・スキルが新規プロジェクトを作るとき、宛先は必ず
   開いている作業場の `channels/<channel>/videos/` とする
2. **Raw 不変**: `inbox/` とプロジェクト内 `assets/` にアプリ・エージェントが書き込まない
3. **secrets 不混入**: 作業場のどのファイルにも認証情報を書かない
4. **可搬性**: 作業場はフォルダ 1 個で自己完結し、丸ごと移動・コピーで別マシンでも開ける。
   作業場内のファイルに**作業場外への絶対パスを正本として書かない**
   （書く場合は Generated 層のキャッシュ扱い = 消えても再生成できること。
   例外は §7 の外部接続宣言 — これは「外部参照の明示的宣言」でありキャッシュではない）
5. **更新で壊さない**: アプリ更新は作業場に migration 以外の書き込みをしない。
   migration は版数（`root.json`）を見て明示的にのみ走る

## 7. memory-connection v0 の保留裁定への回答

`contract-2026-07-25-memory-connection-v0.md` §2 は「プロジェクト外の永続置き場所の
基底ディレクトリ（`~/.akari-video/` か `~/.akari/` か）」を保留していた。本契約で次のとおり
裁定し、同契約 §2 のこの保留項目を**置換**する:

- **ユーザーの内容物（memory・スタイル学習の実体）は隠しディレクトリに置かない**。
  既定の置き場は作業場の `.akari/memory/` とする
- 保留されていた「基底ディレクトリはどちらか」への回答は「**どちらでもない**」:
  ユーザー内容物の基底は作業場であり、隠し側（`~/.akari/` = 既存のマシン状態置き場）には
  マシン状態のみを置く。`~/.akari-video/` は新設しない
- 接続宣言（`connections.json`）の仕組みは不変。外部パス（自分の wiki 等）への接続宣言は
  引き続き可能で、**既定値だけ**が「外部パス」から「自作業場の `.akari/memory/`」に変わる

## 8. 養子縁組 — 既存プロジェクトの取り込み

- プロジェクトは project-structure-v0 により自己完結しているため、取り込みは
  **フォルダ移動のみ・変換なし**とする（コピーではなく移動を既定とし、元位置に残さない）
- 取り込み時にアプリが行ってよいのは: (a) 宛先 `channels/<channel>/videos/` への移動
  (b) `root.json` のプロジェクト一覧更新 (c) 破損検査（プロジェクトのマーカー確認 —
  ランチャーの scaffold 済み判定と同じ基準）— の 3 つだけ。プロジェクト内部のファイルには触れない
- 取り込み動線は CLI / GUI どちらからも可能にする（実装形は非スコープ）

## 9. お試しモード（作業場なし運用）

- 作業場が無い状態でのプロジェクト単体運用は**引き続き動作を保証する**
  （既存ユーザー・一時利用・検証用途）
- ただし作業場前提の機能（横断ダッシュボード・スタイル学習の既定保存・作業場 library）は
  無効でよい。アプリはお試しモード時に作業場の作成を**案内してよいが強制しない**
- お試しモードで作られたプロジェクトが将来の養子縁組（§8）で取り込めることを保証する

## 10. スコープ外（将来の別契約）

- チャンネル設計インタビュー（design.md の生成・更新工程）の製品機能化
- 外部エージェントからの呼び出し規格（door）: CLI / headless / 1 ターン実行の口
- テキスト出口への拡張（`persona/` / `outlets/` — creator-root/v2 候補）
- Windows インストーラの同等実装
- 作業場ダッシュボード UI の詳細（home 動線の実装契約側で扱う）

## 11. 改訂履歴

- **2026-08-08（タスク workspace-default-akari）**: §2・§5 の新規作業場の既定パスを
  `~/AkariVideo/`（Windows: `%USERPROFILE%\AkariVideo\`）から `~/Akari/`
  （Windows: `%USERPROFILE%\Akari\`）へ改訂。理由: 命名裁定（傘 = AkariLabs / 製品 = AKARI
  <能力> / データの家 = `~/Akari`）との整合。作業場の同定はフォルダ名でなく `root.json` の
  存在 + `~/.akari/creator-root.json` ポインタなので、既存の `~/AkariVideo` 作業場は
  無改造のまま動作する（§3・§6-1 不変）。
