Release v0.17.0

This commit is contained in:
nrslib 2026-02-15 12:00:21 +09:00
parent 2460dbdf61
commit 05b893f720
30 changed files with 1682 additions and 342 deletions

View File

@ -4,6 +4,32 @@ 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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [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 ## [0.16.0] - 2026-02-15
### Added ### Added

View File

@ -304,7 +304,7 @@ takt reset categories
| Piece | Recommended Use | | Piece | Recommended Use |
|----------|-----------------| |----------|-----------------|
| `default` | Serious development tasks. Used for TAKT's own development. Multi-stage review with parallel reviews (architect + security). | | `default` | Serious development tasks. Used for TAKT's own development. Multi-stage review with parallel reviews (architect + security). |
| `minimal` | Simple fixes and straightforward tasks. Minimal piece with basic review. | | `default-mini` | Simple fixes and straightforward tasks. Lightweight piece with AI antipattern review + supervisor. |
| `review-fix-minimal` | Review & fix piece. Specialized for iterative improvement based on review feedback. | | `review-fix-minimal` | Review & fix piece. Specialized for iterative improvement based on review feedback. |
| `research` | Investigation and research. Autonomously executes research without asking questions. | | `research` | Investigation and research. Autonomously executes research without asking questions. |
@ -460,13 +460,15 @@ TAKT includes multiple builtin pieces:
| Piece | Description | | Piece | Description |
|----------|-------------| |----------|-------------|
| `default` | Full development piece: plan → implement → AI review → parallel review (architect + QA) → supervisor approval. Includes fix loops at each review stage. | | `default` | Full development piece: plan → implement → AI review → parallel review (architect + QA) → supervisor approval. Includes fix loops at each review stage. |
| `minimal` | Quick piece: plan → implement → review → supervisor. Minimal steps for fast iteration. | | `default-mini` | Mini development piece: plan → implement → parallel review (AI antipattern + supervisor) → fix if needed. Lightweight with review. |
| `frontend-mini` | Mini frontend piece: plan → implement → parallel review (AI antipattern + supervisor) with frontend knowledge injection. |
| `backend-mini` | Mini backend piece: plan → implement → parallel review (AI antipattern + supervisor) with backend knowledge injection. |
| `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. | | `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. | | `research` | Research piece: planner → digger → supervisor. Autonomously executes research without asking questions. |
| `expert` | Full-stack development piece: architecture, frontend, security, QA reviews with fix loops. | | `expert` | Full-stack development piece: architecture, frontend, security, QA reviews with fix loops. |
| `expert-cqrs` | Full-stack development piece (CQRS+ES specialized): CQRS+ES, frontend, security, QA reviews with fix loops. | | `expert-cqrs` | Full-stack development piece (CQRS+ES specialized): CQRS+ES, frontend, security, QA reviews with fix loops. |
| `magi` | Deliberation system inspired by Evangelion. Three AI personas (MELCHIOR, BALTHASAR, CASPER) analyze and vote. | | `magi` | Deliberation system inspired by Evangelion. Three AI personas (MELCHIOR, BALTHASAR, CASPER) analyze and vote. |
| `coding` | Lightweight development piece: planner → implement → parallel review (AI antipattern + architecture) → fix. Fast feedback loop without supervisor. |
| `passthrough` | Thinnest wrapper. Pass task directly to coder as-is. No review. | | `passthrough` | Thinnest wrapper. Pass task directly to coder as-is. No review. |
| `compound-eye` | Multi-model review: sends the same instruction to Claude and Codex simultaneously, then synthesizes both responses. | | `compound-eye` | Multi-model review: sends the same instruction to Claude and Codex simultaneously, then synthesizes both responses. |
| `review-only` | Read-only code review piece that makes no changes. | | `review-only` | Read-only code review piece that makes no changes. |

View File

@ -4,7 +4,11 @@ Run tests, verify the build, and perform final approval.
1. Whether the plan and implementation results are consistent 1. Whether the plan and implementation results are consistent
2. Whether findings from each review movement have been addressed 2. Whether findings from each review movement have been addressed
3. Whether each task spec requirement has been achieved 3. Whether each task spec requirement has been achieved
- Do not rely on the plan report's judgment; independently verify each requirement against actual code (file:line) - Extract requirements one by one from the task spec
- For each requirement, identify the implementing code (file:line)
- Verify the code actually fulfills the requirement (read the file, run the test)
- Do not rely on the plan report's judgment; independently verify each requirement
- If any requirement is unfulfilled, REJECT
**Report verification:** Read all reports in the Report Directory and **Report verification:** Read all reports in the Report Directory and
check for any unaddressed improvement suggestions. check for any unaddressed improvement suggestions.
@ -15,10 +19,22 @@ check for any unaddressed improvement suggestions.
## Result: APPROVE / REJECT ## Result: APPROVE / REJECT
## Requirements Fulfillment Check
Extract requirements from the task spec and verify each one individually against actual code.
| # | Requirement (extracted from task spec) | Met | Evidence (file:line) |
|---|---------------------------------------|-----|---------------------|
| 1 | {requirement 1} | ✅/❌ | `src/file.ts:42` |
| 2 | {requirement 2} | ✅/❌ | `src/file.ts:55` |
- If any ❌ exists, REJECT is mandatory
- ✅ without evidence is invalid (must verify against actual code)
- Do not rely on plan report's judgment; independently verify each requirement
## Verification Summary ## Verification Summary
| Item | Status | Verification method | | Item | Status | Verification method |
|------|--------|-------------------| |------|--------|-------------------|
| Requirements met | ✅ | Cross-checked with requirements list |
| Tests | ✅ | `npm test` (N passed) | | Tests | ✅ | `npm test` (N passed) |
| Build | ✅ | `npm run build` succeeded | | Build | ✅ | `npm run build` succeeded |
| Functional check | ✅ | Main flows verified | | Functional check | ✅ | Main flows verified |

View File

@ -3,10 +3,22 @@
## Result: APPROVE / REJECT ## Result: APPROVE / REJECT
## Requirements Fulfillment Check
Extract requirements from the task spec and verify each one individually against actual code.
| # | Requirement (extracted from task spec) | Met | Evidence (file:line) |
|---|---------------------------------------|-----|---------------------|
| 1 | {requirement 1} | ✅/❌ | `src/file.ts:42` |
| 2 | {requirement 2} | ✅/❌ | `src/file.ts:55` |
- If any ❌ exists, REJECT is mandatory
- ✅ without evidence is invalid (must verify against actual code)
- Do not rely on plan report's judgment; independently verify each requirement
## Validation Summary ## Validation Summary
| Item | Status | Verification Method | | Item | Status | Verification Method |
|------|--------|-------------------| |------|--------|-------------------|
| Requirements met | ✅ | Checked against requirements list |
| Tests | ✅ | `npm test` (N passed) | | Tests | ✅ | `npm test` (N passed) |
| Build | ✅ | `npm run build` succeeded | | Build | ✅ | `npm run build` succeeded |
| Functional check | ✅ | Main flow verified | | Functional check | ✅ | Main flow verified |

View File

@ -36,12 +36,12 @@ You are the **human proxy** in the automated piece. Before approval, verify the
## Verification Perspectives ## Verification Perspectives
### 1. Requirements Fulfillment ### 1. Requirements Fulfillment (Most Critical)
- Are **all** original task requirements met? - Verify all requirements individually; do NOT APPROVE if any single requirement is unfulfilled
- Can it **actually** do what was claimed? - Can it **actually** do what was claimed?
- Are implicit requirements (naturally expected behavior) met? - Are implicit requirements (naturally expected behavior) met?
- Are there overlooked requirements? - "Mostly done" or "main parts complete" is NOT grounds for APPROVE. All requirements must be fulfilled
**Note**: Don't take Coder's "complete" at face value. Actually verify. **Note**: Don't take Coder's "complete" at face value. Actually verify.

View File

@ -1,23 +1,31 @@
piece_categories: piece_categories:
🚀 Quick Start: 🚀 Quick Start:
pieces: pieces:
- default-mini
- frontend-mini
- backend-mini
- default - default
- passthrough
- coding
- minimal
- compound-eye - compound-eye
⚡ Mini:
pieces:
- default-mini
- frontend-mini
- backend-mini
- backend-cqrs-mini
🎨 Frontend: 🎨 Frontend:
pieces: pieces:
- frontend - frontend
- frontend-mini
⚙️ Backend: ⚙️ Backend:
pieces: pieces:
- backend - backend
- backend-mini
- backend-cqrs - backend-cqrs
- backend-cqrs-mini
🔧 Expert: 🔧 Expert:
Full Stack: pieces:
pieces: - expert
- expert - expert-cqrs
- expert-cqrs
🛠️ Refactoring: 🛠️ Refactoring:
pieces: pieces:
- structural-reform - structural-reform

View File

@ -0,0 +1,247 @@
name: backend-cqrs-mini
description: CQRS+ES-focused mini development piece (plan -> implement -> parallel review -> fix if needed -> complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementation is possible
next: implement
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements are unclear, insufficient information
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: implement
rules:
- condition: Implementation complete
next: reviewers
- condition: Cannot proceed, insufficient info
next: ABORT
- condition: User input required because there are items to confirm with the user
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
instruction: review-ai
rules:
- condition: No AI-specific issues
- condition: AI-specific issues found
output_contracts:
report:
- name: 03-ai-review.md
format: ai-review
- name: supervise
edit: false
persona: supervisor
policy: review
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
instruction: supervise
rules:
- condition: All checks passed
- condition: Requirements unmet, tests failing
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false
rules:
- condition: all("No AI-specific issues", "All checks passed")
next: COMPLETE
- condition: all("AI-specific issues found", "Requirements unmet, tests failing")
next: fix_both
- condition: any("AI-specific issues found")
next: ai_fix
- condition: any("Requirements unmet, tests failing")
next: supervise_fix
- name: fix_both
parallel:
- name: ai_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: AI Reviewer's issues fixed
- condition: No fix needed (verified target files/spec)
- condition: Cannot proceed, insufficient info
instruction: ai-fix
- name: supervise_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: Supervisor's issues fixed
- condition: Cannot proceed, insufficient info
instruction: fix-supervisor
rules:
- condition: all("AI Reviewer's issues fixed", "Supervisor's issues fixed")
next: reviewers
- condition: any("No fix needed (verified target files/spec)", "Cannot proceed, insufficient info")
next: implement
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI Reviewer's issues fixed
next: reviewers
- condition: No fix needed (verified target files/spec)
next: implement
- condition: Cannot proceed, insufficient info
next: implement
instruction: ai-fix
- name: supervise_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: Supervisor's issues fixed
next: reviewers
- condition: Cannot proceed, insufficient info
next: implement
instruction: fix-supervisor

View File

@ -0,0 +1,240 @@
name: backend-mini
description: Backend-focused mini development piece (plan -> implement -> parallel review -> fix if needed -> complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementation is possible
next: implement
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements are unclear, insufficient information
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: implement
rules:
- condition: Implementation complete
next: reviewers
- condition: Cannot proceed, insufficient info
next: ABORT
- condition: User input required because there are items to confirm with the user
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
instruction: review-ai
rules:
- condition: No AI-specific issues
- condition: AI-specific issues found
output_contracts:
report:
- name: 03-ai-review.md
format: ai-review
- name: supervise
edit: false
persona: supervisor
policy: review
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
instruction: supervise
rules:
- condition: All checks passed
- condition: Requirements unmet, tests failing
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false
rules:
- condition: all("No AI-specific issues", "All checks passed")
next: COMPLETE
- condition: all("AI-specific issues found", "Requirements unmet, tests failing")
next: fix_both
- condition: any("AI-specific issues found")
next: ai_fix
- condition: any("Requirements unmet, tests failing")
next: supervise_fix
- name: fix_both
parallel:
- name: ai_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: AI Reviewer's issues fixed
- condition: No fix needed (verified target files/spec)
- condition: Cannot proceed, insufficient info
instruction: ai-fix
- name: supervise_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: Supervisor's issues fixed
- condition: Cannot proceed, insufficient info
instruction: fix-supervisor
rules:
- condition: all("AI Reviewer's issues fixed", "Supervisor's issues fixed")
next: reviewers
- condition: any("No fix needed (verified target files/spec)", "Cannot proceed, insufficient info")
next: implement
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI Reviewer's issues fixed
next: reviewers
- condition: No fix needed (verified target files/spec)
next: implement
- condition: Cannot proceed, insufficient info
next: implement
instruction: ai-fix
- name: supervise_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: Supervisor's issues fixed
next: reviewers
- condition: Cannot proceed, insufficient info
next: implement
instruction: fix-supervisor

View File

@ -1,140 +0,0 @@
name: coding
description: Lightweight development piece with planning and parallel reviews (plan -> implement -> parallel review -> complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementable
next: implement
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements are unclear, insufficient information
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: Implementation complete
next: reviewers
- condition: Implementation not started (report only)
next: reviewers
- condition: Cannot determine, insufficient information
next: reviewers
- condition: User input required
next: implement
requires_user_input: true
interactive_only: true
instruction: implement
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: No AI-specific issues
- condition: AI-specific issues found
instruction: ai-review
output_contracts:
report:
- name: 04-ai-review.md
format: ai-review
- name: arch-review
edit: false
persona: architecture-reviewer
policy: review
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-arch
output_contracts:
report:
- name: 05-architect-review.md
format: architecture-review
rules:
- condition: all("No AI-specific issues", "approved")
next: COMPLETE
- condition: any("AI-specific issues found", "needs_fix")
next: fix
- name: fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: Fix complete
next: reviewers
- condition: Cannot determine, insufficient information
next: ABORT
instruction: fix

View File

@ -1,5 +1,5 @@
name: minimal name: default-mini
description: Minimal development piece (implement -> parallel review -> fix if needed -> complete) description: Mini development piece (plan -> implement -> parallel review -> fix if needed -> complete)
piece_config: piece_config:
provider_options: provider_options:
codex: codex:
@ -7,14 +7,38 @@ piece_config:
opencode: opencode:
network_access: true network_access: true
max_movements: 20 max_movements: 20
initial_movement: implement initial_movement: plan
movements: movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementation is possible
next: implement
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements are unclear, insufficient information
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement - name: implement
edit: true edit: true
persona: coder persona: coder
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -67,6 +91,7 @@ movements:
edit: false edit: false
persona: supervisor persona: supervisor
policy: review policy: review
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -102,6 +127,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -122,6 +148,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -146,6 +173,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -171,6 +199,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob

View File

@ -0,0 +1,240 @@
name: frontend-mini
description: Frontend-focused mini development piece (plan -> implement -> parallel review -> fix if needed -> complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementation is possible
next: implement
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements are unclear, insufficient information
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: implement
rules:
- condition: Implementation complete
next: reviewers
- condition: Cannot proceed, insufficient info
next: ABORT
- condition: User input required because there are items to confirm with the user
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
instruction: review-ai
rules:
- condition: No AI-specific issues
- condition: AI-specific issues found
output_contracts:
report:
- name: 03-ai-review.md
format: ai-review
- name: supervise
edit: false
persona: supervisor
policy: review
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
instruction: supervise
rules:
- condition: All checks passed
- condition: Requirements unmet, tests failing
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false
rules:
- condition: all("No AI-specific issues", "All checks passed")
next: COMPLETE
- condition: all("AI-specific issues found", "Requirements unmet, tests failing")
next: fix_both
- condition: any("AI-specific issues found")
next: ai_fix
- condition: any("Requirements unmet, tests failing")
next: supervise_fix
- name: fix_both
parallel:
- name: ai_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: AI Reviewer's issues fixed
- condition: No fix needed (verified target files/spec)
- condition: Cannot proceed, insufficient info
instruction: ai-fix
- name: supervise_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: Supervisor's issues fixed
- condition: Cannot proceed, insufficient info
instruction: fix-supervisor
rules:
- condition: all("AI Reviewer's issues fixed", "Supervisor's issues fixed")
next: reviewers
- condition: any("No fix needed (verified target files/spec)", "Cannot proceed, insufficient info")
next: implement
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI Reviewer's issues fixed
next: reviewers
- condition: No fix needed (verified target files/spec)
next: implement
- condition: Cannot proceed, insufficient info
next: implement
instruction: ai-fix
- name: supervise_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: Supervisor's issues fixed
next: reviewers
- condition: Cannot proceed, insufficient info
next: implement
instruction: fix-supervisor

View File

@ -4,7 +4,11 @@
1. 計画と実装結果が一致しているか 1. 計画と実装結果が一致しているか
2. 各レビュームーブメントの指摘が対応されているか 2. 各レビュームーブメントの指摘が対応されているか
3. タスク指示書の各要件が達成されているか 3. タスク指示書の各要件が達成されているか
- 計画レポートの判断を鵜呑みにせず、要件ごとに実コード(ファイル:行)で独立照合する - タスク指示書から要件を1つずつ抽出する
- 各要件について、実装されたコード(ファイル:行)を特定する
- コードが要件を満たしていることを実際に確認する(ファイルを読む、テストを実行する)
- 計画レポートの判断を鵜呑みにせず、要件ごとに独立照合する
- 充足していない要件が1つでもあれば REJECT する
**レポートの確認:** Report Directory内の全レポートを読み、 **レポートの確認:** Report Directory内の全レポートを読み、
未対応の改善提案がないか確認してください。 未対応の改善提案がないか確認してください。
@ -15,10 +19,22 @@
## 結果: APPROVE / REJECT ## 結果: APPROVE / REJECT
## 要件充足チェック
タスク指示書から要件を抽出し、各要件を実コードで個別に検証する。
| # | 要件(タスク指示書から抽出) | 充足 | 根拠(ファイル:行) |
|---|---------------------------|------|-------------------|
| 1 | {要件1} | ✅/❌ | `src/file.ts:42` |
| 2 | {要件2} | ✅/❌ | `src/file.ts:55` |
- ❌ が1件でもある場合は REJECT 必須
- 根拠なしの ✅ は無効(実コードで確認すること)
- 計画レポートの判断を鵜呑みにせず、要件ごとに独立照合する
## 検証サマリー ## 検証サマリー
| 項目 | 状態 | 確認方法 | | 項目 | 状態 | 確認方法 |
|------|------|---------| |------|------|---------|
| 要求充足 | ✅ | 要求リストと照合 |
| テスト | ✅ | `npm test` (N passed) | | テスト | ✅ | `npm test` (N passed) |
| ビルド | ✅ | `npm run build` 成功 | | ビルド | ✅ | `npm run build` 成功 |
| 動作確認 | ✅ | 主要フロー確認 | | 動作確認 | ✅ | 主要フロー確認 |

View File

@ -3,10 +3,22 @@
## 結果: APPROVE / REJECT ## 結果: APPROVE / REJECT
## 要件充足チェック
タスク指示書から要件を抽出し、各要件を実コードで個別に検証する。
| # | 要件(タスク指示書から抽出) | 充足 | 根拠(ファイル:行) |
|---|---------------------------|------|-------------------|
| 1 | {要件1} | ✅/❌ | `src/file.ts:42` |
| 2 | {要件2} | ✅/❌ | `src/file.ts:55` |
- ❌ が1件でもある場合は REJECT 必須
- 根拠なしの ✅ は無効(実コードで確認すること)
- 計画レポートの判断を鵜呑みにせず、要件ごとに独立照合する
## 検証サマリー ## 検証サマリー
| 項目 | 状態 | 確認方法 | | 項目 | 状態 | 確認方法 |
|------|------|---------| |------|------|---------|
| 要求充足 | ✅ | 要求リストと照合 |
| テスト | ✅ | `npm test` (N passed) | | テスト | ✅ | `npm test` (N passed) |
| ビルド | ✅ | `npm run build` 成功 | | ビルド | ✅ | `npm run build` 成功 |
| 動作確認 | ✅ | 主要フロー確認 | | 動作確認 | ✅ | 主要フロー確認 |

View File

@ -43,10 +43,12 @@
### 検証観点 ### 検証観点
**要求の充足:** **要求の充足(最重要):**
- 元のタスク要求がすべて満たされているか
- 全要件を個別に検証し、1件でも未充足なら APPROVE しない
- 「~もできる」と言っていたことが本当にできるか - 「~もできる」と言っていたことが本当にできるか
- 暗黙の要求(当然期待される動作)が満たされているか - 暗黙の要求(当然期待される動作)が満たされているか
- 「概ね完了」「主要部分は完了」は APPROVE の根拠にならない。全要件の充足が必要
**動作確認(実際に実行する):** **動作確認(実際に実行する):**

View File

@ -1,23 +1,31 @@
piece_categories: piece_categories:
🚀 クイックスタート: 🚀 クイックスタート:
pieces: pieces:
- default-mini
- frontend-mini
- backend-mini
- default - default
- passthrough
- coding
- minimal
- compound-eye - compound-eye
⚡ Mini:
pieces:
- default-mini
- frontend-mini
- backend-mini
- backend-cqrs-mini
🎨 フロントエンド: 🎨 フロントエンド:
pieces: pieces:
- frontend - frontend
- frontend-mini
⚙️ バックエンド: ⚙️ バックエンド:
pieces: pieces:
- backend - backend
- backend-mini
- backend-cqrs - backend-cqrs
- backend-cqrs-mini
🔧 エキスパート: 🔧 エキスパート:
フルスタック: pieces:
pieces: - expert
- expert - expert-cqrs
- expert-cqrs
🛠️ リファクタリング: 🛠️ リファクタリング:
pieces: pieces:
- structural-reform - structural-reform

View File

@ -0,0 +1,247 @@
name: backend-cqrs-mini
description: CQRS+ES向けMini開発ピースplan → implement → 並列レビュー → 修正 → 完了)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: implement
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: implement
rules:
- condition: 実装が完了した
next: reviewers
- condition: 実装を進行できない
next: ABORT
- condition: ユーザーへの確認事項があるためユーザー入力が必要
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
instruction: review-ai
rules:
- condition: AI特有の問題なし
- condition: AI特有の問題あり
output_contracts:
report:
- name: 03-ai-review.md
format: ai-review
- name: supervise
edit: false
persona: supervisor
policy: review
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
instruction: supervise
rules:
- condition: すべて問題なし
- condition: 要求未達成、テスト失敗、ビルドエラー
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false
rules:
- condition: all("AI特有の問題なし", "すべて問題なし")
next: COMPLETE
- condition: all("AI特有の問題あり", "要求未達成、テスト失敗、ビルドエラー")
next: fix_both
- condition: any("AI特有の問題あり")
next: ai_fix
- condition: any("要求未達成、テスト失敗、ビルドエラー")
next: supervise_fix
- name: fix_both
parallel:
- name: ai_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: AI問題の修正完了
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
- condition: 判断できない、情報不足
instruction: ai-fix
- name: supervise_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: 監督者の指摘に対する修正が完了した
- condition: 修正を進行できない
instruction: fix-supervisor
rules:
- condition: all("AI問題の修正完了", "監督者の指摘に対する修正が完了した")
next: reviewers
- condition: any("修正不要(指摘対象ファイル/仕様の確認済み)", "判断できない、情報不足", "修正を進行できない")
next: implement
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI問題の修正完了
next: reviewers
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
next: implement
- condition: 判断できない、情報不足
next: implement
instruction: ai-fix
- name: supervise_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- cqrs-es
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: 監督者の指摘に対する修正が完了した
next: reviewers
- condition: 修正を進行できない
next: implement
instruction: fix-supervisor

View File

@ -0,0 +1,240 @@
name: backend-mini
description: バックエンド向けMini開発ピースplan → implement → 並列レビュー → 修正 → 完了)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: implement
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: implement
rules:
- condition: 実装が完了した
next: reviewers
- condition: 実装を進行できない
next: ABORT
- condition: ユーザーへの確認事項があるためユーザー入力が必要
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
instruction: review-ai
rules:
- condition: AI特有の問題なし
- condition: AI特有の問題あり
output_contracts:
report:
- name: 03-ai-review.md
format: ai-review
- name: supervise
edit: false
persona: supervisor
policy: review
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
instruction: supervise
rules:
- condition: すべて問題なし
- condition: 要求未達成、テスト失敗、ビルドエラー
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false
rules:
- condition: all("AI特有の問題なし", "すべて問題なし")
next: COMPLETE
- condition: all("AI特有の問題あり", "要求未達成、テスト失敗、ビルドエラー")
next: fix_both
- condition: any("AI特有の問題あり")
next: ai_fix
- condition: any("要求未達成、テスト失敗、ビルドエラー")
next: supervise_fix
- name: fix_both
parallel:
- name: ai_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: AI問題の修正完了
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
- condition: 判断できない、情報不足
instruction: ai-fix
- name: supervise_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: 監督者の指摘に対する修正が完了した
- condition: 修正を進行できない
instruction: fix-supervisor
rules:
- condition: all("AI問題の修正完了", "監督者の指摘に対する修正が完了した")
next: reviewers
- condition: any("修正不要(指摘対象ファイル/仕様の確認済み)", "判断できない、情報不足", "修正を進行できない")
next: implement
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI問題の修正完了
next: reviewers
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
next: implement
- condition: 判断できない、情報不足
next: implement
instruction: ai-fix
- name: supervise_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- backend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: 監督者の指摘に対する修正が完了した
next: reviewers
- condition: 修正を進行できない
next: implement
instruction: fix-supervisor

View File

@ -1,140 +0,0 @@
name: coding
description: Lightweight development piece with planning and parallel reviews (plan -> implement -> parallel review -> complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: implement
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: 実装完了
next: reviewers
- condition: 実装未着手(レポートのみ)
next: reviewers
- condition: 判断できない、情報不足
next: reviewers
- condition: ユーザー入力が必要
next: implement
requires_user_input: true
interactive_only: true
instruction: implement
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: AI特有の問題なし
- condition: AI特有の問題あり
instruction: ai-review
output_contracts:
report:
- name: 04-ai-review.md
format: ai-review
- name: arch-review
edit: false
persona: architecture-reviewer
policy: review
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-arch
output_contracts:
report:
- name: 05-architect-review.md
format: architecture-review
rules:
- condition: all("AI特有の問題なし", "approved")
next: COMPLETE
- condition: any("AI特有の問題あり", "needs_fix")
next: fix
- name: fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: 修正完了
next: reviewers
- condition: 判断できない、情報不足
next: ABORT
instruction: fix

View File

@ -1,5 +1,5 @@
name: minimal name: default-mini
description: Minimal development piece (implement -> parallel review -> fix if needed -> complete) description: Mini開発ピースplan → implement → 並列レビュー → 修正 → 完了)
piece_config: piece_config:
provider_options: provider_options:
codex: codex:
@ -7,14 +7,38 @@ piece_config:
opencode: opencode:
network_access: true network_access: true
max_movements: 20 max_movements: 20
initial_movement: implement initial_movement: plan
movements: movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: implement
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement - name: implement
edit: true edit: true
persona: coder persona: coder
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -67,6 +91,7 @@ movements:
edit: false edit: false
persona: supervisor persona: supervisor
policy: review policy: review
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -102,6 +127,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -122,6 +148,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -146,6 +173,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob
@ -171,6 +199,7 @@ movements:
policy: policy:
- coding - coding
- testing - testing
knowledge: architecture
allowed_tools: allowed_tools:
- Read - Read
- Glob - Glob

View File

@ -0,0 +1,240 @@
name: frontend-mini
description: フロントエンド向けMini開発ピースplan → implement → 並列レビュー → 修正 → 完了)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 20
initial_movement: plan
movements:
- name: plan
edit: false
persona: planner
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: implement
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
instruction: plan
output_contracts:
report:
- name: 00-plan.md
format: plan
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: implement
rules:
- condition: 実装が完了した
next: reviewers
- condition: 実装を進行できない
next: ABORT
- condition: ユーザーへの確認事項があるためユーザー入力が必要
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: reviewers
parallel:
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
instruction: review-ai
rules:
- condition: AI特有の問題なし
- condition: AI特有の問題あり
output_contracts:
report:
- name: 03-ai-review.md
format: ai-review
- name: supervise
edit: false
persona: supervisor
policy: review
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
instruction: supervise
rules:
- condition: すべて問題なし
- condition: 要求未達成、テスト失敗、ビルドエラー
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false
rules:
- condition: all("AI特有の問題なし", "すべて問題なし")
next: COMPLETE
- condition: all("AI特有の問題あり", "要求未達成、テスト失敗、ビルドエラー")
next: fix_both
- condition: any("AI特有の問題あり")
next: ai_fix
- condition: any("要求未達成、テスト失敗、ビルドエラー")
next: supervise_fix
- name: fix_both
parallel:
- name: ai_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: AI問題の修正完了
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
- condition: 判断できない、情報不足
instruction: ai-fix
- name: supervise_fix_parallel
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: 監督者の指摘に対する修正が完了した
- condition: 修正を進行できない
instruction: fix-supervisor
rules:
- condition: all("AI問題の修正完了", "監督者の指摘に対する修正が完了した")
next: reviewers
- condition: any("修正不要(指摘対象ファイル/仕様の確認済み)", "判断できない、情報不足", "修正を進行できない")
next: implement
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI問題の修正完了
next: reviewers
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
next: implement
- condition: 判断できない、情報不足
next: implement
instruction: ai-fix
- name: supervise_fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- frontend
- security
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: 監督者の指摘に対する修正が完了した
next: reviewers
- condition: 修正を進行できない
next: implement
instruction: fix-supervisor

View File

@ -304,7 +304,7 @@ takt reset categories
| ピース | おすすめ用途 | | ピース | おすすめ用途 |
|------------|------------| |------------|------------|
| `default` | 本格的な開発タスク。TAKT自身の開発で使用。アーキテクトセキュリティの並列レビュー付き多段階レビュー。 | | `default` | 本格的な開発タスク。TAKT自身の開発で使用。アーキテクトセキュリティの並列レビュー付き多段階レビュー。 |
| `minimal` | 簡単な修正やシンプルなタスク。基本的なレビュー付きの最小限のピース。 | | `default-mini` | 簡単な修正やシンプルなタスク。AI アンチパターンレビュー+スーパーバイザー付きの軽量ピース。 |
| `review-fix-minimal` | レビュー&修正ピース。レビューフィードバックに基づく反復的な改善に特化。 | | `review-fix-minimal` | レビュー&修正ピース。レビューフィードバックに基づく反復的な改善に特化。 |
| `research` | 調査・リサーチ。質問せずに自律的にリサーチを実行。 | | `research` | 調査・リサーチ。質問せずに自律的にリサーチを実行。 |
@ -460,13 +460,15 @@ TAKTには複数のビルトインピースが同梱されています:
| ピース | 説明 | | ピース | 説明 |
|------------|------| |------------|------|
| `default` | フル開発ピース: 計画 → 実装 → AI レビュー → 並列レビューアーキテクトQA→ スーパーバイザー承認。各レビュー段階に修正ループあり。 | | `default` | フル開発ピース: 計画 → 実装 → AI レビュー → 並列レビューアーキテクトQA→ スーパーバイザー承認。各レビュー段階に修正ループあり。 |
| `minimal` | クイックピース: 計画 → 実装 → レビュー → スーパーバイザー。高速イテレーション向けの最小構成。 | | `default-mini` | ミニ開発ピース: 計画 → 実装 → 並列レビューAI アンチパターン+スーパーバイザー)→ 修正。レビュー付きの軽量構成。 |
| `frontend-mini` | ミニフロントエンドピース: 計画 → 実装 → 並列レビューAI アンチパターン+スーパーバイザー)。フロントエンドナレッジ注入付き。 |
| `backend-mini` | ミニバックエンドピース: 計画 → 実装 → 並列レビューAI アンチパターン+スーパーバイザー)。バックエンドナレッジ注入付き。 |
| `backend-cqrs-mini` | ミニ CQRS+ES ピース: 計画 → 実装 → 並列レビューAI アンチパターンスーパーバイザー。CQRS+ES ナレッジ注入付き。 |
| `review-fix-minimal` | レビュー重視ピース: レビュー → 修正 → スーパーバイザー。レビューフィードバックに基づく反復改善向け。 | | `review-fix-minimal` | レビュー重視ピース: レビュー → 修正 → スーパーバイザー。レビューフィードバックに基づく反復改善向け。 |
| `research` | リサーチピース: プランナー → ディガー → スーパーバイザー。質問せずに自律的にリサーチを実行。 | | `research` | リサーチピース: プランナー → ディガー → スーパーバイザー。質問せずに自律的にリサーチを実行。 |
| `expert` | フルスタック開発ピース: アーキテクチャ、フロントエンド、セキュリティ、QA レビューと修正ループ。 | | `expert` | フルスタック開発ピース: アーキテクチャ、フロントエンド、セキュリティ、QA レビューと修正ループ。 |
| `expert-cqrs` | フルスタック開発ピースCQRS+ES特化: CQRS+ES、フロントエンド、セキュリティ、QA レビューと修正ループ。 | | `expert-cqrs` | フルスタック開発ピースCQRS+ES特化: CQRS+ES、フロントエンド、セキュリティ、QA レビューと修正ループ。 |
| `magi` | エヴァンゲリオンにインスパイアされた審議システム。3つの AI ペルソナMELCHIOR、BALTHASAR、CASPERが分析し投票。 | | `magi` | エヴァンゲリオンにインスパイアされた審議システム。3つの AI ペルソナMELCHIOR、BALTHASAR、CASPERが分析し投票。 |
| `coding` | 軽量開発ピース: planner → 実装 → 並列レビューAI アンチパターン+アーキテクチャ)→ 修正。スーパーバイザーなしの高速フィードバックループ。 |
| `passthrough` | 最小構成。タスクをそのまま coder に渡す薄いラッパー。レビューなし。 | | `passthrough` | 最小構成。タスクをそのまま coder に渡す薄いラッパー。レビューなし。 |
| `compound-eye` | マルチモデルレビュー: Claude と Codex に同じ指示を同時送信し、両方の回答を統合。 | | `compound-eye` | マルチモデルレビュー: Claude と Codex に同じ指示を同時送信し、両方の回答を統合。 |
| `review-only` | 変更を加えない読み取り専用のコードレビューピース。 | | `review-only` | 変更を加えない読み取り専用のコードレビューピース。 |

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "takt", "name": "takt",
"version": "0.16.0", "version": "0.17.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "takt", "name": "takt",
"version": "0.16.0", "version": "0.17.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@anthropic-ai/claude-agent-sdk": "^0.2.37", "@anthropic-ai/claude-agent-sdk": "^0.2.37",

