yoi/tickets/workflow-directory-layout.md

129 lines
4.5 KiB
Markdown

# Workflow の物理配置を `.insomnia/workflow` に分離する
## 背景
現行の Workflow は `<workspace>/.insomnia/memory/workflow/<slug>.md` に配置される。これは実装上 memory subsystem の loader / linter に載せていた名残だが、概念上は不自然になっている。
Workflow は session-derived な記憶ではなく、人間が管理する手順・操作ポリシーである。一方で `.insomnia/memory/summary.md`、`decisions/`、`requests/`、`_staging/` は自動抽出・統合される memory state であり、ignore や書き込み禁止の扱いも異なる。
この混在により、`.insomnia/.gitignore` で `memory` を ignore すると project-authored Workflow まで Git 管理から外れる。また、memory write tool が Workflow 書き込みを禁止するなど、「memory 配下にあるが memory ではない」ものとして扱う歪みが出ている。
Knowledge は既に `.insomnia/knowledge/<slug>.md` として `memory/` の外にある。Workflow も同様に `.insomnia/workflow/<slug>.md` を canonical path とし、memory state から分離する。
## 要件
### canonical path の変更
Workflow の標準配置を以下に変更する。
```text
<workspace>/.insomnia/workflow/<slug>.md
```
旧配置は以下。
```text
<workspace>/.insomnia/memory/workflow/<slug>.md
```
新規作成・ドキュメント・補完・resolver の説明は新配置を使う。
### 互換読み取り
移行期間のため、loader は当面旧配置も読む。
- 新配置 `.insomnia/workflow/<slug>.md` を優先する
- 旧配置 `.insomnia/memory/workflow/<slug>.md` も fallback として読む
- 同じ slug が両方にある場合は新配置を採用する
- 旧配置を読んだ場合、可能なら warning / notification / log のいずれかで migration hint を出す
旧配置の完全廃止は本チケットでは行わない。廃止が必要になったら別 ticket とする。
### linter / registry / completion
- Workflow linter は新配置を検査できる
- `requires` の Knowledge 参照検査は従来通り維持する
- `WorkflowRegistry` は source path として新旧どちらも保持できる
- `/<slug>` completion / invocation は新配置・旧配置の双方から読める
- resident workflow (`model_invokation: true`) の広告も新配置を対象にする
### memory state との分離
`.insomnia/memory/` は generated / session-derived state として扱い、Workflow は含めない。
推奨される layout:
```text
.insomnia/
manifest.toml
workflow/
auto-maintain.md
worktree-workflow.md
knowledge/
<slug>.md
memory/
summary.md
decisions/
requests/
_staging/
```
`.insomnia/.gitignore``memory` 丸ごと ignore ではなく、generated memory state のみを ignore する形にする。
例:
```gitignore
/memory/_staging/
/memory/summary.md
/memory/decisions/
/memory/requests/
```
### 既存ファイルの移行
workspace に既存 Workflow がある場合、新配置へ移す。
対象例:
```text
.insomnia/memory/workflow/auto-maintain.md
.insomnia/memory/workflow/worktree-workflow.md
```
移行後:
```text
.insomnia/workflow/auto-maintain.md
.insomnia/workflow/worktree-workflow.md
```
移行は Git 管理対象として扱えるようにする。
## 範囲外
- Workflow の自動生成ポリシー変更
- Workflow frontmatter schema の大幅変更
- Workflow DSL 化
- 旧配置の即時廃止
- memory tool で Workflow を書けるようにする変更
- 内部 Worker Workflow 化そのもの(`tickets/internal-worker-workflow.md` の対象)
## 完了条件
- Workflow の canonical path が `.insomnia/workflow/<slug>.md` として実装・文書化されている
- 既存の `.insomnia/memory/workflow/<slug>.md` も互換読み取りできる
- 新旧両方に同じ slug がある場合、新配置が優先される
- Workflow linter / loader / completion / invocation のテストが新配置をカバーしている
- `.insomnia/.gitignore` が generated memory state のみを ignore し、`.insomnia/workflow/*.md` を Git 管理できる
- この workspace の既存 Workflow が `.insomnia/workflow/` に移されている
- `docs/plan/workflow.md` や関連コメントが新配置に更新されている
## 参照
- `docs/plan/workflow.md`
- `crates/memory/src/workspace.rs`
- `crates/memory/src/workflow.rs`
- `crates/pod/src/workflow/mod.rs`
- `tickets/auto-maintain-workflow.md`
- `tickets/internal-worker-workflow.md`