@deftai/directive-content 0.55.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/.agents/skills/deft/SKILL.md +6 -0
- package/.agents/skills/deft-directive-article-review/SKILL.md +11 -0
- package/.agents/skills/deft-directive-build/SKILL.md +10 -0
- package/.agents/skills/deft-directive-cost/SKILL.md +12 -0
- package/.agents/skills/deft-directive-debug/SKILL.md +13 -0
- package/.agents/skills/deft-directive-gh-arch/SKILL.md +11 -0
- package/.agents/skills/deft-directive-gh-slice/SKILL.md +10 -0
- package/.agents/skills/deft-directive-glossary/SKILL.md +10 -0
- package/.agents/skills/deft-directive-interview/SKILL.md +9 -0
- package/.agents/skills/deft-directive-pre-pr/SKILL.md +9 -0
- package/.agents/skills/deft-directive-refinement/SKILL.md +10 -0
- package/.agents/skills/deft-directive-release/SKILL.md +12 -0
- package/.agents/skills/deft-directive-review-cycle/SKILL.md +10 -0
- package/.agents/skills/deft-directive-setup/SKILL.md +10 -0
- package/.agents/skills/deft-directive-swarm/SKILL.md +10 -0
- package/.agents/skills/deft-directive-sync/SKILL.md +9 -0
- package/.agents/skills/deft-directive-triage/SKILL.md +9 -0
- package/.agents/skills/deft-directive-write-skill/SKILL.md +9 -0
- package/LICENSE.md +22 -0
- package/QUICK-START.md +167 -0
- package/UPGRADING.md +517 -0
- package/coding/build-output.md +28 -0
- package/coding/coding.md +235 -0
- package/coding/debugging.md +110 -0
- package/coding/holzmann.md +96 -0
- package/coding/hygiene.md +127 -0
- package/coding/security.md +158 -0
- package/coding/testing.md +162 -0
- package/coding/toolchain.md +44 -0
- package/commands.md +300 -0
- package/context/context.md +57 -0
- package/context/deterministic-split.md +67 -0
- package/context/examples.md +26 -0
- package/context/fractal-summaries.md +69 -0
- package/context/long-horizon.md +46 -0
- package/context/spec-deltas.md +177 -0
- package/context/tool-design.md +34 -0
- package/context/working-memory.md +62 -0
- package/contracts/boundary-maps.md +65 -0
- package/contracts/deterministic-questions.md +59 -0
- package/contracts/hierarchy.md +77 -0
- package/conventions/content-manifest.json +399 -0
- package/conventions/machine-generated-banner.md +130 -0
- package/conventions/references.md +120 -0
- package/conventions/rule-ownership.json +382 -0
- package/conventions/task-caching.md +43 -0
- package/conventions/vbrief-filenames.md +70 -0
- package/deployments/README.md +37 -0
- package/deployments/agentuity/README.md +138 -0
- package/deployments/agentuity/via-cli.md +380 -0
- package/deployments/agentuity/via-cloud.md +425 -0
- package/deployments/agentuity/via-github-actions.md +664 -0
- package/deployments/agentuity/via-gravity-network.md +606 -0
- package/deployments/agentuity/via-vpc.md +607 -0
- package/deployments/aws/README.md +38 -0
- package/deployments/aws/via-app-runner.md +612 -0
- package/deployments/aws/via-ecs-fargate.md +561 -0
- package/deployments/aws/via-elastic-beanstalk.md +628 -0
- package/deployments/aws/via-lambda.md +649 -0
- package/deployments/azure/README.md +37 -0
- package/deployments/azure/via-aks.md +390 -0
- package/deployments/azure/via-app-service.md +564 -0
- package/deployments/azure/via-container-apps.md +599 -0
- package/deployments/azure/via-functions.md +552 -0
- package/deployments/cloud-gov/README.md +63 -0
- package/deployments/cloud-gov/agents/compliance-docs.md +154 -0
- package/deployments/cloud-gov/agents.md +39 -0
- package/deployments/cloud-gov/cicd.md +64 -0
- package/deployments/cloud-gov/deployment.md +150 -0
- package/deployments/cloud-gov/logging.md +43 -0
- package/deployments/cloud-gov/manifest.md +121 -0
- package/deployments/cloud-gov/overview.md +58 -0
- package/deployments/cloud-gov/security.md +46 -0
- package/deployments/cloud-gov/services.md +72 -0
- package/deployments/cloud-gov/upstream/README.md +18 -0
- package/deployments/cloudflare/README.md +33 -0
- package/deployments/cloudflare/via-dashboard.md +83 -0
- package/deployments/cloudflare/via-git.md +90 -0
- package/deployments/cloudflare/via-github-actions.md +185 -0
- package/deployments/cloudflare/via-terraform.md +157 -0
- package/deployments/cloudflare/via-wrangler.md +165 -0
- package/deployments/fly-io/README.md +37 -0
- package/deployments/fly-io/via-dockerfile.md +648 -0
- package/deployments/fly-io/via-flyctl.md +653 -0
- package/deployments/fly-io/via-github-actions.md +695 -0
- package/deployments/fly-io/via-multi-region.md +598 -0
- package/deployments/google/README.md +34 -0
- package/deployments/google/via-app-engine.md +42 -0
- package/deployments/google/via-cloud-functions.md +23 -0
- package/deployments/google/via-cloud-run.md +330 -0
- package/deployments/google/via-gke.md +23 -0
- package/deployments/netlify/README.md +99 -0
- package/deployments/netlify/via-cli.md +17 -0
- package/deployments/netlify/via-functions.md +19 -0
- package/deployments/netlify/via-git.md +25 -0
- package/deployments/vercel/README.md +90 -0
- package/deployments/vercel/via-api.md +16 -0
- package/deployments/vercel/via-cli.md +17 -0
- package/deployments/vercel/via-git.md +24 -0
- package/docs/BROWNFIELD.md +179 -0
- package/docs/getting-started.md +137 -0
- package/docs/good-agents-md.md +137 -0
- package/events/README.md +89 -0
- package/events/event-record.schema.json +26 -0
- package/events/registry.json +166 -0
- package/events/registry.schema.json +71 -0
- package/glossary.md +145 -0
- package/incidents/README.md +81 -0
- package/incidents/_template.md +38 -0
- package/interfaces/cli.md +104 -0
- package/interfaces/rest.md +212 -0
- package/interfaces/tui.md +242 -0
- package/interfaces/web.md +123 -0
- package/languages/6502-DASM.md +132 -0
- package/languages/c.md +235 -0
- package/languages/commands.md +23 -0
- package/languages/cpp.md +132 -0
- package/languages/csharp.md +259 -0
- package/languages/dart.md +183 -0
- package/languages/delphi.md +218 -0
- package/languages/elixir.md +208 -0
- package/languages/go.md +78 -0
- package/languages/java.md +278 -0
- package/languages/javascript.md +163 -0
- package/languages/julia.md +175 -0
- package/languages/kotlin.md +193 -0
- package/languages/markdown.md +168 -0
- package/languages/mermaid.md +146 -0
- package/languages/officejs.md +392 -0
- package/languages/python.md +209 -0
- package/languages/r.md +163 -0
- package/languages/rust.md +216 -0
- package/languages/sql.md +216 -0
- package/languages/swift.md +153 -0
- package/languages/typescript.md +132 -0
- package/languages/vba.md +279 -0
- package/languages/vhdl.md +180 -0
- package/languages/visual-basic.md +151 -0
- package/languages/zig.md +196 -0
- package/meta/SOUL.md +27 -0
- package/meta/code-field.md +44 -0
- package/meta/morals.md +40 -0
- package/meta/philosophy.md +39 -0
- package/meta/project.md +49 -0
- package/meta/ralph.md +223 -0
- package/meta/security.md +80 -0
- package/meta/versioning.md +326 -0
- package/package.json +22 -0
- package/packs/lessons/lessons-pack-0.1.json +553 -0
- package/packs/patterns/patterns-pack-0.1.json +57 -0
- package/packs/rules/rules-pack-0.1.json +4767 -0
- package/packs/skills/skills-pack-0.1.json +262 -0
- package/packs/strategies/strategies-pack-0.1.json +167 -0
- package/packs/swarm-spec/swarm-spec-pack-0.1.json +17 -0
- package/patterns/executor-layer-credentials.md +227 -0
- package/patterns/llm-app.md +156 -0
- package/patterns/multi-agent.md +278 -0
- package/patterns/prompt-assembly-layer-ordering.md +154 -0
- package/patterns/role-as-overlay.md +179 -0
- package/platforms/2600.md +137 -0
- package/platforms/unity.md +329 -0
- package/references/composer-skill-porting.md +152 -0
- package/references/cost-models.md +163 -0
- package/references/ip-risk.md +246 -0
- package/references/plain-english-ux.md +275 -0
- package/resilience/context-pruning.md +67 -0
- package/resilience/continue-here.md +62 -0
- package/scm/changelog.md +276 -0
- package/scm/git.md +139 -0
- package/scm/github.md +265 -0
- package/secrets/.gitkeep +0 -0
- package/skills/deft-build/SKILL.md +20 -0
- package/skills/deft-directive-article-review/SKILL.md +156 -0
- package/skills/deft-directive-build/SKILL.md +302 -0
- package/skills/deft-directive-cost/SKILL.md +201 -0
- package/skills/deft-directive-debug/SKILL.md +140 -0
- package/skills/deft-directive-decompose/SKILL.md +96 -0
- package/skills/deft-directive-gh-arch/SKILL.md +160 -0
- package/skills/deft-directive-gh-slice/SKILL.md +199 -0
- package/skills/deft-directive-glossary/SKILL.md +118 -0
- package/skills/deft-directive-interview/SKILL.md +528 -0
- package/skills/deft-directive-pre-pr/SKILL.md +131 -0
- package/skills/deft-directive-probe/SKILL.md +127 -0
- package/skills/deft-directive-refinement/SKILL.md +403 -0
- package/skills/deft-directive-release/SKILL.md +266 -0
- package/skills/deft-directive-review-cycle/SKILL.md +401 -0
- package/skills/deft-directive-setup/SKILL.md +717 -0
- package/skills/deft-directive-swarm/SKILL.md +989 -0
- package/skills/deft-directive-sync/SKILL.md +288 -0
- package/skills/deft-directive-triage/SKILL.md +137 -0
- package/skills/deft-directive-write-skill/SKILL.md +169 -0
- package/skills/deft-interview/SKILL.md +16 -0
- package/skills/deft-pre-pr/SKILL.md +16 -0
- package/skills/deft-review-cycle/SKILL.md +16 -0
- package/skills/deft-roadmap-refresh/SKILL.md +16 -0
- package/skills/deft-setup/SKILL.md +20 -0
- package/skills/deft-swarm/SKILL.md +16 -0
- package/skills/deft-sync/SKILL.md +16 -0
- package/strategies/README.md +83 -0
- package/strategies/artifact-guards.md +85 -0
- package/strategies/bdd.md +115 -0
- package/strategies/brownfield.md +7 -0
- package/strategies/discuss.md +129 -0
- package/strategies/emit-hints.md +69 -0
- package/strategies/enterprise.md +193 -0
- package/strategies/interview.md +551 -0
- package/strategies/map.md +179 -0
- package/strategies/probe.md +151 -0
- package/strategies/rapid.md +155 -0
- package/strategies/research.md +155 -0
- package/strategies/roadmap.md +9 -0
- package/strategies/speckit.md +437 -0
- package/strategies/v0-20-contract.md +134 -0
- package/strategies/yolo.md +169 -0
- package/swarm/swarm.md +300 -0
- package/templates/COST-ESTIMATE.md +114 -0
- package/templates/PULL_REQUEST_TEMPLATE.md +35 -0
- package/templates/agent-prompt-preamble.md +409 -0
- package/templates/agents-entry.md +211 -0
- package/templates/agents-entry.placeholders.md +75 -0
- package/templates/embed.go +20 -0
- package/templates/embed_test.go +36 -0
- package/templates/make-spec-example.md +9 -0
- package/templates/make-spec.md +246 -0
- package/templates/project.md.template +52 -0
- package/templates/specification.md +1 -0
- package/templates/swarm-greptile-poller-prompt.md +556 -0
- package/templates/user.md.template +31 -0
- package/tools/RWLDL.md +80 -0
- package/tools/greptile.md +141 -0
- package/tools/installer.md +23 -0
- package/tools/taskfile-migration.md +32 -0
- package/tools/taskfile.md +185 -0
- package/tools/telemetry.md +285 -0
- package/vbrief/schemas/cache-meta.schema.json +137 -0
- package/vbrief/schemas/candidates.schema.json +130 -0
- package/vbrief/schemas/codebase-map.schema.json +213 -0
- package/vbrief/schemas/lessons-pack.schema.json +134 -0
- package/vbrief/schemas/patterns-pack.schema.json +84 -0
- package/vbrief/schemas/rules-pack.schema.json +105 -0
- package/vbrief/schemas/skills-pack.schema.json +94 -0
- package/vbrief/schemas/slices.schema.json +87 -0
- package/vbrief/schemas/strategies-pack.schema.json +89 -0
- package/vbrief/schemas/swarm-spec-pack.schema.json +84 -0
- package/vbrief/schemas/vbrief-core.schema.json +1022 -0
- package/vbrief/vbrief.md +684 -0
- package/verification/integration.md +76 -0
- package/verification/plan-checking.md +85 -0
- package/verification/uat.md +60 -0
- package/verification/verification.md +117 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
2
|
+
<!-- Purpose: rendered strategy -->
|
|
3
|
+
<!-- Source of truth: packs/strategies/strategies-pack-0.1.json -->
|
|
4
|
+
<!-- Regenerate with: task packs:render -->
|
|
5
|
+
<!-- Edit the source, not this file. Slice instead of loading every strategy: task packs:slice strategies by-trigger --trigger <kw> (or list) -->
|
|
6
|
+
|
|
7
|
+
# Map Strategy
|
|
8
|
+
|
|
9
|
+
Structured analysis of an existing codebase before adding features.
|
|
10
|
+
|
|
11
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
12
|
+
|
|
13
|
+
**⚠️ See also**: [strategies/interview.md](./interview.md) | [strategies/discuss.md](./discuss.md) | [core/glossary.md](../glossary.md)
|
|
14
|
+
|
|
15
|
+
> Adapted from [GSD](https://github.com/gsd-build/get-shit-done) map-codebase workflow.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- ! When adding features to an existing codebase the agent hasn't seen before
|
|
22
|
+
- ~ When onboarding to a project with unknown conventions
|
|
23
|
+
- ! When exploring an unfamiliar codebase before deciding what to build
|
|
24
|
+
- ? Skip if the codebase is small (<10 files) or the agent already has context
|
|
25
|
+
|
|
26
|
+
## Invocation Modes
|
|
27
|
+
|
|
28
|
+
Map supports two modes, determined automatically by context:
|
|
29
|
+
|
|
30
|
+
- **Standalone** -- invoked directly via `/deft:run:map` with no active interview or
|
|
31
|
+
spec workflow. Runs mapping, presents artifacts, and offers next-step options.
|
|
32
|
+
- **Chained** -- invoked from the [chaining gate](./interview.md#chaining-gate) during
|
|
33
|
+
an active interview/spec workflow. Runs mapping, registers artifacts, and returns to
|
|
34
|
+
the chaining gate.
|
|
35
|
+
|
|
36
|
+
The mapping workflow and artifact format are identical in both modes. Only the
|
|
37
|
+
completion behavior differs (see [Completion](#completion) below).
|
|
38
|
+
|
|
39
|
+
## Workflow
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Map Codebase → Review Artifacts → Next Steps
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Mapping produces artifacts that feed into planning so the agent **follows existing conventions** instead of inventing new ones.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Mapping Artifacts
|
|
50
|
+
|
|
51
|
+
! Before writing output artifacts, follow the [Preparatory Guard](./artifact-guards.md#preparatory-guard-light).
|
|
52
|
+
|
|
53
|
+
Produce a single `vbrief/proposed/{project}-codebase-map.vbrief.json` with four narratives:
|
|
54
|
+
|
|
55
|
+
! After emitting this scope vBRIEF, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
56
|
+
|
|
57
|
+
### `Stack` narrative -- Technology inventory
|
|
58
|
+
|
|
59
|
+
- ! Languages, versions, runtimes
|
|
60
|
+
- ! Frameworks and key dependencies
|
|
61
|
+
- ! Build tools and package managers
|
|
62
|
+
- ~ Environment configuration approach
|
|
63
|
+
|
|
64
|
+
### `Architecture` narrative -- System design
|
|
65
|
+
|
|
66
|
+
- ! Layers/components and their responsibilities
|
|
67
|
+
- ! Data flow between components
|
|
68
|
+
- ! Entry points (API routes, CLI, server start)
|
|
69
|
+
- ~ Error handling strategy
|
|
70
|
+
|
|
71
|
+
### `Conventions` narrative -- How code is written here
|
|
72
|
+
|
|
73
|
+
- ! Naming conventions (files, functions, variables)
|
|
74
|
+
- ! Import patterns and module organization
|
|
75
|
+
- ! Testing patterns (framework, file naming, assertion style)
|
|
76
|
+
- ! **Be prescriptive**: "Use camelCase for functions" not "some functions use camelCase"
|
|
77
|
+
|
|
78
|
+
### `Concerns` narrative -- Technical debt and risks
|
|
79
|
+
|
|
80
|
+
- ~ TODO/FIXME/HACK inventory with file paths
|
|
81
|
+
- ~ Large files (>500 lines) that may need splitting
|
|
82
|
+
- ~ Stubs and placeholder implementations
|
|
83
|
+
- ~ Missing test coverage areas
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Mapping Rules
|
|
88
|
+
|
|
89
|
+
- ! Include **file paths** with backticks — vague descriptions are not actionable
|
|
90
|
+
- ! Write **current state only** — never what was or what you considered
|
|
91
|
+
- ! Be **prescriptive** — "Use X pattern" guides future work; "X pattern is used" doesn't
|
|
92
|
+
- ! Answer **"where do I put new code?"** — not just what exists
|
|
93
|
+
- ⊗ Read `.env` contents or expose secrets — note existence only
|
|
94
|
+
- ~ Keep each artifact under 200 lines — detail over brevity, but focused
|
|
95
|
+
|
|
96
|
+
## How Artifacts Feed Downstream
|
|
97
|
+
|
|
98
|
+
- ! **Planning** loads relevant mapping narratives based on feature type
|
|
99
|
+
- ! **Execution** references `Conventions` narrative to match existing patterns
|
|
100
|
+
- ! **Verification** uses `Concerns` narrative to avoid introducing more debt
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Completion
|
|
105
|
+
|
|
106
|
+
### Artifact Registration (both modes)
|
|
107
|
+
|
|
108
|
+
- ! On completion, register artifacts in `./vbrief/plan.vbrief.json`:
|
|
109
|
+
- Update `completedStrategies`: increment `runCount` for `"map"`,
|
|
110
|
+
append artifact path (`vbrief/proposed/{project}-codebase-map.vbrief.json`)
|
|
111
|
+
- Append the path to the flat `artifacts` array
|
|
112
|
+
- ! The mapping narratives MUST inform subsequent strategies and spec generation:
|
|
113
|
+
- `Conventions` -> implementation constraints
|
|
114
|
+
- `Architecture` -> where new code fits
|
|
115
|
+
- `Concerns` -> things to avoid or fix
|
|
116
|
+
|
|
117
|
+
### Chained Mode (invoked from chaining gate)
|
|
118
|
+
|
|
119
|
+
- ! Return to [interview.md Chaining Gate](./interview.md#chaining-gate)
|
|
120
|
+
- ⊗ End the session after mapping without returning to the chaining gate
|
|
121
|
+
|
|
122
|
+
### Standalone Mode (invoked directly)
|
|
123
|
+
|
|
124
|
+
After presenting the mapping narratives to the user, offer next steps:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Mapping complete. Here's what I found:
|
|
128
|
+
- Stack: [brief summary]
|
|
129
|
+
- Architecture: [brief summary]
|
|
130
|
+
- Conventions: [brief summary]
|
|
131
|
+
- Concerns: [brief summary]
|
|
132
|
+
|
|
133
|
+
Artifact: vbrief/proposed/{project}-codebase-map.vbrief.json
|
|
134
|
+
|
|
135
|
+
What would you like to do next?
|
|
136
|
+
|
|
137
|
+
1. Start an interview — build a specification informed by this analysis
|
|
138
|
+
2. Run a discuss phase — lock key decisions using Feynman technique
|
|
139
|
+
3. Run a research phase — investigate libraries, alternatives, pitfalls
|
|
140
|
+
4. Done for now — review the artifact and come back later
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- ! Present the narrative summary before offering options
|
|
144
|
+
- ! If the user chooses a strategy, invoke it (the artifact persists in `vbrief/proposed/`)
|
|
145
|
+
- ! If the user chooses "done", confirm the artifact location and exit cleanly
|
|
146
|
+
- ~ Recommend option 1 (interview) when the user's goal is to build or extend
|
|
147
|
+
- ~ Recommend option 4 (done) when the user's goal is exploration or onboarding
|
|
148
|
+
|
|
149
|
+
**Handoff rule for chained strategies:** When invoking discuss or research from
|
|
150
|
+
standalone map, the chaining gate does not exist. On completion of the invoked
|
|
151
|
+
strategy, the agent MUST return to this standalone next-step menu instead of
|
|
152
|
+
looking for `interview.md`'s chaining gate.
|
|
153
|
+
|
|
154
|
+
- ! Tell the invoked strategy that the return target is the standalone map menu
|
|
155
|
+
- ! After the invoked strategy completes and registers its artifacts, re-present
|
|
156
|
+
the standalone next-step options above (with updated run counts)
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Invoking This Strategy
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
/deft:run:map
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Standalone — explore a codebase without starting an interview:
|
|
167
|
+
```
|
|
168
|
+
Map this codebase so I can understand it.
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Before an interview — analysis-first, then spec:
|
|
172
|
+
```
|
|
173
|
+
Map this codebase, then use the interview strategy to plan [feature].
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Or set in PROJECT-DEFINITION.vbrief.json narratives:
|
|
177
|
+
```json
|
|
178
|
+
"Strategy": "strategies/map.md"
|
|
179
|
+
```
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
2
|
+
<!-- Purpose: rendered strategy -->
|
|
3
|
+
<!-- Source of truth: packs/strategies/strategies-pack-0.1.json -->
|
|
4
|
+
<!-- Regenerate with: task packs:render -->
|
|
5
|
+
<!-- Edit the source, not this file. Slice instead of loading every strategy: task packs:slice strategies by-trigger --trigger <kw> (or list) -->
|
|
6
|
+
|
|
7
|
+
# Probe Strategy
|
|
8
|
+
|
|
9
|
+
Stress-test a plan before committing to it — relentless interrogation until every branch of the decision tree is resolved.
|
|
10
|
+
|
|
11
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
12
|
+
|
|
13
|
+
**⚠️ See also**: [strategies/discuss.md](./discuss.md) | [strategies/interview.md](./interview.md) | [core/glossary.md](../glossary.md)
|
|
14
|
+
|
|
15
|
+
> Inspired by [grill-me](https://github.com/mattpocock/skills/tree/main/grill-me) from [mattpocock/skills](https://github.com/mattpocock/skills). Adapted to directive's preparatory strategy pattern.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- ~ Before committing to any significant design decision or architecture choice
|
|
22
|
+
- ~ When a plan has been drafted but not yet stress-tested
|
|
23
|
+
- ! When the user explicitly asks to be probed or challenged on their plan
|
|
24
|
+
- ? Skip when the path forward is unambiguous and small in scope
|
|
25
|
+
|
|
26
|
+
## Core Principle
|
|
27
|
+
|
|
28
|
+
The goal is not alignment — that's `discuss`. Probe is adversarial discovery. It assumes the plan has holes and sets out to find them. Every assumption is challenged, every edge case explored, every dependency branch walked until nothing is unresolved. Where `discuss` builds consensus, `probe` finds what's missing.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
### Step 1: Establish the plan
|
|
35
|
+
|
|
36
|
+
- ! Read whatever plan, design, or spec exists in the conversation context
|
|
37
|
+
- ~ If no plan is in context, ask ONE question: "What's the plan you want me to probe?"
|
|
38
|
+
- ~ If codebase context is relevant, explore it to answer what you can before asking
|
|
39
|
+
- ⊗ Ask follow-up questions before reading available context
|
|
40
|
+
|
|
41
|
+
### Step 2: Interrogate relentlessly
|
|
42
|
+
|
|
43
|
+
Walk the decision tree depth-first. For each unresolved branch:
|
|
44
|
+
|
|
45
|
+
- ! Ask **ONE** focused question per message
|
|
46
|
+
- ! For each question, provide your recommended answer with brief reasoning
|
|
47
|
+
- ! If the codebase can answer a question, explore it instead of asking the user
|
|
48
|
+
- ~ Follow the thread — if an answer opens new branches, pursue them before moving on
|
|
49
|
+
- ⊗ Ask multiple questions at once
|
|
50
|
+
- ⊗ Accept vague answers — push back: "What does that mean concretely?"
|
|
51
|
+
- ⊗ Move to the next branch before the current one is fully resolved
|
|
52
|
+
|
|
53
|
+
### Question focus areas
|
|
54
|
+
|
|
55
|
+
- ! **Assumptions** — "This assumes X is guaranteed — is it?"
|
|
56
|
+
- ! **Edge cases** — "What happens when Y is empty / null / at the limit?"
|
|
57
|
+
- ! **Dependencies** — "This requires Z to exist — what if it doesn't?"
|
|
58
|
+
- ! **Failure modes** — "How does this fail? How is that surfaced to the user?"
|
|
59
|
+
- ! **Scaling** — "Does this hold at 10× the expected volume?"
|
|
60
|
+
- ~ **Security surface** — "Who can reach this? What's the blast radius if it's wrong?"
|
|
61
|
+
- ~ **Reversibility** — "Can this decision be changed later? What's the migration cost?"
|
|
62
|
+
|
|
63
|
+
### Transition criteria (probe complete)
|
|
64
|
+
|
|
65
|
+
- ! All major decision branches have been resolved
|
|
66
|
+
- ! No open assumptions remain
|
|
67
|
+
- ~ User has acknowledged the risks of any deliberately deferred decisions
|
|
68
|
+
- ~ No new branches are surfaced by the last 2–3 questions
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Output
|
|
73
|
+
|
|
74
|
+
! Before writing output artifacts, follow the [Preparatory Guard](./artifact-guards.md#preparatory-guard-light).
|
|
75
|
+
|
|
76
|
+
### Mechanical guard (`scripts/probe_session.py`)
|
|
77
|
+
|
|
78
|
+
Probe completion is enforced mechanically — not by prose alone. A per-clone
|
|
79
|
+
session file at `.deft/probe-session.json` records whether the session is still
|
|
80
|
+
`interrogate` or `complete`, plus the probe `target`, `currentBranch`, and
|
|
81
|
+
`resolvedDecisions`.
|
|
82
|
+
|
|
83
|
+
- ! At probe start, record the session:
|
|
84
|
+
`uv run python scripts/probe_session.py start --target <scope>`
|
|
85
|
+
- ! While interrogating, record locked/deferred/risk-accepted decisions and
|
|
86
|
+
branch focus with `record` / `set-branch` subcommands as branches resolve
|
|
87
|
+
- ! Before writing probe output or registering `completedStrategies.probe`,
|
|
88
|
+
mark the session complete:
|
|
89
|
+
`uv run python scripts/probe_session.py complete`
|
|
90
|
+
- ! Immediately before artifact or plan registration, run the guard:
|
|
91
|
+
- `uv run python scripts/probe_session.py guard-artifact --path vbrief/proposed/{scope}-probe.vbrief.json`
|
|
92
|
+
- `uv run python scripts/probe_session.py guard-plan-registration`
|
|
93
|
+
- ⊗ Write probe artifacts or update `completedStrategies.probe` while the
|
|
94
|
+
session state is still `interrogate` — the guard exits non-zero with an
|
|
95
|
+
actionable recovery message
|
|
96
|
+
|
|
97
|
+
**Recovery when the guard blocks handoff:** continue interrogation until the
|
|
98
|
+
[transition criteria](#transition-criteria-probe-complete) are met, record
|
|
99
|
+
decisions with `probe_session.py record`, run `probe_session.py complete`,
|
|
100
|
+
then retry the guard before writing artifacts or updating `plan.vbrief.json`.
|
|
101
|
+
|
|
102
|
+
`{scope}` is the project name from `PROJECT-DEFINITION.vbrief.json`, or the
|
|
103
|
+
feature/component name if probing a sub-scope. Use the same value consistently
|
|
104
|
+
throughout the session. Examples: `my-app-probe`, `auth-probe`.
|
|
105
|
+
|
|
106
|
+
- ! Produce a `vbrief/proposed/{scope}-probe.vbrief.json` scope vBRIEF with three mandatory narratives:
|
|
107
|
+
- `LockedDecisions` — what was resolved and why
|
|
108
|
+
- `SurfacedRisks` — concerns raised, even if not fully resolved
|
|
109
|
+
- `DeferredDecisions` — explicitly acknowledged items with justification
|
|
110
|
+
- ! Each entry in a narrative includes: **question asked**, **answer given**, **status** (locked / deferred / risk-accepted)
|
|
111
|
+
- ! This vBRIEF is injected into all downstream work: planning, execution, verification
|
|
112
|
+
- ! Persist significant decisions as vBRIEF narratives on the relevant plan items
|
|
113
|
+
- ⊗ Write probe output to a hand-authored markdown file — use vBRIEF narratives for token-efficient, machine-consumable agent consumption (mirrors the [discuss](./discuss.md) and [research](./research.md) output contracts so the chaining-gate flow-through guarantee is mechanical, not aspirational)
|
|
114
|
+
|
|
115
|
+
! After emitting the probe scope vBRIEF to `vbrief/proposed/`, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Then: Chaining Gate
|
|
120
|
+
|
|
121
|
+
After the probe is complete and `vbrief/proposed/{scope}-probe.vbrief.json` is
|
|
122
|
+
written, return to the [chaining gate](./interview.md#chaining-gate).
|
|
123
|
+
|
|
124
|
+
- ! On completion, register artifacts in `./vbrief/plan.vbrief.json`:
|
|
125
|
+
- Update `completedStrategies`: increment `runCount` for `"probe"`,
|
|
126
|
+
append artifact path (`vbrief/proposed/{scope}-probe.vbrief.json`)
|
|
127
|
+
- Append the path to the flat `artifacts` array
|
|
128
|
+
- ! Return to [interview.md Chaining Gate](./interview.md#chaining-gate)
|
|
129
|
+
- ! The `LockedDecisions`, `SurfacedRisks`, and `DeferredDecisions` narratives from `vbrief/proposed/{scope}-probe.vbrief.json` MUST flow
|
|
130
|
+
into subsequent strategies and spec generation:
|
|
131
|
+
- Locked decisions become constraints in the specification
|
|
132
|
+
- Surfaced risks become NFRs or explicit acceptance criteria
|
|
133
|
+
- Deferred decisions appear as open questions in the spec
|
|
134
|
+
- ⊗ End the session after probe without returning to the chaining gate
|
|
135
|
+
or the invoking strategy's next-step menu
|
|
136
|
+
|
|
137
|
+
! **Standalone context:** If invoked from a standalone strategy (e.g. map's
|
|
138
|
+
standalone next-step menu) rather than from the interview chaining gate,
|
|
139
|
+
return to the invoking strategy's menu instead.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Anti-Patterns
|
|
144
|
+
|
|
145
|
+
- ⊗ Accepting "we'll figure it out later" without marking it as explicitly deferred
|
|
146
|
+
- ⊗ Asking generic checklist questions instead of following the decision tree
|
|
147
|
+
- ⊗ Letting vague answers pass without pushing for concrete specifics
|
|
148
|
+
- ⊗ Using codebase exploration as a substitute for asking the user about deliberate design choices
|
|
149
|
+
- ⊗ Stopping when the conversation feels comfortable — stop when no new branches emerge
|
|
150
|
+
- ⊗ Ending after probe without chaining back to the gate (chained mode; in standalone context, returning to the invoking strategy's menu satisfies the completion requirement per the [standalone-context rule](#then-chaining-gate))
|
|
151
|
+
- ⊗ Writing probe output to a plain markdown file (`{scope}-probe.md`) instead of the canonical `vbrief/proposed/{scope}-probe.vbrief.json` scope vBRIEF — plain markdown bypasses the [Preparatory Guard](./artifact-guards.md#preparatory-guard-light) and breaks the downstream-consumer flow-through guarantee
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
2
|
+
<!-- Purpose: rendered strategy -->
|
|
3
|
+
<!-- Source of truth: packs/strategies/strategies-pack-0.1.json -->
|
|
4
|
+
<!-- Regenerate with: task packs:render -->
|
|
5
|
+
<!-- Edit the source, not this file. Slice instead of loading every strategy: task packs:slice strategies by-trigger --trigger <kw> (or list) -->
|
|
6
|
+
|
|
7
|
+
# Rapid Strategy
|
|
8
|
+
|
|
9
|
+
Quick prototyping workflow -- v0.20 date-prefixed story vBRIEF output with minimal gates and fast iteration.
|
|
10
|
+
|
|
11
|
+
**v0.20 note (s5-migrate-speckit-rapid-enterprise / #1166):** Rapid now emits only the canonical v0.20 shape (date-prefixed story vBRIEFs in proposed/, full PROJECT-DEFINITION.vbrief.json via task project:render, seeded lifecycle folders, no legacy specification.vbrief.json). See the dedicated ## v0.20 Output Shape section and the canonical contract `strategies/v0-20-contract.md` (s1-contract of #1166).
|
|
12
|
+
|
|
13
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
14
|
+
|
|
15
|
+
**⚠️ See also**: [strategies/interview.md](./interview.md) | [strategies/yolo.md](./yolo.md) | [strategies/README.md](./README.md) | [strategies/v0-20-contract.md](./v0-20-contract.md) | [artifact-guards.md](./artifact-guards.md)
|
|
16
|
+
|
|
17
|
+
> Ship a throwaway prototype fast. Skip the PRD, skip approval gates, produce a
|
|
18
|
+
> date-prefixed vBRIEF in proposed/ + PROJECT-DEFINITION and start building. Suited for spikes, proof-of-concepts, and
|
|
19
|
+
> disposable experiments where learning speed matters more than long-term quality.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## When to Use
|
|
24
|
+
|
|
25
|
+
- ~ Throwaway prototypes, spikes, and proof-of-concept experiments
|
|
26
|
+
- ~ Validating a technical approach before committing to a full spec cycle
|
|
27
|
+
- ~ Solo explorations where the cost of rework is low
|
|
28
|
+
- ? Time-boxed experiments (e.g. "spend 2 hours proving this works")
|
|
29
|
+
- ⊗ Production features, shared libraries, or anything with downstream consumers
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
### Step 1: State the Goal
|
|
36
|
+
|
|
37
|
+
! Describe the prototype goal in one sentence: what are you trying to learn or prove?
|
|
38
|
+
|
|
39
|
+
- ! Record the goal in a new date-prefixed story vBRIEF written to `vbrief/proposed/YYYY-MM-DD-<kebab-slug>.vbrief.json` (e.g. as the plan title or a brief narrative in the v0.6 schema). Use today's date for the prefix and a descriptive slug.
|
|
40
|
+
- ~ Include a time-box if applicable (e.g. "4-hour spike")
|
|
41
|
+
- ⊗ Skip this step -- even throwaway work needs a clear objective
|
|
42
|
+
|
|
43
|
+
### Step 2: Minimal Interview
|
|
44
|
+
|
|
45
|
+
! Ask only the questions needed to unblock implementation. Skip sizing gate, skip PRD.
|
|
46
|
+
|
|
47
|
+
- ! Identify: target platform, primary language, key dependency or API
|
|
48
|
+
- ~ 3-5 questions maximum -- bias toward defaults and moving fast
|
|
49
|
+
- ⊗ Run the full interview questionnaire -- that defeats the purpose of rapid
|
|
50
|
+
|
|
51
|
+
### Step 3: Generate date-prefixed vBRIEF in proposed/ (Forced-Light Path)
|
|
52
|
+
|
|
53
|
+
! Before writing output artifacts, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for proposed/ scope items; Spec-Generating Guard for PROJECT-DEFINITION).
|
|
54
|
+
|
|
55
|
+
! Write a slim story scope vBRIEF to `vbrief/proposed/YYYY-MM-DD-<kebab-slug>.vbrief.json` -- no PRD, no approval gate. Decompose the rapid plan into one or more focused, buildable story vBRIEFs (v0.6 schema) rather than a monolithic legacy spec.
|
|
56
|
+
|
|
57
|
+
- ! Use the Light path from [interview.md](./interview.md) unconditionally
|
|
58
|
+
- ! Mark `plan.status` as `draft` (not `approved`) to signal prototype quality
|
|
59
|
+
- ! After the proposed/ vBRIEF(s) are written, invoke `task project:render` (from repo root) to generate/refresh the complete `vbrief/PROJECT-DEFINITION.vbrief.json`
|
|
60
|
+
- ~ Keep tasks coarse-grained -- 3-5 tasks is typical for a spike
|
|
61
|
+
- ⊗ Generate a PRD or require approval -- rapid skips both
|
|
62
|
+
- ⊗ Hand-author `SPECIFICATION.md` directly -- it is a rendered derivative only (see v0.20 Output Shape)
|
|
63
|
+
|
|
64
|
+
! After emitting the proposed/ story vBRIEF(s), surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
65
|
+
|
|
66
|
+
### Step 4: Build
|
|
67
|
+
|
|
68
|
+
! Implement against the spec. Quality gates are relaxed but not absent.
|
|
69
|
+
|
|
70
|
+
- ! Tests are still required, but coverage gate is relaxed to ≥50%
|
|
71
|
+
- ~ Favour working code over clean code -- refactor later if the prototype graduates
|
|
72
|
+
- ! `task check` must still pass (lint + fmt + tests)
|
|
73
|
+
- ⊗ Skip `task check` entirely -- even prototypes must compile and pass basic checks
|
|
74
|
+
|
|
75
|
+
### Step 5: Evaluate
|
|
76
|
+
|
|
77
|
+
! At the end of the time-box (or when the prototype is done), decide next steps.
|
|
78
|
+
|
|
79
|
+
- ! Record findings: what worked, what didn't, what surprised you
|
|
80
|
+
- ~ Options: discard, iterate, or graduate to a full spec cycle via [interview.md](./interview.md)
|
|
81
|
+
- ! If graduating: start a fresh interview -- do not carry forward the rapid spec as-is
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Output Artifacts
|
|
86
|
+
|
|
87
|
+
- `vbrief/proposed/YYYY-MM-DD-*.vbrief.json` (one or more) -- lightweight story scope vBRIEF(s) with `draft` status (primary artifact; date-prefixed per v0.20 contract)
|
|
88
|
+
- `vbrief/PROJECT-DEFINITION.vbrief.json` -- complete project gestalt + items registry (via `task project:render` invoked by Rapid)
|
|
89
|
+
- `vbrief/{proposed,pending,active,completed,cancelled}/` -- all five lifecycle folders seeded
|
|
90
|
+
- (optional derivative) `SPECIFICATION.md` -- read-only human-readable export (includes deprecated-redirect sentinel; via `task spec:render` if invoked)
|
|
91
|
+
- Prototype code (may be discarded)
|
|
92
|
+
- Findings summary (inline in the proposed/ vBRIEF or as a separate note)
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Fits into Chaining Gate
|
|
97
|
+
|
|
98
|
+
Rapid is a **spec-generating** strategy. Selecting it at the chaining gate produces date-prefixed story vBRIEF(s) in `vbrief/proposed/` (and refreshes `vbrief/PROJECT-DEFINITION.vbrief.json` via `task project:render`) and moves directly to implementation. There is no chaining back to preparatory strategies. See the v0.20 Output Shape section below for the exact contract.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Anti-Patterns
|
|
103
|
+
|
|
104
|
+
- ⊗ Using rapid for production features -- rapid output is explicitly throwaway
|
|
105
|
+
- ⊗ Graduating a rapid prototype without a fresh spec cycle -- the shortcuts compound
|
|
106
|
+
- ⊗ Running the full interview or PRD path -- that's interview strategy, not rapid
|
|
107
|
+
- ⊗ Skipping `task check` -- even prototypes must pass basic quality checks
|
|
108
|
+
- ⊗ Omitting the goal statement -- undirected spikes waste time
|
|
109
|
+
- ⊗ Emitting the legacy singular specification artifact or bare-named vBRIEFs -- violates the v0.20 contract (see strategies/v0-20-contract.md)
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## v0.20 Output Shape (s5-migrate-speckit-rapid-enterprise / #1166)
|
|
114
|
+
|
|
115
|
+
This strategy has been migrated to the full v0.20 output shape so rapid-generated projects are accepted by the build skill Pre-Cutover Detection Guard with zero errors on first attempt (resolves the rapid row from the #1166 inconsistency table and the s5 story acceptance criteria).
|
|
116
|
+
|
|
117
|
+
- ! Seed the five lifecycle folders under `vbrief/` if any are missing: `proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`.
|
|
118
|
+
- ! Emit story scope items exclusively as date-prefixed scope vBRIEFs: `vbrief/proposed/YYYY-MM-DD-<kebab-slug>.vbrief.json` (use the run's creation date for the prefix; choose descriptive slugs). Decompose the rapid plan into one or more focused, buildable story vBRIEFs (v0.6 schema) rather than a monolithic legacy spec.
|
|
119
|
+
- ! After the proposed/ stories are written, invoke `task project:render` (run from the repo root) to generate/refresh the complete `vbrief/PROJECT-DEFINITION.vbrief.json` (items registry is derived from the lifecycle folders).
|
|
120
|
+
- ⊗ Never emit `vbrief/specification.vbrief.json` (or any legacy dual-write).
|
|
121
|
+
- ~ `SPECIFICATION.md` at the project root, if produced at all, must be only a read-only derivative (e.g. via `task spec:render` after the vbriefs exist) that includes the v0.20 deprecated-redirect sentinel. The source of truth is the vbrief/ lifecycle stories + PROJECT-DEFINITION.
|
|
122
|
+
- ! Before writing any proposed/ stories or PROJECT-DEFINITION, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for scope items in proposed/; Spec-Generating Guard for PROJECT-DEFINITION).
|
|
123
|
+
- ! Final output tree must pass the deterministic v0.20 strategy output validation gate (s2-deterministic-gate) and the build Pre-Cutover Detection Guard with zero warnings/errors. See full acceptance in the s5 vBRIEF and the 1166 decomposition.
|
|
124
|
+
- ! Cite the canonical contract `strategies/v0-20-contract.md` (s1-contract) for the exact shape and the per-strategy table row.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Artifacts Summary (v0.20)
|
|
129
|
+
|
|
130
|
+
**Rapid (Forced-Light path):**
|
|
131
|
+
|
|
132
|
+
| Artifact | Purpose | Created By |
|
|
133
|
+
|----------|---------|------------|
|
|
134
|
+
| `vbrief/proposed/YYYY-MM-DD-*.vbrief.json` (one or more) | Focused story scope items (date-prefixed per vbrief convention and v0.20 contract) | Rapid |
|
|
135
|
+
| `vbrief/PROJECT-DEFINITION.vbrief.json` | Project identity gestalt + complete scope items registry | `task project:render` (invoked by Rapid) |
|
|
136
|
+
| `vbrief/{proposed,pending,active,completed,cancelled}/` | All five lifecycle folders seeded | Rapid |
|
|
137
|
+
| (optional derivative) `SPECIFICATION.md` | Human-readable plan (includes deprecated-redirect sentinel) | `task spec:render` (if invoked) |
|
|
138
|
+
|
|
139
|
+
**Pre-v0.20 / legacy artifacts that MUST NOT be produced by this strategy:**
|
|
140
|
+
|
|
141
|
+
- `vbrief/specification.vbrief.json`
|
|
142
|
+
- Primary handoff `SPECIFICATION.md` at project root (without sentinel)
|
|
143
|
+
- Bare-named vBRIEFs in proposed/
|
|
144
|
+
|
|
145
|
+
See the full table and rules in `strategies/v0-20-contract.md` (rapid row: Must Create Lifecycle Folders: Yes; Must Write PROJECT-DEFINITION: Yes; Scope vBRIEFs Location: proposed/YYYY-MM-DD-*.vbrief.json only; specification.vbrief.json: Never; SPECIFICATION.md / PROJECT.md: Omit or deprecation redirect only).
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Invoking This Strategy
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
/deft:run:rapid [project name]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Or explicitly:
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
2
|
+
<!-- Purpose: rendered strategy -->
|
|
3
|
+
<!-- Source of truth: packs/strategies/strategies-pack-0.1.json -->
|
|
4
|
+
<!-- Regenerate with: task packs:render -->
|
|
5
|
+
<!-- Edit the source, not this file. Slice instead of loading every strategy: task packs:slice strategies by-trigger --trigger <kw> (or list) -->
|
|
6
|
+
|
|
7
|
+
# Research Strategy
|
|
8
|
+
|
|
9
|
+
Look before you leap — investigate the domain before planning.
|
|
10
|
+
|
|
11
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
12
|
+
|
|
13
|
+
**⚠️ See also**: [strategies/interview.md](./interview.md) | [strategies/discuss.md](./discuss.md) | [strategies/map.md](./map.md)
|
|
14
|
+
|
|
15
|
+
> Adapted from [GSD](https://github.com/gsd-build/get-shit-done) research phase.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
- ~ Before planning a feature in an unfamiliar domain (auth, payments, real-time, etc.)
|
|
22
|
+
- ~ When the feature involves libraries or APIs the agent hasn't used in this project
|
|
23
|
+
- ? Skip for well-understood domains where the agent has strong existing context
|
|
24
|
+
|
|
25
|
+
## Output
|
|
26
|
+
|
|
27
|
+
! Before writing output artifacts, follow the [Preparatory Guard](./artifact-guards.md#preparatory-guard-light).
|
|
28
|
+
|
|
29
|
+
Produce `vbrief/proposed/{feature}-research.vbrief.json` with two mandatory narratives:
|
|
30
|
+
|
|
31
|
+
! After emitting this scope vBRIEF, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
|
|
32
|
+
|
|
33
|
+
### `DontHandRoll` narrative
|
|
34
|
+
|
|
35
|
+
Problems that look simple but have existing, battle-tested solutions.
|
|
36
|
+
|
|
37
|
+
- ! For each problem area, specify: **problem**, **recommended library/tool**, **why not hand-roll**
|
|
38
|
+
- ! Check the project's existing dependencies first -- don't add a library when one is already available
|
|
39
|
+
- ~ Consult official docs for the recommended library (use Context7 or equivalent)
|
|
40
|
+
|
|
41
|
+
**Example narrative content:**
|
|
42
|
+
```
|
|
43
|
+
Problem: JWT validation
|
|
44
|
+
Use: jose
|
|
45
|
+
Rationale: Edge cases in token expiry, key rotation, algorithm confusion
|
|
46
|
+
|
|
47
|
+
Problem: Email templates
|
|
48
|
+
Use: react-email
|
|
49
|
+
Rationale: HTML email rendering is notoriously broken across clients
|
|
50
|
+
|
|
51
|
+
Problem: Rate limiting
|
|
52
|
+
Use: express-rate-limit
|
|
53
|
+
Rationale: IP spoofing, distributed state, Redis integration
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### `CommonPitfalls` narrative
|
|
57
|
+
|
|
58
|
+
What goes wrong in this domain, why, and how to avoid it.
|
|
59
|
+
|
|
60
|
+
- ! For each pitfall: **what happens**, **why it happens**, **how to avoid it**, **warning signs**
|
|
61
|
+
- ~ Informed by library docs, codebase patterns, and known failure modes
|
|
62
|
+
- ~ Prioritize pitfalls that agents specifically tend to hit (stubs, missing error handling, hardcoded values)
|
|
63
|
+
|
|
64
|
+
**Example narrative content:**
|
|
65
|
+
```
|
|
66
|
+
Pitfall: Storing plain-text passwords
|
|
67
|
+
What: User passwords saved without hashing
|
|
68
|
+
Why: Agent implements the happy path and forgets security
|
|
69
|
+
Avoid: Use bcrypt/argon2, never store raw passwords
|
|
70
|
+
Warning signs: No crypto import in auth module, password field stored as-is
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### `IPRisk` narrative (#738)
|
|
74
|
+
|
|
75
|
+
! When the project description, the `Don't Hand-Roll` survey, or the
|
|
76
|
+
research notes reference third-party intellectual property (IP), the
|
|
77
|
+
research phase MUST run the IP-risk heuristic from
|
|
78
|
+
[`../references/ip-risk.md`](../references/ip-risk.md) -- canonical
|
|
79
|
+
implementation `scripts/ip_risk.py:detect_ip_terms` -- and persist a
|
|
80
|
+
plain-English `IPRisk` narrative on the research vBRIEF.
|
|
81
|
+
|
|
82
|
+
The heuristic is permissive on purpose: recognizable IP names (Magic:
|
|
83
|
+
The Gathering, Pokemon, etc.), fictional-universe terms (Hogwarts,
|
|
84
|
+
Tatooine), branded characters, sports leagues, and trademarked products
|
|
85
|
+
all trigger a hit.
|
|
86
|
+
|
|
87
|
+
- ! When `detect_ip_terms` returns at least one hit, the research output
|
|
88
|
+
MUST: (1) ask the explicit monetization-intent question (personal vs
|
|
89
|
+
commercial); (2) emit `plain_risk_summary(hits, intent)` into the
|
|
90
|
+
`IPRisk` narrative; (3) plan to inject the protection scope items
|
|
91
|
+
(`ip_risk_scope_items(intent)`) at SPECIFICATION-generation time.
|
|
92
|
+
- ! On `commercial` intent, surface the **non-optional** lawyer-
|
|
93
|
+
consultation recommendation in the research output -- this carries
|
|
94
|
+
forward into the interview output and the SPECIFICATION via the
|
|
95
|
+
`IPRisk` narrative.
|
|
96
|
+
- ⊗ Treat the absence of detected terms as proof that the project is
|
|
97
|
+
IP-free. The heuristic only knows about the curated lists; when the
|
|
98
|
+
research scope is vague, ask the user directly whether the project is
|
|
99
|
+
based on a game / film / sports league / brand.
|
|
100
|
+
- ⊗ Provide legal advice -- Deft is not a law firm. The only
|
|
101
|
+
recommendation it makes is **consult a lawyer**.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## How Research Feeds Downstream
|
|
106
|
+
|
|
107
|
+
- ! **Planning** reads research before task decomposition — acceptance criteria account for pitfalls
|
|
108
|
+
- ! **Execution** references "Don't Hand-Roll" — agent uses recommended libraries, not custom code
|
|
109
|
+
- ~ **Verification** checks for pitfall warning signs during stub detection
|
|
110
|
+
|
|
111
|
+
## Research Scope Rules
|
|
112
|
+
|
|
113
|
+
- ! Research the **current feature only** — not the entire project
|
|
114
|
+
- ! Time-box research — if it takes longer than the feature, scope is wrong
|
|
115
|
+
- ⊗ Research as a reason to delay execution indefinitely
|
|
116
|
+
- ~ Research persists as a vBRIEF in `vbrief/proposed/`
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Then: Chaining Gate
|
|
121
|
+
|
|
122
|
+
After research is complete, return to the [chaining gate](./interview.md#chaining-gate)
|
|
123
|
+
so the user can run additional preparatory strategies or proceed to spec generation.
|
|
124
|
+
|
|
125
|
+
- ! On completion, register artifacts in `./vbrief/plan.vbrief.json`:
|
|
126
|
+
- Update `completedStrategies`: increment `runCount` for `"research"`,
|
|
127
|
+
append artifact path (`vbrief/proposed/{feature}-research.vbrief.json`)
|
|
128
|
+
- Append the path to the flat `artifacts` array
|
|
129
|
+
- ! Return to [interview.md Chaining Gate](./interview.md#chaining-gate)
|
|
130
|
+
- ! The research findings MUST inform subsequent strategies and spec generation:
|
|
131
|
+
- "Don't Hand-Roll" items become constraints in the specification
|
|
132
|
+
- "Common Pitfalls" become acceptance criteria or NFRs
|
|
133
|
+
- ⊗ End the session after research without returning to the chaining gate
|
|
134
|
+
or the invoking strategy's next-step menu
|
|
135
|
+
|
|
136
|
+
! **Standalone context:** If invoked from a standalone strategy (e.g. map's
|
|
137
|
+
standalone next-step menu) rather than from the interview chaining gate,
|
|
138
|
+
return to the invoking strategy's menu instead.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Workflow
|
|
143
|
+
|
|
144
|
+
1. **Scope** -- Identify the domain and feature boundaries for research
|
|
145
|
+
2. **Survey** -- Check existing project dependencies, official docs, and known pitfalls
|
|
146
|
+
3. **Document** -- Produce `vbrief/proposed/{feature}-research.vbrief.json` with `DontHandRoll` and `CommonPitfalls` narratives
|
|
147
|
+
4. **Chain** -- Return to [interview.md Chaining Gate](./interview.md#chaining-gate), or -- if invoked from a standalone strategy (e.g. map's standalone next-step menu) -- return to the invoking strategy's menu per the [standalone-context rule](#then-chaining-gate) above
|
|
148
|
+
|
|
149
|
+
## Anti-Patterns
|
|
150
|
+
|
|
151
|
+
- ⊗ Building custom solutions for solved problems
|
|
152
|
+
- ⊗ Skipping research for unfamiliar domains ("how hard can auth be?")
|
|
153
|
+
- ⊗ Research that produces a reading list instead of actionable guidance
|
|
154
|
+
- ⊗ Research that doesn't flow into planning (written and never referenced)
|
|
155
|
+
- ⊗ Ending after research without chaining into specification generation (chained mode; in standalone context, returning to the invoking strategy's menu satisfies the completion requirement per the [standalone-context rule](#then-chaining-gate))
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Roadmap Maintenance Strategy (Superseded)
|
|
2
|
+
|
|
3
|
+
> **This strategy is superseded.** Roadmap maintenance is now handled by the
|
|
4
|
+
> refinement skill and deterministic rendering from vBRIEF lifecycle folders.
|
|
5
|
+
>
|
|
6
|
+
> See **[skills/deft-directive-refinement/SKILL.md](../skills/deft-directive-refinement/SKILL.md)**
|
|
7
|
+
> for issue ingest, evaluation, and promotion/demotion workflows.
|
|
8
|
+
>
|
|
9
|
+
> Run `task roadmap:render` to regenerate `ROADMAP.md` from `vbrief/` lifecycle folders.
|