View File

@ -1,6 +1,6 @@
{ {
"name": "takt", "name": "takt",
"version": "0.16.0", "version": "0.17.0",
"description": "TAKT: TAKT Agent Koordination Topology - AI Agent Piece Orchestration", "description": "TAKT: TAKT Agent Koordination Topology - AI Agent Piece Orchestration",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@ -217,10 +217,10 @@ describe('loadPiece (builtin fallback)', () => {
expect(piece).toBeNull(); expect(piece).toBeNull();
}); });
it('should load builtin pieces like minimal, research, e2e-test', () => { it('should load builtin pieces like default-mini, research, e2e-test', () => {
const minimal = loadPiece('minimal', process.cwd()); const mini = loadPiece('default-mini', process.cwd());
expect(minimal).not.toBeNull(); expect(mini).not.toBeNull();
expect(minimal!.name).toBe('minimal'); expect(mini!.name).toBe('default-mini');
const research = loadPiece('research', process.cwd()); const research = loadPiece('research', process.cwd());
expect(research).not.toBeNull(); expect(research).not.toBeNull();
@ -249,7 +249,7 @@ describe('listPieces (builtin fallback)', () => {
it('should include builtin pieces', () => { it('should include builtin pieces', () => {
const pieces = listPieces(testDir); const pieces = listPieces(testDir);
expect(pieces).toContain('default'); expect(pieces).toContain('default');
expect(pieces).toContain('minimal'); expect(pieces).toContain('default-mini');
expect(pieces).toContain('e2e-test'); expect(pieces).toContain('e2e-test');
}); });
@ -277,7 +277,7 @@ describe('loadAllPieces (builtin fallback)', () => {
it('should include builtin pieces in the map', () => { it('should include builtin pieces in the map', () => {
const pieces = loadAllPieces(testDir); const pieces = loadAllPieces(testDir);
expect(pieces.has('default')).toBe(true); expect(pieces.has('default')).toBe(true);
expect(pieces.has('minimal')).toBe(true); expect(pieces.has('default-mini')).toBe(true);
}); });
}); });

View File

@ -156,7 +156,7 @@ describe('Piece Loader IT: agent path resolution', () => {
}); });
it('should resolve relative agent paths from piece YAML location', () => { it('should resolve relative agent paths from piece YAML location', () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
expect(config).not.toBeNull(); expect(config).not.toBeNull();
for (const movement of config!.movements) { for (const movement of config!.movements) {
@ -223,7 +223,7 @@ describe('Piece Loader IT: rule syntax parsing', () => {
}); });
it('should parse standard rules with next movement', () => { it('should parse standard rules with next movement', () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
expect(config).not.toBeNull(); expect(config).not.toBeNull();
const implementStep = config!.movements.find((s) => s.name === 'implement'); const implementStep = config!.movements.find((s) => s.name === 'implement');
@ -251,14 +251,14 @@ describe('Piece Loader IT: piece config validation', () => {
}); });
it('should set max_movements from YAML', () => { it('should set max_movements from YAML', () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
expect(config).not.toBeNull(); expect(config).not.toBeNull();
expect(typeof config!.maxMovements).toBe('number'); expect(typeof config!.maxMovements).toBe('number');
expect(config!.maxMovements).toBeGreaterThan(0); expect(config!.maxMovements).toBeGreaterThan(0);
}); });
it('should set initial_movement from YAML', () => { it('should set initial_movement from YAML', () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
expect(config).not.toBeNull(); expect(config).not.toBeNull();
expect(typeof config!.initialMovement).toBe('string'); expect(typeof config!.initialMovement).toBe('string');
@ -290,7 +290,7 @@ describe('Piece Loader IT: piece config validation', () => {
}); });
it('should set passPreviousResponse from YAML', () => { it('should set passPreviousResponse from YAML', () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
expect(config).not.toBeNull(); expect(config).not.toBeNull();
// At least some movements should have passPreviousResponse set // At least some movements should have passPreviousResponse set

View File

@ -80,7 +80,7 @@ function createEngine(config: PieceConfig, dir: string, task: string): PieceEngi
}); });
} }
describe('Piece Patterns IT: minimal piece', () => { describe('Piece Patterns IT: default-mini piece', () => {
let testDir: string; let testDir: string;
beforeEach(() => { beforeEach(() => {
@ -93,11 +93,12 @@ describe('Piece Patterns IT: minimal piece', () => {
rmSync(testDir, { recursive: true, force: true }); rmSync(testDir, { recursive: true, force: true });
}); });
it('should complete: implement → reviewers (parallel: ai_review + supervise) → COMPLETE', async () => { it('should complete: plan → implement → reviewers (parallel: ai_review + supervise) → COMPLETE', async () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
expect(config).not.toBeNull(); expect(config).not.toBeNull();
setMockScenario([ setMockScenario([
{ persona: 'planner', status: 'done', content: 'Requirements are clear and implementation is possible.' },
{ persona: 'coder', status: 'done', content: 'Implementation complete.' }, { persona: 'coder', status: 'done', content: 'Implementation complete.' },
{ persona: 'ai-antipattern-reviewer', status: 'done', content: 'No AI-specific issues.' }, { persona: 'ai-antipattern-reviewer', status: 'done', content: 'No AI-specific issues.' },
{ persona: 'supervisor', status: 'done', content: 'All checks passed.' }, { persona: 'supervisor', status: 'done', content: 'All checks passed.' },
@ -107,13 +108,14 @@ describe('Piece Patterns IT: minimal piece', () => {
const state = await engine.run(); const state = await engine.run();
expect(state.status).toBe('completed'); expect(state.status).toBe('completed');
expect(state.iteration).toBe(2); expect(state.iteration).toBe(3);
}); });
it('should ABORT when implement cannot proceed', async () => { it('should ABORT when implement cannot proceed', async () => {
const config = loadPiece('minimal', testDir); const config = loadPiece('default-mini', testDir);
setMockScenario([ setMockScenario([
{ persona: 'planner', status: 'done', content: 'Requirements are clear and implementation is possible.' },
{ persona: 'coder', status: 'done', content: 'Cannot proceed, insufficient info.' }, { persona: 'coder', status: 'done', content: 'Cannot proceed, insufficient info.' },
]); ]);
@ -121,7 +123,7 @@ describe('Piece Patterns IT: minimal piece', () => {
const state = await engine.run(); const state = await engine.run();
expect(state.status).toBe('aborted'); expect(state.status).toBe('aborted');
expect(state.iteration).toBe(1); expect(state.iteration).toBe(2);
}); });
}); });

View File

@ -282,6 +282,7 @@ describe('Pipeline Modes IT: --task + --piece name (builtin)', () => {
it('should load and execute builtin minimal piece by name', async () => { it('should load and execute builtin minimal piece by name', async () => {
setMockScenario([ setMockScenario([
{ persona: 'planner', status: 'done', content: 'Requirements are clear and implementation is possible.' },
{ persona: 'coder', status: 'done', content: 'Implementation complete' }, { persona: 'coder', status: 'done', content: 'Implementation complete' },
{ persona: 'ai-antipattern-reviewer', status: 'done', content: 'No AI-specific issues' }, { persona: 'ai-antipattern-reviewer', status: 'done', content: 'No AI-specific issues' },
{ persona: 'supervisor', status: 'done', content: 'All checks passed' }, { persona: 'supervisor', status: 'done', content: 'All checks passed' },
@ -289,7 +290,7 @@ describe('Pipeline Modes IT: --task + --piece name (builtin)', () => {
const exitCode = await executePipeline({ const exitCode = await executePipeline({
task: 'Add a feature', task: 'Add a feature',
piece: 'minimal', piece: 'default-mini',
autoPr: false, autoPr: false,
skipGit: true, skipGit: true,
cwd: testDir, cwd: testDir,

View File

@ -228,10 +228,11 @@ describe('Pipeline Integration Tests', () => {
}); });
it('should complete pipeline with piece name + skip-git + mock scenario', async () => { it('should complete pipeline with piece name + skip-git + mock scenario', async () => {
// Use builtin 'minimal' piece // Use builtin 'default-mini' piece
// persona field: extractPersonaName result (from .md filename) // persona field: extractPersonaName result (from .md filename)
// tag in content: [MOVEMENT_NAME:N] where MOVEMENT_NAME is the movement name uppercased // tag in content: [MOVEMENT_NAME:N] where MOVEMENT_NAME is the movement name uppercased
setMockScenario([ setMockScenario([
{ persona: 'planner', status: 'done', content: 'Requirements are clear and implementation is possible.' },
{ persona: 'coder', status: 'done', content: 'Implementation complete' }, { persona: 'coder', status: 'done', content: 'Implementation complete' },
{ persona: 'ai-antipattern-reviewer', status: 'done', content: 'No AI-specific issues' }, { persona: 'ai-antipattern-reviewer', status: 'done', content: 'No AI-specific issues' },
{ persona: 'supervisor', status: 'done', content: 'All checks passed' }, { persona: 'supervisor', status: 'done', content: 'All checks passed' },
@ -239,7 +240,7 @@ describe('Pipeline Integration Tests', () => {
const exitCode = await executePipeline({ const exitCode = await executePipeline({
task: 'Add a hello world function', task: 'Add a hello world function',
piece: 'minimal', piece: 'default-mini',
autoPr: false, autoPr: false,
skipGit: true, skipGit: true,
cwd: testDir, cwd: testDir,

View File

@ -105,7 +105,7 @@ export function deleteBranch(projectDir: string, target: BranchActionTarget): bo
try { try {
if (worktreePath) { if (worktreePath) {
if (existsSync(worktreePath)) { if (existsSync(worktreePath)) {
rmSync(worktreePath, { recursive: true, force: true }); rmSync(worktreePath, { recursive: true, force: true, maxRetries: 3, retryDelay: 200 });
log.info('Removed worktree directory', { worktreePath }); log.info('Removed worktree directory', { worktreePath });
} }

View File

@ -217,7 +217,7 @@ export class CloneManager {
removeClone(clonePath: string): void { removeClone(clonePath: string): void {
log.info('Removing clone', { path: clonePath }); log.info('Removing clone', { path: clonePath });
try { try {
fs.rmSync(clonePath, { recursive: true, force: true }); fs.rmSync(clonePath, { recursive: true, force: true, maxRetries: 3, retryDelay: 200 });
log.info('Clone removed', { path: clonePath }); log.info('Clone removed', { path: clonePath });
} catch (err) { } catch (err) {
log.error('Failed to remove clone', { path: clonePath, error: String(err) }); log.error('Failed to remove clone', { path: clonePath, error: String(err) });