takt 0.33.2 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -22
- package/builtins/en/config.yaml +8 -8
- package/builtins/en/facets/instructions/dual-team-leader-implement.md +8 -2
- package/builtins/en/facets/instructions/plan.md +3 -0
- package/builtins/en/facets/instructions/review-requirements.md +12 -7
- package/builtins/en/facets/instructions/supervise.md +4 -2
- package/builtins/en/facets/instructions/team-leader-implement.md +3 -2
- package/builtins/en/facets/knowledge/architecture.md +93 -0
- package/builtins/en/facets/knowledge/cqrs-es.md +64 -5
- package/builtins/en/facets/output-contracts/plan.md +8 -0
- package/builtins/en/facets/output-contracts/requirements-review.md +10 -8
- package/builtins/en/facets/output-contracts/supervisor-validation.md +8 -0
- package/builtins/en/facets/personas/planner.md +7 -0
- package/builtins/en/facets/personas/requirements-reviewer.md +7 -0
- package/builtins/en/facets/personas/supervisor.md +10 -0
- package/builtins/en/facets/policies/coding.md +87 -0
- package/builtins/en/{piece-categories.yaml → workflow-categories.yaml} +10 -10
- package/builtins/en/{pieces → workflows}/audit-architecture-backend.yaml +3 -3
- package/builtins/en/{pieces → workflows}/audit-architecture-dual.yaml +3 -3
- package/builtins/en/{pieces → workflows}/audit-architecture-frontend.yaml +3 -3
- package/builtins/en/{pieces → workflows}/audit-architecture.yaml +3 -3
- package/builtins/en/{pieces → workflows}/audit-e2e.yaml +4 -4
- package/builtins/en/{pieces → workflows}/audit-security.yaml +3 -3
- package/builtins/en/{pieces → workflows}/audit-unit.yaml +4 -4
- package/builtins/en/{pieces → workflows}/backend-cqrs-mini.yaml +5 -5
- package/builtins/en/{pieces → workflows}/backend-cqrs.yaml +5 -5
- package/builtins/en/{pieces → workflows}/backend-mini.yaml +5 -5
- package/builtins/en/{pieces → workflows}/backend.yaml +5 -5
- package/builtins/en/{pieces → workflows}/compound-eye.yaml +4 -4
- package/builtins/en/{pieces → workflows}/deep-research.yaml +5 -5
- package/builtins/en/{pieces → workflows}/default.yaml +5 -5
- package/builtins/en/{pieces → workflows}/dual-cqrs-mini.yaml +5 -5
- package/builtins/en/{pieces → workflows}/dual-cqrs.yaml +5 -5
- package/builtins/en/{pieces → workflows}/dual-mini.yaml +5 -5
- package/builtins/en/{pieces → workflows}/dual.yaml +23 -7
- package/builtins/en/{pieces → workflows}/frontend-mini.yaml +5 -5
- package/builtins/en/{pieces → workflows}/frontend.yaml +5 -5
- package/builtins/en/{pieces → workflows}/magi.yaml +4 -4
- package/builtins/en/{pieces → workflows}/research.yaml +5 -5
- package/builtins/en/{pieces → workflows}/review-backend-cqrs.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-backend.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-default.yaml +5 -5
- package/builtins/en/{pieces → workflows}/review-dual-cqrs.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-dual.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-backend-cqrs.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-backend.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-default.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-dual-cqrs.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-dual.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-frontend.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-fix-takt-default.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-frontend.yaml +4 -4
- package/builtins/en/{pieces → workflows}/review-takt-default.yaml +5 -5
- package/builtins/en/{pieces → workflows}/takt-default.yaml +5 -5
- package/builtins/en/{pieces → workflows}/terraform.yaml +5 -5
- package/builtins/ja/config.yaml +8 -8
- package/builtins/ja/facets/instructions/dual-team-leader-implement.md +8 -2
- package/builtins/ja/facets/instructions/plan.md +3 -0
- package/builtins/ja/facets/instructions/review-requirements.md +12 -7
- package/builtins/ja/facets/instructions/supervise.md +4 -2
- package/builtins/ja/facets/instructions/team-leader-implement.md +3 -2
- package/builtins/ja/facets/knowledge/architecture.md +93 -0
- package/builtins/ja/facets/knowledge/cqrs-es.md +66 -6
- package/builtins/ja/facets/output-contracts/plan.md +8 -0
- package/builtins/ja/facets/output-contracts/requirements-review.md +10 -8
- package/builtins/ja/facets/output-contracts/supervisor-validation.md +8 -0
- package/builtins/ja/facets/personas/planner.md +8 -0
- package/builtins/ja/facets/personas/requirements-reviewer.md +7 -0
- package/builtins/ja/facets/personas/supervisor.md +6 -0
- package/builtins/ja/facets/policies/coding.md +87 -0
- package/builtins/ja/{piece-categories.yaml → workflow-categories.yaml} +10 -10
- package/builtins/ja/{pieces → workflows}/audit-architecture-backend.yaml +3 -3
- package/builtins/ja/{pieces → workflows}/audit-architecture-dual.yaml +3 -3
- package/builtins/ja/{pieces → workflows}/audit-architecture-frontend.yaml +3 -3
- package/builtins/ja/{pieces → workflows}/audit-architecture.yaml +3 -3
- package/builtins/ja/{pieces → workflows}/audit-e2e.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/audit-security.yaml +3 -3
- package/builtins/ja/{pieces → workflows}/audit-unit.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/backend-cqrs-mini.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/backend-cqrs.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/backend-mini.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/backend.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/compound-eye.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/deep-research.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/default.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/dual-cqrs-mini.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/dual-cqrs.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/dual-mini.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/dual.yaml +23 -7
- package/builtins/ja/{pieces → workflows}/frontend-mini.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/frontend.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/magi.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/research.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/review-backend-cqrs.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-backend.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-default.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/review-dual-cqrs.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-dual.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-backend-cqrs.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-backend.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-default.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-dual-cqrs.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-dual.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-frontend.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-fix-takt-default.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-frontend.yaml +4 -4
- package/builtins/ja/{pieces → workflows}/review-takt-default.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/takt-default.yaml +5 -5
- package/builtins/ja/{pieces → workflows}/terraform.yaml +5 -5
- package/builtins/schemas/decomposition.json +1 -5
- package/builtins/schemas/more-parts.json +1 -5
- package/builtins/skill/SKILL.md +54 -52
- package/builtins/skill/references/engine.md +45 -45
- package/builtins/skill/references/yaml-schema.md +46 -38
- package/builtins/skill-codex/SKILL.md +48 -46
- package/builtins/skill-codex/references/engine.md +32 -32
- package/builtins/skill-codex/references/yaml-schema.md +46 -38
- package/dist/agents/decompose-task-usecase.d.ts +3 -1
- package/dist/agents/decompose-task-usecase.d.ts.map +1 -1
- package/dist/agents/decompose-task-usecase.js +2 -112
- package/dist/agents/decompose-task-usecase.js.map +1 -1
- package/dist/agents/judge-status-usecase.d.ts +11 -0
- package/dist/agents/judge-status-usecase.d.ts.map +1 -1
- package/dist/agents/judge-status-usecase.js +37 -31
- package/dist/agents/judge-status-usecase.js.map +1 -1
- package/dist/agents/judge-utils.d.ts +6 -0
- package/dist/agents/judge-utils.d.ts.map +1 -1
- package/dist/agents/judge-utils.js +12 -0
- package/dist/agents/judge-utils.js.map +1 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +10 -2
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/structured-caller/contracts.d.ts +18 -0
- package/dist/agents/structured-caller/contracts.d.ts.map +1 -0
- package/dist/agents/structured-caller/contracts.js +2 -0
- package/dist/agents/structured-caller/contracts.js.map +1 -0
- package/dist/agents/structured-caller/default-structured-caller.d.ts +19 -0
- package/dist/agents/structured-caller/default-structured-caller.d.ts.map +1 -0
- package/dist/agents/structured-caller/default-structured-caller.js +25 -0
- package/dist/agents/structured-caller/default-structured-caller.js.map +1 -0
- package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts +19 -0
- package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts.map +1 -0
- package/dist/agents/structured-caller/prompt-based-structured-caller.js +137 -0
- package/dist/agents/structured-caller/prompt-based-structured-caller.js.map +1 -0
- package/dist/agents/structured-caller/shared.d.ts +5 -0
- package/dist/agents/structured-caller/shared.d.ts.map +1 -0
- package/dist/agents/structured-caller/shared.js +36 -0
- package/dist/agents/structured-caller/shared.js.map +1 -0
- package/dist/agents/structured-caller.d.ts +4 -0
- package/dist/agents/structured-caller.d.ts.map +1 -0
- package/dist/agents/structured-caller.js +3 -0
- package/dist/agents/structured-caller.js.map +1 -0
- package/dist/agents/team-leader-structured-output.d.ts +19 -0
- package/dist/agents/team-leader-structured-output.d.ts.map +1 -0
- package/dist/agents/team-leader-structured-output.js +152 -0
- package/dist/agents/team-leader-structured-output.js.map +1 -0
- package/dist/agents/types.d.ts +2 -2
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/app/cli/commands.js +31 -14
- package/dist/app/cli/commands.js.map +1 -1
- package/dist/app/cli/helpers.d.ts +1 -0
- package/dist/app/cli/helpers.d.ts.map +1 -1
- package/dist/app/cli/helpers.js +8 -0
- package/dist/app/cli/helpers.js.map +1 -1
- package/dist/app/cli/program.d.ts.map +1 -1
- package/dist/app/cli/program.js +2 -1
- package/dist/app/cli/program.js.map +1 -1
- package/dist/app/cli/routing.d.ts.map +1 -1
- package/dist/app/cli/routing.js +12 -4
- package/dist/app/cli/routing.js.map +1 -1
- package/dist/core/models/config-schemas.d.ts +674 -0
- package/dist/core/models/config-schemas.d.ts.map +1 -0
- package/dist/core/models/config-schemas.js +143 -0
- package/dist/core/models/config-schemas.js.map +1 -0
- package/dist/core/models/config-types.d.ts +7 -2
- package/dist/core/models/config-types.d.ts.map +1 -1
- package/dist/core/models/part.d.ts +0 -2
- package/dist/core/models/part.d.ts.map +1 -1
- package/dist/core/models/piece-types.d.ts +8 -0
- package/dist/core/models/piece-types.d.ts.map +1 -1
- package/dist/core/models/piece-types.js +2 -0
- package/dist/core/models/piece-types.js.map +1 -1
- package/dist/core/models/schema-base.d.ts +493 -0
- package/dist/core/models/schema-base.d.ts.map +1 -0
- package/dist/core/models/schema-base.js +201 -0
- package/dist/core/models/schema-base.js.map +1 -0
- package/dist/core/models/schemas.d.ts +4 -1638
- package/dist/core/models/schemas.d.ts.map +1 -1
- package/dist/core/models/schemas.js +4 -563
- package/dist/core/models/schemas.js.map +1 -1
- package/dist/core/models/workflow-schemas.d.ts +1723 -0
- package/dist/core/models/workflow-schemas.d.ts.map +1 -0
- package/dist/core/models/workflow-schemas.js +217 -0
- package/dist/core/models/workflow-schemas.js.map +1 -0
- package/dist/core/piece/engine/ArpeggioRunner.d.ts +2 -6
- package/dist/core/piece/engine/ArpeggioRunner.d.ts.map +1 -1
- package/dist/core/piece/engine/ArpeggioRunner.js +2 -1
- package/dist/core/piece/engine/ArpeggioRunner.js.map +1 -1
- package/dist/core/piece/engine/MovementExecutor.d.ts +2 -6
- package/dist/core/piece/engine/MovementExecutor.d.ts.map +1 -1
- package/dist/core/piece/engine/MovementExecutor.js +2 -1
- package/dist/core/piece/engine/MovementExecutor.js.map +1 -1
- package/dist/core/piece/engine/OptionsBuilder.d.ts +1 -0
- package/dist/core/piece/engine/OptionsBuilder.d.ts.map +1 -1
- package/dist/core/piece/engine/OptionsBuilder.js +13 -34
- package/dist/core/piece/engine/OptionsBuilder.js.map +1 -1
- package/dist/core/piece/engine/ParallelRunner.d.ts +2 -6
- package/dist/core/piece/engine/ParallelRunner.d.ts.map +1 -1
- package/dist/core/piece/engine/ParallelRunner.js +109 -55
- package/dist/core/piece/engine/ParallelRunner.js.map +1 -1
- package/dist/core/piece/engine/PieceEngine.d.ts +1 -1
- package/dist/core/piece/engine/PieceEngine.d.ts.map +1 -1
- package/dist/core/piece/engine/PieceEngine.js +11 -10
- package/dist/core/piece/engine/PieceEngine.js.map +1 -1
- package/dist/core/piece/engine/TeamLeaderRunner.d.ts +0 -7
- package/dist/core/piece/engine/TeamLeaderRunner.d.ts.map +1 -1
- package/dist/core/piece/engine/TeamLeaderRunner.js +9 -6
- package/dist/core/piece/engine/TeamLeaderRunner.js.map +1 -1
- package/dist/core/piece/engine/parallel-logger.d.ts.map +1 -1
- package/dist/core/piece/engine/parallel-logger.js +2 -0
- package/dist/core/piece/engine/parallel-logger.js.map +1 -1
- package/dist/core/piece/engine/team-leader-common.d.ts.map +1 -1
- package/dist/core/piece/engine/team-leader-common.js +6 -3
- package/dist/core/piece/engine/team-leader-common.js.map +1 -1
- package/dist/core/piece/evaluation/RuleEvaluator.d.ts +6 -3
- package/dist/core/piece/evaluation/RuleEvaluator.d.ts.map +1 -1
- package/dist/core/piece/evaluation/RuleEvaluator.js +16 -14
- package/dist/core/piece/evaluation/RuleEvaluator.js.map +1 -1
- package/dist/core/piece/instruction/InstructionBuilder.d.ts +4 -4
- package/dist/core/piece/instruction/InstructionBuilder.js +9 -9
- package/dist/core/piece/instruction/InstructionBuilder.js.map +1 -1
- package/dist/core/piece/instruction/instruction-context.d.ts +1 -1
- package/dist/core/piece/instruction/instruction-context.js +5 -5
- package/dist/core/piece/instruction/instruction-context.js.map +1 -1
- package/dist/core/piece/part-definition-validator.d.ts.map +1 -1
- package/dist/core/piece/part-definition-validator.js +3 -6
- package/dist/core/piece/part-definition-validator.js.map +1 -1
- package/dist/core/piece/phase-runner.d.ts +6 -1
- package/dist/core/piece/phase-runner.d.ts.map +1 -1
- package/dist/core/piece/phase-runner.js.map +1 -1
- package/dist/core/piece/provider-resolution.d.ts +0 -2
- package/dist/core/piece/provider-resolution.d.ts.map +1 -1
- package/dist/core/piece/provider-resolution.js +0 -2
- package/dist/core/piece/provider-resolution.js.map +1 -1
- package/dist/core/piece/status-judgment-phase.d.ts.map +1 -1
- package/dist/core/piece/status-judgment-phase.js +2 -2
- package/dist/core/piece/status-judgment-phase.js.map +1 -1
- package/dist/core/piece/types.d.ts +7 -9
- package/dist/core/piece/types.d.ts.map +1 -1
- package/dist/core/runtime/runtime-environment.d.ts.map +1 -1
- package/dist/core/runtime/runtime-environment.js +15 -0
- package/dist/core/runtime/runtime-environment.js.map +1 -1
- package/dist/features/config/deploySkill.js +1 -1
- package/dist/features/config/deploySkill.js.map +1 -1
- package/dist/features/config/deploySkillCodex.js +1 -1
- package/dist/features/config/deploySkillCodex.js.map +1 -1
- package/dist/features/config/deploySkillInternal.js +5 -5
- package/dist/features/config/deploySkillInternal.js.map +1 -1
- package/dist/features/config/ejectBuiltin.d.ts +3 -3
- package/dist/features/config/ejectBuiltin.d.ts.map +1 -1
- package/dist/features/config/ejectBuiltin.js +53 -28
- package/dist/features/config/ejectBuiltin.js.map +1 -1
- package/dist/features/pieceSelection/index.d.ts.map +1 -1
- package/dist/features/pieceSelection/index.js +32 -31
- package/dist/features/pieceSelection/index.js.map +1 -1
- package/dist/features/pipeline/execute.d.ts.map +1 -1
- package/dist/features/pipeline/execute.js +9 -3
- package/dist/features/pipeline/execute.js.map +1 -1
- package/dist/features/pipeline/steps.d.ts.map +1 -1
- package/dist/features/pipeline/steps.js +18 -13
- package/dist/features/pipeline/steps.js.map +1 -1
- package/dist/features/prompt/preview.d.ts.map +1 -1
- package/dist/features/prompt/preview.js +9 -4
- package/dist/features/prompt/preview.js.map +1 -1
- package/dist/features/tasks/add/index.d.ts +2 -0
- package/dist/features/tasks/add/index.d.ts.map +1 -1
- package/dist/features/tasks/add/index.js +5 -4
- package/dist/features/tasks/add/index.js.map +1 -1
- package/dist/features/tasks/add/worktree-settings.d.ts.map +1 -1
- package/dist/features/tasks/add/worktree-settings.js +10 -8
- package/dist/features/tasks/add/worktree-settings.js.map +1 -1
- package/dist/features/tasks/execute/pieceExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/pieceExecution.js +28 -27
- package/dist/features/tasks/execute/pieceExecution.js.map +1 -1
- package/dist/features/tasks/execute/postExecution.js +1 -1
- package/dist/features/tasks/execute/postExecution.js.map +1 -1
- package/dist/features/tasks/execute/resolveTask.d.ts +1 -1
- package/dist/features/tasks/execute/resolveTask.d.ts.map +1 -1
- package/dist/features/tasks/execute/resolveTask.js +10 -9
- package/dist/features/tasks/execute/resolveTask.js.map +1 -1
- package/dist/features/tasks/execute/runAllTasks.d.ts +3 -0
- package/dist/features/tasks/execute/runAllTasks.d.ts.map +1 -0
- package/dist/features/tasks/execute/runAllTasks.js +81 -0
- package/dist/features/tasks/execute/runAllTasks.js.map +1 -0
- package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.js +2 -1
- package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
- package/dist/features/tasks/execute/taskExecution.d.ts +0 -7
- package/dist/features/tasks/execute/taskExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/taskExecution.js +17 -95
- package/dist/features/tasks/execute/taskExecution.js.map +1 -1
- package/dist/features/tasks/execute/taskResultHandler.js +1 -1
- package/dist/features/tasks/execute/taskResultHandler.js.map +1 -1
- package/dist/features/tasks/execute/types.d.ts +3 -1
- package/dist/features/tasks/execute/types.d.ts.map +1 -1
- package/dist/features/tasks/index.d.ts +2 -1
- package/dist/features/tasks/index.d.ts.map +1 -1
- package/dist/features/tasks/index.js +2 -1
- package/dist/features/tasks/index.js.map +1 -1
- package/dist/features/tasks/list/listNonInteractive.d.ts.map +1 -1
- package/dist/features/tasks/list/listNonInteractive.js +6 -2
- package/dist/features/tasks/list/listNonInteractive.js.map +1 -1
- package/dist/features/tasks/list/requeueHelpers.d.ts.map +1 -1
- package/dist/features/tasks/list/requeueHelpers.js +2 -1
- package/dist/features/tasks/list/requeueHelpers.js.map +1 -1
- package/dist/features/tasks/list/taskRetryActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskRetryActions.js +12 -11
- package/dist/features/tasks/list/taskRetryActions.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/claude/client.d.ts.map +1 -1
- package/dist/infra/claude/client.js +2 -13
- package/dist/infra/claude/client.js.map +1 -1
- package/dist/infra/claude/executor.d.ts +1 -1
- package/dist/infra/claude/executor.d.ts.map +1 -1
- package/dist/infra/claude/executor.js +47 -27
- package/dist/infra/claude/executor.js.map +1 -1
- package/dist/infra/claude/options-builder.d.ts.map +1 -1
- package/dist/infra/claude/options-builder.js +2 -0
- package/dist/infra/claude/options-builder.js.map +1 -1
- package/dist/infra/claude/stream-converter.d.ts.map +1 -1
- package/dist/infra/claude/stream-converter.js +26 -0
- package/dist/infra/claude/stream-converter.js.map +1 -1
- package/dist/infra/claude/types.d.ts +23 -0
- package/dist/infra/claude/types.d.ts.map +1 -1
- package/dist/infra/codex/client.d.ts.map +1 -1
- package/dist/infra/codex/client.js +1 -0
- package/dist/infra/codex/client.js.map +1 -1
- package/dist/infra/codex/types.d.ts +2 -0
- package/dist/infra/codex/types.d.ts.map +1 -1
- package/dist/infra/codex/types.js.map +1 -1
- package/dist/infra/config/configKeyAliases.d.ts +17 -0
- package/dist/infra/config/configKeyAliases.d.ts.map +1 -0
- package/dist/infra/config/configKeyAliases.js +82 -0
- package/dist/infra/config/configKeyAliases.js.map +1 -0
- package/dist/infra/config/configNormalizers.d.ts +7 -6
- package/dist/infra/config/configNormalizers.d.ts.map +1 -1
- package/dist/infra/config/configNormalizers.js +25 -10
- package/dist/infra/config/configNormalizers.js.map +1 -1
- package/dist/infra/config/env/config-env-overrides.d.ts +6 -3
- package/dist/infra/config/env/config-env-overrides.d.ts.map +1 -1
- package/dist/infra/config/env/config-env-overrides.js +5 -194
- package/dist/infra/config/env/config-env-overrides.js.map +1 -1
- package/dist/infra/config/env/config-env-shared.d.ts +16 -0
- package/dist/infra/config/env/config-env-shared.d.ts.map +1 -0
- package/dist/infra/config/env/config-env-shared.js +62 -0
- package/dist/infra/config/env/config-env-shared.js.map +1 -0
- package/dist/infra/config/env/global-current-env-specs.d.ts +3 -0
- package/dist/infra/config/env/global-current-env-specs.d.ts.map +1 -0
- package/dist/infra/config/env/global-current-env-specs.js +63 -0
- package/dist/infra/config/env/global-current-env-specs.js.map +1 -0
- package/dist/infra/config/env/global-legacy-env-specs.d.ts +3 -0
- package/dist/infra/config/env/global-legacy-env-specs.d.ts.map +1 -0
- package/dist/infra/config/env/global-legacy-env-specs.js +122 -0
- package/dist/infra/config/env/global-legacy-env-specs.js.map +1 -0
- package/dist/infra/config/env/project-current-env-specs.d.ts +3 -0
- package/dist/infra/config/env/project-current-env-specs.d.ts.map +1 -0
- package/dist/infra/config/env/project-current-env-specs.js +35 -0
- package/dist/infra/config/env/project-current-env-specs.js.map +1 -0
- package/dist/infra/config/env/project-legacy-env-specs.d.ts +3 -0
- package/dist/infra/config/env/project-legacy-env-specs.d.ts.map +1 -0
- package/dist/infra/config/env/project-legacy-env-specs.js +80 -0
- package/dist/infra/config/env/project-legacy-env-specs.js.map +1 -0
- package/dist/infra/config/global/globalConfigCore.d.ts +4 -0
- package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
- package/dist/infra/config/global/globalConfigCore.js +67 -38
- package/dist/infra/config/global/globalConfigCore.js.map +1 -1
- package/dist/infra/config/global/globalConfigSerializer.js +9 -9
- package/dist/infra/config/global/globalConfigSerializer.js.map +1 -1
- package/dist/infra/config/issuePath.d.ts +2 -0
- package/dist/infra/config/issuePath.d.ts.map +1 -0
- package/dist/infra/config/issuePath.js +6 -0
- package/dist/infra/config/issuePath.js.map +1 -0
- package/dist/infra/config/loaders/agentLoader.d.ts +1 -1
- package/dist/infra/config/loaders/agentLoader.js +3 -3
- package/dist/infra/config/loaders/agentLoader.js.map +1 -1
- package/dist/infra/config/loaders/pieceCategories.d.ts +3 -3
- package/dist/infra/config/loaders/pieceCategories.d.ts.map +1 -1
- package/dist/infra/config/loaders/pieceCategories.js +53 -17
- package/dist/infra/config/loaders/pieceCategories.js.map +1 -1
- package/dist/infra/config/loaders/pieceLoadWarning.d.ts +2 -0
- package/dist/infra/config/loaders/pieceLoadWarning.d.ts.map +1 -0
- package/dist/infra/config/loaders/pieceLoadWarning.js +22 -0
- package/dist/infra/config/loaders/pieceLoadWarning.js.map +1 -0
- package/dist/infra/config/loaders/pieceParser.d.ts.map +1 -1
- package/dist/infra/config/loaders/pieceParser.js +6 -14
- package/dist/infra/config/loaders/pieceParser.js.map +1 -1
- package/dist/infra/config/loaders/pieceResolver.d.ts +25 -22
- package/dist/infra/config/loaders/pieceResolver.d.ts.map +1 -1
- package/dist/infra/config/loaders/pieceResolver.js +80 -72
- package/dist/infra/config/loaders/pieceResolver.js.map +1 -1
- package/dist/infra/config/paths.d.ts +6 -2
- package/dist/infra/config/paths.d.ts.map +1 -1
- package/dist/infra/config/paths.js +11 -3
- package/dist/infra/config/paths.js.map +1 -1
- package/dist/infra/config/project/projectConfig.d.ts +2 -6
- package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
- package/dist/infra/config/project/projectConfig.js +39 -65
- package/dist/infra/config/project/projectConfig.js.map +1 -1
- package/dist/infra/config/project/projectConfigTransforms.d.ts +0 -1
- package/dist/infra/config/project/projectConfigTransforms.d.ts.map +1 -1
- package/dist/infra/config/project/projectConfigTransforms.js +0 -5
- package/dist/infra/config/project/projectConfigTransforms.js.map +1 -1
- package/dist/infra/config/project/projectConfigValidation.d.ts +2 -0
- package/dist/infra/config/project/projectConfigValidation.d.ts.map +1 -0
- package/dist/infra/config/project/projectConfigValidation.js +17 -0
- package/dist/infra/config/project/projectConfigValidation.js.map +1 -0
- package/dist/infra/config/providerOptions.d.ts +6 -1
- package/dist/infra/config/providerOptions.d.ts.map +1 -1
- package/dist/infra/config/providerOptions.js +93 -5
- package/dist/infra/config/providerOptions.js.map +1 -1
- package/dist/infra/config/providerOptionsContract.d.ts +14 -0
- package/dist/infra/config/providerOptionsContract.d.ts.map +1 -0
- package/dist/infra/config/providerOptionsContract.js +80 -0
- package/dist/infra/config/providerOptionsContract.js.map +1 -0
- package/dist/infra/config/resolutionCache.d.ts +3 -0
- package/dist/infra/config/resolutionCache.d.ts.map +1 -1
- package/dist/infra/config/resolutionCache.js +9 -0
- package/dist/infra/config/resolutionCache.js.map +1 -1
- package/dist/infra/config/resolveConfigValue.d.ts +6 -0
- package/dist/infra/config/resolveConfigValue.d.ts.map +1 -1
- package/dist/infra/config/resolveConfigValue.js +97 -16
- package/dist/infra/config/resolveConfigValue.js.map +1 -1
- package/dist/infra/config/resolvedConfig.d.ts +2 -1
- package/dist/infra/config/resolvedConfig.d.ts.map +1 -1
- package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.d.ts +4 -0
- package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.d.ts.map +1 -0
- package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.js +47 -0
- package/dist/infra/config/traced/tracedConfigLegacyEnvAdapter.js.map +1 -0
- package/dist/infra/config/traced/tracedConfigLoader.d.ts +32 -0
- package/dist/infra/config/traced/tracedConfigLoader.d.ts.map +1 -0
- package/dist/infra/config/traced/tracedConfigLoader.js +153 -0
- package/dist/infra/config/traced/tracedConfigLoader.js.map +1 -0
- package/dist/infra/config/traced/tracedConfigRuntimeBridge.d.ts +3 -0
- package/dist/infra/config/traced/tracedConfigRuntimeBridge.d.ts.map +1 -0
- package/dist/infra/config/traced/tracedConfigRuntimeBridge.js +135 -0
- package/dist/infra/config/traced/tracedConfigRuntimeBridge.js.map +1 -0
- package/dist/infra/config/traced/tracedConfigSchema.d.ts +5 -0
- package/dist/infra/config/traced/tracedConfigSchema.d.ts.map +1 -0
- package/dist/infra/config/traced/tracedConfigSchema.js +215 -0
- package/dist/infra/config/traced/tracedConfigSchema.js.map +1 -0
- package/dist/infra/cursor/client.js +1 -1
- package/dist/infra/cursor/client.js.map +1 -1
- package/dist/infra/providers/claude.d.ts +1 -0
- package/dist/infra/providers/claude.d.ts.map +1 -1
- package/dist/infra/providers/claude.js +2 -0
- package/dist/infra/providers/claude.js.map +1 -1
- package/dist/infra/providers/codex.d.ts +1 -0
- package/dist/infra/providers/codex.d.ts.map +1 -1
- package/dist/infra/providers/codex.js +2 -0
- package/dist/infra/providers/codex.js.map +1 -1
- package/dist/infra/providers/copilot.d.ts +1 -0
- package/dist/infra/providers/copilot.d.ts.map +1 -1
- package/dist/infra/providers/copilot.js +1 -0
- package/dist/infra/providers/copilot.js.map +1 -1
- package/dist/infra/providers/cursor.d.ts +1 -0
- package/dist/infra/providers/cursor.d.ts.map +1 -1
- package/dist/infra/providers/cursor.js +1 -0
- package/dist/infra/providers/cursor.js.map +1 -1
- package/dist/infra/providers/mock.d.ts +1 -0
- package/dist/infra/providers/mock.d.ts.map +1 -1
- package/dist/infra/providers/mock.js +1 -0
- package/dist/infra/providers/mock.js.map +1 -1
- package/dist/infra/providers/opencode.d.ts +1 -0
- package/dist/infra/providers/opencode.d.ts.map +1 -1
- package/dist/infra/providers/opencode.js +1 -0
- package/dist/infra/providers/opencode.js.map +1 -1
- package/dist/infra/providers/types.d.ts +1 -0
- package/dist/infra/providers/types.d.ts.map +1 -1
- package/dist/infra/resources/index.d.ts +1 -1
- package/dist/infra/resources/index.js +1 -1
- package/dist/infra/task/display.js +2 -2
- package/dist/infra/task/display.js.map +1 -1
- package/dist/infra/task/index.d.ts +2 -1
- package/dist/infra/task/index.d.ts.map +1 -1
- package/dist/infra/task/index.js +2 -1
- package/dist/infra/task/index.js.map +1 -1
- package/dist/infra/task/listSerializer.d.ts +41 -0
- package/dist/infra/task/listSerializer.d.ts.map +1 -0
- package/dist/infra/task/listSerializer.js +51 -0
- package/dist/infra/task/listSerializer.js.map +1 -0
- package/dist/infra/task/schema.d.ts +208 -12
- package/dist/infra/task/schema.d.ts.map +1 -1
- package/dist/infra/task/schema.js +78 -5
- package/dist/infra/task/schema.js.map +1 -1
- package/dist/infra/task/store.d.ts.map +1 -1
- package/dist/infra/task/store.js +2 -2
- package/dist/infra/task/store.js.map +1 -1
- package/dist/shared/i18n/labels_en.yaml +6 -6
- package/dist/shared/i18n/labels_ja.yaml +6 -6
- package/dist/shared/prompts/en/perform_agent_system_prompt.md +6 -6
- package/dist/shared/prompts/en/perform_builtin_agent_system_prompt.md +1 -1
- package/dist/shared/prompts/en/perform_judge_message.md +1 -1
- package/dist/shared/prompts/en/perform_phase1_message.md +9 -9
- package/dist/shared/prompts/en/perform_phase2_message.md +2 -2
- package/dist/shared/prompts/en/score_instruct_system_prompt.md +7 -7
- package/dist/shared/prompts/en/score_interactive_policy.md +10 -10
- package/dist/shared/prompts/en/score_interactive_system_prompt.md +9 -9
- package/dist/shared/prompts/en/score_retry_system_prompt.md +8 -8
- package/dist/shared/prompts/en/score_summary_system_prompt.md +4 -4
- package/dist/shared/prompts/ja/perform_agent_system_prompt.md +6 -6
- package/dist/shared/prompts/ja/perform_builtin_agent_system_prompt.md +1 -1
- package/dist/shared/prompts/ja/perform_judge_message.md +1 -1
- package/dist/shared/prompts/ja/perform_phase1_message.md +9 -9
- package/dist/shared/prompts/ja/perform_phase2_message.md +2 -2
- package/dist/shared/prompts/ja/score_instruct_system_prompt.md +7 -7
- package/dist/shared/prompts/ja/score_interactive_policy.md +10 -10
- package/dist/shared/prompts/ja/score_interactive_system_prompt.md +9 -9
- package/dist/shared/prompts/ja/score_retry_system_prompt.md +8 -8
- package/dist/shared/prompts/ja/score_summary_system_prompt.md +7 -7
- package/dist/shared/types/provider.d.ts +20 -0
- package/dist/shared/types/provider.d.ts.map +1 -1
- package/dist/shared/ui/StreamDisplay.d.ts.map +1 -1
- package/dist/shared/ui/StreamDisplay.js +2 -0
- package/dist/shared/ui/StreamDisplay.js.map +1 -1
- package/dist/shared/utils/slackWebhook.js +2 -2
- package/dist/shared/utils/slackWebhook.js.map +1 -1
- package/dist/shared/utils/text.d.ts +4 -0
- package/dist/shared/utils/text.d.ts.map +1 -1
- package/dist/shared/utils/text.js +29 -0
- package/dist/shared/utils/text.js.map +1 -1
- package/package.json +3 -2
- package/dist/agents/ai-judge.d.ts +0 -15
- package/dist/agents/ai-judge.d.ts.map +0 -1
- package/dist/agents/ai-judge.js +0 -23
- package/dist/agents/ai-judge.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**T**AKT **A**gent **K**oordination **T**opology — Give your AI coding agents structured review loops, managed prompts, and guardrails — so they deliver quality code, not just code.
|
|
6
6
|
|
|
7
|
-
TAKT runs AI agents (Claude Code, Codex, OpenCode, Cursor, GitHub Copilot CLI) through YAML-defined workflows with built-in review cycles. You talk to AI to define what you want, queue tasks, and let TAKT handle the execution — planning, implementation, multi-stage review, and fix loops — all governed by declarative
|
|
7
|
+
TAKT runs AI agents (Claude Code, Codex, OpenCode, Cursor, GitHub Copilot CLI) through YAML-defined workflows with built-in review cycles. You talk to AI to define what you want, queue tasks, and let TAKT handle the execution — planning, implementation, multi-stage review, and fix loops — all governed by declarative workflow files.
|
|
8
8
|
|
|
9
9
|
TAKT is built with TAKT itself (dogfooding).
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ TAKT is built with TAKT itself (dogfooding).
|
|
|
14
14
|
|
|
15
15
|
**Practical** — A tool for daily development, not demos. Talk to AI to refine requirements, queue tasks, and run them. Worktree isolation on task execution, PR creation, and retry on failure.
|
|
16
16
|
|
|
17
|
-
**Reproducible** — Execution paths are declared in YAML, keeping results consistent.
|
|
17
|
+
**Reproducible** — Execution paths are declared in YAML, keeping results consistent. Workflows are shareable — a workflow built by one team member can be used by anyone else to run the same quality process. Every step is logged in NDJSON for full traceability from task to PR.
|
|
18
18
|
|
|
19
19
|
**Multi-agent** — Orchestrate multiple agents with different personas, permissions, and review criteria. Run parallel reviewers, route failures back to implementers, aggregate results with declarative rules. Prompts are managed as independent facets (persona, policy, knowledge, instruction) that compose freely across workflows ([Faceted Prompting](./docs/faceted-prompting.md)).
|
|
20
20
|
|
|
@@ -45,7 +45,7 @@ npm install -g takt
|
|
|
45
45
|
```
|
|
46
46
|
$ takt
|
|
47
47
|
|
|
48
|
-
Select
|
|
48
|
+
Select workflow:
|
|
49
49
|
❯ 🎼 default (current)
|
|
50
50
|
📁 🚀 Quick Start/
|
|
51
51
|
📁 🎨 Frontend/
|
|
@@ -67,7 +67,7 @@ What would you like to do?
|
|
|
67
67
|
Continue conversation
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
Choosing "Queue as task" saves the task to `.takt/tasks/`. Run `takt run` to execute — TAKT creates an isolated worktree, runs the
|
|
70
|
+
Choosing "Queue as task" saves the task to `.takt/tasks/`. Run `takt run` to execute — TAKT creates an isolated worktree, runs the workflow (plan → implement → review → fix loop), and offers to create a PR when done.
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
# Execute queued tasks
|
|
@@ -81,7 +81,7 @@ takt add #12
|
|
|
81
81
|
takt run
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
> **"Execute now"** runs the
|
|
84
|
+
> **"Execute now"** runs the workflow directly in your current directory without worktree isolation. Useful for quick experiments, but note that changes go straight into your working tree.
|
|
85
85
|
|
|
86
86
|
### Manage results
|
|
87
87
|
|
|
@@ -92,16 +92,16 @@ takt list
|
|
|
92
92
|
|
|
93
93
|
## How It Works
|
|
94
94
|
|
|
95
|
-
TAKT uses a music metaphor — the name itself comes from the German word for "beat" or "baton stroke," used in conducting to keep an orchestra in time.
|
|
95
|
+
TAKT uses a music metaphor — the name itself comes from the German word for "beat" or "baton stroke," used in conducting to keep an orchestra in time. User-facing terminology uses **workflow** and **step**, while the internal canonical names remain **piece** and **movement** for backward compatibility.
|
|
96
96
|
|
|
97
|
-
A
|
|
97
|
+
A workflow is defined by a sequence of steps. Public YAML examples use `steps` and `initial_step`, while legacy `movements` and `initial_movement` are still accepted as compatibility aliases. Each step specifies a persona (who), permissions (what's allowed), and rules (what happens next). Here's a minimal example:
|
|
98
98
|
|
|
99
99
|
```yaml
|
|
100
100
|
name: plan-implement-review
|
|
101
|
-
|
|
101
|
+
initial_step: plan
|
|
102
102
|
max_movements: 10
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
steps:
|
|
105
105
|
- name: plan
|
|
106
106
|
persona: planner
|
|
107
107
|
edit: false
|
|
@@ -127,18 +127,22 @@ movements:
|
|
|
127
127
|
next: implement # ← fix loop
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
Rules determine the next
|
|
130
|
+
Rules determine the next step. `COMPLETE` ends the workflow successfully, `ABORT` ends with failure. See the [Workflow Guide](./docs/pieces.md) for the full schema, parallel steps, and rule condition types.
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
Workflow files live in `workflows/` as the official directory name. TAKT still accepts legacy `pieces/` directories and `--piece` / legacy YAML keys as compatibility input, but normal docs and UI use `workflow` / `step`.
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
When the same workflow name exists in multiple locations, TAKT resolves in this order: `.takt/workflows/` → `.takt/pieces/` → `~/.takt/workflows/` → `~/.takt/pieces/` → builtins.
|
|
135
|
+
|
|
136
|
+
## Recommended Workflows
|
|
137
|
+
|
|
138
|
+
| Workflow | Use Case |
|
|
135
139
|
|-------|----------|
|
|
136
140
|
| `default` | Standard development. Test-first with AI antipattern review and parallel review (architecture + supervisor). |
|
|
137
141
|
| `frontend-mini` | Frontend-focused mini configuration. |
|
|
138
142
|
| `backend-mini` | Backend-focused mini configuration. |
|
|
139
143
|
| `dual-mini` | Frontend + backend mini configuration. |
|
|
140
144
|
|
|
141
|
-
See the [Builtin Catalog](./docs/builtin-catalog.md) for all
|
|
145
|
+
See the [Builtin Catalog](./docs/builtin-catalog.md) for all workflows and personas.
|
|
142
146
|
|
|
143
147
|
## Key Commands
|
|
144
148
|
|
|
@@ -148,7 +152,7 @@ See the [Builtin Catalog](./docs/builtin-catalog.md) for all pieces and personas
|
|
|
148
152
|
| `takt run` | Execute all pending tasks |
|
|
149
153
|
| `takt list` | Manage task branches (merge, retry, instruct, delete) |
|
|
150
154
|
| `takt #N` | Execute GitHub Issue as task |
|
|
151
|
-
| `takt eject` | Copy builtin
|
|
155
|
+
| `takt eject` | Copy builtin workflows/facets for customization |
|
|
152
156
|
| `takt repertoire add` | Install a repertoire package from GitHub |
|
|
153
157
|
|
|
154
158
|
See the [CLI Reference](./docs/cli-reference.md) for all commands and options.
|
|
@@ -177,10 +181,10 @@ See the [Configuration Guide](./docs/configuration.md) for all options, provider
|
|
|
177
181
|
|
|
178
182
|
## Customization
|
|
179
183
|
|
|
180
|
-
### Custom
|
|
184
|
+
### Custom workflows
|
|
181
185
|
|
|
182
186
|
```bash
|
|
183
|
-
takt eject default # Copy builtin to ~/.takt/
|
|
187
|
+
takt eject default # Copy builtin workflow to ~/.takt/workflows/ and edit
|
|
184
188
|
```
|
|
185
189
|
|
|
186
190
|
### Custom personas
|
|
@@ -192,9 +196,9 @@ Create a Markdown file in `~/.takt/personas/`:
|
|
|
192
196
|
You are a code reviewer specialized in security.
|
|
193
197
|
```
|
|
194
198
|
|
|
195
|
-
Reference it in your
|
|
199
|
+
Reference it in your workflow: `persona: my-reviewer`
|
|
196
200
|
|
|
197
|
-
See the [
|
|
201
|
+
See the [Workflow Guide](./docs/pieces.md) and [Agent Guide](./docs/agents.md) for details.
|
|
198
202
|
|
|
199
203
|
## CI/CD
|
|
200
204
|
|
|
@@ -220,25 +224,28 @@ See the [CI/CD Guide](./docs/ci-cd.md) for full setup instructions.
|
|
|
220
224
|
```
|
|
221
225
|
~/.takt/ # Global config
|
|
222
226
|
├── config.yaml # Provider, model, language, etc.
|
|
223
|
-
├──
|
|
227
|
+
├── workflows/ # User workflow definitions
|
|
224
228
|
├── facets/ # User facets (personas, policies, knowledge, etc.)
|
|
225
229
|
└── repertoire/ # Installed repertoire packages
|
|
226
230
|
|
|
227
231
|
.takt/ # Project-level
|
|
228
232
|
├── config.yaml # Project config
|
|
233
|
+
├── workflows/ # Project workflow overrides
|
|
229
234
|
├── facets/ # Project facets
|
|
230
235
|
├── tasks.yaml # Pending tasks
|
|
231
236
|
├── tasks/ # Task specifications
|
|
232
237
|
└── runs/ # Execution reports, logs, context
|
|
233
238
|
```
|
|
234
239
|
|
|
240
|
+
Legacy `pieces/` directories are still read for compatibility, but `workflows/` is the canonical name in current docs and CLI output.
|
|
241
|
+
|
|
235
242
|
## API Usage
|
|
236
243
|
|
|
237
244
|
```typescript
|
|
238
245
|
import { PieceEngine, loadPiece } from 'takt';
|
|
239
246
|
|
|
240
247
|
const config = loadPiece('default');
|
|
241
|
-
if (!config) throw new Error('
|
|
248
|
+
if (!config) throw new Error('Workflow not found');
|
|
242
249
|
|
|
243
250
|
const engine = new PieceEngine(config, process.cwd(), 'My task');
|
|
244
251
|
engine.on('movement:complete', (movement, response) => {
|
|
@@ -254,9 +261,9 @@ await engine.run();
|
|
|
254
261
|
|----------|-------------|
|
|
255
262
|
| [CLI Reference](./docs/cli-reference.md) | All commands and options |
|
|
256
263
|
| [Configuration](./docs/configuration.md) | Global and project settings |
|
|
257
|
-
| [
|
|
264
|
+
| [Workflow Guide](./docs/pieces.md) | Creating and customizing workflows |
|
|
258
265
|
| [Agent Guide](./docs/agents.md) | Custom agent configuration |
|
|
259
|
-
| [Builtin Catalog](./docs/builtin-catalog.md) | All builtin
|
|
266
|
+
| [Builtin Catalog](./docs/builtin-catalog.md) | All builtin workflows and personas |
|
|
260
267
|
| [Faceted Prompting](./docs/faceted-prompting.md) | Prompt design methodology |
|
|
261
268
|
| [Repertoire Packages](./docs/repertoire.md) | Installing and sharing packages |
|
|
262
269
|
| [Task Management](./docs/task-management.md) | Task queuing, execution, isolation |
|
package/builtins/en/config.yaml
CHANGED
|
@@ -34,8 +34,8 @@ language: en # UI language: en | ja
|
|
|
34
34
|
# notification_sound: true # Master switch for sounds
|
|
35
35
|
# notification_sound_events: # Per-event sound toggle (unset means true)
|
|
36
36
|
# iteration_limit: true
|
|
37
|
-
#
|
|
38
|
-
#
|
|
37
|
+
# workflow_complete: true
|
|
38
|
+
# workflow_abort: true
|
|
39
39
|
# run_complete: true
|
|
40
40
|
# run_abort: true
|
|
41
41
|
# logging:
|
|
@@ -82,12 +82,12 @@ language: en # UI language: en | ja
|
|
|
82
82
|
# runtime:
|
|
83
83
|
# prepare: [node, gradle, ./custom-script.sh]
|
|
84
84
|
|
|
85
|
-
#
|
|
86
|
-
#
|
|
85
|
+
# Workflow-level overrides
|
|
86
|
+
# workflow_overrides:
|
|
87
87
|
# quality_gates:
|
|
88
88
|
# - "All tests pass"
|
|
89
89
|
# quality_gates_edit_only: true
|
|
90
|
-
#
|
|
90
|
+
# steps:
|
|
91
91
|
# review:
|
|
92
92
|
# quality_gates:
|
|
93
93
|
# - "No security vulnerabilities"
|
|
@@ -116,8 +116,8 @@ language: en # UI language: en | ja
|
|
|
116
116
|
# Misc
|
|
117
117
|
# bookmarks_file: ~/.takt/preferences/bookmarks.yaml # Bookmark file location
|
|
118
118
|
|
|
119
|
-
#
|
|
120
|
-
#
|
|
119
|
+
# Workflow list / categories
|
|
120
|
+
# enable_builtin_workflows: true # Enable built-in workflows from builtins/{lang}/workflows
|
|
121
121
|
# disabled_builtins:
|
|
122
122
|
# - magi # Built-in piece names to disable
|
|
123
|
-
#
|
|
123
|
+
# workflow_categories_file: ~/.takt/preferences/workflow-categories.yaml # Category definition file
|
|
@@ -10,6 +10,8 @@ Analyze the implementation task and, if decomposition is appropriate, split into
|
|
|
10
10
|
- If few files are involved, or the task is a rename/refactoring, implement in a single part
|
|
11
11
|
|
|
12
12
|
2. If decomposing: prioritize splitting along frontend and backend boundaries
|
|
13
|
+
- **If design references exist and backend changes are not explicitly required, do not decompose.** Visual structure, copy, spacing, and styling are tightly coupled, and splitting them increases design drift risk
|
|
14
|
+
- **If design references exist, keep all UI components of the same screen in the same part.** Do not split headers, filters, cards, banners, and modals of one screen across different parts
|
|
13
15
|
- Splitting between frontend (UI, components, styles) and backend (API, logic, data layer) is the most natural decomposition axis
|
|
14
16
|
- When API contracts (request/response types) are defined, parallel implementation works well
|
|
15
17
|
- When API contracts are undecided, implement backend first in one part and defer frontend
|
|
@@ -24,9 +26,13 @@ Analyze the implementation task and, if decomposition is appropriate, split into
|
|
|
24
26
|
- **Reference-only files** (read-only, modification prohibited)
|
|
25
27
|
- **Implementation task** (what and how to implement)
|
|
26
28
|
- **Completion criteria** (implementation of responsible files is complete)
|
|
29
|
+
- When design references exist, each part instruction must also include:
|
|
30
|
+
- **Design references** (which files are the primary source of truth)
|
|
31
|
+
- **Elements to verify** (layout, copy, color, spacing, and navigation flow)
|
|
27
32
|
- If tests are already written, instruct parts to implement so existing tests pass
|
|
28
|
-
-
|
|
33
|
+
- Refer to Quality Gates and plan any required verification as a dedicated single verification part
|
|
34
|
+
- Do not make parallel implementation parts run duplicate full-build or full-test checks
|
|
29
35
|
|
|
30
36
|
**Constraints:**
|
|
31
|
-
-
|
|
37
|
+
- If tests or build verification are needed, run them as a dedicated single verification part after dependent implementation parts are complete
|
|
32
38
|
- Do not modify files outside your responsibility (causes conflicts)
|
|
@@ -14,6 +14,9 @@ For small tasks, skip the design sections in the report.
|
|
|
14
14
|
1. Understand the task requirements
|
|
15
15
|
- **When reference material points to an external implementation, determine whether it is a "bug fix clue" or a "design approach to adopt". If narrowing scope beyond the reference material's intent, include the rationale in the plan report**
|
|
16
16
|
- **For each requirement, determine "change needed / not needed". If "not needed", cite the relevant code (file:line) as evidence. Claiming "already correct" without evidence is prohibited**
|
|
17
|
+
- **Limit requirements to explicit requirements and implicit requirements that follow directly from them. Do not turn general best practices or future extensions into requirements**
|
|
18
|
+
- **When decomposing requirements, split only as far as needed to make them independently verifiable. Do not jump from decomposition into new requirements**
|
|
19
|
+
- **When adding an implicit requirement, state which explicit requirement it is derived from in the plan report**
|
|
17
20
|
2. Investigate code to resolve unknowns
|
|
18
21
|
3. Identify the impact area
|
|
19
22
|
4. Determine file structure and design patterns (if needed)
|
|
@@ -14,14 +14,19 @@ Review {report:coder-decisions.md} to understand the recorded design decisions.
|
|
|
14
14
|
|
|
15
15
|
**Previous finding tracking (required):**
|
|
16
16
|
- First, extract open findings from "Previous Response"
|
|
17
|
-
- Assign `finding_id` to each finding and classify current status as `new / persists / resolved`
|
|
17
|
+
- Assign `finding_id` to each finding and classify current status as `new / persists / resolved / reopened`
|
|
18
18
|
- If status is `persists`, provide concrete unresolved evidence (file/line)
|
|
19
19
|
|
|
20
20
|
## Judgment Procedure
|
|
21
21
|
|
|
22
|
-
1.
|
|
23
|
-
2.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
1. Read `order.md`, the task body, `plan.md`, and `coder-decisions.md`, then extract the requirements one by one
|
|
23
|
+
2. If a sentence contains multiple conditions or paths, split it into the smallest independently verifiable units
|
|
24
|
+
- Do not keep `A/B`, `global/project`, `JSON/leaf`, `allow/deny`, or `read/write` in a single row
|
|
25
|
+
3. For each requirement, identify the implementing code (file:line)
|
|
26
|
+
4. Classify each requirement as `satisfied / unmet / unverified`
|
|
27
|
+
- Do not mark a row `satisfied` without concrete code evidence
|
|
28
|
+
- Do not mark a row `satisfied` when only part of the cases is covered
|
|
29
|
+
5. List out-of-scope changes and judge whether they are justified or unnecessary
|
|
30
|
+
6. Reclassify prior findings into `new / persists / resolved / reopened`
|
|
31
|
+
7. For each detected issue, classify it as blocking/non-blocking based on the Policy's scope table and judgment rules
|
|
32
|
+
8. If there is even one blocking issue in `new`, `persists`, or `reopened`, judge as REJECT
|
|
@@ -10,7 +10,7 @@ Verify existing evidence for tests, builds, and functional checks, then perform
|
|
|
10
10
|
- Read `order.md` and extract required behavior and prohibitions
|
|
11
11
|
- Read `plan.md` and confirm intended approach and scope
|
|
12
12
|
- Read `coder-decisions.md` and confirm why the implementation moved in that direction
|
|
13
|
-
- Do not treat prior review conclusions as authoritative unless they align with all three and the code
|
|
13
|
+
- Do not treat prior review conclusions or requirements-review conclusions as authoritative unless they align with all three and the code
|
|
14
14
|
3. Whether each task spec requirement has been achieved
|
|
15
15
|
- Extract requirements one by one from the task spec
|
|
16
16
|
- If a single sentence contains multiple conditions or paths, split it into the smallest independently verifiable units
|
|
@@ -31,7 +31,7 @@ Verify existing evidence for tests, builds, and functional checks, then perform
|
|
|
31
31
|
5. Handling tests, builds, and functional checks
|
|
32
32
|
- Do not assume this movement will rerun commands
|
|
33
33
|
- Use only evidence available in this run, such as execution logs, reports, or CI results
|
|
34
|
-
- If evidence is missing, mark the item as unverified
|
|
34
|
+
- If evidence is missing, mark the item as unverified rather than successful
|
|
35
35
|
- If report text conflicts with execution evidence, call out the inconsistency explicitly
|
|
36
36
|
|
|
37
37
|
**Report verification:** Read all reports in the Report Directory and
|
|
@@ -54,6 +54,7 @@ Extract requirements from the task spec and verify each one individually against
|
|
|
54
54
|
|
|
55
55
|
- If any ❌ exists, REJECT is mandatory
|
|
56
56
|
- ✅ without evidence is invalid (must verify against actual code)
|
|
57
|
+
- Do not mark a row as ✅ when only part of the cases is verified
|
|
57
58
|
- Do not rely on plan report's judgment; independently verify each requirement
|
|
58
59
|
|
|
59
60
|
## Re-evaluation of Prior Findings
|
|
@@ -63,6 +64,7 @@ Extract requirements from the task spec and verify each one individually against
|
|
|
63
64
|
|
|
64
65
|
- If final judgment differs from prior review conclusions, explain why with evidence
|
|
65
66
|
- If marking `false_positive` or `overreach`, state whether it conflicts with the task objective, the plan, or both
|
|
67
|
+
- If overturning a requirements-review conclusion, explain why with concrete evidence
|
|
66
68
|
|
|
67
69
|
## Verification Summary
|
|
68
70
|
| Item | Status | Verification method |
|
|
@@ -22,8 +22,9 @@ Analyze the implementation task and, if decomposition is appropriate, split into
|
|
|
22
22
|
- **Implementation task** (what and how to implement)
|
|
23
23
|
- **Completion criteria** (implementation of responsible files is complete)
|
|
24
24
|
- If tests are already written, instruct parts to implement so existing tests pass
|
|
25
|
-
-
|
|
25
|
+
- Refer to Quality Gates and plan any required verification as a dedicated single verification part
|
|
26
|
+
- Do not make parallel implementation parts run duplicate full-build or full-test checks
|
|
26
27
|
|
|
27
28
|
**Constraints:**
|
|
28
|
-
-
|
|
29
|
+
- If tests or build verification are needed, run them as a dedicated single verification part after dependent implementation parts are complete
|
|
29
30
|
- Do not modify files outside your responsibility (causes conflicts)
|
|
@@ -104,6 +104,99 @@ Prohibited patterns:
|
|
|
104
104
|
- Error handling centralized (no try-catch scattered everywhere)
|
|
105
105
|
- Business logic not leaking into Controller/View
|
|
106
106
|
|
|
107
|
+
## Resolve at the Boundary
|
|
108
|
+
|
|
109
|
+
Values such as config, options, providers, permissions, and paths should be resolved at the boundary before entering the core flow. Main processing should assume values are already resolved and should not keep asking config sources.
|
|
110
|
+
|
|
111
|
+
| Criteria | Judgment |
|
|
112
|
+
|----------|----------|
|
|
113
|
+
| Create a resolved object such as `ExecutionContext` or `ResolvedOptions` at the entry point | OK |
|
|
114
|
+
| Orchestration layers handle only resolved values | OK |
|
|
115
|
+
| Lower layers reload global/project/env and resolve the same value again | REJECT |
|
|
116
|
+
| Separate resolution functions exist for display and execution | REJECT |
|
|
117
|
+
| Unresolved options are passed deep and later fixed with `??` | REJECT |
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// REJECT - Execution layer knows config sources directly
|
|
121
|
+
async function executePiece(options) {
|
|
122
|
+
const engine = new PieceEngine({
|
|
123
|
+
provider: options.provider ?? globalConfig.provider,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
class AgentRunner {
|
|
128
|
+
run(step, options) {
|
|
129
|
+
const provider = options.provider ?? resolveProviderFromConfig();
|
|
130
|
+
return getProvider(provider).call();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// OK - Resolve at the boundary, use resolved values internally
|
|
135
|
+
async function executePiece(options) {
|
|
136
|
+
const context = resolveExecutionContext(options);
|
|
137
|
+
const engine = new PieceEngine(context);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
class AgentRunner {
|
|
141
|
+
run(step, options) {
|
|
142
|
+
return getProvider(options.resolvedProvider).call();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Tell, Don't Ask
|
|
148
|
+
|
|
149
|
+
Do not make lower layers inspect config sources and decide for themselves. Upper layers should tell them what to use by passing resolved values. Separate value selection from execution.
|
|
150
|
+
|
|
151
|
+
| Pattern | Judgment |
|
|
152
|
+
|---------|----------|
|
|
153
|
+
| Upper layer passes a value such as `resolvedProvider` | OK |
|
|
154
|
+
| Lower layer inspects `options` and resolves on its own | REJECT |
|
|
155
|
+
| Execution object exposes only `run()` after `setup(config)` | OK |
|
|
156
|
+
| Runtime branches call `getGlobalConfig()` during execution | REJECT |
|
|
157
|
+
|
|
158
|
+
### Anti-Corruption Layer
|
|
159
|
+
|
|
160
|
+
Precedence resolution and external config formats belong in a dedicated boundary layer. Pass only normalized internal values into the core model.
|
|
161
|
+
|
|
162
|
+
| Pattern | Judgment |
|
|
163
|
+
|---------|----------|
|
|
164
|
+
| Encapsulate YAML/env/CLI differences in a resolver/adapter | OK |
|
|
165
|
+
| Domain layer directly handles env var names or config key strings | REJECT |
|
|
166
|
+
| Conversion from external form to internal form is centralized in one place | OK |
|
|
167
|
+
| Same normalization logic is copied in multiple places | REJECT |
|
|
168
|
+
|
|
169
|
+
### Phase Separation
|
|
170
|
+
|
|
171
|
+
Separate input, interpretation, execution, and output into distinct stages. Iterative processing should, as much as possible, receive already interpreted input in bulk and then repeat only execution.
|
|
172
|
+
|
|
173
|
+
| Criteria | Judgment |
|
|
174
|
+
|----------|----------|
|
|
175
|
+
| Convert raw input into a `Resolved*` type at the boundary before entering the core flow | OK |
|
|
176
|
+
| Loop body handles only execution on resolved data | OK |
|
|
177
|
+
| Config/env/options are interpreted inside every iteration | REJECT |
|
|
178
|
+
| Each iteration packs `input -> interpret -> execute -> output` into one function | REJECT |
|
|
179
|
+
| Even when optimization requires incremental handling, interpretation is isolated in a dedicated method | OK |
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
// REJECT - Each iteration also interprets input
|
|
183
|
+
for (const item of items) {
|
|
184
|
+
const resolved = resolveItem(item, rawOptions, config);
|
|
185
|
+
const result = execute(resolved);
|
|
186
|
+
output(result);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// OK - Interpret first, iterations only execute
|
|
190
|
+
const resolvedItems = items.map((item) => resolveItem(item, rawOptions, config));
|
|
191
|
+
|
|
192
|
+
for (const item of resolvedItems) {
|
|
193
|
+
const result = execute(item);
|
|
194
|
+
output(result);
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Even when interpretation must happen incrementally, keep `nextRawInput()`, `resolveInput()`, and `executeResolved()` as separate responsibilities. Performance constraints may compress phases, but must not mix responsibilities.
|
|
199
|
+
|
|
107
200
|
## Code Quality Detection
|
|
108
201
|
|
|
109
202
|
**Explanatory Comment (What/How) Detection Criteria:**
|
|
@@ -117,7 +117,20 @@ Good Projection:
|
|
|
117
117
|
|
|
118
118
|
## Query Side Design
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
Query side operates on an event-driven PubSub model. Projections update Read Models via EventHandler, and queries read from Read Models.
|
|
121
|
+
|
|
122
|
+
Event distribution uses PubSub (via message broker) to deliver events to all instances. Do not use mechanisms that assume delivery to the same instance.
|
|
123
|
+
|
|
124
|
+
- **Subscription Query** (e.g., Axon's `subscriptionQuery()`): delivers change notifications back to the subscribing instance, but in distributed environments or when using third-party event store plugins, the subscribing instance and the notified instance may differ, making it impossible to return the response on the same machine. When synchronous response is needed, use reactive polling to wait for Read Model updates.
|
|
125
|
+
- **Subscribing event processor** (e.g., Axon's `SubscribingEventProcessor`): relies on local event bus subscription, so only the instance that emitted the event receives it. In distributed environments, other instances' Projections are not updated. Use PubSub to distribute events to all instances.
|
|
126
|
+
|
|
127
|
+
| Criteria | Judgment |
|
|
128
|
+
|----------|----------|
|
|
129
|
+
| Using Subscription Query (e.g., Axon's `subscriptionQuery()`) | REJECT. Does not work in distributed environments. Use reactive polling |
|
|
130
|
+
| Using Subscribing event processor (e.g., Axon's `SubscribingEventProcessor`) | REJECT. Local delivery only. Other instances not updated in distributed environments |
|
|
131
|
+
| Controller directly referencing Repository | REJECT. Must go through UseCase layer |
|
|
132
|
+
| Query side referencing Command Model | REJECT |
|
|
133
|
+
| QueryHandler issuing commands | REJECT |
|
|
121
134
|
|
|
122
135
|
Types between layers:
|
|
123
136
|
- `application/query/` - Query result types (e.g., `OrderDetail`)
|
|
@@ -146,7 +159,7 @@ fun handle(query: GetOrderDetailQuery): OrderDetail? {
|
|
|
146
159
|
return OrderDetail(...)
|
|
147
160
|
}
|
|
148
161
|
|
|
149
|
-
// Controller -
|
|
162
|
+
// Controller - synchronous return is fine for simple reads
|
|
150
163
|
@GetMapping("/{id}")
|
|
151
164
|
fun getById(@PathVariable id: String): ResponseEntity<OrderDetailResponse> {
|
|
152
165
|
val detail = queryGateway.query(
|
|
@@ -163,16 +176,62 @@ Structure:
|
|
|
163
176
|
Controller (adapter) → QueryGateway → QueryHandler (application) → Repository
|
|
164
177
|
↓ ↓
|
|
165
178
|
Response.from(detail) OrderDetail
|
|
179
|
+
|
|
180
|
+
Event flow (PubSub):
|
|
181
|
+
Aggregate → Event Bus → Projection(@EventHandler) → Repository(Read Model)
|
|
182
|
+
↑
|
|
183
|
+
QueryHandler reads from here
|
|
166
184
|
```
|
|
167
185
|
|
|
168
186
|
## Eventual Consistency
|
|
169
187
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
|
188
|
+
When synchronous response is needed after command dispatch, use reactive polling to wait for Projection updates.
|
|
189
|
+
|
|
190
|
+
| Criteria | Judgment |
|
|
191
|
+
|----------|----------|
|
|
192
|
+
| Using Subscription Query to wait for Projection updates | REJECT. Does not work in distributed environments. Use reactive polling |
|
|
193
|
+
| UI expects immediate updates | Polling or WebSocket |
|
|
173
194
|
| Consistency delay exceeds tolerance | Reconsider architecture |
|
|
174
195
|
| Compensating transactions undefined | Request failure scenario review |
|
|
175
196
|
|
|
197
|
+
### Reactive Polling
|
|
198
|
+
|
|
199
|
+
Pattern: dispatch command → poll for Projection update completion.
|
|
200
|
+
|
|
201
|
+
```kotlin
|
|
202
|
+
// UseCase: send command → poll for completion
|
|
203
|
+
fun execute(input: PlaceOrderInput): Mono<PlaceOrderOutput> {
|
|
204
|
+
val orderId = UUID.randomUUID().toString()
|
|
205
|
+
return Mono.fromCallable { validatePreConditions(input) }
|
|
206
|
+
.subscribeOn(Schedulers.boundedElastic())
|
|
207
|
+
.flatMap {
|
|
208
|
+
Mono.fromFuture(commandGateway.send<Any>(
|
|
209
|
+
PlaceOrderCommand(orderId, input.customerId, input.items)
|
|
210
|
+
))
|
|
211
|
+
}
|
|
212
|
+
.then(pollForCompletion(orderId))
|
|
213
|
+
.thenReturn(PlaceOrderOutput(orderId))
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Polling: wait for Projection update
|
|
217
|
+
private fun pollForCompletion(orderId: String): Mono<Void> {
|
|
218
|
+
return ReactivePolling.waitFor(
|
|
219
|
+
supplier = { orderRepository.findById(orderId).orElse(null) },
|
|
220
|
+
condition = { it.sagaCompleted || it.status == OrderStatus.CONFIRMED },
|
|
221
|
+
timeout = Duration.ofSeconds(60),
|
|
222
|
+
maxAttempts = 300
|
|
223
|
+
)
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
When polling is appropriate:
|
|
228
|
+
- Need to wait for Saga completion before returning response
|
|
229
|
+
- Need to return created resource ID after command dispatch
|
|
230
|
+
|
|
231
|
+
When polling is not needed:
|
|
232
|
+
- Simple operations that complete with just command dispatch (no result waiting)
|
|
233
|
+
- UI does not require real-time updates
|
|
234
|
+
|
|
176
235
|
## Saga vs EventHandler
|
|
177
236
|
|
|
178
237
|
Saga is used only for "operations between multiple aggregates where contention occurs".
|
|
@@ -9,6 +9,14 @@
|
|
|
9
9
|
### Objective
|
|
10
10
|
{What needs to be achieved}
|
|
11
11
|
|
|
12
|
+
### Decomposed Requirements
|
|
13
|
+
| # | Requirement | Type | Notes |
|
|
14
|
+
|---|-------------|------|-------|
|
|
15
|
+
| 1 | {requirement 1} | Explicit / Implicit | {Notes when a composite requirement was split} |
|
|
16
|
+
|
|
17
|
+
- If a sentence contains multiple conditions, split it into the smallest independently verifiable rows
|
|
18
|
+
- Put parallel expressions such as `A/B`, `global/project`, `JSON/leaf`, `allow/deny`, and `read/write` on separate rows
|
|
19
|
+
|
|
12
20
|
### Reference Material Findings (when reference material exists)
|
|
13
21
|
{Overview of reference implementation's approach and key differences from current implementation}
|
|
14
22
|
|
|
@@ -7,17 +7,19 @@
|
|
|
7
7
|
{Summarize the result in 1-2 sentences}
|
|
8
8
|
|
|
9
9
|
## Requirements Cross-Reference
|
|
10
|
-
| # | Requirement (from task) |
|
|
11
|
-
|
|
12
|
-
| 1 | {requirement 1} |
|
|
10
|
+
| # | Requirement (from task) | Status | Evidence (file:line) | Comment |
|
|
11
|
+
|---|-------------------------|--------|----------------------|---------|
|
|
12
|
+
| 1 | {requirement 1} | Satisfied / Unmet / Unverified | `src/file.ts:42` | {Notes} |
|
|
13
13
|
|
|
14
|
-
- If
|
|
15
|
-
-
|
|
14
|
+
- If a sentence contains multiple conditions, split it into multiple independently verifiable rows
|
|
15
|
+
- If even one `Unmet` row exists, REJECT is mandatory
|
|
16
|
+
- `Satisfied` without evidence is invalid (must be verified in actual code)
|
|
17
|
+
- Do not mark a row `Satisfied` when only part of the cases is covered
|
|
16
18
|
|
|
17
19
|
## Scope Check
|
|
18
|
-
| # | Out-of-scope Change | File | Justification |
|
|
19
|
-
|
|
20
|
-
| 1 | {change not in requirements} | `src/file.ts` | Justified/Unnecessary |
|
|
20
|
+
| # | Out-of-scope Change | File | Justification | Comment |
|
|
21
|
+
|---|---------------------|------|---------------|---------|
|
|
22
|
+
| 1 | {change not in requirements} | `src/file.ts` | Justified / Needs review / Unnecessary | {Reason} |
|
|
21
23
|
|
|
22
24
|
## Current Iteration Findings (new)
|
|
23
25
|
| # | finding_id | family_tag | Category | Location | Issue | Fix Suggestion |
|
|
@@ -19,6 +19,14 @@ Extract requirements from the task spec and verify each one individually against
|
|
|
19
19
|
- Do not mark a row as ✅ when the evidence covers only part of the cases
|
|
20
20
|
- Do not rely on plan report's judgment; independently verify each requirement
|
|
21
21
|
|
|
22
|
+
## Re-evaluation of Prior Findings
|
|
23
|
+
| finding_id | Prior Status | Re-evaluation | Evidence |
|
|
24
|
+
|------------|--------------|---------------|----------|
|
|
25
|
+
| {id} | new / persists / resolved | valid / false_positive / overreach | `src/file.ts:42`, `reports/plan.md` |
|
|
26
|
+
|
|
27
|
+
- If final judgment differs from prior review conclusions, explain why with evidence
|
|
28
|
+
- If marking `false_positive` or `overreach`, state whether it conflicts with the task objective, the plan, or both
|
|
29
|
+
|
|
22
30
|
## Validation Summary
|
|
23
31
|
| Item | Status | Verification Method |
|
|
24
32
|
|------|--------|-------------------|
|
|
@@ -118,8 +118,15 @@ Do not over-interpret the task order. Plan only what is written.
|
|
|
118
118
|
- Don't plan to leave TODO comments. Either do it now, or don't
|
|
119
119
|
- Don't put deferrable decisions in Open Questions. If you can resolve it by reading code, investigate and decide. Only include items that genuinely require user input
|
|
120
120
|
|
|
121
|
+
**Requirement decomposition discipline:**
|
|
122
|
+
- Limit requirements to explicit requirements and implicit requirements that follow directly from them
|
|
123
|
+
- When adding an implicit requirement, be able to state which explicit requirement it comes from
|
|
124
|
+
- Do not turn general best practices, future possibilities, or personal preferences into requirements
|
|
125
|
+
- Decompose requirements only to make them independently verifiable, not to invent new work
|
|
126
|
+
|
|
121
127
|
**Important:**
|
|
122
128
|
**Investigate before planning.** Don't plan without reading existing code.
|
|
123
129
|
**Design simply.** No excessive abstractions or future-proofing. Provide enough direction for implementation without hesitation.
|
|
130
|
+
**Do not jump when decomposing requirements.** Split only as far as needed for verification.
|
|
124
131
|
**Ask all clarification questions at once.** Do not ask follow-up questions in multiple rounds.
|
|
125
132
|
**Verify against knowledge/policy constraints** before specifying implementation approach. Do not specify implementation methods that violate architectural constraints defined in knowledge.
|
|
@@ -20,7 +20,14 @@ You are a requirements fulfillment verifier. You verify that changes satisfy the
|
|
|
20
20
|
## Behavioral Principles
|
|
21
21
|
|
|
22
22
|
- Verify requirements one by one. Never say "broadly satisfied" in aggregate
|
|
23
|
+
- If a sentence contains multiple conditions, split it into the smallest independently verifiable units before judging
|
|
24
|
+
- Do not treat parallel expressions such as `A/B`, `global/project`, `JSON/leaf`, `allow/deny`, or `read/write` as a single requirement
|
|
23
25
|
- Verify in actual code. Do not take "implemented" claims at face value
|
|
26
|
+
- Do not mark a composite requirement satisfied based on only one side of the cases
|
|
27
|
+
- Never write "satisfied" without concrete file:line evidence
|
|
28
|
+
- If evidence is missing, mark it as unverified rather than unimplemented
|
|
24
29
|
- Guard the scope. Question any change not covered by the requirements
|
|
30
|
+
- For out-of-scope changes, judge not only whether they exist but whether they are justified
|
|
25
31
|
- Do not tolerate ambiguity. Flag unclear or underspecified requirements
|
|
26
32
|
- Pay attention to deletions. Confirm that file or code removals are justified by the requirements
|
|
33
|
+
- `plan.md` and `coder-decisions.md` are references, not final evidence; always ground the judgment in actual code and diffs
|