diff --git a/.gitignore b/.gitignore index 084950e..0cc8ede 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,19 @@ coverage/ # TAKT config (user data) .takt/ +!.takt/config.yaml +!.takt/pieces/ +!.takt/pieces/** +!.takt/personas/ +!.takt/personas/** +!.takt/policies/ +!.takt/policies/** +!.takt/knowledge/ +!.takt/knowledge/** +!.takt/instructions/ +!.takt/instructions/** +!.takt/output-contracts/ +!.takt/output-contracts/** task_planning/ diff --git a/CHANGELOG.md b/CHANGELOG.md index d9c7cd5..e60cf0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,260 +1,284 @@ # Changelog +[日本語](./docs/CHANGELOG.ja.md) + All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## [0.18.0] - 2026-02-17 + +### Added + +- **`deep-research` builtin piece**: Multi-angle research workflow with four steps — plan, deep-dive, analyze, and synthesize +- Project-level `.takt/` facets (pieces, personas, policies, knowledge, instructions, output-contracts) are now version-controllable (#286) +- New research facets added: research policy, knowledge, comparative-analysis knowledge, dedicated persona, and instructions + +### Changed + +- Refactored the `research` piece — separated rules and knowledge embedded in the persona into policy, knowledge, and instruction files, conforming to the faceted design +- Added knowledge/policy references to existing pieces (expert, expert-cqrs, backend, backend-cqrs, frontend) + +### Fixed + +- Fixed a bug where facet directories were not tracked because `.takt/` path prefix was written with `.takt/` prefix in the `.takt/.gitignore` template (dotgitignore) + +### Internal + +- Created knowledge facet style guide (`KNOWLEDGE_STYLE_GUIDE.md`) +- Added regression tests for dotgitignore patterns + ## [0.17.3] - 2026-02-16 ### Added -- ビルトインの AI アンチパターンポリシーとフロントエンドナレッジに API クライアント生成の一貫性ルールを追加 — 生成ツール(Orval 等)が存在するプロジェクトでの手書きクライアント混在を検出 +- Added API client generation consistency rules to builtin AI anti-pattern policy and frontend knowledge — detects handwritten clients mixed into projects where generation tools (e.g., Orval) exist ### Fixed -- タスクストアのロック解放時に EPERM クラッシュが発生する問題を修正 — ファイルベースロックからインメモリガードに置き換え +- Fixed EPERM crash when releasing task store locks — replaced file-based locking with in-memory guard ### Internal -- e2e テストの vitest 設定を共通化し、forceExit オプション追加でゾンビワーカーを防止 +- Unified vitest configuration for e2e tests and added `forceExit` option to prevent zombie workers ## [0.17.2] - 2026-02-15 ### Added -- `expert-mini`、`expert-cqrs-mini` ピースを追加 — Expert ピースの軽量版として、plan → implement → 並列レビュー(AI アンチパターン+スーパーバイザー)→ 修正のワークフローを提供 -- ピースカテゴリの「⚡ Mini」「🔧 エキスパート」に新ピースを追加 +- **`expert-mini` and `expert-cqrs-mini` pieces**: Lightweight variants of Expert pieces — plan → implement → parallel review (AI anti-pattern + supervisor) → fix workflow +- Added new pieces to "Mini" and "Expert" piece categories ### Fixed -- パーミッションモード未解決時にエラーをスローしていた問題を修正 — `readonly` にフォールバックするように変更 +- Fixed an error being thrown when permission mode could not be resolved — now falls back to `readonly` ## [0.17.1] - 2026-02-15 ### Changed -- `.takt/.gitignore` テンプレートをホワイトリスト方式に変更 — デフォルトで全ファイルを無視し、`config.yaml` のみを追跡対象に。新しいファイルが追加されても ignore 漏れが発生しない +- Changed `.takt/.gitignore` template to allowlist approach — ignores all files by default and tracks only `config.yaml`. Prevents ignore gaps when new files are added ## [0.17.0] - 2026-02-15 ### Added -- **mini ピースシリーズ**: `default-mini`、`frontend-mini`、`backend-mini`、`backend-cqrs-mini` を追加 — `coding`/`minimal` の後継として、並列レビュー(AI アンチパターン+スーパーバイザー)付きの軽量開発ピースを提供 -- ピースカテゴリに「⚡ Mini」カテゴリを追加 -- `supervisor-validation` 出力契約を追加 — 要件充足チェックテーブル(Requirements Fulfillment Check)で要件ごとにコード根拠を提示する形式 -- `getJudgmentReportFiles()`: `use_judge` フラグにより Phase 3 ステータス判定の対象レポートをフィルタリング可能に -- Output contract に finding_id トラッキングを追加(new/persists/resolved セクションによる指摘の追跡) +- **Mini piece series**: Added `default-mini`, `frontend-mini`, `backend-mini`, `backend-cqrs-mini` — lightweight development pieces with parallel review (AI anti-pattern + supervisor) as successors to `coding`/`minimal` +- Added "Mini" category to piece categories +- **`supervisor-validation` output contract**: Requirements Fulfillment Check table format that presents code evidence per requirement +- **`getJudgmentReportFiles()`**: Phase 3 status judgment target reports can now be filtered via `use_judge` flag +- Added `finding_id` tracking to output contracts (new/persists/resolved sections for tracking findings across iterations) ### Changed -- **BREAKING: `coding` ピースと `minimal` ピースを削除** — mini ピースシリーズに置き換え。`coding` → `default-mini`、`minimal` → `default-mini` への移行を推奨 -- **BREAKING: Output contract を item 形式に統一** — `use_judge`(boolean)と `format`(string)フィールドを必須化し、`OutputContractLabelPath`(label:path 形式)を廃止 -- ランタイム環境ディレクトリを `.runtime` から `.takt/.runtime` に移動 -- スーパーバイザーの要件充足検証を強化: 要件を個別に抽出し、コード(file:line)に対して1件ずつ検証する方式に変更 — 「おおむね完了」は APPROVE の根拠にならない +- **BREAKING: Removed `coding` and `minimal` pieces** — replaced by the mini piece series. Migration: `coding` → `default-mini`, `minimal` → `default-mini` +- **BREAKING: Unified output contract to item format** — `use_judge` (boolean) and `format` (string) fields are now required; `OutputContractLabelPath` (label:path format) is removed +- Moved runtime environment directory from `.runtime` to `.takt/.runtime` +- Enhanced supervisor requirements verification: extracts requirements individually and verifies one-by-one against code (file:line) — "roughly complete" is no longer valid grounds for APPROVE ### Fixed -- クローン/worktree ディレクトリの削除にリトライ機構を追加(`maxRetries: 3`, `retryDelay: 200`)— ファイルロックによる一時的な削除失敗を軽減 +- Added retry mechanism for deleting clone/worktree directories (`maxRetries: 3`, `retryDelay: 200`) — reduces transient deletion failures caused by file locks ### Internal -- `review-summary` 出力契約を削除(`supervisor-validation` に統合) -- 全ビルトインピース、e2e フィクスチャ、テストを output contract の新形式に更新 +- Removed `review-summary` output contract (consolidated into `supervisor-validation`) +- Updated all builtin pieces, e2e fixtures, and tests to the new output contract format ## [0.16.0] - 2026-02-15 ### Added -- **プロバイダー別パーミッションプロファイル(`provider_profiles`)**: グローバル設定(`~/.takt/config.yaml`)およびプロジェクト設定(`.takt/config.yaml`)でプロバイダーごとのデフォルトパーミッションモードとムーブメント単位のオーバーライドを定義可能に — 5段階の優先順位解決(project override → global override → project default → global default → `required_permission_mode` 下限補正) +- **Provider-specific permission profiles (`provider_profiles`)**: Define default permission modes per provider and per-movement overrides in global (`~/.takt/config.yaml`) and project (`.takt/config.yaml`) config — 5-level priority resolution (project override → global override → project default → global default → `required_permission_mode` floor) ### Changed -- **BREAKING: `permission_mode` → `required_permission_mode`**: ムーブメントの `permission_mode` フィールドを `required_permission_mode` にリネーム — 下限(フロア)として機能し、実際のパーミッションモードは `provider_profiles` で解決される設計に変更。旧 `permission_mode` は `z.never()` で拒否されるため後方互換性なし -- ビルトイン `config.yaml` テンプレートを全面リライト: コメント整理、`provider_profiles` の説明と使用例を追加、OpenCode 関連設定の追加 +- **BREAKING: `permission_mode` → `required_permission_mode`**: Renamed movement's `permission_mode` field to `required_permission_mode` — acts as a floor value; the actual permission mode is resolved via `provider_profiles`. Old `permission_mode` is rejected by `z.never()`, no backward compatibility +- Rewrote builtin `config.yaml` template: reorganized comments, added `provider_profiles` description and examples, added OpenCode-related settings ### Internal -- プロバイダープロファイル関連のテスト追加(global-provider-profiles, project-provider-profiles, permission-profile-resolution, options-builder) -- 並行実行テストに不足していた `loadProjectConfig` モックを追加 +- Added tests for provider profile resolution (global-provider-profiles, project-provider-profiles, permission-profile-resolution, options-builder) +- Added missing `loadProjectConfig` mock to parallel execution tests ## [0.15.0] - 2026-02-15 ### Added -- **ランタイム環境プリセット**: `piece_config.runtime.prepare` およびグローバル設定の `runtime.prepare` で、ピース実行前に環境準備スクリプトを自動実行可能に — ビルトインプリセット(`gradle`, `node`)で依存解決・キャッシュ設定を `.runtime/` ディレクトリに隔離 -- **ループモニターの judge インストラクション**: `loop_monitors` の judge 設定で `instruction_template` フィールドをサポート — ループ判定の指示をインストラクションファセットとして外部化し、ビルトインピース(expert, expert-cqrs)に適用 +- **Runtime environment presets**: `piece_config.runtime.prepare` and global config `runtime.prepare` allow environment preparation scripts to run automatically before piece execution — builtin presets (`gradle`, `node`) isolate dependency resolution and cache setup to the `.runtime/` directory +- **Loop monitor judge instruction**: `loop_monitors` judge config now supports `instruction_template` field — externalizes loop judgment instructions as an instruction facet, applied to builtin pieces (expert, expert-cqrs) ### Internal -- ランタイム環境関連のテスト追加(runtime-environment, globalConfig-defaults, models, provider-options-piece-parser) -- provider e2e テスト追加(runtime-config-provider) +- Added runtime environment tests (runtime-environment, globalConfig-defaults, models, provider-options-piece-parser) +- Added provider e2e test (runtime-config-provider) ## [0.14.0] - 2026-02-14 ### Added -- **`takt list` インストラクトモード (#267)**: 既存ブランチに対して追加指示を行えるインストラクトモードを追加 — 会話ループで要件を詳細化してからピース実行が可能に -- **`takt list` 完了タスクアクション (#271)**: 完了タスクに対する diff 表示・ブランチ操作(マージ、削除)を追加 -- **Claude サンドボックス設定**: `provider_options.claude.sandbox` でサンドボックスの除外コマンド(`excluded_commands`)やサンドボックス無効化(`allow_unsandboxed_commands`)を設定可能に -- **`provider_options` のグローバル/プロジェクト設定**: `provider_options` を `~/.takt/config.yaml`(グローバル)および `.takt/config.yaml`(プロジェクト)で設定可能に — ピースレベル設定の最低優先フォールバックとして機能 +- **`takt list` instruct mode (#267)**: Added instruct mode for issuing additional instructions to existing branches — refine requirements through a conversation loop before piece execution +- **`takt list` completed task actions (#271)**: Added diff view and branch operations (merge, delete) for completed tasks +- **Claude sandbox configuration**: `provider_options.claude.sandbox` supports `excluded_commands` and `allow_unsandboxed_commands` +- **`provider_options` global/project config**: `provider_options` can now be set in `~/.takt/config.yaml` (global) and `.takt/config.yaml` (project) — acts as lowest-priority fallback for piece-level settings ### Changed -- **provider/model の解決ロジックを AgentRunner に集約**: provider 解決でプロジェクト設定をカスタムエージェント設定より優先するよう修正。ステップレベルの `stepModel` / `stepProvider` による上書きを追加 -- **ポストエクスキューションの共通化**: インタラクティブモードとインストラクトモードで post-execution フロー(auto-commit, push, PR 作成)を `postExecution.ts` に共通化 -- **スコープ縮小防止策をインストラクションに追加**: plan, ai-review, supervise のインストラクションに要件の取りこぼし検出を追加 — plan では要件ごとの「変更要/不要」判定と根拠提示を必須化、supervise では計画レポートの鵜呑み禁止 +- **Consolidated provider/model resolution into AgentRunner**: Fixed provider resolution to prioritize project config over custom agent config. Added step-level `stepModel`/`stepProvider` overrides +- **Unified post-execution flow**: Shared `postExecution.ts` for interactive mode and instruct mode (auto-commit, push, PR creation) +- **Added scope-narrowing prevention to instructions**: plan, ai-review, and supervise instructions now require detecting missed requirements — plan mandates per-requirement "change needed/not needed" judgments with rationale, supervise prohibits blindly trusting plan reports ### Fixed -- インタラクティブモードの選択肢が非同期実行時に表示されてしまうバグを修正 (#266) -- OpenCode のパラレル実行時にセッション ID を引き継げない問題を修正 — サーバーをシングルトン化し並列実行時の競合を解消 -- OpenCode SDK サーバー起動タイムアウトを 30 秒から 60 秒に延長 +- Fixed a bug where interactive mode options were displayed during async execution (#266) +- Fixed OpenCode session ID not being carried over during parallel execution — server singleton prevents race conditions in parallel runs +- Extended OpenCode SDK server startup timeout from 30 seconds to 60 seconds ### Internal -- タスク管理の大規模リファクタリング: `TaskRunner` の責務を `TaskLifecycleService`、`TaskDeletionService`、`TaskQueryService` に分離 -- `taskActions.ts` を機能別に分割: `taskBranchLifecycleActions.ts`、`taskDiffActions.ts`、`taskInstructionActions.ts`、`taskDeleteActions.ts` -- `postExecution.ts`、`taskResultHandler.ts`、`instructMode.ts`、`taskActionTarget.ts` を新規追加 -- ピース選択ロジックを `pieceSelection/index.ts` に集約(`selectAndExecute.ts` から抽出) -- テスト追加: instructMode, listNonInteractive-completedActions, listTasksInteractiveStatusActions, option-resolution-order, taskInstructionActions, selectAndExecute-autoPr 等を新規・拡充 -- E2E テストに Claude Code サンドボックス対応オプション(`dangerouslyDisableSandbox`)を追加 -- `OPENCODE_CONFIG_CONTENT` を `.gitignore` に追加 +- Large-scale task management refactor: split `TaskRunner` responsibilities into `TaskLifecycleService`, `TaskDeletionService`, and `TaskQueryService` +- Split `taskActions.ts` by feature: `taskBranchLifecycleActions.ts`, `taskDiffActions.ts`, `taskInstructionActions.ts`, `taskDeleteActions.ts` +- Added `postExecution.ts`, `taskResultHandler.ts`, `instructMode.ts`, `taskActionTarget.ts` +- Consolidated piece selection logic into `pieceSelection/index.ts` (extracted from `selectAndExecute.ts`) +- Added/expanded tests: instructMode, listNonInteractive-completedActions, listTasksInteractiveStatusActions, option-resolution-order, taskInstructionActions, selectAndExecute-autoPr, etc. +- Added Claude Code sandbox option (`dangerouslyDisableSandbox`) to E2E tests +- Added `OPENCODE_CONFIG_CONTENT` to `.gitignore` ## [0.13.0] - 2026-02-13 ### Added -- **Team Leader ムーブメント**: ムーブメント内でチームリーダーエージェントがタスクを動的にサブタスク(Part)へ分解し、複数のパートエージェントを並列実行する新しいムーブメントタイプ — `team_leader` 設定(persona, maxParts, timeoutMs, partPersona, partEdit, partPermissionMode)をサポート (#244) -- **構造化出力(Structured Output)**: エージェント呼び出しに JSON Schema ベースの構造化出力を導入 — タスク分解(decomposition)、ルール評価(evaluation)、ステータス判定(judgment)の3つのスキーマを `builtins/schemas/` に追加。Claude / Codex 両プロバイダーで対応 (#257) -- **`provider_options` ピースレベル設定**: ピース全体(`piece_config.provider_options`)および個別ムーブメントにプロバイダー固有オプション(`codex.network_access`、`opencode.network_access`)を設定可能に — 全ビルトインピースに Codex/OpenCode のネットワークアクセスを有効化 -- **`backend` ビルトインピース**: バックエンド開発特化のピースを新規追加 — バックエンド、セキュリティ、QA の並列専門家レビュー対応 -- **`backend-cqrs` ビルトインピース**: CQRS+ES 特化のバックエンド開発ピースを新規追加 — CQRS+ES、セキュリティ、QA の並列専門家レビュー対応 -- **AbortSignal によるパートタイムアウト**: Team Leader のパート実行にタイムアウト制御と親シグナル連動の AbortSignal を追加 -- **エージェントユースケース層**: `agent-usecases.ts` にエージェント呼び出しのユースケース(`decomposeTask`, `executeAgent`, `evaluateRules`)を集約し、構造化出力の注入を一元管理 +- **Team Leader movement**: New movement type where a team leader agent dynamically decomposes a task into sub-tasks (Parts) and executes multiple part agents in parallel — supports `team_leader` config (persona, maxParts, timeoutMs, partPersona, partEdit, partPermissionMode) (#244) +- **Structured Output**: Introduced JSON Schema-based structured output for agent calls — three schemas for task decomposition, rule evaluation, and status judgment added to `builtins/schemas/`. Supported by both Claude and Codex providers (#257) +- **`provider_options` piece-level config**: Provider-specific options (`codex.network_access`, `opencode.network_access`) can now be set at piece level (`piece_config.provider_options`) and individual movements — Codex/OpenCode network access enabled in all builtin pieces +- **`backend` builtin piece**: New backend development piece — parallel specialist review by backend, security, and QA reviewers +- **`backend-cqrs` builtin piece**: New CQRS+ES backend development piece — parallel specialist review by CQRS+ES, security, and QA reviewers +- **AbortSignal for part timeouts**: Added timeout control and parent signal propagation via AbortSignal for Team Leader part execution +- **Agent usecase layer**: `agent-usecases.ts` consolidates agent call usecases (`decomposeTask`, `executeAgent`, `evaluateRules`) and centralizes structured output injection ### Changed -- **BREAKING: パブリック API の整理**: `src/index.ts` の公開 API を大幅に絞り込み — 内部実装の詳細(セッション管理、Claude/Codex クライアント詳細、ユーティリティ関数等)を非公開化し、安定した最小限の API サーフェスに (#257) -- **Phase 3 判定ロジックの刷新**: `JudgmentDetector` / `FallbackStrategy` を廃止し、構造化出力ベースの `status-judgment-phase.ts` に統合。判定の安定性と保守性を向上 (#257) -- **Report フェーズのリトライ改善**: Report Phase(Phase 2)が失敗した場合、新規セッションで自動リトライするよう改善 (#245) -- **Ctrl+C シャットダウンの統一**: `sigintHandler.ts` を廃止し、`ShutdownManager` に統合 — グレースフルシャットダウン → タイムアウト → 強制終了の3段階制御を全プロバイダーで共通化 (#237) -- **スコープ外削除の防止ガードレール**: coder ペルソナにタスク指示書の範囲外の削除・構造変更を禁止するルールを追加。planner ペルソナにスコープ規律と参照資料の優先順位を追加 -- フロントエンドナレッジにデザイントークンとテーマスコープのガイダンスを追加 -- アーキテクチャナレッジの改善(en/ja 両対応) +- **BREAKING: Public API cleanup**: Significantly narrowed the public API in `src/index.ts` — internal implementation details (session management, Claude/Codex client internals, utility functions, etc.) are no longer exported, reducing the API surface to a stable minimum (#257) +- **Revamped Phase 3 judgment logic**: Removed `JudgmentDetector`/`FallbackStrategy` and consolidated into `status-judgment-phase.ts` with structured output-based judgment. Improves stability and maintainability (#257) +- **Report phase retry improvement**: Report Phase (Phase 2) now automatically retries with a new session when it fails (#245) +- **Unified Ctrl+C shutdown**: Removed `sigintHandler.ts` and consolidated into `ShutdownManager` — graceful shutdown → timeout → force-kill in three stages, unified across all providers (#237) +- **Scope-deletion guardrails**: Added rules to coder persona prohibiting deletions and structural changes outside the task instruction scope. Added scope discipline and reference material priority rules to planner persona +- Added design token and theme scope guidance to frontend knowledge +- Improved architecture knowledge (both en/ja) ### Fixed -- clone 時に既存ブランチの checkout が失敗する問題を修正 — `git clone --shared` で `--branch` を渡してからリモートを削除するよう変更 -- Issue 参照付きブランチ名から `#` を除去(`takt/#N/slug` → `takt/N/slug`) -- OpenCode の report フェーズで deprecated ツール依存を解消し、permission 中心の制御へ移行 (#246) -- 不要な export を排除し、パブリック API の整合性を確保 +- Fixed checkout failure for existing branches during clone — now passes `--branch` to `git clone --shared` then removes the remote +- Removed `#` from issue-referenced branch names (`takt/#N/slug` → `takt/N/slug`) +- Resolved deprecated tool dependency in OpenCode report phase; migrated to permission-based control (#246) +- Removed unnecessary exports to ensure public API consistency ### Internal -- Team Leader 関連のテスト追加(engine-team-leader, team-leader-schema-loader, task-decomposer) -- 構造化出力関連のテスト追加(parseStructuredOutput, claude-executor-structured-output, codex-structured-output, provider-structured-output, structured-output E2E) -- ShutdownManager のユニットテスト追加 -- AbortSignal のユニットテスト追加(abort-signal, claude-executor-abort-signal, claude-provider-abort-signal) -- Report Phase リトライのユニットテスト追加(report-phase-retry) -- パブリック API エクスポートのユニットテスト追加(public-api-exports) -- provider_options 関連のテスト追加(provider-options-piece-parser, models, opencode-types) -- E2E テストの大幅拡充: cycle-detection, model-override, multi-step-sequential, pipeline-local-repo, report-file-output, run-sigint-graceful, session-log, structured-output, task-status-persistence -- E2E テストヘルパーのリファクタリング(共通 setup 関数の抽出) -- `judgment/` ディレクトリ(JudgmentDetector, FallbackStrategy)を削除 -- `ruleIndex.ts` ユーティリティを追加(1-based → 0-based インデックス変換) +- Added Team Leader tests (engine-team-leader, team-leader-schema-loader, task-decomposer) +- Added structured output tests (parseStructuredOutput, claude-executor-structured-output, codex-structured-output, provider-structured-output, structured-output E2E) +- Added unit tests for ShutdownManager +- Added unit tests for AbortSignal (abort-signal, claude-executor-abort-signal, claude-provider-abort-signal) +- Added unit tests for Report Phase retry (report-phase-retry) +- Added unit tests for public API exports (public-api-exports) +- Added tests for provider_options (provider-options-piece-parser, models, opencode-types) +- Significantly expanded E2E tests: cycle-detection, model-override, multi-step-sequential, pipeline-local-repo, report-file-output, run-sigint-graceful, session-log, structured-output, task-status-persistence +- Refactored E2E test helpers (extracted shared setup functions) +- Removed `judgment/` directory (JudgmentDetector, FallbackStrategy) +- Added `ruleIndex.ts` utility (1-based → 0-based index conversion) ## [0.12.1] - 2026-02-11 ### Fixed -- セッションが見つからない場合に無言で新規セッションに進む問題を修正 — セッション未検出時に info メッセージを表示するように改善 +- Fixed silent fallthrough to a new session when the session was not found — now shows an info message when no session is detected ### Internal -- OpenCode プロバイダーの report フェーズを deny に設定(Phase 2 での不要な書き込みを防止) -- プロジェクト初期化時の `tasks/` ディレクトリコピーをスキップ(TASK-FORMAT が不要になったため) -- ストリーム診断ユーティリティ (`streamDiagnostics.ts`) を追加 +- Set OpenCode provider report phase to deny (prevents unnecessary writes in Phase 2) +- Skip copying `tasks/` directory during project initialization (TASK-FORMAT is no longer needed) +- Added stream diagnostics utility (`streamDiagnostics.ts`) ## [0.12.0] - 2026-02-11 ### Added -- **OpenCode プロバイダー**: 第3のプロバイダーとして OpenCode をネイティブサポート — `@opencode-ai/sdk/v2` による SDK 統合、権限マッピング(readonly/edit/full → reject/once/always)、SSE ストリーム処理、リトライ機構(最大3回)、10分タイムアウトによるハング検出 (#236, #238) -- **Arpeggio ムーブメント**: データ駆動バッチ処理の新ムーブメントタイプ — CSV データソースからバッチ分割、テンプレート展開(`{line:N}`, `{col:N:name}`, `{batch_index}`)、並行 LLM 呼び出し(Semaphore 制御)、concat/custom マージ戦略をサポート (#200) -- **`frontend` ビルトインピース**: フロントエンド開発特化のピースを新規追加 — React/Next.js 向けの knowledge 注入、coding/testing ポリシー適用、並列アーキテクチャレビュー対応 -- **Slack Webhook 通知**: ピース実行完了時に Slack へ自動通知 — `TAKT_NOTIFY_WEBHOOK` 環境変数で設定、10秒タイムアウト、失敗時も他処理をブロックしない (#234) -- **セッション選択 UI**: インタラクティブモード開始時に Claude Code の過去セッションから再開可能なセッションを選択可能に — 最新10セッションの一覧表示、初期入力・最終応答プレビュー付き (#180) -- **プロバイダーイベントログ**: Claude/Codex/OpenCode の実行中イベントを NDJSON 形式でファイル出力 — `.takt/logs/{sessionId}-provider-events.jsonl` に記録、長大テキストの自動圧縮 (#236) -- **プロバイダー・モデル名の出力表示**: 各ムーブメント実行時に使用中のプロバイダーとモデル名をコンソールに表示 +- **OpenCode provider**: Native support for OpenCode as a third provider — SDK integration via `@opencode-ai/sdk/v2`, permission mapping (readonly/edit/full → reject/once/always), SSE stream handling, retry mechanism (up to 3 times), and hang detection with 10-minute timeout (#236, #238) +- **Arpeggio movement**: New movement type for data-driven batch processing — CSV data source with batch splitting, template expansion (`{line:N}`, `{col:N:name}`, `{batch_index}`), concurrent LLM calls (Semaphore-controlled), and concat/custom merge strategies (#200) +- **`frontend` builtin piece**: Frontend development piece — React/Next.js knowledge injection, coding/testing policy, parallel architecture review +- **Slack Webhook notifications**: Automatic Slack notification on piece completion — configured via `TAKT_NOTIFY_WEBHOOK` env var, 10-second timeout, non-blocking on failure (#234) +- **Session selector UI**: On interactive mode startup, select a resumable session from past Claude Code sessions — shows latest 10 sessions with initial input and last response preview (#180) +- **Provider event logs**: Claude/Codex/OpenCode execution events written to NDJSON files — `.takt/logs/{sessionId}-provider-events.jsonl`, with automatic compression of large text (#236) +- **Provider/model name display**: Active provider and model name shown in console output at each movement execution ### Changed -- **`takt add` の刷新**: Issue 選択時にタスクへの自動追加、インタラクティブモードの廃止、Issue 作成時のタスク積み込み確認 (#193, #194) -- **`max_iteration` → `max_movement` 統一**: イテレーション上限の用語を統一し、無限実行指定として `ostinato` を追加 (#212) -- **`previous_response` 注入仕様の改善**: 長さ制御と Source Path 常時注入を実装 (#207) -- **タスク管理の改善**: `.takt/tasks/` を長文タスク仕様の置き場所として再定義、`completeTask()` で completed レコードを `tasks.yaml` から削除 (#201, #204) -- **レビュー出力の改善**: レビュー出力を最新化し、過去レポートは履歴ログへ分離 (#209) -- **ビルトインピース簡素化**: 全ビルトインピースのトップレベル宣言をさらに整理 +- **Revamped `takt add`**: Auto-add to task on issue selection, removed interactive mode, added task stacking confirmation on issue creation (#193, #194) +- **`max_iteration` → `max_movement` unification**: Unified terminology for iteration limits; added `ostinato` for unlimited execution (#212) +- **Improved `previous_response` injection**: Implemented length control and always-inject Source Path (#207) +- **Task management improvements**: Redefined `.takt/tasks/` as storage for long-form task specs; `completeTask()` removes completed records from `tasks.yaml` (#201, #204) +- **Improved review output**: Updated review output format; moved past reports to history log (#209) +- **Simplified builtin pieces**: Further streamlined top-level declarations across all builtin pieces ### Fixed -- **Report Phase blocked 時の動作修正**: Report Phase(Phase 2)で blocked 状態の際に新規セッションでリトライするよう修正 (#163) -- **OpenCode のハング・終了判定の修正**: プロンプトのエコー抑制、question の抑制、ハング問題の修正、終了判定の誤りを修正 (#238) -- **OpenCode の権限・ツール設定の修正**: edit 実行時の権限とツール配線を修正 -- **Worktree へのタスク指示書コピー**: Worktree 実行時にタスク指示書が正しくコピーされるよう修正 -- lint エラーの修正(merge/resolveTask/confirm) +- **Fixed Report Phase blocked behavior**: Report Phase (Phase 2) now retries with a new session when blocked (#163) +- **Fixed OpenCode hang and termination detection**: Suppressed prompt echo, suppressed question prompts, fixed hang issues, corrected termination detection (#238) +- **Fixed OpenCode permission and tool wiring**: Corrected permission and tool wiring during edit execution +- **Worktree task spec copy**: Fixed task spec not being correctly copied during worktree execution +- Fixed lint errors (merge/resolveTask/confirm) ### Internal -- OpenCode プロバイダーの包括的なテスト追加(client-cleanup, config, provider, stream-handler, types) -- Arpeggio の包括的なテスト追加(csv, data-source-factory, merge, schema, template, engine-arpeggio) -- E2E テストの大幅な拡充: cli-catalog, cli-clear, cli-config, cli-export-cc, cli-help, cli-prompt, cli-reset-categories, cli-switch, error-handling, piece-error-handling, provider-error, quiet-mode, run-multiple-tasks, task-content-file (#192, #198) -- `providerEventLogger.ts`, `providerModel.ts`, `slackWebhook.ts`, `session-reader.ts`, `sessionSelector.ts`, `provider-resolution.ts`, `run-paths.ts` の新規追加 -- `ArpeggioRunner.ts` の新規追加(データ駆動バッチ処理エンジン) -- AI Judge をプロバイダーシステム経由に変更(Codex/OpenCode 対応) -- テスト追加・拡充: report-phase-blocked, phase-runner-report-history, judgment-fallback, pieceExecution-session-loading, globalConfig-defaults, session-reader, sessionSelector, slackWebhook, providerEventLogger, provider-model, interactive, run-paths, engine-test-helpers +- Comprehensive OpenCode provider tests added (client-cleanup, config, provider, stream-handler, types) +- Comprehensive Arpeggio tests added (csv, data-source-factory, merge, schema, template, engine-arpeggio) +- Significantly expanded E2E tests: cli-catalog, cli-clear, cli-config, cli-export-cc, cli-help, cli-prompt, cli-reset-categories, cli-switch, error-handling, piece-error-handling, provider-error, quiet-mode, run-multiple-tasks, task-content-file (#192, #198) +- Added `providerEventLogger.ts`, `providerModel.ts`, `slackWebhook.ts`, `session-reader.ts`, `sessionSelector.ts`, `provider-resolution.ts`, `run-paths.ts` +- Added `ArpeggioRunner.ts` (data-driven batch processing engine) +- AI Judge now routes through provider system (Codex/OpenCode support) +- Added/expanded tests: report-phase-blocked, phase-runner-report-history, judgment-fallback, pieceExecution-session-loading, globalConfig-defaults, session-reader, sessionSelector, slackWebhook, providerEventLogger, provider-model, interactive, run-paths, engine-test-helpers ## [0.11.1] - 2026-02-10 ### Fixed -- AI Judge がプロバイダーシステムを経由するよう修正 — `callAiJudge` を Claude 固定実装からプロバイダー経由(`runAgent`)に変更し、Codex プロバイダーでも AI 判定が正しく動作するように -- 実行指示が長大化する問題を緩和 — implement/fix 系ムーブメントで `pass_previous_response: false` を設定し、Report Directory 内のレポートを一次情報として優先する指示に変更(en/ja 両対応) +- Fixed AI Judge to route through provider system — changed `callAiJudge` from a Claude-only implementation to provider-based (`runAgent`), enabling correct AI judgment with the Codex provider +- Reduced instruction bloat — set `pass_previous_response: false` in implement/fix movements, prioritizing reports in the Report Directory as primary information source (en/ja) ### Internal -- stable release 時に npm の `next` dist-tag を `latest` と自動同期するよう CI ワークフローを改善(リトライ付き) +- Improved CI workflow to automatically sync npm `next` dist-tag to `latest` on stable releases (with retry) ## [0.11.0] - 2026-02-10 ### Added -- **`e2e-test` ビルトインピース**: E2Eテスト特化のピースを新規追加 — E2E分析 → E2E実装 → レビュー → 修正のフロー(VitestベースのE2Eテスト向け) -- **`error` ステータス**: プロバイダーエラーを `blocked` から分離し、エラー状態を明確に区別可能に。Codex にリトライ機構を追加 -- **タスク YAML 一元管理**: タスクファイルの管理を `tasks.yaml` に統合。`TaskRecordSchema` による構造化されたタスクライフサイクル管理(pending/running/completed/failed) -- **タスク指示書ドキュメント**: タスク指示書の構造と目的を明文化 (#174) -- **レビューポリシー**: 共通レビューポリシーファセット(`builtins/{lang}/policies/review.md`)を追加 -- **SIGINT グレースフルシャットダウンの E2E テスト**: 並列実行中の Ctrl+C 動作を検証する E2E テストを追加 +- **`e2e-test` builtin piece**: E2E test focused piece — E2E analysis → E2E implementation → review → fix flow (for Vitest-based E2E tests) +- **`error` status**: Separated provider errors from `blocked`, enabling clear distinction of error states. Added retry mechanism to Codex +- **Centralized task YAML management**: Unified task file management into `tasks.yaml`. Structured task lifecycle management (pending/running/completed/failed) via `TaskRecordSchema` +- **Task spec documentation**: Documented the structure and purpose of task specs (#174) +- **Review policy**: Added shared review policy facet (`builtins/{lang}/policies/review.md`) +- **SIGINT graceful shutdown E2E test**: E2E test to verify Ctrl+C behavior during parallel execution ### Changed -- **ビルトインピース簡素化**: 全ビルトインピースからトップレベルの `policies`/`personas`/`knowledge`/`instructions`/`report_formats` 宣言を削除し、名前ベースの暗黙的解決に移行。ピース YAML がよりシンプルに -- **ピースカテゴリ仕様更新**: カテゴリの設定・表示ロジックを改善。グローバル設定でのカテゴリ管理を強化 (#184) -- **`takt list` の優先度・参照改善**: ブランチ解決のパフォーマンス最適化。ベースコミットキャッシュの導入 (#186, #195, #196) -- **Ctrl+C シグナルハンドリング改善**: 並列実行中の SIGINT 処理を安定化 -- **ループ防止ポリシー強化**: エージェントの無限ループを防止するためのポリシーを強化 +- **Simplified builtin pieces**: Removed top-level `policies`/`personas`/`knowledge`/`instructions`/`report_formats` declarations from all builtin pieces, migrating to implicit name-based resolution. Piece YAML is now simpler +- **Updated piece category spec**: Improved category configuration and display logic. Enhanced category management in global config (#184) +- **Improved `takt list` priority and resolution**: Optimized branch resolution performance. Introduced base commit cache (#186, #195, #196) +- **Improved Ctrl+C signal handling**: Stabilized SIGINT handling during parallel execution +- **Strengthened loop prevention policy**: Enhanced policy to prevent agent infinite loops ### Fixed -- オリジナル指示の差分処理が正しく動作しない問題を修正 (#181) -- タスク指示書のゴールが不適切にスコープ拡張される問題を修正 — ゴールを常に実装・実行に固定 +- Fixed original instruction diff processing not working correctly (#181) +- Fixed task spec goal being inappropriately scope-expanded — goal is now always fixed to implementation and execution ### Internal -- タスク管理コードの大規模リファクタリング: `parser.ts` を廃止し `store.ts`/`mapper.ts`/`schema.ts`/`naming.ts` に分離。`branchGitResolver.ts`/`branchBaseCandidateResolver.ts`/`branchBaseRefCache.ts`/`branchEntryPointResolver.ts` でブランチ解決を細分化 -- テストの大幅な拡充・リファクタリング: aggregate-evaluator, blocked-handler, branchGitResolver-performance, branchList-regression, buildListItems-performance, error-utils, escape, facet-resolution, getFilesChanged, global-pieceCategories, instruction-context, instruction-helpers, judgment-strategies, listTasksInteractivePendingLabel, loop-detector, naming, reportDir, resetCategories, rule-evaluator, rule-utils, slug, state-manager, switchPiece, task-schema, text, transitions, watchTasks 等を新規追加 -- Codex クライアントのリファクタリング -- ピースパーサーのファセット解決ロジック改善 +- Large-scale task management refactor: removed `parser.ts` and split into `store.ts`/`mapper.ts`/`schema.ts`/`naming.ts`. Split branch resolution into `branchGitResolver.ts`/`branchBaseCandidateResolver.ts`/`branchBaseRefCache.ts`/`branchEntryPointResolver.ts` +- Significantly expanded and refactored tests: added aggregate-evaluator, blocked-handler, branchGitResolver-performance, branchList-regression, buildListItems-performance, error-utils, escape, facet-resolution, getFilesChanged, global-pieceCategories, instruction-context, instruction-helpers, judgment-strategies, listTasksInteractivePendingLabel, loop-detector, naming, reportDir, resetCategories, rule-evaluator, rule-utils, slug, state-manager, switchPiece, task-schema, text, transitions, watchTasks, etc. +- Refactored Codex client +- Improved facet resolution logic in piece parser ## [0.10.0] - 2026-02-09 @@ -333,171 +357,171 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [0.8.0] - 2026-02-08 -alpha.1 の内容を正式リリース。機能変更なし。 +Formal release of 0.8.0-alpha.1 content. No functional changes. ## [0.8.0-alpha.1] - 2026-02-07 ### Added -- **Faceted Prompting アーキテクチャ**: プロンプト構成要素を独立ファイルとして管理し、ピース間で自由に組み合わせ可能に - - `personas/` — エージェントの役割・専門性を定義するペルソナプロンプト - - `policies/` — コーディング規約・品質基準・禁止事項を定義するポリシー - - `knowledge/` — ドメイン知識・アーキテクチャ情報を定義するナレッジ - - `instructions/` — ムーブメント固有の手順を定義するインストラクション - - `output-contracts/` — レポート出力フォーマットを定義するアウトプットコントラクト - - ピースYAMLのセクションマップ(`personas:`, `policies:`, `knowledge:`)でキーとファイルパスを対応付け、ムーブメントからキーで参照 -- **Output Contracts と Quality Gates**: レポート出力の構造化定義と品質基準の AI ディレクティブ - - `output_contracts` フィールドでレポート定義(`report` フィールドを置き換え) - - `quality_gates` フィールドでムーブメント完了要件の AI ディレクティブを指定 -- **Knowledge システム**: ドメイン知識をペルソナから分離し、ピースレベルで管理・注入 - - ピースYAMLの `knowledge:` セクションマップでナレッジファイルを定義 - - ムーブメントの `knowledge:` フィールドでキー参照して注入 -- **Faceted Prompting ドキュメント**: 設計思想と実践ガイドを `docs/faceted-prompting.md`(en/ja)に追加 -- **Hybrid Codex ピース生成ツール**: `tools/generate-hybrid-codex.mjs` で Claude ピースから Codex バリアントを自動生成 -- 失敗タスクの再投入機能: `takt list` から失敗タスクブランチを選択して再実行可能に (#110) -- ブランチ名生成戦略を設定可能に(`branch_name_strategy` 設定) -- auto-PR 機能の追加と PR 作成ロジックの共通化 (#98) -- Issue 参照時にもピース選択を実施 (#97) -- ステップ(ムーブメント)にいてのスリープ機能 +- **Faceted Prompting architecture**: Prompt components are managed as independent files and can be freely combined across pieces + - `personas/` — persona prompts defining agent role and expertise + - `policies/` — policies defining coding standards, quality criteria, and prohibitions + - `knowledge/` — knowledge defining domain knowledge and architecture information + - `instructions/` — instructions defining movement-specific procedures + - `output-contracts/` — output contracts defining report output formats + - Piece YAML section maps (`personas:`, `policies:`, `knowledge:`) associate keys with file paths; movements reference by key +- **Output Contracts and Quality Gates**: Structured definitions for report output and AI directives for quality criteria + - `output_contracts` field defines reports (replaces `report` field) + - `quality_gates` field specifies AI directives for movement completion requirements +- **Knowledge system**: Separates domain knowledge from personas, managed and injected at piece level + - `knowledge:` section map in piece YAML defines knowledge files + - Movements reference by key via `knowledge:` field +- **Faceted Prompting documentation**: Design philosophy and practical guide added to `docs/faceted-prompting.md` (en/ja) +- **Hybrid Codex piece generation tool**: `tools/generate-hybrid-codex.mjs` auto-generates Codex variants from Claude pieces +- Failed task re-queue: select failed task branches from `takt list` and re-execute (#110) +- Branch name generation strategy is now configurable (`branch_name_strategy` config) +- Added auto-PR feature and unified PR creation logic (#98) +- Piece selection now also applies for issue references (#97) +- Sleep functionality added to movements ### Changed -- **BREAKING:** `resources/global/` ディレクトリを `builtins/` にリネーム +- **BREAKING:** Renamed `resources/global/` directory to `builtins/` - `resources/global/{lang}/` → `builtins/{lang}/` - - package.json の `files` フィールドを `resources/` → `builtins/` に変更 -- **BREAKING:** `agent` フィールドを `persona` にリネーム - - ピースYAMLの `agent:` → `persona:`、`agent_name:` → `persona_name:` - - 内部型: `agentPath` → `personaPath`、`agentDisplayName` → `personaDisplayName`、`agentSessions` → `personaSessions` - - ディレクトリ: `agents/` → `personas/`(グローバル・プロジェクト・ビルトイン全て) -- **BREAKING:** `report` フィールドを `output_contracts` に変更 - - 従来の `report: 00-plan.md` / `report: [{Scope: ...}]` / `report: {name, order, format}` 形式を `output_contracts: {report: [...]}` 形式に統一 -- **BREAKING:** `stances` → `policies`、`report_formats` → `output_contracts` にリネーム -- 全ビルトインピースを Faceted Prompting アーキテクチャに移行(旧エージェントプロンプト内のドメイン知識をナレッジに分離) -- SDK 更新: `@anthropic-ai/claude-agent-sdk` v0.2.19 → v0.2.34、`@openai/codex-sdk` v0.91.0 → v0.98.0 -- ムーブメントに `policy` / `knowledge` フィールドを追加(セクションマップのキーで参照) -- 対話モードのスコアリングにポリシーベースの評価を追加 -- README を刷新: agent → persona、セクションマップの説明追加、制御・管理の分類を明記 -- ビルトインスキル(SKILL.md)をFaceted Prompting対応に刷新 + - Changed `files` field in package.json from `resources/` to `builtins/` +- **BREAKING:** Renamed `agent` field to `persona` + - Piece YAML: `agent:` → `persona:`, `agent_name:` → `persona_name:` + - Internal types: `agentPath` → `personaPath`, `agentDisplayName` → `personaDisplayName`, `agentSessions` → `personaSessions` + - Directories: `agents/` → `personas/` (global, project, and builtin) +- **BREAKING:** Changed `report` field to `output_contracts` + - Unified legacy `report: 00-plan.md` / `report: [{Scope: ...}]` / `report: {name, order, format}` formats to `output_contracts: {report: [...]}` format +- **BREAKING:** Renamed `stances` → `policies`, `report_formats` → `output_contracts` +- Migrated all builtin pieces to Faceted Prompting architecture (separated domain knowledge from old agent prompts into knowledge facets) +- SDK updates: `@anthropic-ai/claude-agent-sdk` v0.2.19 → v0.2.34, `@openai/codex-sdk` v0.91.0 → v0.98.0 +- Added `policy`/`knowledge` fields to movements (referenced by section map keys) +- Added policy-based evaluation to interactive mode scoring +- Refreshed README: agent → persona, added section map description, clarified control/management classification +- Refreshed builtin skill (SKILL.md) for Faceted Prompting ### Fixed -- レポートディレクトリパスの解決バグを修正 -- PR の Issue 番号リンクが正しく設定されない問題を修正 -- `stageAndCommit` で gitignored ファイルがコミットされる問題を修正(`git add -f .takt/reports/` を削除) +- Fixed report directory path resolution bug +- Fixed PR issue number link not being set correctly +- Fixed gitignored files being committed in `stageAndCommit` (removed `git add -f .takt/reports/`) ### Internal -- ビルトインリソースの大規模再構成: 旧 `agents/` ディレクトリ構造(`default/`, `expert/`, `expert-cqrs/`, `magi/`, `research/`, `templates/`)を廃止し、フラットな `personas/`, `policies/`, `knowledge/`, `instructions/`, `output-contracts/` 構造に移行 -- Faceted Prompting のスタイルガイドとテンプレートを追加(`builtins/ja/` に `PERSONA_STYLE_GUIDE.md`, `POLICY_STYLE_GUIDE.md`, `INSTRUCTION_STYLE_GUIDE.md`, `OUTPUT_CONTRACT_STYLE_GUIDE.md` 等) -- `pieceParser.ts` にポリシー・ナレッジ・インストラクションの解決ロジックを追加 -- テスト追加: knowledge, policy-persona, deploySkill, StreamDisplay, globalConfig-defaults, sleep, task, taskExecution, taskRetryActions, addTask, saveTaskFile, parallel-logger, summarize 拡充 -- `InstructionBuilder` にポリシー・ナレッジコンテンツの注入を追加 -- `taskRetryActions.ts` を追加(失敗タスクの再投入ロジック) -- `sleep.ts` ユーティリティを追加 -- 旧プロンプトファイル(`interactive-summary.md`, `interactive-system.md`)を削除 -- 旧エージェントテンプレート(`templates/coder.md`, `templates/planner.md` 等)を削除 +- Large-scale builtin resource restructuring: removed old `agents/` directory structure (`default/`, `expert/`, `expert-cqrs/`, `magi/`, `research/`, `templates/`) and migrated to flat `personas/`, `policies/`, `knowledge/`, `instructions/`, `output-contracts/` structure +- Added Faceted Prompting style guides and templates (`PERSONA_STYLE_GUIDE.md`, `POLICY_STYLE_GUIDE.md`, `INSTRUCTION_STYLE_GUIDE.md`, `OUTPUT_CONTRACT_STYLE_GUIDE.md`, etc. in `builtins/ja/`) +- Added policy, knowledge, and instruction resolution logic to `pieceParser.ts` +- Added/expanded tests: knowledge, policy-persona, deploySkill, StreamDisplay, globalConfig-defaults, sleep, task, taskExecution, taskRetryActions, addTask, saveTaskFile, parallel-logger, summarize +- Added policy and knowledge content injection to `InstructionBuilder` +- Added `taskRetryActions.ts` (failed task re-queue logic) +- Added `sleep.ts` utility +- Removed old prompt files (`interactive-summary.md`, `interactive-system.md`) +- Removed old agent templates (`templates/coder.md`, `templates/planner.md`, etc.) ## [0.7.1] - 2026-02-06 ### Fixed -- Ctrl+C がピース実行中に効かない問題を修正: SIGINT ハンドラで `interruptAllQueries()` を呼び出してアクティブな SDK クエリを停止するように修正 -- Ctrl+C 後に EPIPE クラッシュが発生する問題を修正: SDK が停止済みの子プロセスの stdin に書き込む際の EPIPE エラーを二重防御で抑制(`uncaughtException` ハンドラ + `Promise.resolve().catch()`) -- セレクトメニューの `onKeypress` ハンドラで例外が発生した際にターミナルの raw mode がリークする問題を修正 +- Fixed Ctrl+C not working during piece execution: SIGINT handler now calls `interruptAllQueries()` to stop active SDK queries +- Fixed EPIPE crash after Ctrl+C: dual protection for EPIPE errors when SDK writes to stdin of a stopped child process (`uncaughtException` handler + `Promise.resolve().catch()`) +- Fixed terminal raw mode leaking when an exception occurs in the select menu's `onKeypress` handler ### Internal -- SIGINT ハンドラと EPIPE 抑制の統合テストを追加(`it-sigint-interrupt.test.ts`) -- セレクトメニューのキー入力安全性テストを追加(`select-rawmode-safety.test.ts`) +- Added integration tests for SIGINT handler and EPIPE suppression (`it-sigint-interrupt.test.ts`) +- Added key input safety tests for select menu (`select-rawmode-safety.test.ts`) ## [0.7.0] - 2026-02-06 ### Added -- Hybrid Codex ピース: 全主要ピース(default, minimal, expert, expert-cqrs, passthrough, review-fix-minimal, coding)の Codex バリアントを追加 - - coder エージェントを Codex プロバイダーで実行するハイブリッド構成 - - en/ja 両対応 -- `passthrough` ピース: タスクをそのまま coder に渡す最小構成ピース -- `takt export-cc` コマンド: ビルトインピース・エージェントを Claude Code Skill としてデプロイ -- `takt list` に delete アクション追加、non-interactive モード分離 -- AI 相談アクション: `takt add` / インタラクティブモードで GitHub Issue 作成・タスクファイル保存が可能に -- サイクル検出: ai_review ↔ ai_fix 間の無限ループを検出する `CycleDetector` を追加 (#102) - - 修正不要時の裁定ステップ(`ai_no_fix`)を default ピースに追加 -- CI: skipped な TAKT Action ランを週次で自動削除するワークフローを追加 -- ピースカテゴリに Hybrid Codex サブカテゴリを追加(en/ja) +- Hybrid Codex pieces: Added Codex variants for all major pieces (default, minimal, expert, expert-cqrs, passthrough, review-fix-minimal, coding) + - Hybrid configuration running the coder agent on the Codex provider + - en/ja support +- `passthrough` piece: Minimal piece that passes the task directly to the coder +- `takt export-cc` command: Deploy builtin pieces and agents as Claude Code Skills +- Added delete action to `takt list`, separated non-interactive mode +- AI consultation action: `takt add` / interactive mode can now create GitHub Issues and save task files +- Cycle detection: Added `CycleDetector` to detect infinite loops between ai_review and ai_fix (#102) + - Added arbitration step (`ai_no_fix`) to the default piece for when no fix is needed +- CI: Added workflow to auto-delete skipped TAKT Action runs weekly +- Added Hybrid Codex subcategory to piece categories (en/ja) ### Changed -- カテゴリ設定を簡素化: `default-categories.yaml` を `piece-categories.yaml` に統合し、ユーザーディレクトリへの自動コピー方式に変更 -- ピース選択UIのサブカテゴリナビゲーションを修正(再帰的な階層表示が正しく動作するように) -- Claude Code Skill を Agent Team ベースに刷新 -- `console.log` を `info()` に統一(list コマンド) +- Simplified category configuration: merged `default-categories.yaml` into `piece-categories.yaml`, changed to auto-copy to user directory +- Fixed subcategory navigation in piece selection UI (recursive hierarchical display now works correctly) +- Refreshed Claude Code Skill to Agent Team-based design +- Unified `console.log` to `info()` (list command) ### Fixed -- Hybrid Codex ピースの description に含まれるコロンが YAML パースエラーを起こす問題を修正 -- サブカテゴリ選択時に `selectPieceFromCategoryTree` に不正な引数が渡される問題を修正 +- Fixed YAML parse error caused by colons in Hybrid Codex piece descriptions +- Fixed invalid arguments passed to `selectPieceFromCategoryTree` on subcategory selection ### Internal -- `list` コマンドのリファクタリング: `listNonInteractive.ts`, `taskDeleteActions.ts` を分離 -- `cycle-detector.ts` を追加、`PieceEngine` にサイクル検出を統合 -- ピースカテゴリローダーのリファクタリング(`pieceCategories.ts`, `pieceSelection/index.ts`) -- テスト追加: cycle-detector, engine-loop-monitors, piece-selection, listNonInteractive, taskDeleteActions, createIssue, saveTaskFile +- Refactored `list` command: separated `listNonInteractive.ts`, `taskDeleteActions.ts` +- Added `cycle-detector.ts`, integrated cycle detection into `PieceEngine` +- Refactored piece category loader (`pieceCategories.ts`, `pieceSelection/index.ts`) +- Added tests: cycle-detector, engine-loop-monitors, piece-selection, listNonInteractive, taskDeleteActions, createIssue, saveTaskFile ## [0.6.0] - 2026-02-05 -RC1/RC2 の内容を正式リリース。機能変更なし。 +Formal release of RC1/RC2 content. No functional changes. ## [0.6.0-rc1] - 2026-02-05 ### Fixed -- ai_review ↔ ai_fix 間の無限ループを修正: ai_fix が「修正不要」と判断した場合に plan へ戻ってフルパイプラインが再起動する問題を解消 - - `ai_no_fix` 調停ステップを追加(architecture-reviewer が ai_review vs ai_fix の対立を判定) - - ai_fix の「修正不要」ルートを `plan` → `ai_no_fix` に変更 - - 対象ピース: default, expert, expert-cqrs(en/ja) +- Fixed infinite loop between ai_review and ai_fix: resolved issue where ai_fix judging "no fix needed" caused a return to plan and restarted the full pipeline + - Added `ai_no_fix` arbitration step (architecture-reviewer judges the ai_review vs ai_fix conflict) + - Changed ai_fix "no fix needed" route from `plan` to `ai_no_fix` + - Affected pieces: default, expert, expert-cqrs (en/ja) ### Changed -- default ピースの並列レビュアーを security-review → qa-review に変更(TAKT 開発向けに最適化) -- qa-reviewer エージェントを `expert/` から `default/` に移動し、テストカバレッジ重視の内容に書き直し -- ai_review instruction にイテレーション認識を追加(初回は網羅的レビュー、2回目以降は修正確認を優先) +- Changed default piece parallel reviewer from security-review to qa-review (optimized for TAKT development) +- Moved qa-reviewer agent from `expert/` to `default/` and rewrote with focus on test coverage +- Added iteration awareness to ai_review instruction (first iteration: comprehensive review; subsequent: prioritize fix verification) ### Internal -- auto-tag ワークフローを release/ ブランチからのマージのみに制限し、publish ジョブを統合(GITHUB_TOKEN 制約による連鎖トリガー不発を解消) -- postversion フック削除(release ブランチフローと競合するため) -- テスト更新: security-reviewer → qa-reviewer の変更に対応 +- Restricted auto-tag workflow to merges from release/ branches only, unified publish job (resolves chained trigger failure due to GITHUB_TOKEN limitations) +- Removed postversion hook (conflicts with release branch flow) +- Updated tests: adapted to security-reviewer → qa-reviewer change ## [0.6.0-rc] - 2026-02-05 ### Added -- `coding` ビルトインピース: 設計→実装→並列レビュー→修正の軽量開発ピース(plan/supervise を省略した高速フィードバックループ) -- `conductor` エージェント: Phase 3 判定専用エージェント。レポートやレスポンスを読んで判定タグを出力する -- Phase 3 判定のフォールバック戦略: AutoSelect → ReportBased → ResponseBased → AgentConsult の4段階フォールバックで判定精度を向上 (`src/core/piece/judgment/`) -- セッション状態管理: タスク実行結果(成功/エラー/中断)を保存し、次回インタラクティブモード起動時に前回の結果を表示 (#89) -- TAKT メタ情報(ピース構造、進行状況)をエージェントに引き渡す仕組み -- `/play` コマンド: インタラクティブモードでタスクを即座に実行 -- E2Eテスト基盤: mock/provider 両対応のテストインフラ、10種のE2Eテストスペック、テストヘルパー(isolated-env, takt-runner, test-repo) -- レビューエージェントに「論理的に到達不可能な防御コード」の検出ルールを追加 +- **`coding` builtin piece**: Lightweight development piece — design → implement → parallel review → fix (fast feedback loop without plan/supervise steps) +- **`conductor` agent**: Dedicated agent for Phase 3 judgment. Reads reports and responses to output judgment tags +- **Phase 3 judgment fallback strategy**: 4-stage fallback (AutoSelect → ReportBased → ResponseBased → AgentConsult) to improve judgment accuracy (`src/core/piece/judgment/`) +- **Session state management**: Saves task execution results (success/error/interrupted) and displays previous result on next interactive mode startup (#89) +- TAKT meta information (piece structure, progress) injection mechanism for agents +- **`/play` command**: Immediately executes task in interactive mode +- E2E test infrastructure: mock/provider-compatible test infrastructure, 10 E2E test specs, test helpers (isolated-env, takt-runner, test-repo) +- Added detection rule for "logically unreachable defensive code" to review agents ### Changed -- Phase 3 判定ロジックをセッション再開方式から conductor エージェント+フォールバック戦略に変更(判定の安定性向上) -- CLI ルーティングを `executeDefaultAction()` として関数化し、スラッシュコマンドのフォールバックから再利用可能に (#32) -- `/` や `#` で始まる入力をコマンド/Issue 未検出時にタスク指示として受け入れるよう変更 (#32) -- `isDirectTask()` を簡素化: Issue 参照のみ直接実行、それ以外はすべてインタラクティブモードへ -- 全ビルトインピースから `pass_previous_response: true` を削除(デフォルト動作のため不要) +- Changed Phase 3 judgment logic from session-resume approach to conductor agent + fallback strategy (improved judgment stability) +- Refactored CLI routing as `executeDefaultAction()` function, reusable as fallback from slash commands (#32) +- Input starting with `/` or `#` is now accepted as task instruction when no command/issue is found (#32) +- Simplified `isDirectTask()`: only issue references execute directly, all others go to interactive mode +- Removed `pass_previous_response: true` from all builtin pieces (redundant as it is the default behavior) ### Internal -- E2Eテスト設定ファイル追加(vitest.config.e2e.ts, vitest.config.e2e.mock.ts, vitest.config.e2e.provider.ts) -- `rule-utils.ts` に `getReportFiles()`, `hasOnlyOneBranch()`, `getAutoSelectedTag()` を追加 -- `StatusJudgmentBuilder` にレポートコンテンツ・レスポンスベースの判定指示生成を追加 -- `InstructionBuilder` にピースメタ情報(構造、反復回数)の注入を追加 -- テスト追加: judgment-detector, judgment-fallback, sessionState, pieceResolver, cli-slash-hash, e2e-helpers +- Added E2E test config files (vitest.config.e2e.ts, vitest.config.e2e.mock.ts, vitest.config.e2e.provider.ts) +- Added `getReportFiles()`, `hasOnlyOneBranch()`, `getAutoSelectedTag()` to `rule-utils.ts` +- Added report content and response-based judgment instruction generation to `StatusJudgmentBuilder` +- Added piece meta information (structure, iteration counts) injection to `InstructionBuilder` +- Added tests: judgment-detector, judgment-fallback, sessionState, pieceResolver, cli-slash-hash, e2e-helpers ## [0.5.1] - 2026-02-04 @@ -702,8 +726,8 @@ RC1/RC2 の内容を正式リリース。機能変更なし。 ### Fixed -- `takt add #N` がIssue内容をAI要約に通してしまい、タスク内容が壊れる問題を修正 (#46) - - Issue参照時は `resolveIssueTask` の結果をそのままタスクとして使用するように変更 +- Fixed `takt add #N` passing issue content through AI summarization and corrupting task content (#46) + - Changed to use `resolveIssueTask` result directly as the task when referencing issues ## [0.3.1] - 2026-01-31 diff --git a/README.md b/README.md index 175702f..5541c67 100644 --- a/README.md +++ b/README.md @@ -466,6 +466,7 @@ TAKT includes multiple builtin pieces: | `backend-cqrs-mini` | Mini CQRS+ES piece: plan → implement → parallel review (AI antipattern + supervisor) with CQRS+ES knowledge injection. | | `review-fix-minimal` | Review-focused piece: review → fix → supervisor. For iterative improvement based on review feedback. | | `research` | Research piece: planner → digger → supervisor. Autonomously executes research without asking questions. | +| `deep-research` | Deep research piece: plan → dig → analyze → supervise. Discovery-driven investigation that follows emerging questions with multi-perspective analysis. | | `expert` | Full-stack development piece: architecture, frontend, security, QA reviews with fix loops. | | `expert-mini` | Mini expert piece: plan → implement → parallel review (AI antipattern + expert supervisor) with full-stack knowledge injection. | | `expert-cqrs` | Full-stack development piece (CQRS+ES specialized): CQRS+ES, frontend, security, QA reviews with fix loops. | @@ -502,6 +503,7 @@ Use `takt switch` to switch pieces. | **supervisor** | Final validation, approval | | **expert-supervisor** | Expert-level final validation with comprehensive review integration | | **research-planner** | Research task planning and scope definition | +| **research-analyzer** | Research result interpretation and additional investigation planning | | **research-digger** | Deep investigation and information gathering | | **research-supervisor** | Research quality validation and completeness assessment | | **test-planner** | Test strategy analysis and comprehensive test planning | @@ -934,7 +936,7 @@ export TAKT_OPENCODE_API_KEY=... - [Faceted Prompting](./docs/faceted-prompting.md) - Separation of Concerns for AI prompts (Persona, Policy, Instruction, Knowledge, Output Contract) - [Piece Guide](./docs/pieces.md) - Creating and customizing pieces - [Agent Guide](./docs/agents.md) - Configuring custom agents -- [Changelog](../CHANGELOG.md) - Version history +- [Changelog](../CHANGELOG.md) ([日本語](./docs/CHANGELOG.ja.md)) - Version history - [Security Policy](../SECURITY.md) - Vulnerability reporting - [Blog: TAKT - AI Agent Orchestration](https://zenn.dev/nrs/articles/c6842288a526d7) - Design philosophy and practical usage guide (Japanese) diff --git a/builtins/en/instructions/plan.md b/builtins/en/instructions/plan.md index 264f3d1..9dfdf26 100644 --- a/builtins/en/instructions/plan.md +++ b/builtins/en/instructions/plan.md @@ -17,3 +17,4 @@ For small tasks, skip the design sections in the report. 3. Identify the impact area 4. Determine file structure and design patterns (if needed) 5. Decide on the implementation approach + - Verify the implementation approach does not violate knowledge/policy constraints diff --git a/builtins/en/instructions/research-analyze.md b/builtins/en/instructions/research-analyze.md new file mode 100644 index 0000000..0266ccb --- /dev/null +++ b/builtins/en/instructions/research-analyze.md @@ -0,0 +1,18 @@ +Analyze the research results and determine whether additional investigation is needed. + +**What to do:** +1. Organize the major findings from the research results +2. Identify unexplained phenomena, unverified hypotheses, and missing data +3. Make one of the following judgments: + - **New questions exist** → Create additional research instructions for the Digger + - **Sufficiently investigated** → Create an overall summary + +**Additional research instruction format:** +- What to investigate (specific data or information) +- Why it's needed (which gap it fills) +- Where it might be found (hints for data sources) + +**Overall summary structure:** +- Summary of findings so far +- Organization of findings +- Identified gaps and their importance (if remaining) diff --git a/builtins/en/instructions/research-dig.md b/builtins/en/instructions/research-dig.md new file mode 100644 index 0000000..db5ba92 --- /dev/null +++ b/builtins/en/instructions/research-dig.md @@ -0,0 +1,14 @@ +Execute the research according to the plan (or additional research instructions). + +**What to do:** +1. Execute planned research items in order +2. Actually investigate each item (web search, codebase search, etc.) +3. Report items that could not be researched as "Unable to research" +4. Organize results and create a report + +**Report structure:** +- Results and details per research item +- Summary of key findings +- Caveats and risks +- Items unable to research and reasons +- Recommendations/conclusions diff --git a/builtins/en/instructions/research-plan.md b/builtins/en/instructions/research-plan.md new file mode 100644 index 0000000..eeb8746 --- /dev/null +++ b/builtins/en/instructions/research-plan.md @@ -0,0 +1,10 @@ +Analyze the research request and create a research plan. + +**Note:** If Previous Response exists, this is a re-plan from Supervisor feedback. +Incorporate the feedback into the revised plan. + +**What to do:** +1. Decompose the request (What: what to know / Why: why / Scope: how far) +2. Identify research items (choose appropriate perspectives based on the type of request) +3. Identify candidate data sources for each item +4. Assign priorities (P1: Required / P2: Important / P3: Nice to have) diff --git a/builtins/en/instructions/research-supervise.md b/builtins/en/instructions/research-supervise.md new file mode 100644 index 0000000..f62c875 --- /dev/null +++ b/builtins/en/instructions/research-supervise.md @@ -0,0 +1,9 @@ +Evaluate the research results and determine if they adequately answer the original request. + +**What to do:** +1. Verify that each requirement of the original request has been answered +2. Evaluate the richness of research results (are key claims backed by evidence?) +3. Evaluate depth of analysis (does it go beyond surface to deeper factors?) + +**If issues exist:** Include specific instructions for the Planner. +Not "insufficient" but "XX is missing" with concrete specifics. diff --git a/builtins/en/instructions/review-arch.md b/builtins/en/instructions/review-arch.md index 45a244c..6d9abde 100644 --- a/builtins/en/instructions/review-arch.md +++ b/builtins/en/instructions/review-arch.md @@ -18,5 +18,6 @@ Do not review AI-specific issues (already covered by the ai_review movement). 1. First, extract previous open findings and preliminarily classify as `new / persists / resolved` 2. Review the change diff and detect issues based on the architecture and design criteria above + - Cross-check changes against REJECT criteria tables defined in knowledge 3. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules 4. If there is even one blocking issue (`new` or `persists`), judge as REJECT diff --git a/builtins/en/instructions/review-cqrs-es.md b/builtins/en/instructions/review-cqrs-es.md index 88f9609..9e34601 100644 --- a/builtins/en/instructions/review-cqrs-es.md +++ b/builtins/en/instructions/review-cqrs-es.md @@ -14,5 +14,6 @@ review from a general domain design perspective instead. ## Judgment Procedure 1. Review the change diff and detect issues based on the CQRS and Event Sourcing criteria above + - Cross-check changes against REJECT criteria tables defined in knowledge 2. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules 3. If there is even one blocking issue, judge as REJECT diff --git a/builtins/en/instructions/review-frontend.md b/builtins/en/instructions/review-frontend.md index 8c33631..d95d66a 100644 --- a/builtins/en/instructions/review-frontend.md +++ b/builtins/en/instructions/review-frontend.md @@ -14,5 +14,6 @@ proceed as no issues found. ## Judgment Procedure 1. Review the change diff and detect issues based on the frontend development criteria above + - Cross-check changes against REJECT criteria tables defined in knowledge 2. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules 3. If there is even one blocking issue, judge as REJECT diff --git a/builtins/en/instructions/review-qa.md b/builtins/en/instructions/review-qa.md index f980afc..684a9c4 100644 --- a/builtins/en/instructions/review-qa.md +++ b/builtins/en/instructions/review-qa.md @@ -16,5 +16,6 @@ Review the changes from a quality assurance perspective. 1. First, extract previous open findings and preliminarily classify as `new / persists / resolved` 2. Review the change diff and detect issues based on the quality assurance criteria above + - Cross-check changes against REJECT criteria tables defined in knowledge 3. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules 4. If there is even one blocking issue (`new` or `persists`), judge as REJECT diff --git a/builtins/en/instructions/review-security.md b/builtins/en/instructions/review-security.md index 65e0f8b..1a36743 100644 --- a/builtins/en/instructions/review-security.md +++ b/builtins/en/instructions/review-security.md @@ -7,5 +7,6 @@ Review the changes from a security perspective. Check for the following vulnerab ## Judgment Procedure 1. Review the change diff and detect issues based on the security criteria above + - Cross-check changes against REJECT criteria tables defined in knowledge 2. For each detected issue, classify as blocking/non-blocking based on Policy's scope determination table and judgment rules 3. If there is even one blocking issue, judge as REJECT diff --git a/builtins/en/knowledge/research-comparative.md b/builtins/en/knowledge/research-comparative.md new file mode 100644 index 0000000..c2d93ed --- /dev/null +++ b/builtins/en/knowledge/research-comparative.md @@ -0,0 +1,30 @@ +# Comparative Research Knowledge + +## Comparative Research Principles + +When comparing two or more subjects, align same indicators under same conditions. + +| Criterion | Judgment | +|-----------|----------| +| Both subjects' data aligned on same indicator and year | OK | +| Only one side has data | REJECT | +| Indicator definitions differ between subjects | Warning (note the differences) | +| Comparing absolute values without considering scale | Warning (add per-capita ratios) | + +### Aligning Comparison Axes + +When subjects differ in scale or background, direct comparison can be misleading. Normalize (per capita, per area, etc.) and explicitly state condition differences. + +## Comparative Data Collection + +In comparative research, data for only one side halves the value. + +| Criterion | Judgment | +|-----------|----------| +| Collected from the same data source for all subjects | OK | +| Collected from different data sources per subject | Warning (verify comparability) | +| Data missing for some subjects | Note gaps, limit comparison to available range | + +### Determining Non-comparability + +When indicator definitions fundamentally differ, report "not comparable" rather than forcing comparison. Identify partially comparable items and state the comparable scope. diff --git a/builtins/en/knowledge/research.md b/builtins/en/knowledge/research.md new file mode 100644 index 0000000..d34933b --- /dev/null +++ b/builtins/en/knowledge/research.md @@ -0,0 +1,53 @@ +# Research Methodology Knowledge + +## Data Reliability Evaluation + +Data quality is determined by source reliability and clarity of documentation. + +| Criterion | Judgment | +|-----------|----------| +| Numbers from official statistics (government, municipality) | High reliability | +| Numbers in news articles (with source) | Medium reliability | +| Numbers from personal blogs/SNS (no source) | Low reliability | +| Year/date of numbers is specified | OK | +| Year/date of numbers is unknown | Warning | +| Based on primary sources (official documents, originals) | OK | +| Secondary sources only, primary source unverifiable | Warning | + +### Data Source Priority + +| Priority | Data Source | Examples | +|----------|------------|---------| +| 1 | Government statistics/white papers | Census, ministry statistics | +| 2 | Municipal open data | City statistical reports, open data portals | +| 3 | Industry groups/research institutions | Think tanks, academic research | +| 4 | News (with primary source reference) | Newspapers, specialized media | +| 5 | News (without primary source) | Secondary reports, aggregation articles | + +## Qualitative Analysis Evaluation + +Quality of qualitative analysis is evaluated by logical causality and concrete evidence. + +| Criterion | Judgment | +|-----------|----------| +| Claims causation with mechanism explanation | OK | +| Claims causation but only correlation exists | Warning | +| Digs into structural factors | OK | +| Stops at surface-level explanation | Insufficient | +| Backed by concrete examples, system names | OK | +| Abstract explanation only | Insufficient | + +### Distinguishing Causation from Correlation + +"A and B occur together" is correlation. "A causes B" is causation. Claiming causation requires mechanism explanation or elimination of alternative factors. + +## Handling Un-researchable Items + +Report honestly when items cannot be researched. Do not fill gaps with speculation. + +| Situation | Response | +|-----------|----------| +| Data is not public | Report "Unable to research" with reason | +| Data exists but not found | Report "Not found" with locations searched | +| Only partial data available | Report what was found, note gaps | +| Want to supplement with speculation | Clearly mark as speculation with reasoning | diff --git a/builtins/en/personas/planner.md b/builtins/en/personas/planner.md index 9454980..0c68535 100644 --- a/builtins/en/personas/planner.md +++ b/builtins/en/personas/planner.md @@ -111,3 +111,4 @@ Do not over-interpret the task order. Plan only what is written. **Investigate before planning.** Don't plan without reading existing code. **Design simply.** No excessive abstractions or future-proofing. Provide enough direction for Coder to implement without hesitation. **Ask all clarification questions at once.** Do not ask follow-up questions in multiple rounds. +**Verify against knowledge/policy constraints** before specifying implementation approach. Do not specify implementation methods that violate architectural constraints defined in knowledge. diff --git a/builtins/en/personas/research-analyzer.md b/builtins/en/personas/research-analyzer.md new file mode 100644 index 0000000..00e9af4 --- /dev/null +++ b/builtins/en/personas/research-analyzer.md @@ -0,0 +1,45 @@ +# Research Analyzer + +You are a research analyzer. You interpret the Digger's research results, identify unexplained phenomena and newly emerged questions, and create instructions for additional investigation. + +## Role Boundaries + +**Do:** +- Critically analyze research results +- Identify unexplained phenomena, contradictions, and logical leaps +- Articulate newly emerged questions +- Check for missing quantitative data (claims without numerical evidence) +- Determine whether additional investigation is needed + +**Don't:** +- Execute research yourself (Digger's responsibility) +- Design overall research plans (Planner's responsibility) +- Make final quality evaluations (Supervisor's responsibility) + +## Behavior + +- Do not ask questions. Present analysis results and judgments directly +- Keep asking "why?" — do not settle for surface-level explanations +- Detect gaps in both quantitative and qualitative dimensions +- Write additional research instructions with enough specificity for Digger to act immediately +- If no further investigation is warranted, honestly judge "sufficient" — do not manufacture questions + +## Domain Knowledge + +### Gap Detection Perspectives + +Look for holes in research from these perspectives: + +- Unexplained phenomena: facts stated but "why" is unclear +- Unverified hypotheses: speculation treated as fact +- Missing quantitative data: claims without numerical backing +- Newly emerged concepts: terms or concepts that appeared during research needing deeper investigation +- Missing comparisons: data exists for only one side, making contrast impossible + +### Additional Research Decision Criteria + +When gaps are identified, evaluate on three points: + +- Is this gap important to the original request? (Ignore if not) +- Is there a reasonable chance additional research can fill it? (Is public data likely available?) +- Is the research cost (movement consumption) worthwhile? diff --git a/builtins/en/personas/research-digger.md b/builtins/en/personas/research-digger.md index 0b97c1b..cfaba8f 100644 --- a/builtins/en/personas/research-digger.md +++ b/builtins/en/personas/research-digger.md @@ -1,93 +1,38 @@ # Research Digger -You are a **research executor**. +You are a research executor. You follow the Planner's research plan and actually execute the research, organizing and reporting results. -You follow the research plan from the Planner and **actually execute the research**. +## Role Boundaries -## Most Important Rule +**Do:** +- Execute research according to Planner's plan +- Organize and report research results +- Report additional related information discovered during research +- Provide analysis and recommendations based on facts -**Do not ask the user questions.** +**Don't:** +- Create research plans (Planner's responsibility) +- Evaluate research quality (Supervisor's responsibility) +- Ask "Should I look into X?" — just investigate it -- Research within the scope of what can be investigated -- Report items that couldn't be researched as "Unable to research" -- Don't ask "Should I look into X?" +## Behavior -## Role +- Do not ask questions. Research what can be investigated, report what cannot +- Take action. Not "should investigate X" but actually investigate +- Report concretely. Include URLs, numbers, quotes +- Provide analysis. Not just facts, but interpretation and recommendations -1. Execute research according to Planner's plan -2. Organize and report research results -3. Also report additional information discovered +## Domain Knowledge -## Research Methods +### Available Research Methods -### Available Tools - -- **Web search**: General information gathering -- **GitHub search**: Codebase and project research -- **Codebase search**: Files and code research within project -- **File reading**: Configuration files, documentation review +- Web search: general information gathering +- GitHub search: codebase and project research +- Codebase search: files and code within project +- File reading: configuration files, documentation review ### Research Process 1. Execute planned research items in order -2. For each item: - - Execute research - - Record results - - If related information exists, investigate further +2. For each item: execute research, record results, investigate related information 3. Create report when all complete - -## Example: Naming Research Results - -``` -## Research Results Report - -### Results by Research Item - -#### 1. GitHub Name Collisions -**Result**: wolf has collision, fox is minor, hawk is fine - -**Details**: -- wolf: Searching "wolf" returns 10,000+ repositories. "Wolf Engine" (3.2k stars) is particularly notable -- fox: Few notable projects with just "fox". Many Firefox-related hits though -- hawk: No notable projects. HTTP auth library "Hawk" exists but ~500 stars - ---- - -#### 2. npm Name Collisions -**Result**: All already in use - -**Details**: -- wolf: Exists but inactive (last updated 5 years ago) -- fox: Exists and actively used -- hawk: Exists and notable as Walmart Labs authentication library - -**Additional Notes**: -Scoped packages (@yourname/wolf etc.) can be used - ---- - -### Summary - -#### Key Findings -- "hawk" has lowest collision risk -- All taken on npm, but scoped packages work around this -- "wolf" risks confusion with Engine - -#### Caveats/Risks -- hawk is used in HTTP authentication context - -#### Items Unable to Research -- Domain availability: whois API access restricted - -### Recommendation/Conclusion -**Recommend hawk**. Reasons: -1. Least GitHub collisions -2. npm addressable via scoped packages -3. "Hawk" image fits surveillance/hunting tools -``` - -## Important - -- **Take action**: Not "should investigate X" but actually investigate -- **Report concretely**: Include URLs, numbers, quotes -- **Provide analysis**: Not just facts, but analysis and recommendations diff --git a/builtins/en/personas/research-planner.md b/builtins/en/personas/research-planner.md index 4b20973..12553ea 100644 --- a/builtins/en/personas/research-planner.md +++ b/builtins/en/personas/research-planner.md @@ -1,91 +1,52 @@ # Research Planner -You are a **research planner**. +You are a research planner. You receive research requests and create specific research plans for the Digger (research executor) without asking questions. -You receive research requests from users and create research plans **without asking questions**. +## Role Boundaries -## Most Important Rule +**Do:** +- Analyze and decompose research requests +- Identify research perspectives +- Create specific instructions for the Digger +- Prioritize research items -**Do not ask the user questions.** +**Don't:** +- Execute research yourself (Digger's responsibility) +- Evaluate research quality (Supervisor's responsibility) +- Implement or modify code -- Make assumptions for unclear points and proceed -- If multiple interpretations exist, include all possibilities in the research scope -- Don't ask "Is this okay?" +## Behavior -## Role +- Do not ask questions. Make assumptions for unclear points and proceed +- Include all possibilities when multiple interpretations exist +- Do not ask "Is this okay?" +- Do not fear assumptions. State them explicitly and incorporate into the plan +- Prioritize comprehensiveness. Broadly capture possible perspectives +- Write specific instructions that enable Digger to act without hesitation. Abstract instructions are prohibited -1. Analyze the research request -2. Identify the research perspectives -3. Create specific instructions for the Digger (research executor) +## Domain Knowledge -## How to Create Research Plans +### How to Create Research Plans -### Step 1: Decompose the Request +**Step 1: Decompose the Request** -Decompose the request from these perspectives: -- **What**: What do they want to know -- **Why**: Why do they want to know (infer) -- **Scope**: How far should we investigate +Decompose from these perspectives: +- What: what do they want to know +- Why: why do they want to know (infer) +- Scope: how far should we investigate -### Step 2: Identify Research Perspectives +**Step 2: Identify Research Perspectives** -List possible research perspectives: +List possible perspectives: - Research for direct answers -- Related information and background research -- Comparison and alternatives research -- Risks and caveats research +- Related information and background +- Comparison and alternatives +- Risks and caveats -### Step 3: Prioritize +**Step 3: Prioritize** -Assign priorities to research items: -- P1: Required (cannot answer without this) -- P2: Important (improves answer quality) -- P3: Nice to have (if time permits) - -## Example: Naming Research - -Request: "I want to decide a project name. Candidates are wolf, fox, hawk" - -``` -## Research Plan - -### Understanding the Request -Gather information to judge adoption feasibility for three project name candidates. - -### Research Items - -#### P1: Required -1. GitHub name collisions - - Purpose: Avoid collision with existing famous projects - - Method: GitHub search, npm registry check - -2. Domain/package name availability - - Purpose: Confirm name is usable at publication time - - Method: Check npm, PyPI, crates.io, etc. - -#### P2: Important -1. Meaning and associations of each name - - Purpose: Branding perspective appropriateness - - Method: General image, usage examples in other contexts - -2. Pronunciation/spelling memorability - - Purpose: Usability - - Method: Possibility of confusion with similar names - -#### P3: Nice to have -1. Anagram/acronym possibilities - - Purpose: Brand expansion potential - - Method: Anagram generation, interpretable as acronym - -### Instructions for Digger -- Search GitHub for wolf, fox, hawk and check if projects with 1000+ stars exist -- Check npm, PyPI for same-name packages -- Research general image/associations for each name -- Check anagram possibilities -``` - -## Important - -- **Don't fear assumptions**: Make assumptions for unclear points and proceed -- **Prioritize comprehensiveness**: Broadly capture possible perspectives -- **Enable Digger action**: Abstract instructions prohibited +| Priority | Definition | +|----------|------------| +| P1: Required | Cannot answer without this | +| P2: Important | Improves answer quality | +| P3: Nice to have | If time permits | diff --git a/builtins/en/personas/research-supervisor.md b/builtins/en/personas/research-supervisor.md index ef09c0e..b89747e 100644 --- a/builtins/en/personas/research-supervisor.md +++ b/builtins/en/personas/research-supervisor.md @@ -1,50 +1,55 @@ # Research Supervisor -You are a **research quality evaluator**. +You are a research quality evaluator. You evaluate the research results and determine if they adequately answer the user's request. -You evaluate the Digger's research results and determine if they adequately answer the user's request. +## Role Boundaries -## Most Important Rule +**Do:** +- Evaluate research result quality +- Provide specific return instructions when gaps exist +- Judge adequacy of answers against the original request -**Be strict in evaluation. But don't ask questions.** +**Don't:** +- Execute research yourself (Digger's responsibility) +- Create research plans (Planner's responsibility) +- Ask the user for additional information -- Don't ask the user for additional information even if research is insufficient -- If insufficient, point out specifically and return to Planner -- Don't demand perfection (approve if 80% answered) +## Behavior -## Evaluation Perspectives +- Evaluate strictly. But do not ask questions +- If gaps exist, point them out specifically and return to Planner +- Do not demand perfection. Approve if 80% answered +- Not "insufficient" but "XX is missing" — be specific +- When returning, clarify the next action -### 1. Answer Relevance +## Domain Knowledge + +### Evaluation Perspectives + +**1. Answer Relevance** - Does it directly answer the user's question? - Is the conclusion clearly stated? - Is evidence provided? -### 2. Research Comprehensiveness +**2. Research Comprehensiveness** - Are all planned items researched? - Are important perspectives not missing? - Are related risks and caveats investigated? -### 3. Information Reliability +**3. Information Reliability** - Are sources specified? - Is there concrete data (numbers, URLs, etc.)? - Are inferences and facts distinguished? -## Judgment Criteria +### Judgment Criteria -### APPROVE Conditions -When all of these are met: +**APPROVE conditions (all must be met):** - Clear answer to user's request exists - Conclusion has sufficient evidence - No major research gaps -### REJECT Conditions +**REJECT conditions (any triggers rejection):** - Important research perspectives missing - Request interpretation was wrong - Research results are shallow (not concrete) - Sources unclear - -## Important - -- **Point out specifically**: Not "insufficient" but "XX is missing" -- **Actionable instructions**: Clear next actions when returning -- **Don't demand perfection**: Approve if 80% answered diff --git a/builtins/en/pieces/backend-cqrs.yaml b/builtins/en/pieces/backend-cqrs.yaml index c933f11..dab0392 100644 --- a/builtins/en/pieces/backend-cqrs.yaml +++ b/builtins/en/pieces/backend-cqrs.yaml @@ -12,6 +12,10 @@ movements: - name: plan edit: false persona: planner + knowledge: + - backend + - cqrs-es + - architecture allowed_tools: - Read - Glob diff --git a/builtins/en/pieces/backend.yaml b/builtins/en/pieces/backend.yaml index 3d50f0b..c68c649 100644 --- a/builtins/en/pieces/backend.yaml +++ b/builtins/en/pieces/backend.yaml @@ -12,6 +12,9 @@ movements: - name: plan edit: false persona: planner + knowledge: + - backend + - architecture allowed_tools: - Read - Glob diff --git a/builtins/en/pieces/deep-research.yaml b/builtins/en/pieces/deep-research.yaml new file mode 100644 index 0000000..0ebe825 --- /dev/null +++ b/builtins/en/pieces/deep-research.yaml @@ -0,0 +1,75 @@ +name: deep-research +description: Deep research piece - discovery-driven investigation that follows emerging questions with multi-perspective analysis +piece_config: + provider_options: + codex: + network_access: true + opencode: + network_access: true +max_movements: 15 +initial_movement: plan +movements: + - name: plan + persona: research-planner + policy: research + knowledge: research + instruction: research-plan + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: Planning is complete + next: dig + - condition: Insufficient information to create a plan + next: ABORT + - name: dig + persona: research-digger + policy: research + knowledge: research + instruction: research-dig + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: Research is complete + next: analyze + - condition: Unable to conduct research + next: ABORT + - name: analyze + persona: research-analyzer + policy: research + knowledge: research + instruction: research-analyze + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: New questions exist and additional research is needed + next: dig + - condition: Sufficiently investigated + next: supervise + - name: supervise + persona: research-supervisor + policy: research + knowledge: research + instruction: research-supervise + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: Research results adequately answer the original request + next: COMPLETE + - condition: Research results are insufficient and replanning is needed + next: plan diff --git a/builtins/en/pieces/expert-cqrs.yaml b/builtins/en/pieces/expert-cqrs.yaml index 2347dee..e485a10 100644 --- a/builtins/en/pieces/expert-cqrs.yaml +++ b/builtins/en/pieces/expert-cqrs.yaml @@ -25,6 +25,11 @@ movements: - name: plan edit: false persona: planner + knowledge: + - frontend + - backend + - cqrs-es + - architecture allowed_tools: - Read - Glob diff --git a/builtins/en/pieces/expert.yaml b/builtins/en/pieces/expert.yaml index 65d7fc0..3469fb6 100644 --- a/builtins/en/pieces/expert.yaml +++ b/builtins/en/pieces/expert.yaml @@ -25,6 +25,10 @@ movements: - name: plan edit: false persona: planner + knowledge: + - frontend + - backend + - architecture allowed_tools: - Read - Glob diff --git a/builtins/en/pieces/frontend.yaml b/builtins/en/pieces/frontend.yaml index ace9b0f..e57a5c8 100644 --- a/builtins/en/pieces/frontend.yaml +++ b/builtins/en/pieces/frontend.yaml @@ -12,6 +12,9 @@ movements: - name: plan edit: false persona: planner + knowledge: + - frontend + - architecture allowed_tools: - Read - Glob diff --git a/builtins/en/pieces/research.yaml b/builtins/en/pieces/research.yaml index 73662e6..9649e02 100644 --- a/builtins/en/pieces/research.yaml +++ b/builtins/en/pieces/research.yaml @@ -11,34 +11,15 @@ initial_movement: plan movements: - name: plan persona: research-planner + policy: research + knowledge: research + instruction: research-plan allowed_tools: - Read - Glob - Grep - WebSearch - WebFetch - instruction_template: | - ## Piece Status - - Iteration: {iteration}/{max_movements} (piece-wide) - - Movement Iteration: {movement_iteration} (times this movement has run) - - Movement: plan - - ## Research Request - {task} - - ## Supervisor Feedback (for re-planning) - {previous_response} - - ## Additional User Inputs - {user_inputs} - - ## Instructions - Create a research plan for the above request. - - **Important**: Do not ask the user questions. - - Make assumptions for unclear points and proceed - - If multiple interpretations exist, include all in the research scope - - If there is feedback from Supervisor, incorporate it into the plan rules: - condition: Planning is complete next: dig @@ -46,39 +27,15 @@ movements: next: ABORT - name: dig persona: research-digger + policy: research + knowledge: research + instruction: research-dig allowed_tools: - Read - Glob - Grep - WebSearch - WebFetch - instruction_template: | - ## Piece Status - - Iteration: {iteration}/{max_movements} (piece-wide) - - Movement Iteration: {movement_iteration} (times this movement has run) - - Movement: dig - - ## Original Research Request - {task} - - ## Research Plan - {previous_response} - - ## Additional User Inputs - {user_inputs} - - ## Instructions - Execute the research according to the plan above. - - **Important**: Do not ask the user questions. - - Research within the scope of what can be investigated - - Report items that could not be researched as "Unable to research" - - Available tools: - - Web search - - GitHub search (gh command) - - Codebase search - - File reading rules: - condition: Research is complete next: supervise @@ -86,29 +43,15 @@ movements: next: ABORT - name: supervise persona: research-supervisor + policy: research + knowledge: research + instruction: research-supervise allowed_tools: - Read - Glob - Grep - WebSearch - WebFetch - instruction_template: | - ## Piece Status - - Iteration: {iteration}/{max_movements} (piece-wide) - - Movement Iteration: {movement_iteration} (times this movement has run) - - Movement: supervise (research quality evaluation) - - ## Original Research Request - {task} - - ## Digger's Research Results - {previous_response} - - ## Instructions - Evaluate the research results and determine if they adequately answer the original request. - - **Important**: If there are issues, include specific instructions for the Planner. - pass_previous_response: false rules: - condition: Research results adequately answer the original request next: COMPLETE diff --git a/builtins/en/policies/research.md b/builtins/en/policies/research.md new file mode 100644 index 0000000..7f3aebe --- /dev/null +++ b/builtins/en/policies/research.md @@ -0,0 +1,48 @@ +# Research Policy + +Defines shared behavioral norms and data quality standards for research agents. + +## Principles + +| Principle | Standard | +|-----------|----------| +| Autonomous action | Do not ask questions. Make assumptions for unclear points | +| Fact-speculation separation | Always mark speculation as speculation | +| Quantitative priority | Back claims with numerical evidence | +| Source citation | Cite URL, statistics name, survey year | +| Honest reporting | Report un-researchable items as "Unable to research" | +| 80% standard | Do not demand perfection. 80% answer is sufficient | + +## Autonomous Action + +Act autonomously in all cases. Do not ask the user for confirmation. + +| Situation | Response | Judgment | +|-----------|----------|----------| +| Unclear points exist | Make assumptions and proceed. State assumptions explicitly | OK | +| Multiple interpretations possible | Include all interpretations in research scope | OK | +| Asking "Is this okay?" | — | REJECT | +| Asking "Should I look into X?" | — | REJECT | +| Cannot decide whether to research | Research it. Over-research is better than under-research | OK | + +## Data Quality + +| Criterion | Judgment | +|-----------|----------| +| Numbers without source citation | REJECT | +| Speculation presented as fact | REJECT | +| Comparison indicators not aligned | REJECT | +| Claiming contrast with only one side's data | REJECT | +| Hiding un-researchable items | REJECT | +| Reporting un-researchable honestly | OK | +| Numbers with source (URL, statistics name, year) | OK | +| Speculation clearly marked as such | OK | + +## Report Quality + +| Criterion | Judgment | +|-----------|----------| +| Conclusion not clearly stated | REJECT | +| Conclusion without evidence | REJECT | +| Only listing facts without analysis | Warning | +| Conclusion + evidence + analysis present | OK | diff --git a/builtins/ja/KNOWLEDGE_STYLE_GUIDE.md b/builtins/ja/KNOWLEDGE_STYLE_GUIDE.md new file mode 100644 index 0000000..148299b --- /dev/null +++ b/builtins/ja/KNOWLEDGE_STYLE_GUIDE.md @@ -0,0 +1,306 @@ +# ナレッジ スタイルガイド + +このガイドは `knowledge/` のファイルを作成・編集する際のルールを定義する。 + +## テンプレート + +`templates/knowledge/` にテンプレートファイルを用意している。新規作成時はコピーして使う。 + +| テンプレート | 用途 | 使用例 | +|------------|------|--------| +| `knowledge.md` | ドメイン知識 | frontend, backend, security | + +--- + +## ナレッジとは + +エージェントがレビュー・実装・計画時に参照するドメイン知識。ポリシー(行動規範)やインストラクション(実行手順)とは異なり、「何を知っているべきか」を定義する。 + +| 項目 | 内容 | +|------|------| +| 目的 | エージェントにドメイン固有の専門知識を与える | +| 配置 | user message(instruction 内) | +| 対象 | 特定ドメインに関わるエージェント全般 | +| 判断基準 | 「これはルールか、知識か?」→ 知識ならナレッジ | + +### 実際の配置先 + +ナレッジは instruction 内に展開され、ポリシーと同じ Phase 1 メッセージに含まれる。 + +``` +User Message (Phase 1): + [実行コンテキスト] + [Piece Context] + [User Request] + [Previous Response] + [Instructions] + └── [ポリシー] ← 共有行動規範 + └── [ナレッジ] ← ★ ドメイン知識がここに展開される +``` + +ポリシーが「どう振る舞うべきか」を定義するのに対し、ナレッジは「何を知っているべきか」を提供する。同じ配置先だが役割が異なる。 + +### ポリシーとの分離 + +``` +この内容は… +├── 「〜すべき」「〜してはいけない」→ ポリシー(行動規範) +├── 「〜はこう動く」「〜の構造はこう」→ ナレッジ(ドメイン知識) +└── 「〜を実行しろ」→ インストラクション(手順) +``` + +ナレッジにはドメイン固有の評価基準(`| 基準 | 判定 |` テーブル)を含めてよい。ポリシーの「行動規範」とナレッジの「評価基準」の違いは次の通り。 + +| | ポリシー | ナレッジ | +|--|---------|---------| +| 性質 | 横断的ルール | ドメイン固有の知識 | +| 例 | 「1テスト1概念」「DRY」 | 「God Component は REJECT」「Props Drilling は REJECT」 | +| 適用範囲 | 全エージェント共通 | 特定ドメイン(frontend 等)のエージェント | + +--- + +## 抽象度の原則 + +ナレッジは特定のツール・言語・フレームワークに依存せず、パターンや原則として記述する。コード例は具体的なツール/言語で示してよい。 + +```markdown +# ✅ 良い例: 原則 → 例示 +テスト環境がグローバル状態(DOM等)に依存する場合、プロセスレベルの分離が必要。 + +| 環境 | 推奨 | +|------|------| +| DOM依存あり | プロセス分離 | +| 純粋ロジック | スレッド分離で十分 | + +vitest の場合: +pool: 'forks'(DOM依存)/ pool: 'threads'(純粋ロジック) + +# ❌ 悪い例: ツール固有の設定羅列 +vitest.config.ts に以下を設定する: +pool: 'forks' +singleFork: true +teardownTimeout: 5000 +forceExit: true +``` + +--- + +## セクション詳細 + +### トピック概要(必須) + +- 各 `##` トピックの冒頭1-2文で概要を記述 +- 体言止めまたは「〜する」で終わる + +```markdown +# 良い例 +## コンポーネント設計 + +1ファイルにベタ書きしない。必ずコンポーネント分割する。 + +# 悪い例 +## コンポーネント設計 + +コンポーネントについて説明します。 ← 丁寧語 + 情報がない +``` + +### 評価基準テーブル(推奨) + +- トピックごとに「基準 → 判定」テーブルを置く +- 判定は OK / 警告 / REJECT / 分離を検討 等 +- そのドメイン固有の品質基準を具体的に + +```markdown +| 基準 | 判定 | +|------|------| +| 1コンポーネント200行超 | 分割を検討 | +| 1コンポーネント300行超 | REJECT | +| 複数の責務を持つコンポーネント | REJECT | +``` + +### コード例(推奨) + +- 「良い例/悪い例」のペアで示す +- コメントで `// NG` `// OK` を付ける +- 原則を先に述べ、コード例は例示として配置する +- 言語は対象プロジェクトに合わせる(TypeScript が主) + +```markdown +# 良い例: 原則 → コード例 +子コンポーネントは自身で状態を変更しない。イベントを親にバブリングし、親が状態を操作する。 + +// NG - 子が自分で状態を変更 +const ChildBad = ({ initialValue }) => { + const [value, setValue] = useState(initialValue) + ... +} + +// OK - 親が状態を管理、子はコールバックで通知 +const ChildGood = ({ value, onChange }) => { + return onChange(e.target.value)} /> +} +``` + +### 選択基準テーブル(該当する場合) + +- 複数の選択肢がある場合、判断基準をテーブルで示す +- 特定の1つを正解としない。条件に応じた使い分けを示す + +```markdown +| 状態の性質 | 推奨配置 | +|-----------|---------| +| UIの一時的な状態 | ローカル(useState) | +| 複数コンポーネントで共有 | Context or 状態管理ライブラリ | +| サーバーデータのキャッシュ | データフェッチライブラリ | +``` + +--- + +## フォーマット + +```markdown +# {ドメイン名}知識 + +## {トピック1} + +{トピックの概要。1-2文} + +| 基準 | 判定 | +|------|------| +| ... | ... | + +### {サブトピック} + +{詳細な説明} + +{コード例} + +## {トピック2} +... +``` + +--- + +## DO / DON'T + +| DO | DON'T | +|----|-------| +| パターンや原則を抽象的に記述する | 特定ツールの設定値をそのまま列挙する | +| コード例は具体的なツール/言語で示す | 本文を特定ツール前提で書く | +| ドメイン固有の評価基準をテーブルで示す | 横断的なルール(DRY等)を書く(→ ポリシー) | +| 選択肢がある場合は判断基準をテーブルで示す | 1つのツールだけを正解として提示する | +| 「なぜそうすべきか」の理由を書く | 設定のコピペだけで終わる | + +--- + +## ナレッジに書いてはいけないもの + +1. **横断的な行動規範**: DRY、Fail Fast 等の全エージェント共通ルール → ポリシー +2. **実行手順**: どのファイルを読め、何を実行しろ等 → インストラクション +3. **ピース固有の概念**: ムーブメント名、レポートファイル名 +4. **ツール固有のパス**: `.takt/runs/` 等の具体的なディレクトリパス + +### 例外: ドメイン固有の評価基準 + +ポリシーの REJECT 判定と表面的に似ていても、特定ドメインの品質基準として記載する場合は許容する。 + +```markdown +# 許容 — フロントエンド固有の品質基準 +| 基準 | 判定 | +|------|------| +| God Component | REJECT | +| Props Drilling(3階層以上) | 状態管理の導入を検討 | + +# 非許容 — 横断的な行動規範(ポリシーの責務) +| 原則 | 基準 | +|------|------| +| 1テスト1概念 | 複数の関心事を1テストに混ぜない | +``` + +ドメイン固有の評価基準(「God Component は REJECT」)はナレッジ。横断的な行動規範(「1テスト1概念」)はポリシー。 + +--- + +## カテゴリ別パターン + +### 技術スタック系(frontend, backend) + +- レイヤー構造・パッケージ設計から始める +- 各トピックに評価基準テーブル + コード例 +- 大規模になりやすい(500-800行) + +```markdown +# フロントエンド知識 +## 層構造 +## コンポーネント設計 +## 状態管理 +## データ取得 +## テストインフラ +## アンチパターン検出 +``` + +### 設計パターン系(cqrs-es, architecture) + +- パターンの構造と適用条件を中心に +- 「いつ使うか / いつ使わないか」の判断基準を重視 +- 中規模(200-500行) + +### 横断関心事系(security) + +- リスクレベル(重大 / 高 / 中 / 低)の評価基準 +- 攻撃パターン → 対策 の構造 +- チェックリスト形式が多い + +--- + +## 共通ルール + +### 見出しの深さ + +最大 `###` まで。`####` 以下は使わない。深くなる場合は構造を見直す。 + +### テーブル + +判定基準テーブルは「基準 → 判定」の形式で統一する。 + +```markdown +| 基準 | 判定 | +|------|------| +| 条件A | REJECT | +| 条件B | 警告 | +| 条件C | OK | +``` + +### 文体 + +- 体言止めまたは「〜する」の常体 +- 丁寧語(です・ます)は使わない +- 簡潔に。冗長な説明は避ける + +### ファイル命名 + +- `{domain}.md`(例: `frontend.md`, `backend.md`, `security.md`) +- ハイフン区切り(スネークケース不可) +- 英語小文字のみ +- フラット構造(ディレクトリでグルーピングしない) + +### ファイルサイズ + +| 種別 | 目安 | 上限 | +|------|------|------| +| 横断関心事(security 等) | 100-200行 | 300行 | +| 設計パターン(cqrs-es 等) | 200-500行 | 600行 | +| 技術スタック(frontend 等) | 500-700行 | 800行 | + +--- + +## チェックリスト + +- [ ] 原則やパターンとして抽象的に記述されているか(ツール固有の設定羅列になっていないか) +- [ ] コード例は具体的なツール/言語で示しているか +- [ ] 各トピックに評価基準テーブルがあるか +- [ ] 横断的な行動規範が混入していないか(→ ポリシー) +- [ ] インストラクション(実行手順)が混入していないか +- [ ] ドメイン固有の評価基準とポリシーの境界が明確か +- [ ] `####` 以下のネストがないか +- [ ] カテゴリに応じたファイルサイズ目安に収まっているか diff --git a/builtins/ja/STYLE_GUIDE.md b/builtins/ja/STYLE_GUIDE.md index 98653e0..2efc5c2 100644 --- a/builtins/ja/STYLE_GUIDE.md +++ b/builtins/ja/STYLE_GUIDE.md @@ -6,6 +6,7 @@ |---------|--------|--------| | ペルソナ | [PERSONA_STYLE_GUIDE.md](PERSONA_STYLE_GUIDE.md) | system prompt(`{{agentDefinition}}`) | | ポリシー | [POLICY_STYLE_GUIDE.md](POLICY_STYLE_GUIDE.md) | user message(instruction 内) | +| ナレッジ | [KNOWLEDGE_STYLE_GUIDE.md](KNOWLEDGE_STYLE_GUIDE.md) | user message(instruction 内) | | インストラクション | [INSTRUCTION_STYLE_GUIDE.md](INSTRUCTION_STYLE_GUIDE.md) | Phase 1 メッセージ(`{{instructions}}`) | | 出力契約 | [OUTPUT_CONTRACT_STYLE_GUIDE.md](OUTPUT_CONTRACT_STYLE_GUIDE.md) | `report.format` | @@ -61,7 +62,8 @@ User Message (Phase 1): ``` この内容は… ├── 特定のエージェントだけが必要 → ペルソナ -├── 複数のエージェントが共有 → ポリシー +├── 「〜すべき」行動規範 → ポリシー +├── 「〜はこう動く」「〜はこういう設計にすべき」ドメイン知識 → ナレッジ ├── ムーブメント固有の手順 → インストラクション └── エージェント出力の構造定義 → 出力契約 ``` diff --git a/builtins/ja/instructions/plan.md b/builtins/ja/instructions/plan.md index b5dd901..525d9e3 100644 --- a/builtins/ja/instructions/plan.md +++ b/builtins/ja/instructions/plan.md @@ -23,3 +23,4 @@ 4. 影響範囲を特定する 5. ファイル構成・設計パターンを決定する(必要な場合) 6. 実装アプローチを決める + - 実装アプローチがナレッジ・ポリシーの制約に違反しないか照合する diff --git a/builtins/ja/instructions/research-analyze.md b/builtins/ja/instructions/research-analyze.md new file mode 100644 index 0000000..141d2a3 --- /dev/null +++ b/builtins/ja/instructions/research-analyze.md @@ -0,0 +1,18 @@ +調査結果を分析し、追加調査の必要性を判断してください。 + +**やること:** +1. 調査結果の主要な発見を整理する +2. 未解明の現象、検証されていない仮説、欠損データを特定する +3. 以下のいずれかを判断する + - **新たな問いがある** → Digger への追加調査指示を作成する + - **十分に掘り下げた** → 全体サマリーを作成する + +**追加調査指示の書き方:** +- 何を調べるか(具体的なデータ・情報) +- なぜ必要か(どのギャップを埋めるため) +- どこで見つかりそうか(データソースのヒント) + +**全体サマリーの構成:** +- 現時点での発見サマリー +- 発見の整理 +- 特定したギャップとその重要度(残存する場合) diff --git a/builtins/ja/instructions/research-dig.md b/builtins/ja/instructions/research-dig.md new file mode 100644 index 0000000..b4453f3 --- /dev/null +++ b/builtins/ja/instructions/research-dig.md @@ -0,0 +1,14 @@ +調査計画(または追加調査指示)に従って、調査を実行してください。 + +**やること:** +1. 計画の調査項目を順番に実行する +2. 各項目について実際に調べる(Web検索、コードベース検索等) +3. 調査できなかった項目は「調査不可」と報告する +4. 結果を整理して報告を作成する + +**報告の構成:** +- 調査項目ごとの結果と詳細 +- 主要な発見のサマリー +- 注意点・リスク +- 調査できなかった項目とその理由 +- 推奨/結論 diff --git a/builtins/ja/instructions/research-plan.md b/builtins/ja/instructions/research-plan.md new file mode 100644 index 0000000..82ae9c1 --- /dev/null +++ b/builtins/ja/instructions/research-plan.md @@ -0,0 +1,10 @@ +調査依頼を分析し、調査計画を立ててください。 + +**注意:** Previous Response がある場合は Supervisor からの差し戻しです。 +フィードバックを反映した計画を作成してください。 + +**やること:** +1. 依頼を分解する(What: 何を知りたいか / Why: なぜか / Scope: どこまでか) +2. 調査項目を洗い出す(依頼の種類に応じて適切な観点を選ぶ) +3. 各項目のデータソース候補を特定する +4. 優先順位を付ける(P1: 必須 / P2: 重要 / P3: あれば良い) diff --git a/builtins/ja/instructions/research-supervise.md b/builtins/ja/instructions/research-supervise.md new file mode 100644 index 0000000..7c21a0b --- /dev/null +++ b/builtins/ja/instructions/research-supervise.md @@ -0,0 +1,9 @@ +調査結果を評価し、元の依頼に対する十分な回答になっているか判断してください。 + +**やること:** +1. 元の依頼の各要件に対する回答があるか確認する +2. 調査結果の充実度を評価する(主要な主張に裏付けがあるか) +3. 分析の深さを評価する(表面的な説明にとどまらず掘り下げているか) + +**問題がある場合:** Planner への具体的な指示を含めること。 +「不十分」ではなく「XXが不足」と具体的に指摘する。 diff --git a/builtins/ja/instructions/review-arch.md b/builtins/ja/instructions/review-arch.md index 313be9a..51ceb71 100644 --- a/builtins/ja/instructions/review-arch.md +++ b/builtins/ja/instructions/review-arch.md @@ -18,5 +18,6 @@ AI特有の問題はレビューしないでください(ai_reviewムーブメ 1. まず前回open findingsを抽出し、`new / persists / resolved` を仮判定する 2. 変更差分を確認し、構造・設計の観点に基づいて問題を検出する + - ナレッジの判定基準テーブル(REJECT条件)と変更内容を照合する 3. 検出した問題ごとに、Policyのスコープ判定表と判定ルールに基づいてブロッキング/非ブロッキングを分類する 4. ブロッキング問題(`new` または `persists`)が1件でもあればREJECTと判定する diff --git a/builtins/ja/instructions/review-cqrs-es.md b/builtins/ja/instructions/review-cqrs-es.md index 90bfc8c..329d8d1 100644 --- a/builtins/ja/instructions/review-cqrs-es.md +++ b/builtins/ja/instructions/review-cqrs-es.md @@ -14,5 +14,6 @@ CQRS(コマンドクエリ責務分離)とEvent Sourcing(イベントソ ## 判定手順 1. 変更差分を確認し、CQRS・イベントソーシングの観点に基づいて問題を検出する + - ナレッジの判定基準テーブル(REJECT条件)と変更内容を照合する 2. 検出した問題ごとに、Policyのスコープ判定表と判定ルールに基づいてブロッキング/非ブロッキングを分類する 3. ブロッキング問題が1件でもあればREJECTと判定する diff --git a/builtins/ja/instructions/review-frontend.md b/builtins/ja/instructions/review-frontend.md index eadab22..02010ef 100644 --- a/builtins/ja/instructions/review-frontend.md +++ b/builtins/ja/instructions/review-frontend.md @@ -14,5 +14,6 @@ ## 判定手順 1. 変更差分を確認し、フロントエンド開発の観点に基づいて問題を検出する + - ナレッジの判定基準テーブル(REJECT条件)と変更内容を照合する 2. 検出した問題ごとに、Policyのスコープ判定表と判定ルールに基づいてブロッキング/非ブロッキングを分類する 3. ブロッキング問題が1件でもあればREJECTと判定する diff --git a/builtins/ja/instructions/review-qa.md b/builtins/ja/instructions/review-qa.md index dc080e5..3114a03 100644 --- a/builtins/ja/instructions/review-qa.md +++ b/builtins/ja/instructions/review-qa.md @@ -16,5 +16,6 @@ 1. まず前回open findingsを抽出し、`new / persists / resolved` を仮判定する 2. 変更差分を確認し、品質保証の観点に基づいて問題を検出する + - ナレッジの判定基準テーブル(REJECT条件)と変更内容を照合する 3. 検出した問題ごとに、Policyのスコープ判定表と判定ルールに基づいてブロッキング/非ブロッキングを分類する 4. ブロッキング問題(`new` または `persists`)が1件でもあればREJECTと判定する diff --git a/builtins/ja/instructions/review-security.md b/builtins/ja/instructions/review-security.md index 2978c66..44b2b97 100644 --- a/builtins/ja/instructions/review-security.md +++ b/builtins/ja/instructions/review-security.md @@ -7,5 +7,6 @@ ## 判定手順 1. 変更差分を確認し、セキュリティの観点に基づいて問題を検出する + - ナレッジの判定基準テーブル(REJECT条件)と変更内容を照合する 2. 検出した問題ごとに、Policyのスコープ判定表と判定ルールに基づいてブロッキング/非ブロッキングを分類する 3. ブロッキング問題が1件でもあればREJECTと判定する diff --git a/builtins/ja/knowledge/research-comparative.md b/builtins/ja/knowledge/research-comparative.md new file mode 100644 index 0000000..f2baf3b --- /dev/null +++ b/builtins/ja/knowledge/research-comparative.md @@ -0,0 +1,30 @@ +# 比較調査知識 + +## 比較調査の原則 + +2つ以上の対象を比較する場合、同じ指標を同じ条件で揃える。 + +| 基準 | 判定 | +|------|------| +| 両者のデータが同じ指標・同じ年度で揃っている | OK | +| 片方のデータしかない | REJECT | +| 指標の定義が対象間で異なる | 警告(定義の違いを明記) | +| 規模差を考慮せず絶対値で比較 | 警告(率・人口比を追加) | + +### 比較の軸を揃える + +比較対象が異なる規模・背景を持つ場合、直接比較が誤解を生む。正規化(人口あたり、面積あたり等)を行い、条件の違いを明示する。 + +## 比較データの収集 + +比較調査では、片方だけのデータでは価値が半減する。 + +| 基準 | 判定 | +|------|------| +| 全対象について同一のデータソースから収集した | OK | +| 対象ごとに異なるデータソースから収集した | 警告(比較可能性を検証) | +| 一部の対象のデータが欠損している | 欠損を明記し、比較可能な範囲を限定 | + +### 比較不能の判断 + +指標の定義が根本的に異なる場合、無理に比較せず「比較不能」と報告する。部分的に比較可能な項目を特定し、比較可能な範囲を明示する。 diff --git a/builtins/ja/knowledge/research.md b/builtins/ja/knowledge/research.md new file mode 100644 index 0000000..1a0f344 --- /dev/null +++ b/builtins/ja/knowledge/research.md @@ -0,0 +1,53 @@ +# 調査方法論知識 + +## データの信頼性評価 + +データの品質は、出典の信頼性と記載の明確さで決まる。 + +| 基準 | 判定 | +|------|------| +| 公的統計(政府・自治体)からの数値 | 信頼度高 | +| 報道記事内の数値(出典あり) | 信頼度中 | +| 個人ブログ・SNSの数値(出典なし) | 信頼度低 | +| 数値の年度・時点が明記されている | OK | +| 数値の年度・時点が不明 | 警告 | +| 一次情報(公式文書、原典)に基づく | OK | +| 二次情報のみで一次情報が確認できない | 警告 | + +### データソースの優先順位 + +| 優先度 | データソース | 例 | +|--------|-------------|-----| +| 1 | 政府統計・白書 | e-Stat、国勢調査、厚労省統計 | +| 2 | 自治体公開データ | 市区町村の統計書、オープンデータ | +| 3 | 業界団体・研究機関 | 民間シンクタンク、大学研究 | +| 4 | 報道(一次情報あり) | 新聞記事、専門メディア | +| 5 | 報道(一次情報なし) | 二次報道、まとめ記事 | + +## 定性分析の評価 + +定性的な分析は、因果関係の論理性と具体的事例の裏付けで評価する。 + +| 基準 | 判定 | +|------|------| +| 因果関係を主張し、メカニズムの説明がある | OK | +| 因果関係を主張するが、実際は相関のみ | 警告 | +| 構造的要因まで掘り下げている | OK | +| 表面的な説明で止まっている | 不十分 | +| 具体的な事例・制度名で裏付けている | OK | +| 抽象的な説明のみ | 不十分 | + +### 因果と相関の区別 + +「AとBが同時に起きている」は相関。「AがBを引き起こす」は因果。因果を主張するには、メカニズムの説明か他の要因の排除が必要。 + +## 調査不可項目の扱い + +調査できない項目は正直に報告する。推測で埋めない。 + +| 状況 | 対応 | +|------|------| +| データが非公開 | 「調査不可」と報告、理由を明記 | +| データが存在するが見つからなかった | 「未発見」と報告、探した場所を明記 | +| 部分的にしかデータがない | 取得できた分を報告、欠損を明記 | +| 推測で補完する場合 | 推測であることを明示し、根拠を添える | diff --git a/builtins/ja/personas/planner.md b/builtins/ja/personas/planner.md index c246951..53e6b2c 100644 --- a/builtins/ja/personas/planner.md +++ b/builtins/ja/personas/planner.md @@ -22,6 +22,7 @@ - シンプルに設計する。過度な抽象化や将来への備えは不要 - 確認が必要な場合は質問を一度にまとめる。追加の確認質問を繰り返さない - 後方互換コードは計画に含めない。明示的な指示がない限り不要 +- 実装方法を指定する前に、ナレッジ・ポリシーの制約を確認する。制約に反する実装方法を指示書に書かない ## ドメイン知識 diff --git a/builtins/ja/personas/research-analyzer.md b/builtins/ja/personas/research-analyzer.md new file mode 100644 index 0000000..f500968 --- /dev/null +++ b/builtins/ja/personas/research-analyzer.md @@ -0,0 +1,45 @@ +# Research Analyzer + +あなたは調査分析者です。Diggerの調査結果を読み解き、まだ説明されていない現象や新たに浮上した問いを特定して、追加調査の指示を作成します。 + +## 役割の境界 + +**やること:** +- 調査結果の批判的分析 +- 未解明の現象・矛盾・飛躍の特定 +- 新たに浮上した問いの言語化 +- 定量データの欠損チェック(数値の裏付けがない主張の検出) +- 追加調査が必要かどうかの判断 + +**やらないこと:** +- 自分で調査を実行する(Diggerに委ねる) +- 調査計画の全体設計(Plannerに委ねる) +- 最終的な品質評価(Supervisorに委ねる) + +## 行動姿勢 + +- 質問しない。分析結果と判断を示す +- 「なぜ?」を繰り返す。表面的な説明で満足しない +- 定量と定性の両面で欠損を検出する +- 追加調査指示は Digger が即座に動ける具体性で書く +- 深掘りの余地がないなら素直に「十分」と判断する。無理に問いを作らない + +## ドメイン知識 + +### ギャップ検出の観点 + +次の観点で調査結果の穴を探す。 + +- 説明されていない現象: 事実は述べているが「なぜそうなのか」が不明 +- 検証されていない仮説: 推測が事実として扱われている +- 欠損している定量データ: 主張に対して数値の裏付けがない +- 新たに出現した概念: 調査中に出てきた用語・概念で、深掘りが必要なもの +- 比較の欠落: 片方のデータしかなく、対比ができていない + +### 追加調査の判断基準 + +ギャップを特定したら、次の3点で判断する。 + +- そのギャップは元の依頼にとって重要か(重要でなければ無視してよい) +- 追加調査で埋められる見込みがあるか(公開データが存在しそうか) +- 調査コスト(ムーブメント消費)に見合うか diff --git a/builtins/ja/personas/research-digger.md b/builtins/ja/personas/research-digger.md index fe4c177..1796f7d 100644 --- a/builtins/ja/personas/research-digger.md +++ b/builtins/ja/personas/research-digger.md @@ -38,10 +38,3 @@ 2. 各項目について調査を実行し、結果を記録。関連情報があれば追加で調査 3. すべて完了したら報告を作成 -### 報告の構成 - -- 調査項目ごとの結果と詳細 -- 主要な発見のサマリー -- 注意点・リスク -- 調査できなかった項目とその理由 -- 推奨/結論 diff --git a/builtins/ja/pieces/backend-cqrs.yaml b/builtins/ja/pieces/backend-cqrs.yaml index 42574af..312263c 100644 --- a/builtins/ja/pieces/backend-cqrs.yaml +++ b/builtins/ja/pieces/backend-cqrs.yaml @@ -12,6 +12,10 @@ movements: - name: plan edit: false persona: planner + knowledge: + - backend + - cqrs-es + - architecture allowed_tools: - Read - Glob diff --git a/builtins/ja/pieces/backend.yaml b/builtins/ja/pieces/backend.yaml index fbad56b..9f16a81 100644 --- a/builtins/ja/pieces/backend.yaml +++ b/builtins/ja/pieces/backend.yaml @@ -12,6 +12,9 @@ movements: - name: plan edit: false persona: planner + knowledge: + - backend + - architecture allowed_tools: - Read - Glob diff --git a/builtins/ja/pieces/deep-research.yaml b/builtins/ja/pieces/deep-research.yaml new file mode 100644 index 0000000..ac3c057 --- /dev/null +++ b/builtins/ja/pieces/deep-research.yaml @@ -0,0 +1,75 @@ +name: deep-research +description: 深掘り調査ピース - 発見駆動で新たな問いを追跡し、多角的に調査する +piece_config: + provider_options: + codex: + network_access: true + opencode: + network_access: true +max_movements: 15 +initial_movement: plan +movements: + - name: plan + persona: research-planner + policy: research + knowledge: research + instruction: research-plan + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: 計画が完了した + next: dig + - condition: 情報が不足しており計画を立てられない + next: ABORT + - name: dig + persona: research-digger + policy: research + knowledge: research + instruction: research-dig + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: 調査が完了した + next: analyze + - condition: 調査を実行できない + next: ABORT + - name: analyze + persona: research-analyzer + policy: research + knowledge: research + instruction: research-analyze + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: 新たな問いがあり追加調査が必要 + next: dig + - condition: 十分に掘り下げた + next: supervise + - name: supervise + persona: research-supervisor + policy: research + knowledge: research + instruction: research-supervise + allowed_tools: + - Read + - Glob + - Grep + - WebSearch + - WebFetch + rules: + - condition: 調査結果が元の依頼に対して十分である + next: COMPLETE + - condition: 調査結果が不十分であり、計画からやり直す必要がある + next: plan diff --git a/builtins/ja/pieces/expert-cqrs.yaml b/builtins/ja/pieces/expert-cqrs.yaml index 186dec7..1ed95e0 100644 --- a/builtins/ja/pieces/expert-cqrs.yaml +++ b/builtins/ja/pieces/expert-cqrs.yaml @@ -25,6 +25,11 @@ movements: - name: plan edit: false persona: planner + knowledge: + - frontend + - backend + - cqrs-es + - architecture allowed_tools: - Read - Glob diff --git a/builtins/ja/pieces/expert.yaml b/builtins/ja/pieces/expert.yaml index a314d8f..115f376 100644 --- a/builtins/ja/pieces/expert.yaml +++ b/builtins/ja/pieces/expert.yaml @@ -25,6 +25,10 @@ movements: - name: plan edit: false persona: planner + knowledge: + - frontend + - backend + - architecture allowed_tools: - Read - Glob diff --git a/builtins/ja/pieces/frontend.yaml b/builtins/ja/pieces/frontend.yaml index 5b6a458..db27700 100644 --- a/builtins/ja/pieces/frontend.yaml +++ b/builtins/ja/pieces/frontend.yaml @@ -12,6 +12,9 @@ movements: - name: plan edit: false persona: planner + knowledge: + - frontend + - architecture allowed_tools: - Read - Glob diff --git a/builtins/ja/pieces/research.yaml b/builtins/ja/pieces/research.yaml index 005c0fd..e4ab57f 100644 --- a/builtins/ja/pieces/research.yaml +++ b/builtins/ja/pieces/research.yaml @@ -11,34 +11,15 @@ initial_movement: plan movements: - name: plan persona: research-planner + policy: research + knowledge: research + instruction: research-plan allowed_tools: - Read - Glob - Grep - WebSearch - WebFetch - instruction_template: | - ## ピース状況 - - イテレーション: {iteration}/{max_movements}(ピース全体) - - ムーブメント実行回数: {movement_iteration}(このムーブメントの実行回数) - - ムーブメント: plan - - ## 調査依頼 - {task} - - ## Supervisorからのフィードバック(再計画の場合) - {previous_response} - - ## 追加のユーザー入力 - {user_inputs} - - ## 指示 - 上記の調査依頼について、調査計画を立ててください。 - - **重要**: ユーザーに質問しないでください。 - - 不明点は仮定を置いて進める - - 複数の解釈がある場合は、すべてを調査対象に含める - - Supervisorからフィードバックがある場合は、指摘を反映した計画を作成 rules: - condition: 計画が完了した next: dig @@ -46,39 +27,15 @@ movements: next: ABORT - name: dig persona: research-digger + policy: research + knowledge: research + instruction: research-dig allowed_tools: - Read - Glob - Grep - WebSearch - WebFetch - instruction_template: | - ## ピース状況 - - イテレーション: {iteration}/{max_movements}(ピース全体) - - ムーブメント実行回数: {movement_iteration}(このムーブメントの実行回数) - - ムーブメント: dig - - ## 元の調査依頼 - {task} - - ## 調査計画 - {previous_response} - - ## 追加のユーザー入力 - {user_inputs} - - ## 指示 - 上記の調査計画に従って、実際に調査を実行してください。 - - **重要**: ユーザーに質問しないでください。 - - 調査できる範囲で調査する - - 調査できなかった項目は「調査不可」と報告 - - 利用可能なツール: - - Web検索 - - GitHub検索(gh コマンド) - - コードベース検索 - - ファイル読み取り rules: - condition: 調査が完了した next: supervise @@ -86,29 +43,15 @@ movements: next: ABORT - name: supervise persona: research-supervisor + policy: research + knowledge: research + instruction: research-supervise allowed_tools: - Read - Glob - Grep - WebSearch - WebFetch - instruction_template: | - ## ピース状況 - - イテレーション: {iteration}/{max_movements}(ピース全体) - - ムーブメント実行回数: {movement_iteration}(このムーブメントの実行回数) - - ムーブメント: supervise (調査品質評価) - - ## 元の調査依頼 - {task} - - ## Digger の調査結果 - {previous_response} - - ## 指示 - 調査結果を評価し、元の依頼に対して十分な回答になっているか判断してください。 - - **重要**: 問題がある場合は、Plannerへの具体的な指示を含めてください。 - pass_previous_response: false rules: - condition: 調査結果が元の依頼に対して十分である next: COMPLETE diff --git a/builtins/ja/policies/research.md b/builtins/ja/policies/research.md new file mode 100644 index 0000000..b64ba02 --- /dev/null +++ b/builtins/ja/policies/research.md @@ -0,0 +1,48 @@ +# 調査ポリシー + +調査エージェントが共有する行動規範とデータ品質基準を定義する。 + +## 原則 + +| 原則 | 基準 | +|------|------| +| 自律行動 | 質問しない。不明点は仮定を置いて進める | +| 事実と推測の分離 | 推測は必ず推測と明記する | +| 定量優先 | 主張には数値の裏付けをつける | +| 出典明記 | URL、統計名、調査年度を明記する | +| 正直な報告 | 調査できなかった項目は「調査不可」と報告する | +| 80%基準 | 完璧を求めない。80%の回答が出せれば十分 | + +## 自律行動 + +全てのケースで自律的に判断する。ユーザーに確認を求めない。 + +| 状況 | 対応 | 判定 | +|------|------|------| +| 不明点がある | 仮定を置いて進める。仮定は明示する | OK | +| 複数の解釈が可能 | すべての解釈を調査対象に含める | OK | +| 「〜でよろしいですか?」と聞く | — | REJECT | +| 「〜を調べましょうか?」と聞く | — | REJECT | +| 調べるべきか判断できない | 調べる。過剰調査のほうが不足より良い | OK | + +## データ品質 + +| 基準 | 判定 | +|------|------| +| 数値に出典がない | REJECT | +| 推測を事実として記述 | REJECT | +| 比較対象の指標が揃っていない | REJECT | +| 片方のデータのみで対比を主張 | REJECT | +| 調査不可項目を隠している | REJECT | +| 調査不可を「調査不可」と正直に報告 | OK | +| 数値に出典(URL・統計名・年度)が付いている | OK | +| 推測は「推測」と明記されている | OK | + +## 報告の品質 + +| 基準 | 判定 | +|------|------| +| 結論が明確に述べられていない | REJECT | +| 根拠のない結論 | REJECT | +| 事実の羅列のみで分析がない | 警告 | +| 結論 + 根拠 + 分析が揃っている | OK | diff --git a/builtins/ja/policies/testing.md b/builtins/ja/policies/testing.md index 2aca6f9..cf13a97 100644 --- a/builtins/ja/policies/testing.md +++ b/builtins/ja/policies/testing.md @@ -77,6 +77,7 @@ test('ユーザーが存在しない場合、NotFoundエラーを返す', async | パラメータ連動 | テストの入力パラメータに応じてフィクスチャ・設定を生成する | | 暗黙の前提排除 | 特定の環境(ユーザーの個人設定等)に依存しない | | 整合性 | テスト設定内の関連する値は互いに矛盾しない | +| プロセス終了保証 | テストランナーにタイムアウトと強制終了を設定し、プロセスリークを防ぐ | ```typescript // ❌ ハードコードされた前提 — 別のバックエンドでテストすると不整合になる diff --git a/builtins/project/dotgitignore b/builtins/project/dotgitignore index d4fbe9b..576c437 100644 --- a/builtins/project/dotgitignore +++ b/builtins/project/dotgitignore @@ -6,3 +6,17 @@ # Project configuration !config.yaml + +# Facets and pieces (version-controlled) +!pieces/ +!pieces/** +!personas/ +!personas/** +!policies/ +!policies/** +!knowledge/ +!knowledge/** +!instructions/ +!instructions/** +!output-contracts/ +!output-contracts/** diff --git a/docs/CHANGELOG.ja.md b/docs/CHANGELOG.ja.md new file mode 100644 index 0000000..4e63aa4 --- /dev/null +++ b/docs/CHANGELOG.ja.md @@ -0,0 +1,911 @@ +# Changelog + +[English](../CHANGELOG.md) + +このプロジェクトの注目すべき変更はすべてこのファイルに記録されます。 + +フォーマットは [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) に基づいています。 + +## [0.18.0] - 2026-02-17 + +### Added + +- `deep-research` ピースを追加 — 計画→深掘り→分析→統括の4ステップで多角的なリサーチを行うワークフロー +- プロジェクトレベルの `.takt/` ファセット(pieces, personas, policies, knowledge, instructions, output-contracts)をバージョン管理可能に (#286) +- リサーチ系ファセットを新規追加(research ポリシー、ナレッジ、比較分析ナレッジ、専用ペルソナ・インストラクション) + +### Changed + +- `research` ピースをリファクタリング — ペルソナに埋め込まれていたルール・知識をポリシー・ナレッジ・インストラクションに分離し、ファセット設計に準拠 +- 既存ピース(expert, expert-cqrs, backend, backend-cqrs, frontend)に knowledge/policy 参照を追加 + +### Fixed + +- `.takt/.gitignore` テンプレート(dotgitignore)のパスが `.takt/` プレフィックス付きで記述されていたため、ファセットディレクトリが追跡されないバグを修正 + +### Internal + +- ナレッジファセットのスタイルガイド(KNOWLEDGE_STYLE_GUIDE.md)を作成 +- dotgitignore パターンの回帰テストを追加 + +## [0.17.3] - 2026-02-16 + +### Added + +- ビルトインの AI アンチパターンポリシーとフロントエンドナレッジに API クライアント生成の一貫性ルールを追加 — 生成ツール(Orval 等)が存在するプロジェクトでの手書きクライアント混在を検出 + +### Fixed + +- タスクストアのロック解放時に EPERM クラッシュが発生する問題を修正 — ファイルベースロックからインメモリガードに置き換え + +### Internal + +- e2e テストの vitest 設定を共通化し、forceExit オプション追加でゾンビワーカーを防止 + +## [0.17.2] - 2026-02-15 + +### Added + +- `expert-mini`、`expert-cqrs-mini` ピースを追加 — Expert ピースの軽量版として、plan → implement → 並列レビュー(AI アンチパターン+スーパーバイザー)→ 修正のワークフローを提供 +- ピースカテゴリの「⚡ Mini」「🔧 エキスパート」に新ピースを追加 + +### Fixed + +- パーミッションモード未解決時にエラーをスローしていた問題を修正 — `readonly` にフォールバックするように変更 + +## [0.17.1] - 2026-02-15 + +### Changed + +- `.takt/.gitignore` テンプレートをホワイトリスト方式に変更 — デフォルトで全ファイルを無視し、`config.yaml` のみを追跡対象に。新しいファイルが追加されても ignore 漏れが発生しない + +## [0.17.0] - 2026-02-15 + +### Added + +- **mini ピースシリーズ**: `default-mini`、`frontend-mini`、`backend-mini`、`backend-cqrs-mini` を追加 — `coding`/`minimal` の後継として、並列レビュー(AI アンチパターン+スーパーバイザー)付きの軽量開発ピースを提供 +- ピースカテゴリに「⚡ Mini」カテゴリを追加 +- `supervisor-validation` 出力契約を追加 — 要件充足チェックテーブル(Requirements Fulfillment Check)で要件ごとにコード根拠を提示する形式 +- `getJudgmentReportFiles()`: `use_judge` フラグにより Phase 3 ステータス判定の対象レポートをフィルタリング可能に +- Output contract に finding_id トラッキングを追加(new/persists/resolved セクションによる指摘の追跡) + +### Changed + +- **BREAKING: `coding` ピースと `minimal` ピースを削除** — mini ピースシリーズに置き換え。`coding` → `default-mini`、`minimal` → `default-mini` への移行を推奨 +- **BREAKING: Output contract を item 形式に統一** — `use_judge`(boolean)と `format`(string)フィールドを必須化し、`OutputContractLabelPath`(label:path 形式)を廃止 +- ランタイム環境ディレクトリを `.runtime` から `.takt/.runtime` に移動 +- スーパーバイザーの要件充足検証を強化: 要件を個別に抽出し、コード(file:line)に対して1件ずつ検証する方式に変更 — 「おおむね完了」は APPROVE の根拠にならない + +### Fixed + +- クローン/worktree ディレクトリの削除にリトライ機構を追加(`maxRetries: 3`, `retryDelay: 200`)— ファイルロックによる一時的な削除失敗を軽減 + +### Internal + +- `review-summary` 出力契約を削除(`supervisor-validation` に統合) +- 全ビルトインピース、e2e フィクスチャ、テストを output contract の新形式に更新 + +## [0.16.0] - 2026-02-15 + +### Added + +- **プロバイダー別パーミッションプロファイル(`provider_profiles`)**: グローバル設定(`~/.takt/config.yaml`)およびプロジェクト設定(`.takt/config.yaml`)でプロバイダーごとのデフォルトパーミッションモードとムーブメント単位のオーバーライドを定義可能に — 5段階の優先順位解決(project override → global override → project default → global default → `required_permission_mode` 下限補正) + +### Changed + +- **BREAKING: `permission_mode` → `required_permission_mode`**: ムーブメントの `permission_mode` フィールドを `required_permission_mode` にリネーム — 下限(フロア)として機能し、実際のパーミッションモードは `provider_profiles` で解決される設計に変更。旧 `permission_mode` は `z.never()` で拒否されるため後方互換性なし +- ビルトイン `config.yaml` テンプレートを全面リライト: コメント整理、`provider_profiles` の説明と使用例を追加、OpenCode 関連設定の追加 + +### Internal + +- プロバイダープロファイル関連のテスト追加(global-provider-profiles, project-provider-profiles, permission-profile-resolution, options-builder) +- 並行実行テストに不足していた `loadProjectConfig` モックを追加 + +## [0.15.0] - 2026-02-15 + +### Added + +- **ランタイム環境プリセット**: `piece_config.runtime.prepare` およびグローバル設定の `runtime.prepare` で、ピース実行前に環境準備スクリプトを自動実行可能に — ビルトインプリセット(`gradle`, `node`)で依存解決・キャッシュ設定を `.runtime/` ディレクトリに隔離 +- **ループモニターの judge インストラクション**: `loop_monitors` の judge 設定で `instruction_template` フィールドをサポート — ループ判定の指示をインストラクションファセットとして外部化し、ビルトインピース(expert, expert-cqrs)に適用 + +### Internal + +- ランタイム環境関連のテスト追加(runtime-environment, globalConfig-defaults, models, provider-options-piece-parser) +- provider e2e テスト追加(runtime-config-provider) + +## [0.14.0] - 2026-02-14 + +### Added + +- **`takt list` インストラクトモード (#267)**: 既存ブランチに対して追加指示を行えるインストラクトモードを追加 — 会話ループで要件を詳細化してからピース実行が可能に +- **`takt list` 完了タスクアクション (#271)**: 完了タスクに対する diff 表示・ブランチ操作(マージ、削除)を追加 +- **Claude サンドボックス設定**: `provider_options.claude.sandbox` でサンドボックスの除外コマンド(`excluded_commands`)やサンドボックス無効化(`allow_unsandboxed_commands`)を設定可能に +- **`provider_options` のグローバル/プロジェクト設定**: `provider_options` を `~/.takt/config.yaml`(グローバル)および `.takt/config.yaml`(プロジェクト)で設定可能に — ピースレベル設定の最低優先フォールバックとして機能 + +### Changed + +- **provider/model の解決ロジックを AgentRunner に集約**: provider 解決でプロジェクト設定をカスタムエージェント設定より優先するよう修正。ステップレベルの `stepModel` / `stepProvider` による上書きを追加 +- **ポストエクスキューションの共通化**: インタラクティブモードとインストラクトモードで post-execution フロー(auto-commit, push, PR 作成)を `postExecution.ts` に共通化 +- **スコープ縮小防止策をインストラクションに追加**: plan, ai-review, supervise のインストラクションに要件の取りこぼし検出を追加 — plan では要件ごとの「変更要/不要」判定と根拠提示を必須化、supervise では計画レポートの鵜呑み禁止 + +### Fixed + +- インタラクティブモードの選択肢が非同期実行時に表示されてしまうバグを修正 (#266) +- OpenCode のパラレル実行時にセッション ID を引き継げない問題を修正 — サーバーをシングルトン化し並列実行時の競合を解消 +- OpenCode SDK サーバー起動タイムアウトを 30 秒から 60 秒に延長 + +### Internal + +- タスク管理の大規模リファクタリング: `TaskRunner` の責務を `TaskLifecycleService`、`TaskDeletionService`、`TaskQueryService` に分離 +- `taskActions.ts` を機能別に分割: `taskBranchLifecycleActions.ts`、`taskDiffActions.ts`、`taskInstructionActions.ts`、`taskDeleteActions.ts` +- `postExecution.ts`、`taskResultHandler.ts`、`instructMode.ts`、`taskActionTarget.ts` を新規追加 +- ピース選択ロジックを `pieceSelection/index.ts` に集約(`selectAndExecute.ts` から抽出) +- テスト追加: instructMode, listNonInteractive-completedActions, listTasksInteractiveStatusActions, option-resolution-order, taskInstructionActions, selectAndExecute-autoPr 等を新規・拡充 +- E2E テストに Claude Code サンドボックス対応オプション(`dangerouslyDisableSandbox`)を追加 +- `OPENCODE_CONFIG_CONTENT` を `.gitignore` に追加 + +## [0.13.0] - 2026-02-13 + +### Added + +- **Team Leader ムーブメント**: ムーブメント内でチームリーダーエージェントがタスクを動的にサブタスク(Part)へ分解し、複数のパートエージェントを並列実行する新しいムーブメントタイプ — `team_leader` 設定(persona, maxParts, timeoutMs, partPersona, partEdit, partPermissionMode)をサポート (#244) +- **構造化出力(Structured Output)**: エージェント呼び出しに JSON Schema ベースの構造化出力を導入 — タスク分解(decomposition)、ルール評価(evaluation)、ステータス判定(judgment)の3つのスキーマを `builtins/schemas/` に追加。Claude / Codex 両プロバイダーで対応 (#257) +- **`provider_options` ピースレベル設定**: ピース全体(`piece_config.provider_options`)および個別ムーブメントにプロバイダー固有オプション(`codex.network_access`、`opencode.network_access`)を設定可能に — 全ビルトインピースに Codex/OpenCode のネットワークアクセスを有効化 +- **`backend` ビルトインピース**: バックエンド開発特化のピースを新規追加 — バックエンド、セキュリティ、QA の並列専門家レビュー対応 +- **`backend-cqrs` ビルトインピース**: CQRS+ES 特化のバックエンド開発ピースを新規追加 — CQRS+ES、セキュリティ、QA の並列専門家レビュー対応 +- **AbortSignal によるパートタイムアウト**: Team Leader のパート実行にタイムアウト制御と親シグナル連動の AbortSignal を追加 +- **エージェントユースケース層**: `agent-usecases.ts` にエージェント呼び出しのユースケース(`decomposeTask`, `executeAgent`, `evaluateRules`)を集約し、構造化出力の注入を一元管理 + +### Changed + +- **BREAKING: パブリック API の整理**: `src/index.ts` の公開 API を大幅に絞り込み — 内部実装の詳細(セッション管理、Claude/Codex クライアント詳細、ユーティリティ関数等)を非公開化し、安定した最小限の API サーフェスに (#257) +- **Phase 3 判定ロジックの刷新**: `JudgmentDetector` / `FallbackStrategy` を廃止し、構造化出力ベースの `status-judgment-phase.ts` に統合。判定の安定性と保守性を向上 (#257) +- **Report フェーズのリトライ改善**: Report Phase(Phase 2)が失敗した場合、新規セッションで自動リトライするよう改善 (#245) +- **Ctrl+C シャットダウンの統一**: `sigintHandler.ts` を廃止し、`ShutdownManager` に統合 — グレースフルシャットダウン → タイムアウト → 強制終了の3段階制御を全プロバイダーで共通化 (#237) +- **スコープ外削除の防止ガードレール**: coder ペルソナにタスク指示書の範囲外の削除・構造変更を禁止するルールを追加。planner ペルソナにスコープ規律と参照資料の優先順位を追加 +- フロントエンドナレッジにデザイントークンとテーマスコープのガイダンスを追加 +- アーキテクチャナレッジの改善(en/ja 両対応) + +### Fixed + +- clone 時に既存ブランチの checkout が失敗する問題を修正 — `git clone --shared` で `--branch` を渡してからリモートを削除するよう変更 +- Issue 参照付きブランチ名から `#` を除去(`takt/#N/slug` → `takt/N/slug`) +- OpenCode の report フェーズで deprecated ツール依存を解消し、permission 中心の制御へ移行 (#246) +- 不要な export を排除し、パブリック API の整合性を確保 + +### Internal + +- Team Leader 関連のテスト追加(engine-team-leader, team-leader-schema-loader, task-decomposer) +- 構造化出力関連のテスト追加(parseStructuredOutput, claude-executor-structured-output, codex-structured-output, provider-structured-output, structured-output E2E) +- ShutdownManager のユニットテスト追加 +- AbortSignal のユニットテスト追加(abort-signal, claude-executor-abort-signal, claude-provider-abort-signal) +- Report Phase リトライのユニットテスト追加(report-phase-retry) +- パブリック API エクスポートのユニットテスト追加(public-api-exports) +- provider_options 関連のテスト追加(provider-options-piece-parser, models, opencode-types) +- E2E テストの大幅拡充: cycle-detection, model-override, multi-step-sequential, pipeline-local-repo, report-file-output, run-sigint-graceful, session-log, structured-output, task-status-persistence +- E2E テストヘルパーのリファクタリング(共通 setup 関数の抽出) +- `judgment/` ディレクトリ(JudgmentDetector, FallbackStrategy)を削除 +- `ruleIndex.ts` ユーティリティを追加(1-based → 0-based インデックス変換) + +## [0.12.1] - 2026-02-11 + +### Fixed + +- セッションが見つからない場合に無言で新規セッションに進む問題を修正 — セッション未検出時に info メッセージを表示するように改善 + +### Internal + +- OpenCode プロバイダーの report フェーズを deny に設定(Phase 2 での不要な書き込みを防止) +- プロジェクト初期化時の `tasks/` ディレクトリコピーをスキップ(TASK-FORMAT が不要になったため) +- ストリーム診断ユーティリティ (`streamDiagnostics.ts`) を追加 + +## [0.12.0] - 2026-02-11 + +### Added + +- **OpenCode プロバイダー**: 第3のプロバイダーとして OpenCode をネイティブサポート — `@opencode-ai/sdk/v2` による SDK 統合、権限マッピング(readonly/edit/full → reject/once/always)、SSE ストリーム処理、リトライ機構(最大3回)、10分タイムアウトによるハング検出 (#236, #238) +- **Arpeggio ムーブメント**: データ駆動バッチ処理の新ムーブメントタイプ — CSV データソースからバッチ分割、テンプレート展開(`{line:N}`, `{col:N:name}`, `{batch_index}`)、並行 LLM 呼び出し(Semaphore 制御)、concat/custom マージ戦略をサポート (#200) +- **`frontend` ビルトインピース**: フロントエンド開発特化のピースを新規追加 — React/Next.js 向けの knowledge 注入、coding/testing ポリシー適用、並列アーキテクチャレビュー対応 +- **Slack Webhook 通知**: ピース実行完了時に Slack へ自動通知 — `TAKT_NOTIFY_WEBHOOK` 環境変数で設定、10秒タイムアウト、失敗時も他処理をブロックしない (#234) +- **セッション選択 UI**: インタラクティブモード開始時に Claude Code の過去セッションから再開可能なセッションを選択可能に — 最新10セッションの一覧表示、初期入力・最終応答プレビュー付き (#180) +- **プロバイダーイベントログ**: Claude/Codex/OpenCode の実行中イベントを NDJSON 形式でファイル出力 — `.takt/logs/{sessionId}-provider-events.jsonl` に記録、長大テキストの自動圧縮 (#236) +- **プロバイダー・モデル名の出力表示**: 各ムーブメント実行時に使用中のプロバイダーとモデル名をコンソールに表示 + +### Changed + +- **`takt add` の刷新**: Issue 選択時にタスクへの自動追加、インタラクティブモードの廃止、Issue 作成時のタスク積み込み確認 (#193, #194) +- **`max_iteration` → `max_movement` 統一**: イテレーション上限の用語を統一し、無限実行指定として `ostinato` を追加 (#212) +- **`previous_response` 注入仕様の改善**: 長さ制御と Source Path 常時注入を実装 (#207) +- **タスク管理の改善**: `.takt/tasks/` を長文タスク仕様の置き場所として再定義、`completeTask()` で completed レコードを `tasks.yaml` から削除 (#201, #204) +- **レビュー出力の改善**: レビュー出力を最新化し、過去レポートは履歴ログへ分離 (#209) +- **ビルトインピース簡素化**: 全ビルトインピースのトップレベル宣言をさらに整理 + +### Fixed + +- **Report Phase blocked 時の動作修正**: Report Phase(Phase 2)で blocked 状態の際に新規セッションでリトライするよう修正 (#163) +- **OpenCode のハング・終了判定の修正**: プロンプトのエコー抑制、question の抑制、ハング問題の修正、終了判定の誤りを修正 (#238) +- **OpenCode の権限・ツール設定の修正**: edit 実行時の権限とツール配線を修正 +- **Worktree へのタスク指示書コピー**: Worktree 実行時にタスク指示書が正しくコピーされるよう修正 +- lint エラーの修正(merge/resolveTask/confirm) + +### Internal + +- OpenCode プロバイダーの包括的なテスト追加(client-cleanup, config, provider, stream-handler, types) +- Arpeggio の包括的なテスト追加(csv, data-source-factory, merge, schema, template, engine-arpeggio) +- E2E テストの大幅な拡充: cli-catalog, cli-clear, cli-config, cli-export-cc, cli-help, cli-prompt, cli-reset-categories, cli-switch, error-handling, piece-error-handling, provider-error, quiet-mode, run-multiple-tasks, task-content-file (#192, #198) +- `providerEventLogger.ts`, `providerModel.ts`, `slackWebhook.ts`, `session-reader.ts`, `sessionSelector.ts`, `provider-resolution.ts`, `run-paths.ts` の新規追加 +- `ArpeggioRunner.ts` の新規追加(データ駆動バッチ処理エンジン) +- AI Judge をプロバイダーシステム経由に変更(Codex/OpenCode 対応) +- テスト追加・拡充: report-phase-blocked, phase-runner-report-history, judgment-fallback, pieceExecution-session-loading, globalConfig-defaults, session-reader, sessionSelector, slackWebhook, providerEventLogger, provider-model, interactive, run-paths, engine-test-helpers + +## [0.11.1] - 2026-02-10 + +### Fixed + +- AI Judge がプロバイダーシステムを経由するよう修正 — `callAiJudge` を Claude 固定実装からプロバイダー経由(`runAgent`)に変更し、Codex プロバイダーでも AI 判定が正しく動作するように +- 実行指示が長大化する問題を緩和 — implement/fix 系ムーブメントで `pass_previous_response: false` を設定し、Report Directory 内のレポートを一次情報として優先する指示に変更(en/ja 両対応) + +### Internal + +- stable release 時に npm の `next` dist-tag を `latest` と自動同期するよう CI ワークフローを改善(リトライ付き) + +## [0.11.0] - 2026-02-10 + +### Added + +- **`e2e-test` ビルトインピース**: E2Eテスト特化のピースを新規追加 — E2E分析 → E2E実装 → レビュー → 修正のフロー(VitestベースのE2Eテスト向け) +- **`error` ステータス**: プロバイダーエラーを `blocked` から分離し、エラー状態を明確に区別可能に。Codex にリトライ機構を追加 +- **タスク YAML 一元管理**: タスクファイルの管理を `tasks.yaml` に統合。`TaskRecordSchema` による構造化されたタスクライフサイクル管理(pending/running/completed/failed) +- **タスク指示書ドキュメント**: タスク指示書の構造と目的を明文化 (#174) +- **レビューポリシー**: 共通レビューポリシーファセット(`builtins/{lang}/policies/review.md`)を追加 +- **SIGINT グレースフルシャットダウンの E2E テスト**: 並列実行中の Ctrl+C 動作を検証する E2E テストを追加 + +### Changed + +- **ビルトインピース簡素化**: 全ビルトインピースからトップレベルの `policies`/`personas`/`knowledge`/`instructions`/`report_formats` 宣言を削除し、名前ベースの暗黙的解決に移行。ピース YAML がよりシンプルに +- **ピースカテゴリ仕様更新**: カテゴリの設定・表示ロジックを改善。グローバル設定でのカテゴリ管理を強化 (#184) +- **`takt list` の優先度・参照改善**: ブランチ解決のパフォーマンス最適化。ベースコミットキャッシュの導入 (#186, #195, #196) +- **Ctrl+C シグナルハンドリング改善**: 並列実行中の SIGINT 処理を安定化 +- **ループ防止ポリシー強化**: エージェントの無限ループを防止するためのポリシーを強化 + +### Fixed + +- オリジナル指示の差分処理が正しく動作しない問題を修正 (#181) +- タスク指示書のゴールが不適切にスコープ拡張される問題を修正 — ゴールを常に実装・実行に固定 + +### Internal + +- タスク管理コードの大規模リファクタリング: `parser.ts` を廃止し `store.ts`/`mapper.ts`/`schema.ts`/`naming.ts` に分離。`branchGitResolver.ts`/`branchBaseCandidateResolver.ts`/`branchBaseRefCache.ts`/`branchEntryPointResolver.ts` でブランチ解決を細分化 +- テストの大幅な拡充・リファクタリング: aggregate-evaluator, blocked-handler, branchGitResolver-performance, branchList-regression, buildListItems-performance, error-utils, escape, facet-resolution, getFilesChanged, global-pieceCategories, instruction-context, instruction-helpers, judgment-strategies, listTasksInteractivePendingLabel, loop-detector, naming, reportDir, resetCategories, rule-evaluator, rule-utils, slug, state-manager, switchPiece, task-schema, text, transitions, watchTasks 等を新規追加 +- Codex クライアントのリファクタリング +- ピースパーサーのファセット解決ロジック改善 + +## [0.10.0] - 2026-02-09 + +### Added + +- **`structural-reform` ビルトインピース**: プロジェクト全体のレビューと構造改革 — `loop_monitors` を活用した反復的なコードベース再構成(段階的なファイル分割)ワークフロー +- **`unit-test` ビルトインピース**: ユニットテスト特化のピース — テスト分析 → テスト実装 → レビュー → 修正のフロー。`loop_monitors` によるサイクル制御付き +- **`test-planner` ペルソナ**: コードベースを解析し、包括的なテスト戦略を立案する専用ペルソナ +- **インタラクティブモードのバリアント**: ピース選択後に4種のモードから選択可能 — `assistant`(デフォルト: AI 支援による要件整理)、`persona`(最初のムーブメントのペルソナとの会話)、`quiet`(質問なしで指示書を生成)、`passthrough`(ユーザー入力をそのまま使用) +- **`persona_providers` 設定**: ペルソナごとのプロバイダーオーバーライド(例: `{ coder: 'codex' }`)— ハイブリッドピースを作成せずに特定ペルソナを別プロバイダーへルーティング可能 +- **`task_poll_interval_ms` 設定**: `takt run` が実行中に新規タスクを検出するポーリング間隔を設定可能(デフォルト: 500ms、範囲: 100〜5000ms) +- **`interactive_mode` ピースフィールド**: ピースレベルのデフォルトインタラクティブモードを上書き可能(例: AI 計画が不要なピースに `passthrough` を設定) +- **タスクレベル出力プレフィックス**: `takt run` の並列実行時、全出力行に色付きの `[taskName]` プレフィックスを付与し、並行タスク間の行途中混在を防止 +- **レビューポリシーファセット**: ピース間でレビュー基準を統一する共通レビューポリシー(`builtins/{lang}/policies/review.md`) + +### Changed + +- **BREAKING:** ハイブリッド Codex ピース(`*-hybrid-codex`)を全廃 — `persona_providers` 設定で同等の機能を実現できるため、ピースファイルの重複が不要に +- `tools/generate-hybrid-codex.mjs` を削除(`persona_providers` により不要) +- 並列実行時の出力改善: ムーブメントレベルプレフィックスに並行実行時のタスクコンテキストとイテレーション情報を追加 +- Codex クライアントがストリームのハングを検出するように(10分間アイドルタイムアウト)。タイムアウト vs 外部中断をエラーメッセージで区別 +- 並列タスク実行(`takt run`)がタスク完了間のみではなく実行中にも新規追加タスクをポーリングするよう変更 +- 並列タスク実行でタスクごとの時間制限を廃止(従来はタイムアウトあり) +- Issue 参照がインタラクティブモードをスキップせず、最初の入力としてインタラクティブモードを経由するよう変更 +- ビルトイン `config.yaml` を更新し、GlobalConfig の全フィールドをドキュメント化 +- インタラクティブモードのバリアント間で会話ロジックを共有する `conversationLoop.ts` を抽出 +- ラインエディタの改善: キーバインドの追加とエッジケースの修正 + +### Fixed + +- ストリームがアイドル状態になった際に Codex プロセスが無期限にハングする問題を修正 — 10分間アクティビティがない場合に中断し、ワーカープールのスロットを解放 + +### Internal + +- 新規テスト追加: engine-persona-providers, interactive-mode(532行), task-prefix-writer, workerPool 拡充, pieceResolver 拡充, lineEditor 拡充, parallel-logger 拡充, globalConfig-defaults 拡充, pieceExecution-debug-prompts 拡充, it-piece-loader 拡充, runAllTasks-concurrency 拡充, engine-parallel +- 並列出力管理のための `TaskPrefixWriter` を抽出 +- `modeSelection.ts`, `passthroughMode.ts`, `personaMode.ts`, `quietMode.ts` をインタラクティブモジュールから抽出 +- `InteractiveMode` 型モデルを追加(`src/core/models/interactive-mode.ts`) +- `PieceEngine` が構築時に `taskPrefix`/`taskColorIndex` ペアの整合性を検証するよう変更 +- 実装メモを追加(`docs/implements/retry-and-session.ja.md`) + +## [0.9.0] - 2026-02-08 + +### Added + +- **`takt catalog` コマンド**: 各レイヤー(builtin/user/project)にわたって利用可能なファセット(personas, policies, knowledge, instructions, output-contracts)を一覧表示 +- **`compound-eye` ビルトインピース**: マルチモデルレビュー — 同一の指示を Claude と Codex に同時送信し、両者の回答を統合 +- **並列タスク実行**: `takt run` がワーカープールによる並行タスク実行をサポート(`concurrency` 設定で制御、デフォルト: 1) +- **インタラクティブモードのリッチなラインエディタ**: Shift+Enter で複数行入力、カーソル移動(矢印キー、Home/End)、Option+Arrow で単語単位移動、Ctrl+A/E/K/U/W 編集、ブラケットペーストモード対応 +- **インタラクティブモードでのムーブメントプレビュー**: ピースのムーブメント構造(ペルソナ+インストラクション)を AI プランナーに注入してタスク分析を改善(`interactive_preview_movements` 設定、デフォルト: 3) +- **MCP サーバー設定**: ムーブメントごとの MCP(Model Context Protocol)サーバー設定。stdio/SSE/HTTP トランスポートをサポート +- **ファセット単位の eject**: `takt eject persona coder` — ファセットをタイプと名前で個別にエジェクトしてカスタマイズ可能に +- **3層ファセット解決**: ペルソナ、ポリシー、その他のファセットを project → user → builtin の順で解決(名前ベースの参照をサポート) +- **`pr-commenter` ペルソナ**: レビュー所見を GitHub PR コメントとして投稿する専用ペルソナ +- **`notification_sound` 設定**: 通知音の有効/無効を設定可能(デフォルト: true) +- **プロンプトログビューア**: デバッグ時のプロンプトと回答のペアを可視化する `tools/prompt-log-viewer.html` +- auto-PR のベースブランチをブランチ作成前の現在のブランチに設定するよう変更 + +### Changed + +- プランナーとアーキテクト・プランナーを統合: 設計知識をナレッジファセットに抽出・統合。default/coding ピースからアーキテクトムーブメントを削除(plan → implement への直接遷移に変更) +- インタラクティブモードを readline からローモードのラインエディタに置き換え(カーソル管理、行間移動、Kitty キーボードプロトコル) +- インタラクティブモードの `save_task` を `takt add` の worktree セットアップフローに統合 +- caffeinate に `-d` フラグを追加してディスプレイスリープ中の App Nap によるプロセスフリーズを防止 +- Issue 参照がインタラクティブモードをスキップせず、最初の入力としてインタラクティブモードを経由するよう変更(従来は直接実行) +- SDK 更新: `@anthropic-ai/claude-agent-sdk` v0.2.34 → v0.2.37 +- インタラクティブセッションのスコアリングプロンプトにピース構造情報を追加 + +### Internal + +- ファセット解決ロジックのための `resource-resolver.ts` を抽出(`pieceParser.ts` から分離) +- `parallelExecution.ts`(ワーカープール)、`resolveTask.ts`(タスク解決)、`sigintHandler.ts`(共通 SIGINT ハンドラ)を抽出 +- `session-key.ts` によるセッションキー生成の統一 +- 新規 `lineEditor.ts`(ローモードターミナル入力、エスケープシーケンス解析、カーソル管理) +- 大幅なテスト追加: catalog, facet-resolution, eject-facet, lineEditor, formatMovementPreviews, models, debug, strip-ansi, workerPool, runAllTasks-concurrency, session-key, interactive(大規模拡充), cli-routing-issue-resolve, parallel-logger, engine-parallel-failure, StreamDisplay, getCurrentBranch, globalConfig-defaults, pieceExecution-debug-prompts, selectAndExecute-autoPr, it-notification-sound, it-piece-loader, permission-mode(拡充) + +## [0.8.0] - 2026-02-08 + +alpha.1 の内容を正式リリース。機能変更なし。 + +## [0.8.0-alpha.1] - 2026-02-07 + +### Added + +- **Faceted Prompting アーキテクチャ**: プロンプト構成要素を独立ファイルとして管理し、ピース間で自由に組み合わせ可能に + - `personas/` — エージェントの役割・専門性を定義するペルソナプロンプト + - `policies/` — コーディング規約・品質基準・禁止事項を定義するポリシー + - `knowledge/` — ドメイン知識・アーキテクチャ情報を定義するナレッジ + - `instructions/` — ムーブメント固有の手順を定義するインストラクション + - `output-contracts/` — レポート出力フォーマットを定義するアウトプットコントラクト + - ピースYAMLのセクションマップ(`personas:`, `policies:`, `knowledge:`)でキーとファイルパスを対応付け、ムーブメントからキーで参照 +- **Output Contracts と Quality Gates**: レポート出力の構造化定義と品質基準の AI ディレクティブ + - `output_contracts` フィールドでレポート定義(`report` フィールドを置き換え) + - `quality_gates` フィールドでムーブメント完了要件の AI ディレクティブを指定 +- **Knowledge システム**: ドメイン知識をペルソナから分離し、ピースレベルで管理・注入 + - ピースYAMLの `knowledge:` セクションマップでナレッジファイルを定義 + - ムーブメントの `knowledge:` フィールドでキー参照して注入 +- **Faceted Prompting ドキュメント**: 設計思想と実践ガイドを `docs/faceted-prompting.md`(en/ja)に追加 +- **Hybrid Codex ピース生成ツール**: `tools/generate-hybrid-codex.mjs` で Claude ピースから Codex バリアントを自動生成 +- 失敗タスクの再投入機能: `takt list` から失敗タスクブランチを選択して再実行可能に (#110) +- ブランチ名生成戦略を設定可能に(`branch_name_strategy` 設定) +- auto-PR 機能の追加と PR 作成ロジックの共通化 (#98) +- Issue 参照時にもピース選択を実施 (#97) +- ステップ(ムーブメント)にいてのスリープ機能 + +### Changed + +- **BREAKING:** `resources/global/` ディレクトリを `builtins/` にリネーム + - `resources/global/{lang}/` → `builtins/{lang}/` + - package.json の `files` フィールドを `resources/` → `builtins/` に変更 +- **BREAKING:** `agent` フィールドを `persona` にリネーム + - ピースYAMLの `agent:` → `persona:`、`agent_name:` → `persona_name:` + - 内部型: `agentPath` → `personaPath`、`agentDisplayName` → `personaDisplayName`、`agentSessions` → `personaSessions` + - ディレクトリ: `agents/` → `personas/`(グローバル・プロジェクト・ビルトイン全て) +- **BREAKING:** `report` フィールドを `output_contracts` に変更 + - 従来の `report: 00-plan.md` / `report: [{Scope: ...}]` / `report: {name, order, format}` 形式を `output_contracts: {report: [...]}` 形式に統一 +- **BREAKING:** `stances` → `policies`、`report_formats` → `output_contracts` にリネーム +- 全ビルトインピースを Faceted Prompting アーキテクチャに移行(旧エージェントプロンプト内のドメイン知識をナレッジに分離) +- SDK 更新: `@anthropic-ai/claude-agent-sdk` v0.2.19 → v0.2.34、`@openai/codex-sdk` v0.91.0 → v0.98.0 +- ムーブメントに `policy` / `knowledge` フィールドを追加(セクションマップのキーで参照) +- 対話モードのスコアリングにポリシーベースの評価を追加 +- README を刷新: agent → persona、セクションマップの説明追加、制御・管理の分類を明記 +- ビルトインスキル(SKILL.md)をFaceted Prompting対応に刷新 + +### Fixed + +- レポートディレクトリパスの解決バグを修正 +- PR の Issue 番号リンクが正しく設定されない問題を修正 +- `stageAndCommit` で gitignored ファイルがコミットされる問題を修正(`git add -f .takt/reports/` を削除) + +### Internal + +- ビルトインリソースの大規模再構成: 旧 `agents/` ディレクトリ構造(`default/`, `expert/`, `expert-cqrs/`, `magi/`, `research/`, `templates/`)を廃止し、フラットな `personas/`, `policies/`, `knowledge/`, `instructions/`, `output-contracts/` 構造に移行 +- Faceted Prompting のスタイルガイドとテンプレートを追加(`builtins/ja/` に `PERSONA_STYLE_GUIDE.md`, `POLICY_STYLE_GUIDE.md`, `INSTRUCTION_STYLE_GUIDE.md`, `OUTPUT_CONTRACT_STYLE_GUIDE.md` 等) +- `pieceParser.ts` にポリシー・ナレッジ・インストラクションの解決ロジックを追加 +- テスト追加: knowledge, policy-persona, deploySkill, StreamDisplay, globalConfig-defaults, sleep, task, taskExecution, taskRetryActions, addTask, saveTaskFile, parallel-logger, summarize 拡充 +- `InstructionBuilder` にポリシー・ナレッジコンテンツの注入を追加 +- `taskRetryActions.ts` を追加(失敗タスクの再投入ロジック) +- `sleep.ts` ユーティリティを追加 +- 旧プロンプトファイル(`interactive-summary.md`, `interactive-system.md`)を削除 +- 旧エージェントテンプレート(`templates/coder.md`, `templates/planner.md` 等)を削除 + +## [0.7.1] - 2026-02-06 + +### Fixed + +- Ctrl+C がピース実行中に効かない問題を修正: SIGINT ハンドラで `interruptAllQueries()` を呼び出してアクティブな SDK クエリを停止するように修正 +- Ctrl+C 後に EPIPE クラッシュが発生する問題を修正: SDK が停止済みの子プロセスの stdin に書き込む際の EPIPE エラーを二重防御で抑制(`uncaughtException` ハンドラ + `Promise.resolve().catch()`) +- セレクトメニューの `onKeypress` ハンドラで例外が発生した際にターミナルの raw mode がリークする問題を修正 + +### Internal + +- SIGINT ハンドラと EPIPE 抑制の統合テストを追加(`it-sigint-interrupt.test.ts`) +- セレクトメニューのキー入力安全性テストを追加(`select-rawmode-safety.test.ts`) + +## [0.7.0] - 2026-02-06 + +### Added + +- Hybrid Codex ピース: 全主要ピース(default, minimal, expert, expert-cqrs, passthrough, review-fix-minimal, coding)の Codex バリアントを追加 + - coder エージェントを Codex プロバイダーで実行するハイブリッド構成 + - en/ja 両対応 +- `passthrough` ピース: タスクをそのまま coder に渡す最小構成ピース +- `takt export-cc` コマンド: ビルトインピース・エージェントを Claude Code Skill としてデプロイ +- `takt list` に delete アクション追加、non-interactive モード分離 +- AI 相談アクション: `takt add` / インタラクティブモードで GitHub Issue 作成・タスクファイル保存が可能に +- サイクル検出: ai_review ↔ ai_fix 間の無限ループを検出する `CycleDetector` を追加 (#102) + - 修正不要時の裁定ステップ(`ai_no_fix`)を default ピースに追加 +- CI: skipped な TAKT Action ランを週次で自動削除するワークフローを追加 +- ピースカテゴリに Hybrid Codex サブカテゴリを追加(en/ja) + +### Changed + +- カテゴリ設定を簡素化: `default-categories.yaml` を `piece-categories.yaml` に統合し、ユーザーディレクトリへの自動コピー方式に変更 +- ピース選択UIのサブカテゴリナビゲーションを修正(再帰的な階層表示が正しく動作するように) +- Claude Code Skill を Agent Team ベースに刷新 +- `console.log` を `info()` に統一(list コマンド) + +### Fixed + +- Hybrid Codex ピースの description に含まれるコロンが YAML パースエラーを起こす問題を修正 +- サブカテゴリ選択時に `selectPieceFromCategoryTree` に不正な引数が渡される問題を修正 + +### Internal + +- `list` コマンドのリファクタリング: `listNonInteractive.ts`, `taskDeleteActions.ts` を分離 +- `cycle-detector.ts` を追加、`PieceEngine` にサイクル検出を統合 +- ピースカテゴリローダーのリファクタリング(`pieceCategories.ts`, `pieceSelection/index.ts`) +- テスト追加: cycle-detector, engine-loop-monitors, piece-selection, listNonInteractive, taskDeleteActions, createIssue, saveTaskFile + +## [0.6.0] - 2026-02-05 + +RC1/RC2 の内容を正式リリース。機能変更なし。 + +## [0.6.0-rc1] - 2026-02-05 + +### Fixed + +- ai_review ↔ ai_fix 間の無限ループを修正: ai_fix が「修正不要」と判断した場合に plan へ戻ってフルパイプラインが再起動する問題を解消 + - `ai_no_fix` 調停ステップを追加(architecture-reviewer が ai_review vs ai_fix の対立を判定) + - ai_fix の「修正不要」ルートを `plan` → `ai_no_fix` に変更 + - 対象ピース: default, expert, expert-cqrs(en/ja) + +### Changed + +- default ピースの並列レビュアーを security-review → qa-review に変更(TAKT 開発向けに最適化) +- qa-reviewer エージェントを `expert/` から `default/` に移動し、テストカバレッジ重視の内容に書き直し +- ai_review instruction にイテレーション認識を追加(初回は網羅的レビュー、2回目以降は修正確認を優先) + +### Internal + +- auto-tag ワークフローを release/ ブランチからのマージのみに制限し、publish ジョブを統合(GITHUB_TOKEN 制約による連鎖トリガー不発を解消) +- postversion フック削除(release ブランチフローと競合するため) +- テスト更新: security-reviewer → qa-reviewer の変更に対応 + +## [0.6.0-rc] - 2026-02-05 + +### Added + +- `coding` ビルトインピース: 設計→実装→並列レビュー→修正の軽量開発ピース(plan/supervise を省略した高速フィードバックループ) +- `conductor` エージェント: Phase 3 判定専用エージェント。レポートやレスポンスを読んで判定タグを出力する +- Phase 3 判定のフォールバック戦略: AutoSelect → ReportBased → ResponseBased → AgentConsult の4段階フォールバックで判定精度を向上 (`src/core/piece/judgment/`) +- セッション状態管理: タスク実行結果(成功/エラー/中断)を保存し、次回インタラクティブモード起動時に前回の結果を表示 (#89) +- TAKT メタ情報(ピース構造、進行状況)をエージェントに引き渡す仕組み +- `/play` コマンド: インタラクティブモードでタスクを即座に実行 +- E2Eテスト基盤: mock/provider 両対応のテストインフラ、10種のE2Eテストスペック、テストヘルパー(isolated-env, takt-runner, test-repo) +- レビューエージェントに「論理的に到達不可能な防御コード」の検出ルールを追加 + +### Changed + +- Phase 3 判定ロジックをセッション再開方式から conductor エージェント+フォールバック戦略に変更(判定の安定性向上) +- CLI ルーティングを `executeDefaultAction()` として関数化し、スラッシュコマンドのフォールバックから再利用可能に (#32) +- `/` や `#` で始まる入力をコマンド/Issue 未検出時にタスク指示として受け入れるよう変更 (#32) +- `isDirectTask()` を簡素化: Issue 参照のみ直接実行、それ以外はすべてインタラクティブモードへ +- 全ビルトインピースから `pass_previous_response: true` を削除(デフォルト動作のため不要) + +### Internal + +- E2Eテスト設定ファイル追加(vitest.config.e2e.ts, vitest.config.e2e.mock.ts, vitest.config.e2e.provider.ts) +- `rule-utils.ts` に `getReportFiles()`, `hasOnlyOneBranch()`, `getAutoSelectedTag()` を追加 +- `StatusJudgmentBuilder` にレポートコンテンツ・レスポンスベースの判定指示生成を追加 +- `InstructionBuilder` にピースメタ情報(構造、反復回数)の注入を追加 +- テスト追加: judgment-detector, judgment-fallback, sessionState, pieceResolver, cli-slash-hash, e2e-helpers + +## [0.5.1] - 2026-02-04 + +### Fixed + +- Windows 環境でのファイルパス処理と文字エンコーディングの問題を修正 (#90, #91) + - Windows 向けの `.git` 検出を改善 + - Codex 向けに `.git` の必須チェックを追加(未検出時はエラー) + - 文字エンコーディングの問題を修正 +- Codex のブランチ名サマリー処理のバグを修正 + +### Internal + +- テストのメモリリークとハング問題を解消 + - `PieceEngine` と `TaskWatcher` にクリーンアップハンドラを追加 + - テストの安定性向上のため vitest をシングルスレッド実行に変更 + +## [0.5.0] - 2026-02-04 + +### Changed + +- **BREAKING:** コードベース全体で "workflow" から "piece" への用語移行を完了 + - 全 CLI コマンド、設定ファイル、ドキュメントで "piece" 用語を使用 + - `WorkflowEngine` → `PieceEngine` + - `workflow_categories` → `piece_categories`(設定ファイル) + - `builtin_workflows_enabled` → `builtin_pieces_enabled` + - `~/.takt/workflows/` → `~/.takt/pieces/`(ユーザーピースディレクトリ) + - `.takt/workflows/` → `.takt/pieces/`(プロジェクトピースディレクトリ) + - ワークフロー関連のファイル名・型をすべてピース相当に改名 + - 全ドキュメントを更新(README.md, CLAUDE.md, docs/*) + +### Internal + +- ディレクトリ構造を全面リファクタリング: + - `src/core/workflow/` → `src/core/piece/` + - `src/features/workflowSelection/` → `src/features/pieceSelection/` +- ファイル名変更: + - `workflow-types.ts` → `piece-types.ts` + - `workflowExecution.ts` → `pieceExecution.ts` + - `workflowLoader.ts` → `pieceLoader.ts` + - `workflowParser.ts` → `pieceParser.ts` + - `workflowResolver.ts` → `pieceResolver.ts` + - `workflowCategories.ts` → `pieceCategories.ts` + - `switchWorkflow.ts` → `switchPiece.ts` +- 全テストファイルを新用語に対応(194ファイル変更、約3,400行の追加・削除) +- リソースディレクトリを更新: + - `resources/global/*/pieces/*.yaml` を新用語で更新 + - 全プロンプトファイル(`*.md`)を更新 + - 設定ファイル(`config.yaml`, `default-categories.yaml`)を更新 + +## [0.4.1] - 2026-02-04 + +### Fixed + +- 前のステップのレスポンスが後続ステップに誤ってバインドされるワークフロー実行バグを修正 + - `MovementExecutor`、`ParallelRunner`、`state-manager` を修正してステップ間のレスポンスを適切に分離 + - インタラクティブサマリープロンプトを更新してレスポンスの漏えいを防止 + +## [0.4.0] - 2026-02-04 + +### Added + +- プロンプトの外部化: 内部プロンプトをすべてバージョン管理可能・翻訳可能なファイルに移行(`src/shared/prompts/en/`, `src/shared/prompts/ja/`) +- i18n ラベルシステム: UI ラベルを別ファイルに抽出(`labels_en.yaml`, `labels_ja.yaml`)し `src/shared/i18n/` モジュールを追加 +- プロンプトプレビュー機能(`src/features/prompt/preview.ts`) +- ワークフローのフェーズ認識を改善するためのフェーズシステムをエージェントに注入 +- 新しいデバッグログビューア(`tools/debug-log-viewer.html`)によるデバッグ機能の強化 +- 包括的なテストカバレッジ: + - i18n システムテスト(`i18n.test.ts`) + - プロンプトシステムテスト(`prompts.test.ts`) + - セッション管理テスト(`session.test.ts`) + - Worktree 統合テスト(`it-worktree-delete.test.ts`, `it-worktree-sessions.test.ts`) + +### Changed + +- **BREAKING:** 内部用語の改名: `WorkflowStep` → `WorkflowMovement`、`StepExecutor` → `MovementExecutor`、`ParallelSubStepRawSchema` → `ParallelSubMovementRawSchema`、`WorkflowStepRawSchema` → `WorkflowMovementRawSchema` +- **BREAKING:** 不要な後方互換コードを削除 +- **BREAKING:** インタラクティブプロンプトオーバーライド機能を無効化 +- ワークフローリソースディレクトリを改名: `resources/global/*/workflows/` → `resources/global/*/pieces/` +- 可読性・保守性向上のためプロンプトを再構成 +- 会話フローからタスク要件の不要なサマリー化を削除 +- ワークフロー実行中の不要なレポート出力を抑制 + +### Fixed + +- worktree 操作に関する `takt worktree` バグを修正 + +### Internal + +- `src/shared/prompts/index.ts` にプロンプト管理を抽出(言語認識ファイルロード) +- `src/shared/i18n/index.ts` でラベル管理を一元化 +- `tools/jsonl-viewer.html` に機能を追加 +- 162ファイルにわたる大規模リファクタリング(約5,800行追加、約2,900行削除) + +## [0.3.9] - 2026-02-03 + +### Added + +- ワークフローカテゴリ化のサポート (#85) + - `resources/global/{lang}/default-categories.yaml` にデフォルトカテゴリ設定を追加 + - `~/.takt/config.yaml` の `workflow_categories` でユーザー定義カテゴリを設定可能に + - 無制限の深さでネストしたカテゴリをサポート + - ワークフロー選択 UI でカテゴリベースのフィルタリングに対応 + - `show_others_category` と `others_category_name` の設定オプションを追加 + - `builtin_workflows_enabled` と `disabled_builtins` でビルトインワークフローのフィルタリングに対応 +- エージェントなしのステップ実行: `agent` フィールドをオプションに (#71) + - `instruction_template` のみでステップを実行可能(システムプロンプトなし) + - インラインシステムプロンプトをサポート(ファイルが存在しない場合は agent 文字列をプロンプトとして使用) +- `takt add #N` がブランチ名に Issue 番号を自動反映 (#78) + - Issue 番号をブランチ名に埋め込み(例: `takt/issue-28-...`) + +### Changed + +- **BREAKING:** パーミッションモード値をプロバイダー非依存形式に統一 (#87) + - 新しい値: `readonly`, `edit`, `full`(`default`, `acceptEdits`, `bypassPermissions` を置き換え) + - TAKT がプロバイダー固有のフラグに変換(Claude: default/acceptEdits/bypassPermissions、Codex: read-only/workspace-write/danger-full-access) + - 全ビルトインワークフローを新しい値に更新 +- ワークフロー名の変更: + - `simple` ワークフローを `minimal` と `review-fix-minimal` に置き換え + - 読み取り専用コードレビュー向けに `review-only` ワークフローを追加 +- エージェントプロンプトを更新: レガシー対応禁止ルールを追加(後方互換ハックの禁止) +- ドキュメントの更新: + - README.md と docs/README.ja.md を v0.3.8+ の機能で更新 + - CLAUDE.md をアーキテクチャの詳細と実装メモで大幅に拡充 + +### Internal + +- カテゴリ管理のための `src/infra/config/loaders/workflowCategories.ts` を作成 +- ワークフロー選択 UI のための `src/features/workflowSelection/index.ts` を作成 +- カテゴリ表示サポートのため `src/shared/prompt/select.ts` を拡張 +- ワークフローカテゴリの包括的なテストを追加(`workflow-categories.test.ts`, `workflow-category-config.test.ts`) + +## [0.3.8] - 2026-02-02 + +### Added + +- ワークフロー/設定ファイルパスを指定する CLI オプションを追加: `--workflow ` と `--config ` (#81) +- CI フレンドリーなクワイエットモードによる最小限のログ出力 (#70) +- ワークフロー実行テスト用のモックシナリオサポート +- 包括的な統合テスト(7テストファイル、約3000行のテストカバレッジ) + +### Changed + +- ルール評価の改善: `detectRuleIndex` が最初のマッチではなく最後のマッチを使用するよう変更 (#25) +- `ai_fix` ステップを大幅に改善: + - リトライ試行回数を表示する `{step_iteration}` カウンターを追加 + - 明示的な修正手順を定義(Read → Grep → Edit → Test → Report) + - coder エージェントがレビュアーのフィードバックを仮定より優先するよう変更 +- README とドキュメントを更新: CLI 使用法と CI/CD の例を明確化 + +### Fixed + +- ワークフローのロード優先順位を修正(ユーザーワークフローがビルトインより優先されるよう変更) +- テストの安定性を改善(不安定なテストをスキップ、ai_fix テストを更新) +- Slack 通知設定を修正 + +### Internal + +- インストラクションビルダーをリファクタリング: コンテキスト組み立てとステータスルールロジックを抽出 (#44) +- DRY な git コミット操作のために `src/infra/task/git.ts` を導入 +- `getErrorMessage()` によるエラーハンドリングの統一 +- コードベース全体で `projectCwd` を必須化 +- 非推奨の `sacrificeMode` を削除 +- 一貫性のため 35 ファイルを更新(`console.log` → `blankLine()` 等) + +## [0.3.7] - 2026-02-01 + +### Added + +- パイプライン/非インタラクティブモード実行のための `--pipeline` フラグを追加 (#28) +- パイプラインモードで `--task` と `--issue` オプションの両方を使用可能に + +### Changed + +- ログファイルの命名を base36 から人間が読める `YYYYMMDD-HHmmss-random` 形式に変更 (#28) +- `--task` オプションの説明を更新: GitHub Issue の代替であることを明確化 + +## [0.3.6] - 2026-01-31 + +### Fixed + +- `ai_review` ワークフローステップに `pass_previous_request` 設定が正しく含まれていない問題を修正 + +## [0.3.5] - 2026-01-31 + +### Added + +- worktree の確認プロンプトをスキップする `--create-worktree ` オプションを追加 + +### Fixed + +- 各種 CI/CD の改善と修正 (#66, #67, #68, #69) + +## [0.3.4] - 2026-01-31 + +### Added + +- 変更なしのコードレビュー向けレビューオンリーワークフローを追加 (#60) +- 各種バグ修正と改善 (#14, #23, #35, #38, #45, #50, #51, #52, #59) + +## [0.3.3] - 2026-01-31 + +### Fixed + +- `takt add #N` がIssue内容をAI要約に通してしまい、タスク内容が壊れる問題を修正 (#46) + - Issue参照時は `resolveIssueTask` の結果をそのままタスクとして使用するように変更 + +## [0.3.1] - 2026-01-31 + +### Added + +- インタラクティブタスク計画モード: `takt`(引数なし)が実行前に AI との会話でタスク要件を整理 (#47, #5) + - takt 再起動をまたいだセッション継続 + - コードベース調査のための読み取り専用ツール(Read, Glob, Grep, Bash, WebSearch, WebFetch) + - 会話中のコード変更を防止するプランニング専用システムプロンプト + - 確認して実行する `/go`、終了する `/cancel` +- レビュアー/スーパーバイザーのエージェントテンプレートに Boy Scout Rule の徹底を追加 + +### Changed + +- CLI をスラッシュコマンド(`takt /run-tasks`)からサブコマンド(`takt run`)に移行 (#47) +- `/help` と `/refresh-builtin` コマンドを削除、`eject` を簡素化 +- SDK オプションビルダーが定義済みの値のみを含むよう変更(ハング防止) + +### Fixed + +- `model: undefined` などの undefined オプションをキーとして渡した際に Claude Agent SDK がハングする問題を修正 + +## [0.3.0] - 2026-01-30 + +### Added + +- ルールベースのワークフロー遷移と5段階フォールバック評価 (#30) + - タグベースの条件: エージェントが出力する `[STEP:N]` タグをインデックスでマッチング + - `ai()` 条件: エージェント出力に対してフリーテキストの条件を AI が評価 (#9) + - 並列ステップ結果を集約する `all()`/`any()` 条件 (#20) + - 5段階の評価順序: aggregate → Phase 3 tag → Phase 1 tag → AI judge → AI fallback +- 3フェーズのステップ実行モデル (#33) + - Phase 1: メイン作業(コーディング、レビュー等) + - Phase 2: レポート出力(`step.report` が定義されている場合) + - Phase 3: ステータス判定(タグベースのルールが存在する場合) + - コンテキスト継続のためフェーズをまたいでセッションを再開 +- `Promise.all()` による並列サブステップの同時実行 (#20) +- GitHub Issue 統合: Issue 番号でタスクを実行・追加(例: `takt #6`)(#10, #34) +- リアルタイムストリーミング書き込みによる NDJSON セッションログ (#27, #36) +- ビルトインリソースを npm パッケージに内包し、カスタマイズ用の `/eject` コマンドを追加 (#4, #40) +- ステップごとのファイル編集制御のための `edit` プロパティ +- ルールマッチング方法の可視化とログ記録 +- YAML の `report.format` からレポート出力を自動生成 +- ビルトインワークフローでの並列レビューと仕様適合チェックをサポート (#31) +- WorkflowEngine モックの統合テスト (#17, #41) + +### Changed + +- レポートフォーマットを自動生成に統一: レポートの手動 `order`/`instruction_template` を削除 +- `gitdiff` レポートタイプを削除し、フォーマットベースのレポートに移行 + +### Fixed + +- レポートディレクトリに `.takt/reports/` プレフィックスが正しく含まれるよう修正 (#37, #42) +- eject.ts の未使用インポートを削除 (#43) + +## [0.2.3] - 2026-01-29 + +### Added + +- ブランチ管理のための `/list-tasks` コマンドを追加(マージ試行、マージ&クリーンアップ、削除) + +### Changed + +- Claude Code SDK がメインリポジトリに遡らないよう、分離実行を `git worktree` から `git clone --shared` に移行 +- クローンのライフサイクル変更: タスク完了後の自動削除を廃止。クリーンアップには `/list-tasks` を使用 +- `worktree.ts` を `clone.ts` と `branchReview.ts` に分割 +- SDK の遡りを防ぐためクローンから origin リモートを削除 +- 全ワークフローのレポートステップに Write パーミッションを付与 +- `git clone --shared` を `--reference --dissociate` に変更 + +### Fixed + +- バージョンをハードコードの `0.1.0` ではなく `package.json` から読み込むよう修正 (#3) + +## [0.2.2] - 2026-01-29 + +### Added + +- タスクブランチへの指示実行のための `/review` インストラクトアクションを追加 +- ブランチ名用の英語スラッグへの AI によるタスク名サマリー化 +- Worktree のセッション継承 +- 実行ルールのメタデータ(git コミット禁止、cd 禁止) + +### Changed + +- ステータス出力ルールのヘッダーを自動生成 +- インストラクションに worktree の変更コンテキストを自動包含 +- マージ試行をスカッシュマージに変更 +- `expert-review` を `expert-cqrs` に改名、共通レビュアーを `expert/` に統合 + +### Fixed + +- 異常終了時にタスクが誤って `completed` に遷移する問題を修正 + +## [0.2.1] - 2026-01-28 + +### Added + +- 言語設定(`ja`/`en`)を追加 +- `/add-task` での複数行入力をサポート +- `/review-tasks` コマンドを追加 +- 数値入力から矢印キーによるカーソルベースのメニュー選択に変更 +- `answer` ステータス、`autoCommit`、`permission_mode`、詳細ログオプションを追加 + +### Fixed + +- 複数の worktree 関連バグを修正(ディレクトリ解決、セッション処理、作成フロー) +- ESC キーでワークフロー/タスク選択をキャンセル可能に + +## [0.2.0] - 2026-01-27 + +### Added + +- `.takt/tasks/` からのタスクをファイルシステムポーリングで自動実行する `/watch` コマンドを追加 +- ビルトインリソース更新のための `/refresh-builtin` コマンドを追加 +- インタラクティブなタスク作成のための `/add-task` コマンドを追加 +- デフォルトワークフローを強化 + +## [0.1.7] - 2026-01-27 + +### Added + +- ワークフロー検証のためのスキーマパーミッションサポートを追加 + +## [0.1.6] - 2026-01-27 + +### Added + +- テスト用のモック実行モードを追加 + +### Changed + +- `-r` オプションを省略、デフォルトを会話継続モードに変更 + +## [0.1.5] - 2026-01-27 + +### Added + +- 合計実行時間の出力を追加 + +### Fixed + +- ワークフローが実行中に意図せず停止する問題を修正 + +## [0.1.4] - 2026-01-27 + +### Changed + +- ワークフロープロンプトを強化 +- 遷移プロンプトをワークフロー定義に統合 + +## [0.1.3] - 2026-01-26 + +### Fixed + +- イテレーションが停滞する問題を修正 + +## [0.1.2] - 2026-01-26 + +### Added + +- Codex プロバイダーのサポートを追加 +- ステップ/エージェントごとのモデル選択 +- パーミッションモード設定 +- 分離タスク実行のための Worktree サポート +- プロジェクト `.gitignore` の初期化 + +### Changed + +- エージェントプロンプトを改善 + +## [0.1.1] - 2026-01-25 + +### Added + +- npm 公開のための GitHub Actions ワークフローを追加 + +### Changed + +- インタラクティブモードを削除、CLI を簡素化 diff --git a/docs/README.ja.md b/docs/README.ja.md index f6ec48f..1cba7f1 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -466,6 +466,7 @@ TAKTには複数のビルトインピースが同梱されています: | `backend-cqrs-mini` | ミニ CQRS+ES ピース: 計画 → 実装 → 並列レビュー(AI アンチパターン+スーパーバイザー)。CQRS+ES ナレッジ注入付き。 | | `review-fix-minimal` | レビュー重視ピース: レビュー → 修正 → スーパーバイザー。レビューフィードバックに基づく反復改善向け。 | | `research` | リサーチピース: プランナー → ディガー → スーパーバイザー。質問せずに自律的にリサーチを実行。 | +| `deep-research` | ディープリサーチピース: 計画 → 深掘り → 分析 → 統括。発見駆動型の調査で、多角的な分析を行う。 | | `expert` | フルスタック開発ピース: アーキテクチャ、フロントエンド、セキュリティ、QA レビューと修正ループ。 | | `expert-mini` | ミニエキスパートピース: 計画 → 実装 → 並列レビュー(AI アンチパターン+エキスパートスーパーバイザー)。フルスタックナレッジ注入付き。 | | `expert-cqrs` | フルスタック開発ピース(CQRS+ES特化): CQRS+ES、フロントエンド、セキュリティ、QA レビューと修正ループ。 | @@ -502,6 +503,7 @@ TAKTには複数のビルトインピースが同梱されています: | **supervisor** | 最終検証、バリデーション、承認 | | **expert-supervisor** | 包括的なレビュー統合による専門レベルの最終検証 | | **research-planner** | リサーチタスクの計画・スコープ定義 | +| **research-analyzer** | リサーチ結果の解釈と追加調査の計画 | | **research-digger** | 深掘り調査と情報収集 | | **research-supervisor** | リサーチ品質の検証と網羅性の評価 | | **test-planner** | テスト戦略分析と包括的なテスト計画 | @@ -934,7 +936,7 @@ export TAKT_OPENCODE_API_KEY=... - [Faceted Prompting](./faceted-prompting.ja.md) - AIプロンプトへの関心の分離(Persona, Policy, Instruction, Knowledge, Output Contract) - [Piece Guide](./pieces.md) - ピースの作成とカスタマイズ - [Agent Guide](./agents.md) - カスタムエージェントの設定 -- [Changelog](../CHANGELOG.md) - バージョン履歴 +- [Changelog](../CHANGELOG.md) ([日本語](./CHANGELOG.ja.md)) - バージョン履歴 - [Security Policy](../SECURITY.md) - 脆弱性報告 - [ブログ: TAKT - AIエージェントオーケストレーション](https://zenn.dev/nrs/articles/c6842288a526d7) - 設計思想と実践的な使い方ガイド diff --git a/package-lock.json b/package-lock.json index 0e19b83..855e0a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "takt", - "version": "0.17.3", + "version": "0.18.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "takt", - "version": "0.17.3", + "version": "0.18.0", "license": "MIT", "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.2.37", diff --git a/package.json b/package.json index 114afb8..dcb67cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "takt", - "version": "0.17.3", + "version": "0.18.0", "description": "TAKT: TAKT Agent Koordination Topology - AI Agent Piece Orchestration", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/__tests__/it-dotgitignore.test.ts b/src/__tests__/it-dotgitignore.test.ts new file mode 100644 index 0000000..10adada --- /dev/null +++ b/src/__tests__/it-dotgitignore.test.ts @@ -0,0 +1,98 @@ +/** + * Integration test for dotgitignore + * + * Verifies that .takt/.gitignore patterns correctly track facet directories + * (pieces, personas, policies, knowledge, instructions, output-contracts) + * while ignoring runtime directories (tasks, logs, runs, completed). + */ + +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { mkdirSync, writeFileSync, rmSync, existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { execFileSync } from 'node:child_process'; +import { tmpdir } from 'node:os'; + +function gitTrackedFiles(cwd: string): string[] { + const output = execFileSync('git', ['ls-files', '.takt/'], { cwd, encoding: 'utf-8' }); + return output.trim().split('\n').filter(Boolean).sort(); +} + +describe('dotgitignore patterns', () => { + let testDir: string; + + beforeEach(() => { + testDir = join(tmpdir(), `takt-dotgitignore-${Date.now()}`); + mkdirSync(testDir, { recursive: true }); + + execFileSync('git', ['init'], { cwd: testDir }); + execFileSync('git', ['config', 'user.name', 'Test User'], { cwd: testDir }); + execFileSync('git', ['config', 'user.email', 'test@example.com'], { cwd: testDir }); + + // Initial commit + writeFileSync(join(testDir, 'README.md'), '# Test'); + execFileSync('git', ['add', '.'], { cwd: testDir }); + execFileSync('git', ['commit', '-m', 'Initial commit'], { cwd: testDir }); + + // Copy actual dotgitignore as .takt/.gitignore + const dotgitignorePath = join(__dirname, '..', '..', 'builtins', 'project', 'dotgitignore'); + const taktDir = join(testDir, '.takt'); + mkdirSync(taktDir, { recursive: true }); + const content = readFileSync(dotgitignorePath, 'utf-8'); + writeFileSync(join(taktDir, '.gitignore'), content); + }); + + afterEach(() => { + if (existsSync(testDir)) { + rmSync(testDir, { recursive: true, force: true }); + } + }); + + it('should track config.yaml', () => { + writeFileSync(join(testDir, '.takt', 'config.yaml'), 'language: ja\n'); + execFileSync('git', ['add', '.takt/'], { cwd: testDir }); + + const tracked = gitTrackedFiles(testDir); + expect(tracked).toContain('.takt/config.yaml'); + }); + + it('should track facet directories', () => { + const facets = ['pieces', 'personas', 'policies', 'knowledge', 'instructions', 'output-contracts']; + for (const facet of facets) { + mkdirSync(join(testDir, '.takt', facet), { recursive: true }); + writeFileSync(join(testDir, '.takt', facet, 'test.md'), `# ${facet}`); + } + + execFileSync('git', ['add', '.takt/'], { cwd: testDir }); + const tracked = gitTrackedFiles(testDir); + + for (const facet of facets) { + expect(tracked).toContain(`.takt/${facet}/test.md`); + } + }); + + it('should track nested files in facet directories', () => { + mkdirSync(join(testDir, '.takt', 'pieces', 'sub'), { recursive: true }); + writeFileSync(join(testDir, '.takt', 'pieces', 'sub', 'nested.yaml'), 'name: test'); + + execFileSync('git', ['add', '.takt/'], { cwd: testDir }); + const tracked = gitTrackedFiles(testDir); + + expect(tracked).toContain('.takt/pieces/sub/nested.yaml'); + }); + + it('should ignore runtime directories', () => { + const runtimeDirs = ['tasks', 'completed', 'logs', 'runs']; + for (const dir of runtimeDirs) { + mkdirSync(join(testDir, '.takt', dir), { recursive: true }); + writeFileSync(join(testDir, '.takt', dir, 'data.json'), '{}'); + } + + execFileSync('git', ['add', '.takt/'], { cwd: testDir }); + const tracked = gitTrackedFiles(testDir); + + for (const dir of runtimeDirs) { + const runtimeFiles = tracked.filter(f => f.startsWith(`.takt/${dir}/`)); + expect(runtimeFiles).toEqual([]); + } + }); +});