@eltonssouza/development-utility-kit 0.10.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/.claude/agents/README.md +24 -0
- package/.claude/agents/analyst.md +198 -0
- package/.claude/agents/backend-developer.md +126 -0
- package/.claude/agents/brain-keeper.md +229 -0
- package/.claude/agents/code-reviewer.md +181 -0
- package/.claude/agents/database-engineer.md +94 -0
- package/.claude/agents/devops-engineer.md +141 -0
- package/.claude/agents/frontend-developer.md +97 -0
- package/.claude/agents/gate-keeper.md +118 -0
- package/.claude/agents/migrator.md +291 -0
- package/.claude/agents/mobile-developer.md +80 -0
- package/.claude/agents/n8n-specialist.md +94 -0
- package/.claude/agents/product-owner.md +115 -0
- package/.claude/agents/qa-engineer.md +232 -0
- package/.claude/agents/release-engineer.md +204 -0
- package/.claude/agents/scaffold.md +87 -0
- package/.claude/agents/security-engineer.md +199 -0
- package/.claude/agents/sprint-runner.md +46 -0
- package/.claude/agents/stack-resolver.md +104 -0
- package/.claude/agents/tech-lead.md +182 -0
- package/.claude/agents/update-template.md +54 -0
- package/.claude/agents/ux-designer.md +118 -0
- package/.claude/hooks/flow-guard.js +261 -0
- package/.claude/hooks/flow-state.js +197 -0
- package/.claude/local/CLAUDE.md +71 -0
- package/.claude/settings.json +55 -0
- package/.claude/skills/README.md +331 -0
- package/.claude/skills/active-project/SKILL.md +131 -0
- package/.claude/skills/api-integration-test/SKILL.md +84 -0
- package/.claude/skills/auto-test-guard/SKILL.md +239 -0
- package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
- package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
- package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
- package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
- package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
- package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
- package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
- package/.claude/skills/brain-keeper/SKILL.md +62 -0
- package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
- package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
- package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
- package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
- package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
- package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
- package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
- package/.claude/skills/brain-keeper/templates/README.md +51 -0
- package/.claude/skills/brain-keeper/templates/adr.md +40 -0
- package/.claude/skills/brain-keeper/templates/bug.md +35 -0
- package/.claude/skills/brain-keeper/templates/daily.md +38 -0
- package/.claude/skills/brain-keeper/templates/feature.md +62 -0
- package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
- package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
- package/.claude/skills/caveman/SKILL.md +189 -0
- package/.claude/skills/create-stack-pack/SKILL.md +281 -0
- package/.claude/skills/grill-me/SKILL.md +80 -0
- package/.claude/skills/pair-debug/SKILL.md +288 -0
- package/.claude/skills/prd-ready-check/SKILL.md +86 -0
- package/.claude/skills/project-manager/SKILL.md +334 -0
- package/.claude/skills/quality-standards/SKILL.md +203 -0
- package/.claude/skills/quick-feature/SKILL.md +266 -0
- package/.claude/skills/run-sprint/SKILL.md +41 -0
- package/.claude/skills/scaffold/SKILL.md +60 -0
- package/.claude/skills/stack-discovery/SKILL.md +161 -0
- package/.claude/skills/test-coverage-auditor/SKILL.md +87 -0
- package/.claude/skills/to-issues/SKILL.md +163 -0
- package/.claude/skills/to-prd/SKILL.md +130 -0
- package/.claude/skills/update-template/SKILL.md +256 -0
- package/.claude/stacks/CODEOWNERS +30 -0
- package/.claude/stacks/README.md +97 -0
- package/.claude/stacks/_template.md +116 -0
- package/.claude/stacks/dotnet/aspire-9.md +528 -0
- package/.claude/stacks/go/gin-1.10.md +570 -0
- package/.claude/stacks/java/spring-boot-3.md +376 -0
- package/.claude/stacks/java/spring-boot-4.md +438 -0
- package/.claude/stacks/node/express-5.md +538 -0
- package/.claude/stacks/python/django-5.md +483 -0
- package/.claude/stacks/python/fastapi-0.115.md +522 -0
- package/.claude/stacks/typescript/angular-18.md +420 -0
- package/.claude/stacks/typescript/angular-19.md +397 -0
- package/.claude/stacks/typescript/angular-21.md +494 -0
- package/CLAUDE.md +472 -0
- package/README.md +412 -0
- package/bin/cli.js +848 -0
- package/bin/lib/adr.js +146 -0
- package/bin/lib/backup.js +62 -0
- package/bin/lib/detect-stack.js +476 -0
- package/bin/lib/doctor.js +527 -0
- package/bin/lib/help.js +328 -0
- package/bin/lib/identity.js +108 -0
- package/bin/lib/lint-allowlist.json +15 -0
- package/bin/lib/lint.js +798 -0
- package/bin/lib/local-dir.js +68 -0
- package/bin/lib/manifest.js +236 -0
- package/bin/lib/sync-all.js +394 -0
- package/bin/lib/version-check.js +398 -0
- package/dashboard/db.js +321 -0
- package/dashboard/package.json +22 -0
- package/dashboard/public/app.js +853 -0
- package/dashboard/public/content/docs/agents-reference.en.md +911 -0
- package/dashboard/public/content/docs/architecture-overview.en.md +252 -0
- package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
- package/dashboard/public/content/docs/cli-reference.en.md +538 -0
- package/dashboard/public/content/docs/git-flow.en.md +525 -0
- package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
- package/dashboard/public/content/docs/hooks-reference.en.md +404 -0
- package/dashboard/public/content/docs/pipeline.en.md +414 -0
- package/dashboard/public/content/docs/plugins.en.md +289 -0
- package/dashboard/public/content/docs/quality-gate.en.md +315 -0
- package/dashboard/public/content/docs/skills-reference.en.md +484 -0
- package/dashboard/public/content/docs/stack-rules.en.md +362 -0
- package/dashboard/public/content/docs/troubleshooting.en.md +565 -0
- package/dashboard/public/content/manifest.json +114 -0
- package/dashboard/public/content/manual/backend.en.md +1053 -0
- package/dashboard/public/content/manual/existing-project.en.md +848 -0
- package/dashboard/public/content/manual/frontend.en.md +1008 -0
- package/dashboard/public/content/manual/fullstack.en.md +1459 -0
- package/dashboard/public/content/manual/mobile.en.md +837 -0
- package/dashboard/public/content/manual/quickstart.en.md +169 -0
- package/dashboard/public/index.html +217 -0
- package/dashboard/public/style.css +857 -0
- package/dashboard/public/vendor/marked.min.js +69 -0
- package/dashboard/rtk.js +143 -0
- package/dashboard/server-app.js +421 -0
- package/dashboard/server.js +104 -0
- package/dashboard/test/sprint1.test.js +406 -0
- package/dashboard/test/sprint2.test.js +571 -0
- package/dashboard/test/sprint3.test.js +560 -0
- package/package.json +33 -0
- package/scripts/hooks/subagent-telemetry.sh +14 -0
- package/scripts/hooks/telemetry-writer.js +250 -0
- package/scripts/latest-versions.json +56 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quick-feature
|
|
3
|
+
description: Fast-lane for small/medium features that don't justify the full grill-me → to-prd → to-issues → analyst → run-sprint pipeline. Use when the requirement is concrete enough that a 5-question discovery interview would be friction, not value. Examples: "add a new field to the Product DTO", "fix the search to be case-insensitive", "create endpoint to export sales as CSV", "add pagination to the orders list", "add a confirm dialog before delete". Triggers on "quick feature", "atalho", "fast-lane", "feature pequena", "ajuste rápido", "small feature", "tarefa pequena". Generates a minimal PLAN_*.md (1 sprint, 1-3 tasks, goal-ready DoD) directly from the user's description — no discovery, no PRD, no issues — and hands off to run-sprint. Do NOT use for new bounded contexts, new domain concepts, cross-cutting refactors, or features requiring architectural decisions (those still need grill-me + analyst + ADR). Do NOT use to skip the senior+ gate — gate-keeper still runs at end-of-task. PT triggers: 'feature rápida', 'tarefa pequena', 'ajuste rápido', 'pula a entrevista', 'só vai e faz', 'quick feature', 'atalho'.
|
|
4
|
+
tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Quick Feature — Fast-lane for small features
|
|
9
|
+
|
|
10
|
+
> **Bypass authorized only for low-risk, well-scoped work.** The full pipeline (`grill-me → to-prd → to-issues → analyst → run-sprint`) exists to surface hidden requirements and force discovery. For small features where the requirement is already concrete, that pipeline is friction. This skill is the audited bypass: it generates a minimal PLAN, dispatches `run-sprint`, and lets `gate-keeper` do its job at the end.
|
|
11
|
+
|
|
12
|
+
Always respond in American English.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. When to trigger
|
|
17
|
+
|
|
18
|
+
- "quick feature: <description>"
|
|
19
|
+
- "atalho: <descrição>"
|
|
20
|
+
- "feature pequena: <X>", "tarefa pequena: <X>", "ajuste rápido"
|
|
21
|
+
- "pula a entrevista, é simples"
|
|
22
|
+
- "só vai e faz: <X>"
|
|
23
|
+
- "small feature", "fast-lane"
|
|
24
|
+
- Examples that fit:
|
|
25
|
+
- "add a new field `description` to ProductRequest DTO with validation"
|
|
26
|
+
- "fix the product search to be case-insensitive"
|
|
27
|
+
- "add CSV export to the sales list page"
|
|
28
|
+
- "add a confirmation dialog before deleting an order"
|
|
29
|
+
- "expose a new GET endpoint that returns count by status"
|
|
30
|
+
|
|
31
|
+
## 2. When NOT to trigger
|
|
32
|
+
|
|
33
|
+
This skill is **NOT** for:
|
|
34
|
+
|
|
35
|
+
- **New bounded context** or new domain concept → `grill-me` + `to-prd` + `analyst` (full pipeline).
|
|
36
|
+
- **Cross-cutting refactor** (changing pattern, splitting monolith, redesigning API) → `tech-lead` + ADR.
|
|
37
|
+
- **Architectural decision** (Kafka vs SQS, Hexagonal vs Clean, new lib choice) → `tech-lead` + ADR.
|
|
38
|
+
- **Feature touching > 5 files or > 2 bounded contexts** → use full pipeline; it's not small.
|
|
39
|
+
- **Ambiguous requirements** (you can phrase 3+ different things from the prompt) → `grill-me` instead.
|
|
40
|
+
- **Bug in production** → `pair-debug` (hypothesis-driven), not this.
|
|
41
|
+
- **Performance regression without clear cause** → `pair-debug` + `tech-lead`.
|
|
42
|
+
|
|
43
|
+
When in doubt → full pipeline. Bypass exists for clear cases; ambiguity is the signal to NOT bypass.
|
|
44
|
+
|
|
45
|
+
## 3. Flow
|
|
46
|
+
|
|
47
|
+
### Step 1 — Confirm scope is "small"
|
|
48
|
+
|
|
49
|
+
Apply the 4-question sanity check (silent, do not ask the user):
|
|
50
|
+
|
|
51
|
+
1. Is the requirement concrete enough to phrase as a single user story?
|
|
52
|
+
2. Does it touch ≤ 5 files in a single bounded context?
|
|
53
|
+
3. Does it NOT require an ADR (no pattern change, no new dependency)?
|
|
54
|
+
4. Are inputs/outputs/validation already implied by existing code patterns?
|
|
55
|
+
|
|
56
|
+
If any answer is **no**, **stop and instruct** the user to use the full pipeline (`grill me sobre <X>`). Do not generate the PLAN.
|
|
57
|
+
|
|
58
|
+
### Stage 0 — Stack pre-resolution (per ADR-026 Layer 1)
|
|
59
|
+
|
|
60
|
+
> **MANDATORY after Step 1 sanity check passes and BEFORE Step 2 grounding.** Resolves the project's stack so every downstream dispatch (`sprint-runner` → developers, `qa-engineer`, `gate-keeper`) receives the correct knowledge pack inline in its prompt. Avoids re-resolution in `run-sprint` (optimization: resolve once, propagate).
|
|
61
|
+
|
|
62
|
+
Steps:
|
|
63
|
+
|
|
64
|
+
a) Invoke `stack-resolver` via Task tool:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
Task(
|
|
68
|
+
subagent_type: "stack-resolver",
|
|
69
|
+
description: "Resolve stack for project at CWD",
|
|
70
|
+
prompt: "resolve stack for project at CWD"
|
|
71
|
+
)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
b) Parse the first line of `stack-resolver` output:
|
|
75
|
+
|
|
76
|
+
- **`[STACK: <lang>/<framework>-<major> | PACK: loaded]`** — extract the full `STACK CONTEXT` block from the response. Store it in memory as `STACK_CONTEXT_BLOCK` for use in Step 4 dispatch.
|
|
77
|
+
- **`[STACK: <lang>/<framework>-<major> | PACK: none]`** — pack missing. Dispatch the `create-stack-pack` skill conversationally:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Stack pack ausente para `<lang>/<framework>-<major>`. Disparando `create-stack-pack` para gerar agora; depois repito Stage 0.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Once the pack is created, repeat Stage 0a.
|
|
84
|
+
|
|
85
|
+
c) `STACK_CONTEXT_BLOCK` is now ready to inject as a prompt prefix into Step 4 dispatch (and any in-flow Task call this skill makes).
|
|
86
|
+
|
|
87
|
+
If `stack-resolver` cannot determine the stack (no `## Project Identity` in CLAUDE.md, unparseable `Primary stack`), abort with a clear message:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
Não consegui resolver a stack do projeto. Preencha a seção `## Project Identity` da CLAUDE.md com `Primary stack: <lang> <version> + <framework> <version>` e tente de novo.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Step 2 — Ground in the codebase
|
|
94
|
+
|
|
95
|
+
Read existing similar code via `Read`, `Glob`, `Grep`:
|
|
96
|
+
- For backend: find an analogous endpoint/use case/service.
|
|
97
|
+
- For frontend: find an analogous component/feature folder.
|
|
98
|
+
- For database: find existing migration patterns + naming.
|
|
99
|
+
|
|
100
|
+
State to the user in 2-3 lines what you found (anchoring the work in concrete files).
|
|
101
|
+
|
|
102
|
+
### Step 3 — Generate minimal PLAN
|
|
103
|
+
|
|
104
|
+
Write `docs/plans/PLAN_<slug>.md` with this slim structure:
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+
# PLAN — <feature title>
|
|
108
|
+
|
|
109
|
+
- **Type**: quick-feature (fast-lane, bypassed discovery)
|
|
110
|
+
- **Date**: <ISO>
|
|
111
|
+
- **Estimated effort**: S (small, 1-3 tasks, ≤ 1 sprint)
|
|
112
|
+
- **Bounded context**: <module/feature>
|
|
113
|
+
- **Anchored in**: <list of existing files used as reference>
|
|
114
|
+
- **Stack**: <lang>/<framework>-<major> (from Stage 0)
|
|
115
|
+
|
|
116
|
+
## 1. User story (single, prose)
|
|
117
|
+
|
|
118
|
+
As a <persona>, I want <capability>, so that <value>.
|
|
119
|
+
|
|
120
|
+
## 2. Acceptance criteria (Given/When/Then)
|
|
121
|
+
|
|
122
|
+
- Given <state>, When <action>, Then <result>.
|
|
123
|
+
- (1-3 criteria — happy path + main edge case)
|
|
124
|
+
|
|
125
|
+
## 3. Sprint 1 — Tasks
|
|
126
|
+
|
|
127
|
+
### Task 1.1 — <verb + noun>
|
|
128
|
+
- **Layer**: backend|frontend|migration|test
|
|
129
|
+
- **Files touched** (expected): <list>
|
|
130
|
+
- **Definition of Done** (goal-ready):
|
|
131
|
+
- `<command>` returns exit 0
|
|
132
|
+
- file `<path>` contains `<assertion>`
|
|
133
|
+
- test `<TestClass#method>` passes
|
|
134
|
+
|
|
135
|
+
### Task 1.2 — ...
|
|
136
|
+
|
|
137
|
+
### Task 1.3 — ... (optional)
|
|
138
|
+
|
|
139
|
+
## 4. Out of scope (explicit)
|
|
140
|
+
|
|
141
|
+
- <thing user might expect but isn't included>
|
|
142
|
+
- (1-3 items to prevent scope creep)
|
|
143
|
+
|
|
144
|
+
## 5. /goal block
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
/goal "PLAN_<slug>.md Sprint 1 is done when:
|
|
148
|
+
1. <DoD task 1.1 verbatim>
|
|
149
|
+
2. <DoD task 1.2 verbatim>
|
|
150
|
+
3. ./mvnw verify returns exit 0
|
|
151
|
+
4. npm test -- --watchAll=false returns exit 0
|
|
152
|
+
5. gate-keeper returns GREEN on the new code
|
|
153
|
+
"
|
|
154
|
+
```
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Step 4 — Hand off to run-sprint
|
|
158
|
+
|
|
159
|
+
Dispatch via Task tool, prefixing the prompt with the `STACK_CONTEXT_BLOCK` captured in Stage 0:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
Task(
|
|
163
|
+
subagent_type: "sprint-runner",
|
|
164
|
+
description: "Execute Sprint 1 of PLAN_<slug>.md (quick-feature fast-lane)",
|
|
165
|
+
prompt: """<STACK_CONTEXT_BLOCK from Stage 0>
|
|
166
|
+
|
|
167
|
+
caller: quick-feature
|
|
168
|
+
plan_path: docs/plans/PLAN_<slug>.md
|
|
169
|
+
sprint: 1
|
|
170
|
+
|
|
171
|
+
This PLAN was generated via the quick-feature fast-lane skill — bypassed grill-me/to-prd/to-issues. Treat it as a normal PLAN for execution purposes. TDD is still mandatory (qa-engineer before developer). gate-keeper still validates senior+ thresholds at end-of-task.
|
|
172
|
+
|
|
173
|
+
Stack already resolved upstream; reuse the STACK CONTEXT above when dispatching to backend-developer / frontend-developer / qa-engineer / gate-keeper instead of re-running stack-resolver."""
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Step 5 — Done
|
|
178
|
+
|
|
179
|
+
After `run-sprint` returns GREEN, suggest `brain-keeper` to register the feature:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Próximo passo: `registra no cérebro` (brain-keeper salva docs/brain/features/<slug>.md + daily note).
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## 4. Inviolable rules
|
|
186
|
+
|
|
187
|
+
1. **Sanity check in Step 1 is non-negotiable.** Bypass exists for clear cases; ambiguity = full pipeline.
|
|
188
|
+
2. **Stage 0 stack pre-resolution is non-negotiable.** No dispatch to `run-sprint` without `STACK_CONTEXT_BLOCK` from `stack-resolver` (per ADR-026 Layer 1).
|
|
189
|
+
3. **No skip of senior+ gate.** `gate-keeper` runs at end of every task in `run-sprint`, even via fast-lane.
|
|
190
|
+
4. **TDD remains mandatory.** `sprint-runner` still spawns `qa-engineer` to write failing tests before the developer.
|
|
191
|
+
5. **No ADR-level decisions inside quick-feature.** If during execution an architectural question surfaces, `sprint-runner` escalates to `tech-lead`.
|
|
192
|
+
6. **PLAN is goal-ready.** DoD must reference concrete commands/files/tests verifiable by Claude Code's `/goal` evaluator.
|
|
193
|
+
7. **Persist always.** Even fast-lane writes `PLAN_<slug>.md` — auditability is non-negotiable.
|
|
194
|
+
|
|
195
|
+
## 5. Interface with other skills/agents
|
|
196
|
+
|
|
197
|
+
- `stack-resolver` — invoked in Stage 0 to resolve project stack and load knowledge pack (ADR-026 Layer 1).
|
|
198
|
+
- `create-stack-pack` — invoked from Stage 0 when pack is missing for the declared stack.
|
|
199
|
+
- `grill-me` — alternative entry for ambiguous features. Use it when sanity check fails.
|
|
200
|
+
- `analyst` — accepts quick-feature PLAN as valid seed (via `caller: quick-feature` signal in Task prompt; same exemption as `caller: sprint-runner|autonomous`).
|
|
201
|
+
- `sprint-runner` — executes the generated PLAN normally; receives `STACK_CONTEXT_BLOCK` inline in its prompt to skip its own re-resolution.
|
|
202
|
+
- `gate-keeper` — runs senior+ gate end-of-task regardless of how PLAN was produced.
|
|
203
|
+
- `brain-keeper` — registers history post-sprint.
|
|
204
|
+
|
|
205
|
+
## 6. Examples
|
|
206
|
+
|
|
207
|
+
### Example A — adding a field
|
|
208
|
+
|
|
209
|
+
User: `quick-feature: adicionar campo description em ProductRequest com validação NotBlank Size max 500`
|
|
210
|
+
|
|
211
|
+
Skill output (after Stage 0 + Step 2 grounding):
|
|
212
|
+
- Stage 0: `stack-resolver` returned `[STACK: java/spring-boot-4 | PACK: loaded]`. Loaded `.claude/stacks/java/spring-boot-4.md` (record DTO + Bean Validation + jakarta.validation).
|
|
213
|
+
- Identified existing: `application/dto/ProductRequest.java` (current fields: name, price)
|
|
214
|
+
- Identified existing: `web/controller/ProductController.java` (uses @Valid)
|
|
215
|
+
- PLAN with 2 tasks:
|
|
216
|
+
- Task 1.1: add `@NotBlank @Size(max=500) String description` field + update tests
|
|
217
|
+
- Task 1.2: update OpenAPI spec + regenerate frontend types via `openapi-typescript`
|
|
218
|
+
|
|
219
|
+
Step 4 dispatch:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
Task(
|
|
223
|
+
subagent_type: "sprint-runner",
|
|
224
|
+
description: "Execute Sprint 1 of PLAN_product-description-field.md (quick-feature fast-lane)",
|
|
225
|
+
prompt: """[STACK: java/spring-boot-4 | PACK: loaded]
|
|
226
|
+
|
|
227
|
+
STACK CONTEXT
|
|
228
|
+
- Language: Java 25
|
|
229
|
+
- Framework: Spring Boot 4.0.x
|
|
230
|
+
- DTO pattern: record (immutable)
|
|
231
|
+
- Validation: jakarta.validation (@Valid, @NotBlank, @Size)
|
|
232
|
+
- (...pack body inlined...)
|
|
233
|
+
|
|
234
|
+
caller: quick-feature
|
|
235
|
+
plan_path: docs/plans/PLAN_product-description-field.md
|
|
236
|
+
sprint: 1
|
|
237
|
+
(...)"""
|
|
238
|
+
)
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Example B — UI ajuste
|
|
242
|
+
|
|
243
|
+
User: `feature pequena: adicionar dialog de confirmação antes de deletar pedido`
|
|
244
|
+
|
|
245
|
+
Skill output:
|
|
246
|
+
- Stage 0: `stack-resolver` returned `[STACK: typescript/angular-21 | PACK: loaded]`.
|
|
247
|
+
- Identified existing: `features/orders/order-list.component.ts` (uses NgbModal already)
|
|
248
|
+
- PLAN with 2 tasks:
|
|
249
|
+
- Task 1.1: extrair ConfirmDialogComponent reutilizável em `shared/components/` (3 arquivos separados conforme pack Angular 21)
|
|
250
|
+
- Task 1.2: integrar em `OrderListComponent.delete()` + teste Jest + a11y
|
|
251
|
+
|
|
252
|
+
### Example C — caso que NÃO encaixa
|
|
253
|
+
|
|
254
|
+
User: `quick-feature: refatorar o módulo de pagamento pra usar Strategy Pattern`
|
|
255
|
+
|
|
256
|
+
Skill output:
|
|
257
|
+
> Sanity check falhou (Q3: requer ADR sobre pattern). Use o fluxo completo: `grill me sobre refatorar pagamento` → produz DISCOVERY → ADR de pattern → PLAN normal. Esta skill é só para features pequenas sem decisão arquitetural.
|
|
258
|
+
|
|
259
|
+
### Example D — pack ausente
|
|
260
|
+
|
|
261
|
+
User: `quick-feature: adicionar endpoint /health customizado`
|
|
262
|
+
|
|
263
|
+
Skill output (Stage 0):
|
|
264
|
+
- `stack-resolver` returned `[STACK: python/fastapi-0.115 | PACK: none]`.
|
|
265
|
+
- Disparando `create-stack-pack` para gerar `.claude/stacks/python/fastapi-0.md` (conversa de 5-8 perguntas).
|
|
266
|
+
- Após pack criado, repito Stage 0a → `PACK: loaded` → segue para Step 2.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: run-sprint
|
|
3
|
+
description: Use when an approved development plan exists (in docs/plans/PLAN_*.md) and the user asks to execute a specific sprint. Triggers on phrases like "run sprint 1", "execute sprint 2 of plan X", "implement the current sprint tasks", "let's code this sprint", "take PLAN_product_registration and run sprint 1". This skill does NOT create a plan — it CONSUMES a plan. To create a plan use analyst. This skill does NOT validate for PRD — it implements. For the final gate use prd-ready-check. Do NOT use to create a development plan (use analyst) nor to validate PRD-readiness (use prd-ready-check). PT triggers: 'roda a sprint 1', 'executa a sprint', 'implementa as tarefas da sprint', 'bora codar essa sprint'.
|
|
4
|
+
tools: Read, Glob, Bash(node:*)
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# run-sprint — Thin trigger (ADR-042)
|
|
9
|
+
|
|
10
|
+
Capture intent and delegate to `sprint-runner` agent. All execution logic lives there.
|
|
11
|
+
|
|
12
|
+
## Input
|
|
13
|
+
|
|
14
|
+
- **Plan**: `docs/plans/PLAN_<NAME>.md` (mandatory).
|
|
15
|
+
- **Sprint**: number or name (mandatory). Ask if missing.
|
|
16
|
+
|
|
17
|
+
## Step 0 — Harness self-dev bypass (ADR-046)
|
|
18
|
+
|
|
19
|
+
If `package.json` at repo root has `name: "@eltonssouza/development-utility-kit"` OR `bin/cli.js` exists at root:
|
|
20
|
+
- Skip `stack-resolver`.
|
|
21
|
+
- Pass `harness_self_dev: true` to the sprint-runner Task so it uses `duk lint` + smoke tests as the gate.
|
|
22
|
+
|
|
23
|
+
Otherwise: sprint-runner handles stack resolution internally (Stage 0 of its flow).
|
|
24
|
+
|
|
25
|
+
## Dispatch
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Task(
|
|
29
|
+
subagent_type="sprint-runner",
|
|
30
|
+
description="execute sprint <N> of <PLAN>",
|
|
31
|
+
prompt="""
|
|
32
|
+
Plan: <plan path>
|
|
33
|
+
Sprint: <sprint number or name>
|
|
34
|
+
Harness self-dev: <true | false>
|
|
35
|
+
|
|
36
|
+
Execute the sprint per the sprint-runner contract.
|
|
37
|
+
"""
|
|
38
|
+
)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Return the sprint-runner report verbatim.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scaffold
|
|
3
|
+
description: "Unified entry point for new project scaffolding. Triggers when user wants to create a new project skeleton — backend, frontend, or fullstack. Keyword triggers: 'scaffold the project', 'scaffold backend', 'scaffold frontend', 'scaffold backend and frontend', 'create fullstack skeleton', 'bootstrap fullstack', 'bootstrap backend', 'bootstrap frontend', 'monta o esqueleto', 'scaffolda o projeto', 'monta a estrutura', 'cria o esqueleto', 'inicializa o backend', 'inicializa o frontend', 'cria novo projeto', 'criar esqueleto do projeto', 'criar estrutura do projeto'. Reads `type:` from `## Project Identity` section in CLAUDE.md. DO NOT use for feature implementation after scaffold — use backend-developer / frontend-developer."
|
|
4
|
+
tools: Read, Write, Edit, Glob, Grep, Bash(mvn:*), Bash(npm:*), Bash(npx:*), Bash(ng:*)
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Scaffold — Unified Project Scaffolding Entry Point
|
|
9
|
+
|
|
10
|
+
This skill is the single entry point for all project scaffold operations.
|
|
11
|
+
It reads the project type from CLAUDE.md and dispatches to the `scaffold` agent.
|
|
12
|
+
|
|
13
|
+
## When to trigger
|
|
14
|
+
|
|
15
|
+
Use this skill at the **very first conversation** of a new project, before any Java or Angular code exists. Scenarios:
|
|
16
|
+
|
|
17
|
+
- "scaffold the project" / "scaffolda o projeto"
|
|
18
|
+
- "monta a estrutura" / "monta o esqueleto"
|
|
19
|
+
- "create fullstack skeleton" / "cria o esqueleto" / "bootstrap fullstack"
|
|
20
|
+
- "scaffold the backend" / "bootstrap backend" / "inicializa o backend"
|
|
21
|
+
- "scaffold the frontend" / "bootstrap frontend" / "inicializa o frontend"
|
|
22
|
+
- "create new project" / "cria novo projeto"
|
|
23
|
+
- Any variant: "criar esqueleto do projeto", "criar estrutura do projeto", "monta o monorepo"
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
1. The project's `CLAUDE.md` must exist at the project root.
|
|
28
|
+
2. The `## Project Identity` section must have `- **Project type**: \`backend\`` | `\`frontend\`` | `\`fullstack\``.
|
|
29
|
+
3. The project folder must be under `C:\development\source\projects\<name>\`.
|
|
30
|
+
4. No `backend/pom.xml`, `frontend/angular.json`, or `frontend/package.json` exists yet (idempotent guard is in the agent).
|
|
31
|
+
|
|
32
|
+
If `Project type` is missing or unrecognized, the `scaffold` agent routes to `tech-lead` automatically.
|
|
33
|
+
|
|
34
|
+
## Do NOT use for
|
|
35
|
+
|
|
36
|
+
- Implementing features after scaffold is complete — use `backend-developer` / `frontend-developer`.
|
|
37
|
+
- Migrating an existing project to a newer stack — use `migrator`.
|
|
38
|
+
- Updating the harness template — use `update-template`.
|
|
39
|
+
- Adopting the template in an existing project — use `active-project`.
|
|
40
|
+
|
|
41
|
+
## Dispatch
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Task(
|
|
45
|
+
subagent_type: "scaffold",
|
|
46
|
+
description: "Scaffold the project. Read ## Project Identity from CLAUDE.md, detect project type, run the appropriate pipeline (backend | frontend | fullstack).",
|
|
47
|
+
prompt: "<full user message>"
|
|
48
|
+
)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The `scaffold` agent (`.claude/agents/scaffold.md`, model: haiku) handles:
|
|
52
|
+
- Reading `## Project Identity` → parsing `Project type:` value.
|
|
53
|
+
- Running the Spring Initializr pipeline (backend), Angular CLI pipeline (frontend), or both (fullstack).
|
|
54
|
+
- Smoke builds and final report.
|
|
55
|
+
|
|
56
|
+
## Handoff
|
|
57
|
+
|
|
58
|
+
After dispatch, the `scaffold` agent handles execution autonomously. All decisions about Java packages, ports, optional dependencies are resolved by the agent (it may ask the user for missing values per its inviolable rules).
|
|
59
|
+
|
|
60
|
+
See `.claude/agents/scaffold.md` for the complete execution contract, pipeline steps, and inviolable rules.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stack-discovery
|
|
3
|
+
description: "Conversational sabatina for NEW projects with empty Project Identity in CLAUDE.md. Walks user through 5-8 focused questions to declare language, framework, version, database, UI lib, domain. Each question comes with a recommended answer + 1-line rationale (same UX pattern as grill-me, but focused on stack rather than feature requirements). Persists results to ## Project Identity in CLAUDE.md. If the chosen stack has no matching pack in .claude/stacks/, dispatches create-stack-pack skill. Triggers: 'sabatina pra projeto novo', 'stack discovery', 'ajuda escolher stack', 'configura stack', 'duk new chat', auto-triggered after duk new <name> creates empty Project Identity. Do NOT use for feature discovery (use grill-me), to migrate stack of existing project (use migrator), or for code implementation. PT triggers: 'sabatina pra projeto novo', 'discovery da stack', 'configura stack do projeto', 'duk new chat'."
|
|
4
|
+
tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Stack-discovery — conversational sabatina for new projects
|
|
9
|
+
|
|
10
|
+
> Sonnet conversational skill. Walks the human through declaring the project's stack — language, framework, version, database, UI lib, domain — and persists the answers to `## Project Identity` in `CLAUDE.md`. UX mirrors `grill-me`: one focused question per turn, each with a recommended answer + 1-line rationale.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. When you trigger
|
|
15
|
+
|
|
16
|
+
- "sabatina pra projeto novo", "stack discovery", "ajuda escolher stack", "configura stack", "duk new chat".
|
|
17
|
+
- Auto-triggered after `duk new <name>` scaffolds a project with empty `## Project Identity` placeholders (`<project-name>`, etc.).
|
|
18
|
+
- Manual invocation when adopting a new project where the stack is not yet declared.
|
|
19
|
+
|
|
20
|
+
## 2. When you do NOT trigger
|
|
21
|
+
|
|
22
|
+
- Project already has a populated `## Project Identity` -> use `update-template` to refresh harness files.
|
|
23
|
+
- Existing project changing stack (Java 21 -> 25, Angular 19 -> 21) -> use `migrator`.
|
|
24
|
+
- Feature requirements discovery -> use `grill-me`.
|
|
25
|
+
- Implementation -> use `run-sprint` / specialist agents.
|
|
26
|
+
- Scaffold the project skeleton -> use `scaffold` skill (run AFTER this skill finishes).
|
|
27
|
+
|
|
28
|
+
## 3. Prerequisites
|
|
29
|
+
|
|
30
|
+
- `CLAUDE.md` exists at project root with the harness template's `## Project Identity` section.
|
|
31
|
+
- An engaged human (this is conversational — never invoke from `sprint-runner` or CI).
|
|
32
|
+
|
|
33
|
+
## 4. Flow
|
|
34
|
+
|
|
35
|
+
### Step 1 — Frame
|
|
36
|
+
|
|
37
|
+
Open with a 1-line intro: "Vou entrevistar sobre stack — 6-8 perguntas, uma por turno. Persisto tudo em CLAUDE.md no fim."
|
|
38
|
+
|
|
39
|
+
### Step 2 — Sabatina (8 questions, one per turn)
|
|
40
|
+
|
|
41
|
+
Each question follows the grill-me pattern: question + recommended answer + 1-line rationale + "Confirm?". Default by context (if user said "API backend" earlier, default Q2 to `java`).
|
|
42
|
+
|
|
43
|
+
**Q1 — Project type**
|
|
44
|
+
> Tipo de projeto: `backend` / `frontend` / `fullstack` / `mobile` / `library` / `cli`?
|
|
45
|
+
> Recomendo: **fullstack** (se você vai ter API + UI integradas). Confirme?
|
|
46
|
+
|
|
47
|
+
**Q2 — Language**
|
|
48
|
+
> Linguagem principal: `java` / `typescript` / `python` / `go` / `rust` / `kotlin`?
|
|
49
|
+
> Recomendo: **java** para backend corporativo (ecossistema maduro, equipe domina). Confirme?
|
|
50
|
+
|
|
51
|
+
**Q3 — Framework**
|
|
52
|
+
> Framework: `spring-boot` / `quarkus` / `micronaut` (Java) | `angular` / `react` / `vue` (TS) | `django` / `fastapi` (Python) | `gin` / `echo` (Go)?
|
|
53
|
+
> Recomendo: **spring-boot** (defaults do harness, packs prontos). Confirme?
|
|
54
|
+
|
|
55
|
+
**Q4 — Major version**
|
|
56
|
+
> Versão major: para Spring Boot, `3` (Java 17/21, legado mantido) ou `4` (Java 25, novos)?
|
|
57
|
+
> Recomendo: **4** para projeto novo (target da equipe, packs canônicos). Confirme?
|
|
58
|
+
>
|
|
59
|
+
> _Nota: stack-discovery PODE consultar Maven Central / npm registry pra confirmar a última GA. Fallback é o hardcoded em `scripts/latest-versions.json`._
|
|
60
|
+
|
|
61
|
+
**Q5 — Database (if backend / fullstack)**
|
|
62
|
+
> SGBD: `postgresql` / `mysql` / `mongodb` / `none`?
|
|
63
|
+
> Recomendo: **postgresql** (default do harness — UUID, JSONB, transações ACID). Confirme?
|
|
64
|
+
|
|
65
|
+
**Q6 — UI library (if frontend / fullstack / mobile)**
|
|
66
|
+
> Lib de UI: `ng-bootstrap` / `material` / `primeng` (Angular) | `mui` / `chakra` / `tailwind` (React)?
|
|
67
|
+
> Recomendo: **ng-bootstrap** (default do harness, a11y WCAG 2.1 AA). Confirme?
|
|
68
|
+
|
|
69
|
+
**Q7 — Domain**
|
|
70
|
+
> Domínio do produto: e-commerce / fintech / healthcare / SaaS interno / marketplace / outro?
|
|
71
|
+
> Recomendo: marque o que mais aproxima — usado em prompts de geração e ADRs. Confirme?
|
|
72
|
+
|
|
73
|
+
**Q8 — Team size**
|
|
74
|
+
> Tamanho do time: solo / 2-3 devs / 4-10 devs / 10+?
|
|
75
|
+
> Recomendo: **2-3 devs** (calibra Autonomy Matrix, ritmo de PR, gate rigor). Confirme?
|
|
76
|
+
|
|
77
|
+
### Step 3 — Latest version detection (opcional, automático)
|
|
78
|
+
|
|
79
|
+
Antes de fechar a sabatina, se `Q3 + Q4` apontam para uma stack com versão major declarada, consulte (silenciosamente) Maven Central / npm registry para confirmar a última GA daquela major. Se diferir do que o user respondeu, retorne 1 pergunta de confirmação: "Detectei que Spring Boot 4.0.2 é a última GA — usar essa versão na CLAUDE.md? Recomendo: sim."
|
|
80
|
+
|
|
81
|
+
Fallback determinístico: `scripts/latest-versions.json` (hardcoded no harness).
|
|
82
|
+
|
|
83
|
+
### Step 4 — Confirm
|
|
84
|
+
|
|
85
|
+
Mostre o bloco `## Project Identity` proposto e peça OK final:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
## Project Identity
|
|
89
|
+
|
|
90
|
+
- **Project name**: `meu-projeto`
|
|
91
|
+
- **Project type**: `fullstack`
|
|
92
|
+
- **Primary stack**: `Java 25 + Spring Boot 4.0.2 + Angular 21`
|
|
93
|
+
- **Database**: `PostgreSQL 17 + Redis 7`
|
|
94
|
+
- **Domain**: `e-commerce`
|
|
95
|
+
- **Team size**: `2-3 devs`
|
|
96
|
+
- **Additional rules**: _(vazio)_
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Step 5 — Persist (MANDATORY)
|
|
100
|
+
|
|
101
|
+
Use `Edit` para substituir SOMENTE a seção `## Project Identity` em `CLAUDE.md`. Demais seções permanecem intactas (base do plugin). Validar via `Read` pós-Edit.
|
|
102
|
+
|
|
103
|
+
### Step 6 — Pack check + handoff
|
|
104
|
+
|
|
105
|
+
1. Resolva pack esperado: `.claude/stacks/<lang>/<framework>-<major>.md`.
|
|
106
|
+
2. **Se pack existe** -> imprima sucesso + próximos passos (ver §Output).
|
|
107
|
+
3. **Se pack ausente** -> dispatch `create-stack-pack` skill ANTES de finalizar:
|
|
108
|
+
> "Pack `.claude/stacks/java/spring-boot-5.md` não existe. Disparando `create-stack-pack` para gerar antes de continuar."
|
|
109
|
+
Depois que `create-stack-pack` retorna, feche com o output normal.
|
|
110
|
+
|
|
111
|
+
## 5. Inviolable rules
|
|
112
|
+
|
|
113
|
+
1. **Sabatina conversacional, opt-in.** Nunca rode em CI, `sprint-runner`, ou qualquer fluxo autônomo.
|
|
114
|
+
2. **Uma pergunta por turno, sempre com recomendação.** Nunca dump de lista, nunca pergunta aberta sem default.
|
|
115
|
+
3. **Persistência obrigatória.** Sessão não fecha sem `## Project Identity` preenchida em `CLAUDE.md`.
|
|
116
|
+
4. **Edit cirúrgico.** Só toca em `## Project Identity` — preserva todo o resto do template (override do plugin).
|
|
117
|
+
5. **Pack ausente bloqueia handoff.** Dispatch `create-stack-pack` antes do output final.
|
|
118
|
+
6. **Nunca decide stack pelo user.** Recomenda, mas o user confirma a cada Q.
|
|
119
|
+
7. **No implementation.** Esta skill só descobre + persiste — código vem do `scaffold` skill depois.
|
|
120
|
+
|
|
121
|
+
## 6. Output
|
|
122
|
+
|
|
123
|
+
Bloco final em chat:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
✓ Project Identity persistida em CLAUDE.md
|
|
127
|
+
✓ Pack resolvido: .claude/stacks/java/spring-boot-4.md (loaded)
|
|
128
|
+
|
|
129
|
+
Próximos passos sugeridos:
|
|
130
|
+
1. Rode 'scaffolda o projeto' para gerar a estrutura inicial (backend + frontend).
|
|
131
|
+
2. Quando tiver primeira feature em mente, rode 'grill me sobre <feature>' pra discovery.
|
|
132
|
+
3. Depois, 'analyst' gera PLAN -> 'sprint-runner' executa.
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Se pack faltava e foi gerado:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
✓ Project Identity persistida em CLAUDE.md
|
|
139
|
+
✓ Pack criado via create-stack-pack: .claude/local/stacks/java/spring-boot-5.md
|
|
140
|
+
Considere abrir PR pro harness repo (development-utility-kit) pra reusar.
|
|
141
|
+
|
|
142
|
+
Próximos passos:
|
|
143
|
+
1. Rode 'scaffolda o projeto' para gerar a estrutura inicial.
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## 7. Interface with other skills/agents
|
|
147
|
+
|
|
148
|
+
- `scaffold` — handoff natural após esta skill (gera esqueleto baseado em `## Project Identity`).
|
|
149
|
+
- `create-stack-pack` — disparado SE pack ausente para a stack escolhida.
|
|
150
|
+
- `stack-resolver` — agente Haiku que valida o pack pós-persistência (usado pelas skills downstream).
|
|
151
|
+
- `grill-me` — fase seguinte, quando user tem primeira feature em mente.
|
|
152
|
+
- `update-template` — não invocar daqui; é caminho separado para sincronizar harness em projeto já adotado.
|
|
153
|
+
- `migrator` — não confundir: este é para projeto NOVO; migrator é para mudar stack de projeto existente.
|
|
154
|
+
|
|
155
|
+
## 8. References
|
|
156
|
+
|
|
157
|
+
- ADR-026 (Generic agents + stack packs — fundação)
|
|
158
|
+
- ADR-028 (duk workflow — esta skill é o passo "new chat" do fluxo)
|
|
159
|
+
- ADR-029 (Pack canonical format — o que `create-stack-pack` deve gerar)
|
|
160
|
+
- `.claude/skills/grill-me/SKILL.md` (padrão UX de sabatina reusado aqui)
|
|
161
|
+
- `scripts/latest-versions.json` (fallback de versões hardcoded)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-coverage-auditor
|
|
3
|
+
description: Use to AUDIT the project's automated test coverage and flag TECHNICAL DEBT from manual verification. Triggers on "audit the tests", "is there test debt?", "is coverage ok?", "what depends on manual testing here?", "do a coverage audit", "list what has no test", "look for test debt". Also called automatically by `run-sprint` (Stage 5) and is a mandatory prerequisite of `prd-ready-check`. Scans backend code (controllers, services, domain) and frontend code (components, HTTP services, guards), checks whether matching automated tests exist (JUnit/Mockito/Testcontainers or Jest/Testing Library/Playwright), reads recent dailies and feature notes looking for "tested manually", "checked in the browser", "deployed and tested", and emits a debt report. Updates `docs/brain/architecture/tech-debt.md` and creates notes in `docs/brain/bugs/` for critical debt items. Does NOT implement tests — only flags them. To write the tests, use `backend-developer` / `frontend-developer` / `qa-engineer`. Do NOT use to write tests (use those specialists) nor to run the regression suite (use auto-test-guard). PT triggers: 'audita os testes', 'tem débito de teste?', 'cobertura tá ok?', 'o que depende de teste manual aqui?', 'faz auditoria de cobertura', 'lista o que não tem teste', 'procura débito de teste'.
|
|
4
|
+
tools: Read, Glob, Grep, Bash(git log:*), Bash(find:*)
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Test Coverage Auditor — Test technical debt detector
|
|
9
|
+
|
|
10
|
+
Skill that invokes the `test-coverage-auditor` agent. Always respond in American English.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## When to trigger
|
|
15
|
+
|
|
16
|
+
**Explicit**:
|
|
17
|
+
- "audit the tests", "is there test debt here?", "is coverage ok?"
|
|
18
|
+
- "what depends on manual testing?", "look for test debt", "list what has no test"
|
|
19
|
+
- "do a coverage audit"
|
|
20
|
+
|
|
21
|
+
**Automatic**:
|
|
22
|
+
- `run-sprint` Stage 5 — mandatory gate between integration (Stage 4) and PRD-ready (Stage 6).
|
|
23
|
+
- `prd-ready-check` — production gate requires an up-to-date report with no open P0/P1.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Prerequisites
|
|
28
|
+
|
|
29
|
+
- Project has `backend/` and/or `frontend/` directories with source code.
|
|
30
|
+
- `CLAUDE.md` exists at the project root with `## Project Identity` declaring the project type.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Do NOT use for
|
|
35
|
+
|
|
36
|
+
- Writing tests — use `qa-engineer` / `backend-developer` / `frontend-developer`.
|
|
37
|
+
- Running the regression suite — use `gate-keeper` (auto-test-guard skill).
|
|
38
|
+
- Performance or security audits — use `security-engineer` for those.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Execution
|
|
43
|
+
|
|
44
|
+
Standalone skill (Pattern 3 per ADR-037). The calling session scans the repo inline using `Glob`, `Grep`, `Bash(git log:*)`, `Bash(find:*)` from the frontmatter — no Task dispatch.
|
|
45
|
+
|
|
46
|
+
### Sequence
|
|
47
|
+
|
|
48
|
+
1. **Read `## Project Identity`** from `CLAUDE.md` (stack, project type — backend / fullstack / mobile / ...).
|
|
49
|
+
2. **Backend scan** — enumerate `controller`, `service`, `repository`, domain entities (paths + naming from the relevant stack pack `## Code patterns`). For each source file, check for a matching test file (e.g. `FooController.java` → `FooControllerTest.java`).
|
|
50
|
+
3. **Frontend scan** (if fullstack) — enumerate `component`, `service`, `guard`, `pipe`. Match against `*.spec.ts` / `*.test.tsx` / equivalent.
|
|
51
|
+
4. **Recent activity scan** — `git log --since="30 days ago"` + read `docs/brain/daily/` + `docs/brain/features/` for phrases like "tested manually", "checked in the browser", "deployed and tested". Each is a candidate manual-verification debt.
|
|
52
|
+
5. **Severity classification**:
|
|
53
|
+
- **P0** — production code path, no automated test AND no manual evidence (silent gap).
|
|
54
|
+
- **P1** — production code path, no automated test BUT manual verification documented.
|
|
55
|
+
- **P2** — non-critical path (config, log helper) with no test.
|
|
56
|
+
- **P3** — test exists but is shallow (asserts truthiness only).
|
|
57
|
+
6. **Write debt report** — append to `docs/brain/architecture/tech-debt.md` (never overwrite). Create individual notes under `docs/brain/bugs/` only for P0 items.
|
|
58
|
+
|
|
59
|
+
### Output format
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Test Coverage Audit — <date> — <project>
|
|
63
|
+
|
|
64
|
+
Backend
|
|
65
|
+
Classes scanned: 47
|
|
66
|
+
Without test: 8
|
|
67
|
+
Without test + no manual evidence (P0): 3
|
|
68
|
+
|
|
69
|
+
Frontend
|
|
70
|
+
Components scanned: 23
|
|
71
|
+
Without test: 5
|
|
72
|
+
Without test + no manual evidence (P0): 1
|
|
73
|
+
|
|
74
|
+
Open P0:
|
|
75
|
+
- src/main/java/.../ProductController.java — last touched 2026-05-22, no test, no manual log
|
|
76
|
+
- src/main/java/.../PriceCalculator.java — last touched 2026-05-28, no test, no manual log
|
|
77
|
+
- src/app/checkout/checkout.component.ts — last touched 2026-05-15, no test, no manual log
|
|
78
|
+
|
|
79
|
+
Open P1:
|
|
80
|
+
- src/main/java/.../OrderService.java — no test, manual log on 2026-05-20 ("tested in staging")
|
|
81
|
+
|
|
82
|
+
PRD-ready gate verdict: NO-GO (4 open P0/P1)
|
|
83
|
+
|
|
84
|
+
Routing: qa-engineer to write the missing tests; backend-developer or frontend-developer if the source needs testability refactors first.
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Never write the missing tests yourself — flag and route only.
|