69 lines
4.0 KiB
Markdown
69 lines
4.0 KiB
Markdown
# Workflow を memory crate から独立させる
|
||
|
||
## 背景
|
||
|
||
`tickets/workflow-directory-layout.md` で Workflow の物理配置を `.insomnia/workflow/` に分離した。これにより Workflow は概念上 memory state(session-derived / generated)と別物として整理されたが、ソースコード上は依然として `crates/memory/` 配下に同居している:
|
||
|
||
- `crates/memory/src/workflow.rs`(`WorkflowRecord` / `WorkflowRegistry` / `WorkflowSource` / `load_workflows` / `WorkflowLoadError` / `WORKFLOW_DESCRIPTION_HARD_CAP` / `ResidentWorkflowEntry` / `ShadowedSkill`)
|
||
- `crates/memory/src/schema/workflow.rs`(`WorkflowFrontmatter`)
|
||
- `crates/memory/src/skill.rs`(Skill → Workflow projection)
|
||
- `crates/memory/src/linter/mod.rs::lint_workflow`(人間編集向けの workflow linter)
|
||
- `crates/memory/src/error.rs::LintError::WorkflowWriteForbidden`
|
||
|
||
memory crate のドメインは「decisions / requests / summary / knowledge / staging / consolidation」に絞り、Workflow は独立した crate に出す。`tickets/internal-worker-workflow.md` で内部 Worker の Workflow 化が予定されており、bundled default や `internal_role` 追加の置き場として独立 crate がある方が自然。
|
||
|
||
## 要件
|
||
|
||
### crate の分離
|
||
|
||
`crates/workflow/` を新設し、上記の Workflow 関連型 / 関数 / スキーマ / Skill projection / human-edit linter を移す。
|
||
|
||
- 新 crate からは memory crate に依存しないか、`WorkspaceLayout` 経由で薄く依存するに留める
|
||
- `crates/memory/` から workflow 関連の `pub use` 再エクスポートは削除(呼び出し側が新 crate を直接 import する)
|
||
- Workflow 用の linter は memory crate の `Linter` を共有しないでよい場合は単独で持つ。共有が必要なら共通部分を別 crate(例: `crates/lint-common/`)に切る判断を行う
|
||
|
||
### `WorkspaceLayout` の扱い
|
||
|
||
`workflow_dir()` / `workflow_path()` が memory crate に残るかは設計判断:
|
||
|
||
- memory crate に残し、workflow crate がそれを利用する形でよい
|
||
- 別 crate(例: `crates/workspace-layout/`)に切り出す場合は memory / workflow 両方が参照する形にする
|
||
|
||
どちらでもよいが、結果として循環依存を生まないこと。
|
||
|
||
### 既存 use site の更新
|
||
|
||
- `crates/pod/`(`pod.rs` / `prompt/system.rs` / `workflow/mod.rs`)
|
||
- `crates/tui/`
|
||
- その他 `memory::Workflow*` を import している箇所
|
||
|
||
これらが新 crate を import する形に書き換わる。
|
||
|
||
### Skill ingestion の所属
|
||
|
||
`SKILL.md` パーサと `WorkflowRecord` への projection は workflow crate に同居する。Skills は外部入力だが最終的に Workflow registry に流れるので、workflow crate を窓口にする方がレイヤとして自然。
|
||
|
||
### scope deny の整理
|
||
|
||
`crates/memory/src/scope.rs::deny_write_rules` は memory / knowledge / workflow の 3 ディレクトリを deny している。workflow crate 側で `.insomnia/workflow/` の deny を表明し、Pod 起動時に両方を合成する形にするか、あるいは scope deny は呼び出し側(pod)で集約する形に再設計する。
|
||
|
||
## 範囲外
|
||
|
||
- Workflow の機能変更(frontmatter schema 変更、resolver 改修等)
|
||
- bundled default Workflow 機構(`tickets/internal-worker-workflow.md` の対象)
|
||
- memory crate 内部の他モジュール再編
|
||
|
||
## 完了条件
|
||
|
||
- `crates/workflow/` crate が独立して存在し、`WorkflowRecord` / `WorkflowRegistry` / `load_workflows` / `WorkflowFrontmatter` / Skill projection / human-edit linter がそこに住む
|
||
- memory crate に workflow / skill 関連のソースが残っていない(reexport も無し)
|
||
- 既存テストが新構造で通る
|
||
- 既存呼び出し側(pod / tui 等)が新 crate を import する形に更新されている
|
||
- scope deny が memory / workflow を矛盾なく合成できる構成になっている
|
||
|
||
## 参照
|
||
|
||
- 直前: `tickets/workflow-directory-layout.md`(git log)
|
||
- 後続: `tickets/internal-worker-workflow.md`
|
||
- 関連: `docs/plan/workflow.md`
|