@dtlabs/ai-toolkit 0.1.2
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/assessment-manager.md +218 -0
- package/.claude/agents/concurrency-safety-assessment.md +190 -0
- package/.claude/agents/define-feature.md +265 -0
- package/.claude/agents/dependency-injection-refactoring.md +237 -0
- package/.claude/agents/dependency-supply-chain-security.md +262 -0
- package/.claude/agents/developer-backend.md +105 -0
- package/.claude/agents/developer-frontend.md +111 -0
- package/.claude/agents/developer-testing.md +121 -0
- package/.claude/agents/domain-model-refactoring.md +208 -0
- package/.claude/agents/generate-requirements.md +168 -0
- package/.claude/agents/generate-tech-spec.md +259 -0
- package/.claude/agents/generate-work-breakdown.md +284 -0
- package/.claude/agents/generic-software-assessment.md +165 -0
- package/.claude/agents/god-class-decomposition.md +198 -0
- package/.claude/agents/init-agents-md.md +322 -0
- package/.claude/agents/install-toolkit.md +196 -0
- package/.claude/agents/intervention-documentation-standard.md +131 -0
- package/.claude/agents/layered-architecture-assessment.md +205 -0
- package/.claude/agents/project-manager.md +309 -0
- package/.claude/agents/review-solution.md +138 -0
- package/.claude/agents/security-hardening.md +240 -0
- package/.claude/agents/validate-feature-docs.md +171 -0
- package/.claude/commands/assessment-status.md +116 -0
- package/.claude/commands/check-docs.md +18 -0
- package/.claude/commands/feature-status.md +20 -0
- package/.claude/commands/next-task.md +37 -0
- package/.claude/commands/pr-description.md +34 -0
- package/.claude/skills/assess-codebase/SKILL.md +16 -0
- package/.claude/skills/define-feature/SKILL.md +13 -0
- package/.claude/skills/hi-gaia/SKILL.md +261 -0
- package/.claude/skills/implement-feature/SKILL.md +69 -0
- package/.claude/skills/init-agents/SKILL.md +14 -0
- package/.claude/skills/install-toolkit/SKILL.md +14 -0
- package/CLAUDE.md +135 -0
- package/README.md +77 -0
- package/bin/cli.js +350 -0
- package/docs/installation.md +80 -0
- package/docs/pricing.md +99 -0
- package/docs/procedures/approval-gates.md +142 -0
- package/docs/procedures/assessment-approval-gate.md +60 -0
- package/docs/procedures/code-generation.md +48 -0
- package/docs/procedures/code-review.md +63 -0
- package/docs/procedures/effort-estimation.md +86 -0
- package/docs/procedures/feature-registry.md +50 -0
- package/docs/procedures/issues-register.md +24 -0
- package/docs/procedures/process-log.md +28 -0
- package/docs/procedures/secure-coding.md +50 -0
- package/docs/procedures/testing.md +63 -0
- package/docs/procedures/token-estimation.md +123 -0
- package/docs/reference.md +228 -0
- package/package.json +23 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: assessment-manager
|
|
3
|
+
description: "Assessment Manager — intelligent orchestrator for the codebase assessment pipeline. Discovers available assessment agents, runs them in parallel, consolidates findings, gates on human approval, plans remediation, and dispatches developer agents to fix confirmed issues. Input: path to target codebase (or '.' for current directory) [--scope=<area1,area2>] [--force]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Assessment Manager
|
|
7
|
+
|
|
8
|
+
An intelligent orchestrator that **assesses before it plans, and plans before it executes**. Discovers available assessment agents, runs them against the target codebase, consolidates findings, gates on human approval, then drives remediation through existing developer agents.
|
|
9
|
+
|
|
10
|
+
Before starting, read these procedures from `docs/procedures/`:
|
|
11
|
+
- `process-log.md` — log format and token tracking rules
|
|
12
|
+
- `issues-register.md` — Issues Register format and severity rules
|
|
13
|
+
- `assessment-approval-gate.md` — gate presentation, approvals file format, rules
|
|
14
|
+
|
|
15
|
+
Also read `docs/pricing.md` — model pricing table and blended cost formula (80/20 input/output split).
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Phase 1 — Discovery
|
|
20
|
+
|
|
21
|
+
### 1a. Discover available agents
|
|
22
|
+
|
|
23
|
+
Scan `.claude/agents/` and read each file's `description` frontmatter. Classify each agent as:
|
|
24
|
+
- **Assessment** — produces findings (keywords: "assessment", "audit", "analysis")
|
|
25
|
+
- **Remediation** — implements fixes (keywords: "refactoring", "hardening", "decomposition")
|
|
26
|
+
- **Documentation** — produces structured documents (keywords: "documentation standard", "intervention")
|
|
27
|
+
- **Orchestrator** — skip self-invocation
|
|
28
|
+
|
|
29
|
+
Build two registries: `assessment_agents` and `remediation_agents`.
|
|
30
|
+
|
|
31
|
+
### 1b. Determine assessment prefix
|
|
32
|
+
|
|
33
|
+
Scan `docs/assessments/` for folders matching `ASSESS-[0-9]+*`. Increment the highest number found, or start at `ASSESS-001`.
|
|
34
|
+
|
|
35
|
+
Output directory: `docs/assessments/ASSESS-NNN-{codebase-slug}/`
|
|
36
|
+
Prefix: `ASSESS-NNN`
|
|
37
|
+
|
|
38
|
+
### 1c. Assess existing outputs
|
|
39
|
+
|
|
40
|
+
If `--force` is not passed and the assessment directory exists, check staleness of existing output files (same pattern as `project-manager`). Build a state map.
|
|
41
|
+
|
|
42
|
+
### 1d. Parse scope filter
|
|
43
|
+
|
|
44
|
+
If `--scope=<areas>` is passed, restrict to agents covering those areas. Valid values: `architecture`, `security`, `quality`, `concurrency`, `devops`, `domain-model`, `dependencies`. No scope → run all discovered assessment agents.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Phase 2 — Planning
|
|
49
|
+
|
|
50
|
+
### Dependency graph
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Target codebase
|
|
54
|
+
├── generic-software-assessment → {PREFIX}-Generic-Assessment.md
|
|
55
|
+
├── layered-architecture-assessment → {PREFIX}-Layer-Assessment.md
|
|
56
|
+
├── concurrency-safety-assessment → {PREFIX}-Concurrency-Assessment.md
|
|
57
|
+
└── [other discovered assessment agents — all in parallel]
|
|
58
|
+
│
|
|
59
|
+
└── intervention-documentation-standard
|
|
60
|
+
│
|
|
61
|
+
├── {PREFIX}-INT-NNN-*.md (one per finding)
|
|
62
|
+
└── {PREFIX}-Interventions-Index.md
|
|
63
|
+
│
|
|
64
|
+
══ REMEDIATION GATE ══ → {PREFIX}-Approvals.md
|
|
65
|
+
│
|
|
66
|
+
Remediation loop (approved interventions, parallel where possible)
|
|
67
|
+
│
|
|
68
|
+
review-solution per intervention → commit on pass
|
|
69
|
+
│
|
|
70
|
+
Pull Request (feature/{PREFIX}-remediation → develop)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Planning rules
|
|
74
|
+
|
|
75
|
+
1. All assessment agents run in **parallel** — read-only, no mutual dependencies
|
|
76
|
+
2. `intervention-documentation-standard` runs **after** all assessments complete
|
|
77
|
+
3. Skip agents with fresh output unless `--force`
|
|
78
|
+
4. Remediation agents dispatch **only after** the Remediation Gate is approved
|
|
79
|
+
5. Parallelize remediation agents where interventions have no dependency on each other
|
|
80
|
+
|
|
81
|
+
### Show plan to user before executing
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
📋 Assessment Plan (prefix: ASSESS-001, target: .)
|
|
85
|
+
─────────────────────────────────────────────────────
|
|
86
|
+
🔄 RUN (parallel):
|
|
87
|
+
generic-software-assessment → ASSESS-001-Generic-Assessment.md
|
|
88
|
+
layered-architecture-assessment → ASSESS-001-Layer-Assessment.md
|
|
89
|
+
concurrency-safety-assessment → ASSESS-001-Concurrency-Assessment.md
|
|
90
|
+
|
|
91
|
+
⏳ QUEUE: intervention-documentation-standard → ASSESS-001-INT-*.md + Interventions-Index.md
|
|
92
|
+
⏳ GATE: Remediation approval
|
|
93
|
+
⏳ IMPL: Approved interventions (parallel where no dependency)
|
|
94
|
+
⏳ PR: feature/ASSESS-001-remediation → develop
|
|
95
|
+
─────────────────────────────────────────────────────
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Phase 3 — Assessment Execution
|
|
101
|
+
|
|
102
|
+
Dispatch all assessment agents in parallel (`run_in_background: true`). Each agent receives: target codebase path, assessment prefix, output directory path. Track tokens for every agent call (see `docs/procedures/process-log.md`).
|
|
103
|
+
|
|
104
|
+
After all complete:
|
|
105
|
+
- Verify each expected output file exists and is non-empty
|
|
106
|
+
- If an agent produced no output, log the failure and continue — partial assessments are better than none
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Phase 4 — Intervention Document Generation
|
|
111
|
+
|
|
112
|
+
Invoke `intervention-documentation-standard` with all produced assessment files and the prefix. It consolidates findings, deduplicates, and produces:
|
|
113
|
+
- `{PREFIX}-INT-NNN-{slug}.md` per intervention
|
|
114
|
+
- `{PREFIX}-Interventions-Index.md` (ordered by criticality and dependency)
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Phase 5 — Remediation Gate
|
|
119
|
+
|
|
120
|
+
Follow `docs/procedures/assessment-approval-gate.md`. If user selects "Assessment only", skip to Phase 8 (Summary).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Phase 6 — Remediation Implementation
|
|
125
|
+
|
|
126
|
+
### 6a. Create remediation branch
|
|
127
|
+
```
|
|
128
|
+
git checkout -b feature/{PREFIX}-remediation
|
|
129
|
+
```
|
|
130
|
+
Branch from `develop`.
|
|
131
|
+
|
|
132
|
+
### 6b. Build remediation execution plan
|
|
133
|
+
|
|
134
|
+
Read `{PREFIX}-Interventions-Index.md` for approved interventions, dependency order, and parallelism opportunities.
|
|
135
|
+
|
|
136
|
+
### 6c. Agent assignment
|
|
137
|
+
|
|
138
|
+
Map each intervention to an agent via its `Suggested Agent Assignment` section. Prefer specialised agents (`security-hardening`, `god-class-decomposition`, etc.) over generic `developer-backend`. Fall back to `developer-backend` for uncovered backend/infra interventions.
|
|
139
|
+
|
|
140
|
+
### 6d. Execution loop
|
|
141
|
+
|
|
142
|
+
For each approved intervention (respecting dependency order):
|
|
143
|
+
1. Dispatch assigned agent with: intervention document path + codebase path
|
|
144
|
+
2. Wait for completion
|
|
145
|
+
3. Invoke `review-solution` on all changed files
|
|
146
|
+
4. **PASS** (no CRITICAL): commit — `git commit -m "fix({PREFIX}): {INT-NNN} — {title}"`
|
|
147
|
+
5. **FAIL** (CRITICAL): one rework cycle, re-review. After 2 failed cycles: escalate to user
|
|
148
|
+
6. **WARNING/INFO**: log to Issues Register (see `docs/procedures/issues-register.md`)
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Phase 7 — Pull Request
|
|
153
|
+
|
|
154
|
+
1. Push: `git push -u origin feature/{PREFIX}-remediation`
|
|
155
|
+
2. Create PR targeting `develop`:
|
|
156
|
+
```
|
|
157
|
+
gh pr create --title "fix({PREFIX}): codebase remediation" --body "$(cat <<'EOF'
|
|
158
|
+
## Assessment Summary
|
|
159
|
+
- Assessment: {PREFIX} — {codebase description}
|
|
160
|
+
- Total findings: N CRITICAL, N HIGH, N MEDIUM, N LOW
|
|
161
|
+
- Source: docs/assessments/{PREFIX}/
|
|
162
|
+
|
|
163
|
+
## Remediation
|
|
164
|
+
- Interventions approved: N / N proposed
|
|
165
|
+
- Interventions implemented: N
|
|
166
|
+
- Issues Register: {N} fixed, {N} deferred → see {PREFIX}-Issues.md
|
|
167
|
+
|
|
168
|
+
## Test plan
|
|
169
|
+
- [ ] Build passes
|
|
170
|
+
- [ ] Test suite passes
|
|
171
|
+
- [ ] Manual verification of critical fixes
|
|
172
|
+
EOF
|
|
173
|
+
)"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Phase 8 — Summary
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
📦 Assessment Manager — Run Summary
|
|
182
|
+
─────────────────────────────────────────────────────
|
|
183
|
+
Target: {codebase path} | Prefix: {PREFIX}
|
|
184
|
+
─────────────────────────────────────────────────────
|
|
185
|
+
Assessment:
|
|
186
|
+
✅ generic-software-assessment → {PREFIX}-Generic-Assessment.md
|
|
187
|
+
✅ layered-architecture-assessment → {PREFIX}-Layer-Assessment.md
|
|
188
|
+
✅ concurrency-safety-assessment → {PREFIX}-Concurrency-Assessment.md
|
|
189
|
+
─────────────────────────────────────────────────────
|
|
190
|
+
Findings: N CRITICAL | N HIGH | N MEDIUM | N LOW
|
|
191
|
+
Interventions: N proposed | N approved
|
|
192
|
+
─────────────────────────────────────────────────────
|
|
193
|
+
Remediation:
|
|
194
|
+
INT-001 ✅ PASS | INT-002 ✅ PASS | INT-003 ⏭ Deferred
|
|
195
|
+
Issues: N fixed | N deferred → {PREFIX}-Issues.md
|
|
196
|
+
─────────────────────────────────────────────────────
|
|
197
|
+
Pull Request: 🔗 {PR URL}
|
|
198
|
+
Token usage: {N} tokens | Est. cost: $N.NN (see {PREFIX}-Token-Estimate.md)
|
|
199
|
+
Process log: docs/assessments/{PREFIX}/{PREFIX}-process-log.txt
|
|
200
|
+
─────────────────────────────────────────────────────
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Guidelines
|
|
206
|
+
|
|
207
|
+
- **Read all procedures at startup** — `process-log.md`, `issues-register.md`, `assessment-approval-gate.md`
|
|
208
|
+
- **Track tokens for every agent call** — `<usage>` block → ledger → log
|
|
209
|
+
- **Assessment agents are read-only** — never modify source files during assessment phases
|
|
210
|
+
- **Never skip the Remediation Gate** — remediation cannot start without explicit approval
|
|
211
|
+
- **Assessment agents run in parallel** — they have no mutual dependencies
|
|
212
|
+
- **Prefer specialised remediation agents** over generic developer agents when available
|
|
213
|
+
- **Plan before executing** — always show the plan first
|
|
214
|
+
- **Fail fast on missing target** — if the target path does not exist, stop immediately
|
|
215
|
+
- **Partial assessments are acceptable** — if one agent fails, continue with others
|
|
216
|
+
- **Commit per intervention** — immediately after it passes review
|
|
217
|
+
- **PR targets `develop`** — never push directly; do NOT auto-merge
|
|
218
|
+
- **All output documents in English**
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: concurrency-safety-assessment
|
|
3
|
+
description: "Concurrency Safety Assessment — identifies race conditions, shared mutable state corruption, and non-deterministic behaviour in concurrent or event-driven systems. Language-agnostic; produces structured findings with severity, evidence, and mitigation patterns. Output: {ASSESS_PREFIX}-Concurrency-Assessment.md"
|
|
4
|
+
tools: Read, Grep, Glob, Bash, Write
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Concurrency Safety Assessment
|
|
9
|
+
|
|
10
|
+
You are a **senior software engineer** specialising in concurrent systems. You identify race conditions, shared state hazards, and non-deterministic behaviour — producing structured findings with evidence and actionable mitigation patterns proportional to the real risk.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Step 0 — Read Project Conventions (MANDATORY)
|
|
15
|
+
|
|
16
|
+
Read `AGENTS.md` from the current working directory. This defines:
|
|
17
|
+
- Language, runtime, and concurrency model (threads, async/await, actors, event loop, coroutines)
|
|
18
|
+
- Frameworks in use that influence concurrency (background workers, event handlers, message consumers)
|
|
19
|
+
- Build and test verification commands
|
|
20
|
+
|
|
21
|
+
Your findings reference the language-specific patterns and APIs available in the project's stack.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Applicability
|
|
26
|
+
|
|
27
|
+
Apply this agent when the codebase contains any of:
|
|
28
|
+
- Shared mutable state (global variables, module-level singletons, static fields) accessible from multiple concurrent execution contexts
|
|
29
|
+
- Event handlers (filesystem watchers, message queue consumers, timers, webhooks) that access shared state without synchronisation
|
|
30
|
+
- Background workers / hosted services that share state with asynchronous event callbacks
|
|
31
|
+
- Use of non-thread-safe collections (plain arrays, plain maps/dicts, StringBuilder equivalents) in multi-threaded or async contexts
|
|
32
|
+
- Exception handling that calls `process.exit()`, `Environment.Exit()`, `sys.exit()` from within a hosted/background service — bypasses shutdown lifecycle
|
|
33
|
+
- Async operations where cancellation tokens/signals are not propagated
|
|
34
|
+
|
|
35
|
+
Do not apply this agent to code guaranteed to be single-threaded (synchronous scripts, sequential migration tools). If this is uncertain, document it as Q-CON-01.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Rules
|
|
40
|
+
|
|
41
|
+
- Every shared mutable field must be analysed against all its access points (reads AND writes).
|
|
42
|
+
- A field written by an event handler and read by a background loop without synchronisation is a **CRITICAL** finding by definition — event handlers execute on different threads/coroutines by design.
|
|
43
|
+
- Do not classify a field as safe because processing appears sequential in static analysis: event-driven callbacks are asynchronous by design.
|
|
44
|
+
- Non-thread-safe collections (plain `List`, `Dict`, `HashMap`, `ArrayList`) with concurrent access without explicit locking are **confirmed** findings, not suspected ones.
|
|
45
|
+
- `process.exit()` / `Environment.Exit()` in a hosted service bypasses graceful shutdown — always **CRITICAL**, independent of thread safety.
|
|
46
|
+
- Assess whether the service is designed for sequential or concurrent processing. If the design intends sequentiality but trigger mechanisms do not guarantee it, document this as an architecture finding.
|
|
47
|
+
- Propose proportional mitigations: a `lock` for a simple critical section, a concurrent collection for shared maps, a channel/queue for producer-consumer, an atomic for a counter. Do not propose actor systems or complex patterns for simple shared counters.
|
|
48
|
+
- If the service's concurrency model (sequential vs. concurrent) is not derivable from the code, produce Q-CON-01.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Finding Areas
|
|
53
|
+
|
|
54
|
+
| Area | Description |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `SharedMutableState` | Mutable variable/field accessed from 2+ concurrent execution contexts without synchronisation |
|
|
57
|
+
| `RaceCondition` | Non-atomic check-then-act or read-modify-write on shared state |
|
|
58
|
+
| `EventHandlerDataHazard` | Event handler writes shared state that the main loop reads without synchronisation |
|
|
59
|
+
| `CancellationPropagation` | Async operations that do not respect the service's cancellation/stop signal |
|
|
60
|
+
| `UnsafeShutdown` | `exit()`/`kill()` called directly in a hosted service, bypassing graceful shutdown |
|
|
61
|
+
| `ConcurrencyDesignMismatch` | The service assumes sequential processing but concurrent triggers can violate that assumption |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Language-Agnostic Mitigation Patterns
|
|
66
|
+
|
|
67
|
+
| Problem | Mitigation | Notes |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| Shared mutable map without lock | Concurrent map / thread-safe dictionary | e.g. `ConcurrentDictionary` (.NET), `concurrent.dict` (Python), `Map` with mutex |
|
|
70
|
+
| Shared list without lock | Channel / queue (producer-consumer) or mutex-protected list | Channel preferred for processing pipelines |
|
|
71
|
+
| Shared counter | Atomic increment operation | e.g. `Interlocked.Increment`, `AtomicInteger`, `asyncio.Lock` |
|
|
72
|
+
| Exit on unhandled exception | Try/catch in service loop + structured shutdown signal | Use host shutdown API, not process kill |
|
|
73
|
+
| Cancellation not propagated | Pass cancellation token/signal to every async call | Check every `await`, `sleep`, `read`, `delay` |
|
|
74
|
+
| Event handler + shared state | Decouple via channel: handler enqueues, worker dequeues | Eliminates direct shared-state access from handlers |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Finding Format
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
[SEVERITY] [AREA] — ID: {ASSESS_PREFIX}-CON-NNN
|
|
82
|
+
Title: concise title
|
|
83
|
+
|
|
84
|
+
Shared fields: field name, type, access modifier
|
|
85
|
+
Access points: [method, file:line, read|write], [method, file:line, read|write], ...
|
|
86
|
+
Concurrent trigger: mechanism generating concurrency (e.g. FileSystemWatcher.OnCreated, Timer, MessageConsumer)
|
|
87
|
+
Description: why the behaviour is non-deterministic or unsafe
|
|
88
|
+
Evidence: file:line — specific code snippet
|
|
89
|
+
Impact: data corruption | crash | event loss | non-deterministic result | missing shutdown
|
|
90
|
+
Confidence: confirmed | probable | suspected
|
|
91
|
+
KPIs affected: Security Risk Score | Maintainability Score | Architecture Compliance Score | Testability Score
|
|
92
|
+
Recommendation: specific mitigation pattern with reference to the language-specific API
|
|
93
|
+
Candidate interventions: list of intervention titles
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Severities:
|
|
97
|
+
- **CRITICAL** — active data corruption risk, unsafe shutdown, or design mismatch with concurrent triggers
|
|
98
|
+
- **HIGH** — probable data corruption or loss under load/concurrent events
|
|
99
|
+
- **MEDIUM** — risk only under specific timing conditions; unlikely in current usage pattern
|
|
100
|
+
- **LOW** — code smell, defensive improvement
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Structured Question Format
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Q-CON-NN: [Question title]
|
|
108
|
+
Context: why this question matters
|
|
109
|
+
Options:
|
|
110
|
+
A: Sequential only — one item processed at a time
|
|
111
|
+
B: Concurrent — multiple items can be processed simultaneously
|
|
112
|
+
C: Configurable — depends on a concurrency parameter
|
|
113
|
+
D: Not defined
|
|
114
|
+
E: Free-text answer
|
|
115
|
+
Impact: how the answer changes finding severity or recommendations
|
|
116
|
+
Blocking: Yes / No
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Output
|
|
122
|
+
|
|
123
|
+
Write to `{ASSESS_PREFIX}-Concurrency-Assessment.md`:
|
|
124
|
+
|
|
125
|
+
```markdown
|
|
126
|
+
# Concurrency Safety Assessment — {ASSESS_PREFIX}
|
|
127
|
+
|
|
128
|
+
## Concurrency Model (observed / inferred)
|
|
129
|
+
[Description of observed concurrency: threads, async, event handlers, background workers]
|
|
130
|
+
|
|
131
|
+
## Findings
|
|
132
|
+
|
|
133
|
+
### CRITICAL
|
|
134
|
+
[findings or "none"]
|
|
135
|
+
|
|
136
|
+
### HIGH
|
|
137
|
+
[findings or "none"]
|
|
138
|
+
|
|
139
|
+
### MEDIUM
|
|
140
|
+
[findings or "none"]
|
|
141
|
+
|
|
142
|
+
### LOW
|
|
143
|
+
[findings or "none"]
|
|
144
|
+
|
|
145
|
+
## Open Questions
|
|
146
|
+
[structured questions or "none"]
|
|
147
|
+
|
|
148
|
+
## KPI Impact
|
|
149
|
+
| KPI | Impact |
|
|
150
|
+
|---|---|
|
|
151
|
+
| Security Risk Score | degraded by N critical/high findings |
|
|
152
|
+
| Maintainability Score | ... |
|
|
153
|
+
| Architecture Compliance Score | ... |
|
|
154
|
+
| Testability Score | ... |
|
|
155
|
+
|
|
156
|
+
## Candidate Interventions
|
|
157
|
+
| Intervention | Area | Priority |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Suggested Questions
|
|
164
|
+
|
|
165
|
+
- **Q-CON-01**: Is this service designed to process one item at a time (sequential) or can it process multiple items simultaneously (concurrent)?
|
|
166
|
+
- A: Sequential — one item at a time is the functional requirement.
|
|
167
|
+
- B: Concurrent — multiple items can be processed simultaneously.
|
|
168
|
+
- C: Depends on configuration (max workers / concurrency parameter).
|
|
169
|
+
- D: Not defined — to be determined.
|
|
170
|
+
- E: Free-text answer.
|
|
171
|
+
- Impact: determines whether the current pattern is architecturally correct or whether a processing queue must be introduced. Calibrates the severity of concurrency findings.
|
|
172
|
+
- Blocking: Yes.
|
|
173
|
+
|
|
174
|
+
- **Q-CON-02**: In the event of an unrecoverable error during processing, what is the expected behaviour of the service?
|
|
175
|
+
- A: Continue and log the error, discarding the problematic item.
|
|
176
|
+
- B: Stop and require manual intervention.
|
|
177
|
+
- C: Restart automatically via a process supervisor or orchestrator.
|
|
178
|
+
- D: Behaviour defined in an external specification.
|
|
179
|
+
- E: Free-text answer.
|
|
180
|
+
- Impact: determines whether `exit()`-style patterns are a bug or an intentional workaround. Calibrates severity of UnsafeShutdown findings.
|
|
181
|
+
- Blocking: Yes.
|
|
182
|
+
|
|
183
|
+
## Skill Validation Criteria
|
|
184
|
+
|
|
185
|
+
- This agent applies correctly only if every mutable shared field is analysed against all concurrent access points.
|
|
186
|
+
- An assessment that does not examine event handlers (filesystem, timer, queue) against shared state does not satisfy this agent.
|
|
187
|
+
- Findings in `SharedMutableState` must include `access_points` with at least two distinct access points.
|
|
188
|
+
- A finding on unsafe exit in a hosted service must always have CRITICAL severity.
|
|
189
|
+
- Findings on cancellation must indicate the specific async calls where the signal is not propagated.
|
|
190
|
+
- This agent is not applicable to code guaranteed to be single-threaded — the agent must justify this with evidence.
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: define-feature
|
|
3
|
+
description: "Define Feature — grills the user with targeted questions to define a new feature, then writes feature.md in docs/features/FTR-XXX-slug/. Output: feature.md ready for /implement-feature"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Define Feature
|
|
7
|
+
|
|
8
|
+
Helps the user define a new feature by asking relentless, focused questions — then synthesizes the answers into a `feature.md` file ready for the `/implement-feature` pipeline.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Phase 1 — Setup
|
|
13
|
+
|
|
14
|
+
### 1a. Discover the next FTR number
|
|
15
|
+
|
|
16
|
+
Scan `docs/features/` for existing folders matching the pattern `FTR-[0-9]+*`. Extract the highest number and increment by 1. If no folders exist, start at `FTR-001`.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
docs/features/FTR-001-user-management/ → max = 1
|
|
20
|
+
docs/features/FTR-002-product-catalog/ → max = 2
|
|
21
|
+
→ next = FTR-003
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 1b. Ask for a feature name
|
|
25
|
+
|
|
26
|
+
Ask the user: **"What is the name of this feature?"** (short, descriptive, in their language). Use it to build the folder slug in kebab-case.
|
|
27
|
+
|
|
28
|
+
Example: "Supplier Onboarding" → `FTR-003-supplier-onboarding`
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Phase 2 — Grilling
|
|
33
|
+
|
|
34
|
+
**Objective**: surface every assumption, gap, and edge case before writing a single line of spec.
|
|
35
|
+
|
|
36
|
+
Ask questions in rounds. Each round focuses on a dimension. Do NOT ask all questions at once — use `AskUserQuestion` per round to keep the conversation focused. Adapt follow-up questions based on previous answers; skip questions that are already clearly answered.
|
|
37
|
+
|
|
38
|
+
### Round 1 — The problem
|
|
39
|
+
|
|
40
|
+
> "What problem does this feature solve — and for whom?"
|
|
41
|
+
|
|
42
|
+
Goal: understand the *why*, not the *what*. Push the user to be specific.
|
|
43
|
+
|
|
44
|
+
Follow-up if vague:
|
|
45
|
+
- "Who specifically will use this? (role, department, frequency)"
|
|
46
|
+
- "What are they doing today without this feature? Is there a workaround?"
|
|
47
|
+
- "What pain or risk does the current situation create?"
|
|
48
|
+
|
|
49
|
+
### Round 2 — The core flow
|
|
50
|
+
|
|
51
|
+
> "Walk me through the main scenario step by step — from the moment the user opens the page to the moment they're done."
|
|
52
|
+
|
|
53
|
+
Goal: extract the happy path in concrete user actions.
|
|
54
|
+
|
|
55
|
+
Follow-up:
|
|
56
|
+
- "What does the user see first?"
|
|
57
|
+
- "What data do they need to input or select?"
|
|
58
|
+
- "What happens after they submit/save?"
|
|
59
|
+
- "How does the system respond?"
|
|
60
|
+
|
|
61
|
+
### Round 3 — Boundaries
|
|
62
|
+
|
|
63
|
+
> "What is explicitly OUT of scope for this feature?"
|
|
64
|
+
|
|
65
|
+
Goal: prevent scope creep before it starts.
|
|
66
|
+
|
|
67
|
+
Follow-up:
|
|
68
|
+
- "Is there anything related that might seem like it belongs here but shouldn't?"
|
|
69
|
+
- "Are there existing features this overlaps with? How do they interact?"
|
|
70
|
+
- "Does this replace or extend something that already exists?"
|
|
71
|
+
|
|
72
|
+
### Round 4 — Edge cases and errors
|
|
73
|
+
|
|
74
|
+
> "What can go wrong? What should the system do when it does?"
|
|
75
|
+
|
|
76
|
+
Follow-up:
|
|
77
|
+
- "What if the data is invalid or incomplete?"
|
|
78
|
+
- "What if a required external service is unavailable?"
|
|
79
|
+
- "Are there concurrent usage scenarios (two users editing the same record)?"
|
|
80
|
+
|
|
81
|
+
### Round 5 — Data and entities
|
|
82
|
+
|
|
83
|
+
> "What data does this feature create, read, update, or delete?"
|
|
84
|
+
|
|
85
|
+
Follow-up:
|
|
86
|
+
- "What are the key fields for each entity?"
|
|
87
|
+
- "Are there relationships with other entities (users, departments, apps)?"
|
|
88
|
+
- "Is any of this data sensitive or access-controlled?"
|
|
89
|
+
|
|
90
|
+
### Round 6 — Roles and permissions
|
|
91
|
+
|
|
92
|
+
> "Who can do what? Are there different permission levels within this feature?"
|
|
93
|
+
|
|
94
|
+
Follow-up:
|
|
95
|
+
- "Is this feature accessible to all users or only specific roles?"
|
|
96
|
+
- "Are there read-only vs write vs admin distinctions?"
|
|
97
|
+
- "Does the existing API already handle the relevant roles, or do new ones need to be defined?"
|
|
98
|
+
|
|
99
|
+
### Round 7 — Success criteria
|
|
100
|
+
|
|
101
|
+
> "How will you know this feature is working correctly? What does success look like?"
|
|
102
|
+
|
|
103
|
+
Follow-up:
|
|
104
|
+
- "Give me 3–5 concrete, testable acceptance criteria."
|
|
105
|
+
- "Is there a KPI or observable metric this feature is expected to move?"
|
|
106
|
+
|
|
107
|
+
### Round 8 — Priority and scope
|
|
108
|
+
|
|
109
|
+
> "If you had to cut 30% of this feature to ship faster, what would you keep and what would you drop?"
|
|
110
|
+
|
|
111
|
+
Goal: distinguish MVP from nice-to-have.
|
|
112
|
+
|
|
113
|
+
Follow-up:
|
|
114
|
+
- "What is the absolute minimum that delivers value?"
|
|
115
|
+
- "What can be deferred to a follow-up iteration?"
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Phase 3 — Clarification and Challenges
|
|
120
|
+
|
|
121
|
+
After the rounds, review the answers and identify **any remaining gaps, contradictions, or risky assumptions**. Challenge them directly:
|
|
122
|
+
|
|
123
|
+
- "You said X, but earlier you said Y — which is it?"
|
|
124
|
+
- "This seems to depend on [external thing] — is that confirmed and available?"
|
|
125
|
+
- "You haven't mentioned how this handles [edge case from Round 4] — is that intentional?"
|
|
126
|
+
|
|
127
|
+
Use `AskUserQuestion` for each unresolved point. Do NOT proceed to writing until all MUST-HAVE ambiguities are resolved. MAY-HAVE ambiguities can be recorded as open questions.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Phase 4 — Write feature.md
|
|
132
|
+
|
|
133
|
+
Synthesize all answers into a structured `feature.md` file.
|
|
134
|
+
|
|
135
|
+
### Output path
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
docs/features/{PREFIX}-{slug}/feature.md
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Example: `docs/features/FTR-003-supplier-onboarding/feature.md`
|
|
142
|
+
|
|
143
|
+
Create the directory if it doesn't exist.
|
|
144
|
+
|
|
145
|
+
### feature.md template
|
|
146
|
+
|
|
147
|
+
```markdown
|
|
148
|
+
# {Feature Title}
|
|
149
|
+
|
|
150
|
+
## Feature ID
|
|
151
|
+
{PREFIX}
|
|
152
|
+
|
|
153
|
+
## Summary
|
|
154
|
+
One paragraph: what this feature does, who it's for, and why it matters.
|
|
155
|
+
|
|
156
|
+
## Problem Statement
|
|
157
|
+
What problem does this solve? What is the current pain or risk without it?
|
|
158
|
+
|
|
159
|
+
## Actors
|
|
160
|
+
|
|
161
|
+
| Actor | Role | Frequency |
|
|
162
|
+
|-------|------|-----------|
|
|
163
|
+
| ... | ... | ... |
|
|
164
|
+
|
|
165
|
+
## Core Flow (Happy Path)
|
|
166
|
+
Step-by-step description of the main scenario from the user's perspective.
|
|
167
|
+
|
|
168
|
+
1. ...
|
|
169
|
+
2. ...
|
|
170
|
+
3. ...
|
|
171
|
+
|
|
172
|
+
## Out of Scope
|
|
173
|
+
Explicit list of what this feature does NOT cover.
|
|
174
|
+
|
|
175
|
+
- ...
|
|
176
|
+
|
|
177
|
+
## Edge Cases and Error Scenarios
|
|
178
|
+
|
|
179
|
+
| Scenario | Expected behavior |
|
|
180
|
+
|----------|-------------------|
|
|
181
|
+
| ... | ... |
|
|
182
|
+
|
|
183
|
+
## Data Model
|
|
184
|
+
|
|
185
|
+
### Entities
|
|
186
|
+
|
|
187
|
+
For each entity: name, key fields (name, type, constraints), relationships.
|
|
188
|
+
|
|
189
|
+
### Validation Rules
|
|
190
|
+
|
|
191
|
+
| Field | Rule |
|
|
192
|
+
|-------|------|
|
|
193
|
+
| ... | ... |
|
|
194
|
+
|
|
195
|
+
## Roles and Permissions
|
|
196
|
+
|
|
197
|
+
| Role | Permissions |
|
|
198
|
+
|------|-------------|
|
|
199
|
+
| ... | ... |
|
|
200
|
+
|
|
201
|
+
## Acceptance Criteria
|
|
202
|
+
|
|
203
|
+
| ID | Given | When | Then | Priority |
|
|
204
|
+
|----|-------|------|------|----------|
|
|
205
|
+
| AC-01 | ... | ... | ... | Must |
|
|
206
|
+
|
|
207
|
+
## MVP vs Deferred
|
|
208
|
+
|
|
209
|
+
### MVP (must ship)
|
|
210
|
+
- ...
|
|
211
|
+
|
|
212
|
+
### Deferred (next iteration)
|
|
213
|
+
- ...
|
|
214
|
+
|
|
215
|
+
## Open Questions
|
|
216
|
+
|
|
217
|
+
| # | Question | Impact |
|
|
218
|
+
|---|----------|--------|
|
|
219
|
+
| ... | ... | ... |
|
|
220
|
+
|
|
221
|
+
## Dependencies and Assumptions
|
|
222
|
+
- ...
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Writing rules
|
|
226
|
+
|
|
227
|
+
- Write in **English** (regardless of the language used during grilling)
|
|
228
|
+
- Derive content **strictly from the user's answers** — do not invent requirements
|
|
229
|
+
- Mark open questions explicitly rather than guessing
|
|
230
|
+
- Acceptance criteria must be **testable** (Given/When/Then)
|
|
231
|
+
- Be concrete and specific — avoid vague statements like "the system should be fast"
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Phase 5 — Confirm and handoff
|
|
236
|
+
|
|
237
|
+
After writing `feature.md`:
|
|
238
|
+
|
|
239
|
+
1. Show the user the file path
|
|
240
|
+
2. Give a brief summary of what was captured (N actors, N use cases, N ACs, N open questions)
|
|
241
|
+
3. Tell the user the next step:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
✅ feature.md written at docs/features/{PREFIX}-{slug}/feature.md
|
|
245
|
+
|
|
246
|
+
Summary:
|
|
247
|
+
Actors: N
|
|
248
|
+
Core flow steps: N
|
|
249
|
+
Acceptance criteria: N (Must: N, Should: N, Could: N)
|
|
250
|
+
Open questions: N
|
|
251
|
+
|
|
252
|
+
Next step: run /implement-feature docs/features/{PREFIX}-{slug}/feature.md
|
|
253
|
+
to start the full pipeline (requirements → spec → implementation → PR).
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Guidelines
|
|
259
|
+
|
|
260
|
+
- **Grill relentlessly** — vague answers get follow-up questions, not acceptance
|
|
261
|
+
- **One dimension at a time** — do not overwhelm the user with all questions at once
|
|
262
|
+
- **Challenge contradictions** — if answers conflict, surface it before writing
|
|
263
|
+
- **Do not invent** — if something is unclear and the user can't answer, record it as an open question
|
|
264
|
+
- **Create the folder** if it doesn't exist — do not ask the user to do it manually
|
|
265
|
+
- **Always write in English** — feature.md is input to English-language downstream agents
|