Loading...
Loading...
Use when implementing a Beat change — requires gherkin or proposal artifact to be done first
npx skill4agent add kirkchen/beat apply/beat:design/beat:plan/beat:verify/beat:explore| Superpower | When | Priority |
|---|---|---|
| using-git-worktrees | Verify isolation (should exist from design/plan; creates if not) | MUST |
| test-driven-development | At start, in TDD mode | MUST |
| systematic-debugging | When stuck (3 failed attempts) | SHOULD |
| subagent-driven-development | When tasks.md has multiple independent tasks | SHOULD |
| Thought | Reality |
|---|---|
| "The change is small, I don't need a worktree" | Worktrees protect against contamination. The worktree should already exist from design/plan — verify, don't skip. |
| "I'll write the test after the implementation, same result" | TDD is about design feedback, not just test coverage. Writing tests after loses the design signal. |
| "This is a refactor, TDD doesn't apply" | Refactors need tests most — they prove behavior is preserved. If testing.required is false, TDD is already skipped. |
| "I'll add @covered-by annotations at the end for all scenarios" | Annotations must be added per-scenario immediately after writing the test. Batching them leads to forgetting. |
| "The e2e test setup is too complex, I'll write a unit test instead" | The scenario is tagged @e2e for a reason. If e2e setup is genuinely blocked, announce the blocker and ask — don't silently downgrade. |
| "This @behavior test is obvious, a skeleton is enough" | Every test must be executable. A skeleton that doesn't run is not a test. |
| "These tasks are small, I'll combine them for efficiency" | Each task is bounded for a reason. Merging recreates the oversized-output problem that decomposition solved. One task = one subagent dispatch. |
| "The existing test is roughly correct, no need to update it" | If scenario steps changed, the test must reflect those changes. An old test passing does not mean the new behavior is correct. |
| "I'll create a new test file, it's faster" | If @covered-by already points to an existing test, creating a new file breaks traceability. Update the existing test. |
@covered-by@covered-bydesign.mdreferences/adr-format.mdreferences/architecture-format.mddigraph apply {
"Select change, read artifacts" [shape=box];
"Invoke using-git-worktrees" [shape=box, style=bold];
"testing.required false?" [shape=diamond];
"No-test mode" [shape=box];
"Invoke test-driven-development" [shape=box, style=bold];
"Gherkin done?" [shape=diamond];
"Gherkin-driven" [shape=box];
"Proposal-driven" [shape=box];
"tasks.md exists?" [shape=diamond];
"Has Task N headings?" [shape=diamond];
"Executor mode\nfollow tasks exactly" [shape=box];
"Planner mode\nextract scenarios/criteria" [shape=box];
"Implementation loop" [shape=box];
"All tasks complete" [shape=doublecircle];
"Select change, read artifacts" -> "Invoke using-git-worktrees";
"Invoke using-git-worktrees" -> "testing.required false?";
"testing.required false?" -> "No-test mode" [label="yes"];
"testing.required false?" -> "Invoke test-driven-development" [label="no"];
"No-test mode" -> "Gherkin done?";
"Invoke test-driven-development" -> "Gherkin done?";
"Gherkin done?" -> "Gherkin-driven" [label="yes"];
"Gherkin done?" -> "Proposal-driven" [label="gherkin skipped"];
"Gherkin-driven" -> "tasks.md exists?";
"Proposal-driven" -> "tasks.md exists?";
"tasks.md exists?" -> "Has Task N headings?" [label="yes"];
"tasks.md exists?" -> "Planner mode\nextract scenarios/criteria" [label="no"];
"Has Task N headings?" -> "Executor mode\nfollow tasks exactly" [label="yes"];
"Has Task N headings?" -> "Planner mode\nextract scenarios/criteria" [label="no"];
"Executor mode\nfollow tasks exactly" -> "Implementation loop";
"Planner mode\nextract scenarios/criteria" -> "Implementation loop";
"Implementation loop" -> "All tasks complete";
}beat/changes/archive/references/status-schema.mdgherkinstatus: donegherkinstatus: skippedproposalstatus: done/beat:designproposal.mdfeatures/*.featuredesign.mdtasks.mdbeat/config.yamlreferences/config-schema.mdtesting.required: falsetesting.behavior@behaviortesting.e2e@e2etesting.frameworktesting.behaviortestingtesting.required: truebeat/features/.feature.origstatus.yamlgherkin.modifiedbeat/changes/<name>/features/npx cucumber-js beat/features beat/changes/<name>/features### Task N:- [ ]## Implementing: <change-name>
### Drive mode: gherkin-driven / proposal-driven
### Execution mode: executor / planner
### Tasks/Scenarios to implement:
1. [source] <name>
2. [source] <name>
...testing.behaviortesting.e2ereferences/testing-conventions.md@covered-by@covered-by@covered-by@e2etesting.e2e@feature@scenario@behavior@behaviortesting.behavior@feature: <feature-filename>.feature
@scenario: <exact scenario name>//#@covered-by@behavior @happy-path
# @covered-by: <relative path to test file>
Scenario: <name>@scenario# @feature# @scenarioreferences/testing-conventions.mdreferences/testing-conventions.md- [ ]- [x]@e2e@feature@scenario# @covered-by: <path>@behavior@feature@scenario# @covered-by: <path>@e2etesting.e2e@e2estatus.yamlverify## Implementation Complete
**Change:** <name>
**Scenarios:** N/N implemented with tests
Suggested next steps:
- `/beat:verify` -- validate implementation against artifacts
- `/beat:archive` -- sync features and archive the changetesting.required@e2e@behavior@feature@scenario@covered-bytesting.behaviortesting.e2etesting.required: falsetesting.behaviortesting.e2e@behavior@covered-by@behavior@feature@scenario