4.0 KiB
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