diff --git a/TODO.md b/TODO.md index f49cb45e..c9f92679 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,6 @@ - Workflow / Skills - 内部 Worker / 内部 Pod の Workflow 化 → [tickets/internal-worker-workflow.md](tickets/internal-worker-workflow.md) - 半自動開発運用 Workflow → [tickets/auto-maintain-workflow.md](tickets/auto-maintain-workflow.md) - - Workflow を memory crate から独立させる → [tickets/workflow-crate-extraction.md](tickets/workflow-crate-extraction.md) - Prompt / Workflow 評価メトリクスと改善 Offer → [tickets/prompt-eval-metrics.md](tickets/prompt-eval-metrics.md) - Permission: allow-all 既定 policy への整理 → [tickets/permission-default-policy.md](tickets/permission-default-policy.md) - Pod CLI: マニフェスト関連フラグの整理 → [tickets/pod-cli-manifest-flags.md](tickets/pod-cli-manifest-flags.md) diff --git a/tickets/workflow-crate-extraction.md b/tickets/workflow-crate-extraction.md deleted file mode 100644 index 45e0b49b..00000000 --- a/tickets/workflow-crate-extraction.md +++ /dev/null @@ -1,73 +0,0 @@ -# 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` - -## レビュー状態 - -- `7db4146 refactor: extract workflow crate` を review 済み。結果は `tickets/workflow-crate-extraction.review.md`。 -- 判断: approve / merge 可。 diff --git a/tickets/workflow-crate-extraction.review.md b/tickets/workflow-crate-extraction.review.md deleted file mode 100644 index 3573a6ba..00000000 --- a/tickets/workflow-crate-extraction.review.md +++ /dev/null @@ -1,29 +0,0 @@ -# Review: Workflow crate extraction - -## 対象 - -- Ticket: `tickets/workflow-crate-extraction.md` -- Branch: `workflow-crate-extraction` -- Reviewed commit: `7db4146 refactor: extract workflow crate` - -## 確認内容 - -- `crates/workflow/` が workspace member として追加され、Workflow loader / registry / frontmatter schema / Skill ingestion / human-edit linter / workflow scope deny helper を持つ。 -- `WorkflowRecord`, `WorkflowRegistry`, `WorkflowSource`, `WorkflowLoadError`, `ResidentWorkflowEntry`, `ShadowedSkill`, `WorkflowFrontmatter`, `SkillRecord`, `load_workflows`, `load_skills_from_dir` は `workflow` crate から export される。 -- workflow crate は memory crate へは `WorkspaceLayout` のためだけに依存している。Workflow 用 slug / lint error / frontmatter split は workflow crate 側に持ち、memory crate の workflow-specific API へ依存していない。 -- memory crate から `workflow.rs`, `skill.rs`, `schema/workflow.rs` と re-export が削除されている。 -- memory linter から `lint_workflow` が削除され、human-edit workflow linter は `workflow::WorkflowLinter` に移っている。 -- memory scope deny は memory / knowledge のみを表明し、workflow crate が `.insomnia/workflow/` の deny を表明する。Pod 起動時に両方を合成している。 -- pod 側の Workflow registry / resident workflow / Skill ingestion / system prompt rendering / workflow resolver は `workflow_crate` を直接 import する形に更新されている。 -- ticket 範囲外の Workflow schema 変更、resolver 機能変更、bundled default Workflow、reasoning / prune 変更は入っていない。 - -## 検証 - -- `cargo test -p workflow -p memory -p pod` passed -- `cargo fmt --check` failed due existing unrelated rustfmt diffs in `llm-worker`, `session-store`, and `tui`; this ticket's changed files were formatted directly with `rustfmt --edition 2024`. - -## 判断 - -Approve. - -Workflow domain code is now isolated in `crates/workflow/`, memory no longer re-exports or owns Workflow / Skill modules, and scope deny composition is explicit between memory and workflow. The remaining dependency on memory is limited to `WorkspaceLayout`, matching the ticket's allowed design point.