@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.
Files changed (250) hide show
  1. package/.agents/skills/deft/SKILL.md +6 -0
  2. package/.agents/skills/deft-directive-article-review/SKILL.md +11 -0
  3. package/.agents/skills/deft-directive-build/SKILL.md +10 -0
  4. package/.agents/skills/deft-directive-cost/SKILL.md +12 -0
  5. package/.agents/skills/deft-directive-debug/SKILL.md +13 -0
  6. package/.agents/skills/deft-directive-gh-arch/SKILL.md +11 -0
  7. package/.agents/skills/deft-directive-gh-slice/SKILL.md +10 -0
  8. package/.agents/skills/deft-directive-glossary/SKILL.md +10 -0
  9. package/.agents/skills/deft-directive-interview/SKILL.md +9 -0
  10. package/.agents/skills/deft-directive-pre-pr/SKILL.md +9 -0
  11. package/.agents/skills/deft-directive-refinement/SKILL.md +10 -0
  12. package/.agents/skills/deft-directive-release/SKILL.md +12 -0
  13. package/.agents/skills/deft-directive-review-cycle/SKILL.md +10 -0
  14. package/.agents/skills/deft-directive-setup/SKILL.md +10 -0
  15. package/.agents/skills/deft-directive-swarm/SKILL.md +10 -0
  16. package/.agents/skills/deft-directive-sync/SKILL.md +9 -0
  17. package/.agents/skills/deft-directive-triage/SKILL.md +9 -0
  18. package/.agents/skills/deft-directive-write-skill/SKILL.md +9 -0
  19. package/LICENSE.md +22 -0
  20. package/QUICK-START.md +167 -0
  21. package/UPGRADING.md +517 -0
  22. package/coding/build-output.md +28 -0
  23. package/coding/coding.md +235 -0
  24. package/coding/debugging.md +110 -0
  25. package/coding/holzmann.md +96 -0
  26. package/coding/hygiene.md +127 -0
  27. package/coding/security.md +158 -0
  28. package/coding/testing.md +162 -0
  29. package/coding/toolchain.md +44 -0
  30. package/commands.md +300 -0
  31. package/context/context.md +57 -0
  32. package/context/deterministic-split.md +67 -0
  33. package/context/examples.md +26 -0
  34. package/context/fractal-summaries.md +69 -0
  35. package/context/long-horizon.md +46 -0
  36. package/context/spec-deltas.md +177 -0
  37. package/context/tool-design.md +34 -0
  38. package/context/working-memory.md +62 -0
  39. package/contracts/boundary-maps.md +65 -0
  40. package/contracts/deterministic-questions.md +59 -0
  41. package/contracts/hierarchy.md +77 -0
  42. package/conventions/content-manifest.json +399 -0
  43. package/conventions/machine-generated-banner.md +130 -0
  44. package/conventions/references.md +120 -0
  45. package/conventions/rule-ownership.json +382 -0
  46. package/conventions/task-caching.md +43 -0
  47. package/conventions/vbrief-filenames.md +70 -0
  48. package/deployments/README.md +37 -0
  49. package/deployments/agentuity/README.md +138 -0
  50. package/deployments/agentuity/via-cli.md +380 -0
  51. package/deployments/agentuity/via-cloud.md +425 -0
  52. package/deployments/agentuity/via-github-actions.md +664 -0
  53. package/deployments/agentuity/via-gravity-network.md +606 -0
  54. package/deployments/agentuity/via-vpc.md +607 -0
  55. package/deployments/aws/README.md +38 -0
  56. package/deployments/aws/via-app-runner.md +612 -0
  57. package/deployments/aws/via-ecs-fargate.md +561 -0
  58. package/deployments/aws/via-elastic-beanstalk.md +628 -0
  59. package/deployments/aws/via-lambda.md +649 -0
  60. package/deployments/azure/README.md +37 -0
  61. package/deployments/azure/via-aks.md +390 -0
  62. package/deployments/azure/via-app-service.md +564 -0
  63. package/deployments/azure/via-container-apps.md +599 -0
  64. package/deployments/azure/via-functions.md +552 -0
  65. package/deployments/cloud-gov/README.md +63 -0
  66. package/deployments/cloud-gov/agents/compliance-docs.md +154 -0
  67. package/deployments/cloud-gov/agents.md +39 -0
  68. package/deployments/cloud-gov/cicd.md +64 -0
  69. package/deployments/cloud-gov/deployment.md +150 -0
  70. package/deployments/cloud-gov/logging.md +43 -0
  71. package/deployments/cloud-gov/manifest.md +121 -0
  72. package/deployments/cloud-gov/overview.md +58 -0
  73. package/deployments/cloud-gov/security.md +46 -0
  74. package/deployments/cloud-gov/services.md +72 -0
  75. package/deployments/cloud-gov/upstream/README.md +18 -0
  76. package/deployments/cloudflare/README.md +33 -0
  77. package/deployments/cloudflare/via-dashboard.md +83 -0
  78. package/deployments/cloudflare/via-git.md +90 -0
  79. package/deployments/cloudflare/via-github-actions.md +185 -0
  80. package/deployments/cloudflare/via-terraform.md +157 -0
  81. package/deployments/cloudflare/via-wrangler.md +165 -0
  82. package/deployments/fly-io/README.md +37 -0
  83. package/deployments/fly-io/via-dockerfile.md +648 -0
  84. package/deployments/fly-io/via-flyctl.md +653 -0
  85. package/deployments/fly-io/via-github-actions.md +695 -0
  86. package/deployments/fly-io/via-multi-region.md +598 -0
  87. package/deployments/google/README.md +34 -0
  88. package/deployments/google/via-app-engine.md +42 -0
  89. package/deployments/google/via-cloud-functions.md +23 -0
  90. package/deployments/google/via-cloud-run.md +330 -0
  91. package/deployments/google/via-gke.md +23 -0
  92. package/deployments/netlify/README.md +99 -0
  93. package/deployments/netlify/via-cli.md +17 -0
  94. package/deployments/netlify/via-functions.md +19 -0
  95. package/deployments/netlify/via-git.md +25 -0
  96. package/deployments/vercel/README.md +90 -0
  97. package/deployments/vercel/via-api.md +16 -0
  98. package/deployments/vercel/via-cli.md +17 -0
  99. package/deployments/vercel/via-git.md +24 -0
  100. package/docs/BROWNFIELD.md +179 -0
  101. package/docs/getting-started.md +137 -0
  102. package/docs/good-agents-md.md +137 -0
  103. package/events/README.md +89 -0
  104. package/events/event-record.schema.json +26 -0
  105. package/events/registry.json +166 -0
  106. package/events/registry.schema.json +71 -0
  107. package/glossary.md +145 -0
  108. package/incidents/README.md +81 -0
  109. package/incidents/_template.md +38 -0
  110. package/interfaces/cli.md +104 -0
  111. package/interfaces/rest.md +212 -0
  112. package/interfaces/tui.md +242 -0
  113. package/interfaces/web.md +123 -0
  114. package/languages/6502-DASM.md +132 -0
  115. package/languages/c.md +235 -0
  116. package/languages/commands.md +23 -0
  117. package/languages/cpp.md +132 -0
  118. package/languages/csharp.md +259 -0
  119. package/languages/dart.md +183 -0
  120. package/languages/delphi.md +218 -0
  121. package/languages/elixir.md +208 -0
  122. package/languages/go.md +78 -0
  123. package/languages/java.md +278 -0
  124. package/languages/javascript.md +163 -0
  125. package/languages/julia.md +175 -0
  126. package/languages/kotlin.md +193 -0
  127. package/languages/markdown.md +168 -0
  128. package/languages/mermaid.md +146 -0
  129. package/languages/officejs.md +392 -0
  130. package/languages/python.md +209 -0
  131. package/languages/r.md +163 -0
  132. package/languages/rust.md +216 -0
  133. package/languages/sql.md +216 -0
  134. package/languages/swift.md +153 -0
  135. package/languages/typescript.md +132 -0
  136. package/languages/vba.md +279 -0
  137. package/languages/vhdl.md +180 -0
  138. package/languages/visual-basic.md +151 -0
  139. package/languages/zig.md +196 -0
  140. package/meta/SOUL.md +27 -0
  141. package/meta/code-field.md +44 -0
  142. package/meta/morals.md +40 -0
  143. package/meta/philosophy.md +39 -0
  144. package/meta/project.md +49 -0
  145. package/meta/ralph.md +223 -0
  146. package/meta/security.md +80 -0
  147. package/meta/versioning.md +326 -0
  148. package/package.json +22 -0
  149. package/packs/lessons/lessons-pack-0.1.json +553 -0
  150. package/packs/patterns/patterns-pack-0.1.json +57 -0
  151. package/packs/rules/rules-pack-0.1.json +4767 -0
  152. package/packs/skills/skills-pack-0.1.json +262 -0
  153. package/packs/strategies/strategies-pack-0.1.json +167 -0
  154. package/packs/swarm-spec/swarm-spec-pack-0.1.json +17 -0
  155. package/patterns/executor-layer-credentials.md +227 -0
  156. package/patterns/llm-app.md +156 -0
  157. package/patterns/multi-agent.md +278 -0
  158. package/patterns/prompt-assembly-layer-ordering.md +154 -0
  159. package/patterns/role-as-overlay.md +179 -0
  160. package/platforms/2600.md +137 -0
  161. package/platforms/unity.md +329 -0
  162. package/references/composer-skill-porting.md +152 -0
  163. package/references/cost-models.md +163 -0
  164. package/references/ip-risk.md +246 -0
  165. package/references/plain-english-ux.md +275 -0
  166. package/resilience/context-pruning.md +67 -0
  167. package/resilience/continue-here.md +62 -0
  168. package/scm/changelog.md +276 -0
  169. package/scm/git.md +139 -0
  170. package/scm/github.md +265 -0
  171. package/secrets/.gitkeep +0 -0
  172. package/skills/deft-build/SKILL.md +20 -0
  173. package/skills/deft-directive-article-review/SKILL.md +156 -0
  174. package/skills/deft-directive-build/SKILL.md +302 -0
  175. package/skills/deft-directive-cost/SKILL.md +201 -0
  176. package/skills/deft-directive-debug/SKILL.md +140 -0
  177. package/skills/deft-directive-decompose/SKILL.md +96 -0
  178. package/skills/deft-directive-gh-arch/SKILL.md +160 -0
  179. package/skills/deft-directive-gh-slice/SKILL.md +199 -0
  180. package/skills/deft-directive-glossary/SKILL.md +118 -0
  181. package/skills/deft-directive-interview/SKILL.md +528 -0
  182. package/skills/deft-directive-pre-pr/SKILL.md +131 -0
  183. package/skills/deft-directive-probe/SKILL.md +127 -0
  184. package/skills/deft-directive-refinement/SKILL.md +403 -0
  185. package/skills/deft-directive-release/SKILL.md +266 -0
  186. package/skills/deft-directive-review-cycle/SKILL.md +401 -0
  187. package/skills/deft-directive-setup/SKILL.md +717 -0
  188. package/skills/deft-directive-swarm/SKILL.md +989 -0
  189. package/skills/deft-directive-sync/SKILL.md +288 -0
  190. package/skills/deft-directive-triage/SKILL.md +137 -0
  191. package/skills/deft-directive-write-skill/SKILL.md +169 -0
  192. package/skills/deft-interview/SKILL.md +16 -0
  193. package/skills/deft-pre-pr/SKILL.md +16 -0
  194. package/skills/deft-review-cycle/SKILL.md +16 -0
  195. package/skills/deft-roadmap-refresh/SKILL.md +16 -0
  196. package/skills/deft-setup/SKILL.md +20 -0
  197. package/skills/deft-swarm/SKILL.md +16 -0
  198. package/skills/deft-sync/SKILL.md +16 -0
  199. package/strategies/README.md +83 -0
  200. package/strategies/artifact-guards.md +85 -0
  201. package/strategies/bdd.md +115 -0
  202. package/strategies/brownfield.md +7 -0
  203. package/strategies/discuss.md +129 -0
  204. package/strategies/emit-hints.md +69 -0
  205. package/strategies/enterprise.md +193 -0
  206. package/strategies/interview.md +551 -0
  207. package/strategies/map.md +179 -0
  208. package/strategies/probe.md +151 -0
  209. package/strategies/rapid.md +155 -0
  210. package/strategies/research.md +155 -0
  211. package/strategies/roadmap.md +9 -0
  212. package/strategies/speckit.md +437 -0
  213. package/strategies/v0-20-contract.md +134 -0
  214. package/strategies/yolo.md +169 -0
  215. package/swarm/swarm.md +300 -0
  216. package/templates/COST-ESTIMATE.md +114 -0
  217. package/templates/PULL_REQUEST_TEMPLATE.md +35 -0
  218. package/templates/agent-prompt-preamble.md +409 -0
  219. package/templates/agents-entry.md +211 -0
  220. package/templates/agents-entry.placeholders.md +75 -0
  221. package/templates/embed.go +20 -0
  222. package/templates/embed_test.go +36 -0
  223. package/templates/make-spec-example.md +9 -0
  224. package/templates/make-spec.md +246 -0
  225. package/templates/project.md.template +52 -0
  226. package/templates/specification.md +1 -0
  227. package/templates/swarm-greptile-poller-prompt.md +556 -0
  228. package/templates/user.md.template +31 -0
  229. package/tools/RWLDL.md +80 -0
  230. package/tools/greptile.md +141 -0
  231. package/tools/installer.md +23 -0
  232. package/tools/taskfile-migration.md +32 -0
  233. package/tools/taskfile.md +185 -0
  234. package/tools/telemetry.md +285 -0
  235. package/vbrief/schemas/cache-meta.schema.json +137 -0
  236. package/vbrief/schemas/candidates.schema.json +130 -0
  237. package/vbrief/schemas/codebase-map.schema.json +213 -0
  238. package/vbrief/schemas/lessons-pack.schema.json +134 -0
  239. package/vbrief/schemas/patterns-pack.schema.json +84 -0
  240. package/vbrief/schemas/rules-pack.schema.json +105 -0
  241. package/vbrief/schemas/skills-pack.schema.json +94 -0
  242. package/vbrief/schemas/slices.schema.json +87 -0
  243. package/vbrief/schemas/strategies-pack.schema.json +89 -0
  244. package/vbrief/schemas/swarm-spec-pack.schema.json +84 -0
  245. package/vbrief/schemas/vbrief-core.schema.json +1022 -0
  246. package/vbrief/vbrief.md +684 -0
  247. package/verification/integration.md +76 -0
  248. package/verification/plan-checking.md +85 -0
  249. package/verification/uat.md +60 -0
  250. package/verification/verification.md +117 -0
@@ -0,0 +1,437 @@
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
+ # SpecKit Strategy
8
+
9
+ A spec-driven development workflow inspired by [GitHub's spec-kit](https://github.com/github/spec-kit), with a Phase 4.5 readiness layer for decomposing broad implementation scopes into swarm-safe stories. Fully migrated to v0.20 (phases + stories emitted as date-prefixed vBRIEFs in proposed/; no legacy specification.vbrief.json).
10
+
11
+ **v0.20 note (s5-migrate-speckit-rapid-enterprise / #1166):** Speckit now emits only the canonical v0.20 shape (date-prefixed phase/epic + story vBRIEFs in proposed/, full PROJECT-DEFINITION.vbrief.json via task project:render or spec:render post, seeded lifecycle folders, no legacy specification.vbrief.json). Phase 4/4.5 scopes go to proposed/ (not pending/). See the dedicated ## v0.20 Output Shape section, the Artifacts Summary updated to the contract table, 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/discuss.md](./discuss.md) | [core/glossary.md](../glossary.md) | [strategies/v0-20-contract.md](./v0-20-contract.md) | [artifact-guards.md](./artifact-guards.md) | [vbrief/vbrief.md](../vbrief/vbrief.md)
16
+
17
+ ## When to Use
18
+
19
+ - ~ Large or complex projects with multiple contributors
20
+ - ~ Projects requiring formal specification review
21
+ - ~ When parallel agent development is planned
22
+ - ~ Enterprise environments with compliance requirements
23
+ - ? Skip Phase 1 if PROJECT-DEFINITION.vbrief.json Principles narrative already defined
24
+
25
+ ## Workflow Overview
26
+
27
+ ```mermaid
28
+ flowchart LR
29
+ subgraph speckit ["SpecKit Strategy (v0.20)"]
30
+ P["📜 Principles<br/><i>PROJECT-DEFINITION.vbrief.json</i>"]
31
+ S["📝 Specify<br/><i>WHAT/WHY → proposed/YYYY-MM-DD-*.vbrief.json</i>"]
32
+ PL["🏗️ Plan<br/><i>HOW → proposed/YYYY-MM-DD-*.vbrief.json</i>"]
33
+ T["✅ Scope<br/><i>Phase/epic vBRIEFs in proposed/</i>"]
34
+ D["🧩 Decompose<br/><i>Story vBRIEFs in proposed/</i>"]
35
+ I["🔨 Implement<br/><i>Execute</i>"]
36
+ end
37
+
38
+ P -->|"Established"| S
39
+ S -->|"Approved"| PL
40
+ PL -->|"Reviewed"| T
41
+ T -->|"Approved"| D
42
+ D -->|"Ready stories"| I
43
+
44
+ style P fill:#c4b5fd,stroke:#7c3aed,color:#000
45
+ style S fill:#fef08a,stroke:#ca8a04,color:#000
46
+ style PL fill:#6ee7b7,stroke:#059669,color:#000
47
+ style T fill:#7dd3fc,stroke:#0284c7,color:#000
48
+ style D fill:#fde68a,stroke:#d97706,color:#000
49
+ style I fill:#f0abfc,stroke:#a855f7,color:#000
50
+ ```
51
+
52
+ (See ## v0.20 Output Shape for exact artifact rules, the mandatory `task project:render` / `task spec:render` post calls, and citation of strategies/v0-20-contract.md.)
53
+
54
+ ---
55
+
56
+ ## Phase 1: Principles
57
+
58
+ **Goal:** Establish immutable project principles before any specification.
59
+
60
+ **Output:** `Principles` narrative in `vbrief/PROJECT-DEFINITION.vbrief.json` (v0.20: plus any early proposed/ context vBRIEFs if needed)
61
+
62
+ ! Before writing output artifacts, follow the guards in [artifact-guards.md](./artifact-guards.md) (Preparatory Guard for proposed/ items; Spec-Generating Guard for PROJECT-DEFINITION).
63
+
64
+ ### Process
65
+
66
+ - ! Define 3-5 non-negotiable principles
67
+ - ! Include at least one anti-principle (⊗)
68
+ - ! Write principles as the `Principles` narrative in `vbrief/PROJECT-DEFINITION.vbrief.json`
69
+ - ~ Interview stakeholders about architectural constraints
70
+ - ⊗ Proceed without defined principles
71
+ - ⊗ Create a standalone `project.md` -- principles belong in PROJECT-DEFINITION.vbrief.json
72
+
73
+ ### Transition Criteria
74
+
75
+ - ! `Principles` narrative in `vbrief/PROJECT-DEFINITION.vbrief.json` is complete
76
+ - ! All stakeholders have reviewed principles
77
+ - ~ No `[NEEDS CLARIFICATION]` markers remain
78
+
79
+ ---
80
+
81
+ ## Phase 2: Specify (WHAT/WHY)
82
+
83
+ **Goal:** Document WHAT to build and WHY, without implementation details.
84
+
85
+ **Output:** WHAT/WHY narratives in date-prefixed vBRIEF(s) in `vbrief/proposed/YYYY-MM-DD-*.vbrief.json` (v0.20; no singular specification.vbrief.json)
86
+
87
+ ! 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).
88
+
89
+ Write the following narrative keys into the proposed/ vBRIEF `plan.narratives`
90
+
91
+ - `ProblemStatement` -- what problem this solves
92
+ - `Goals` -- desired outcomes
93
+ - `UserStories` -- user scenarios with priorities (P1, P2, P3) and acceptance scenarios (Given/When/Then)
94
+ - `Requirements` -- numbered functional (FR-001) and non-functional (NFR-001) requirements
95
+ - `SuccessMetrics` -- measurable success criteria (SC-001)
96
+ - `EdgeCases` -- boundary conditions and error handling
97
+
98
+ ### Guidelines
99
+
100
+ - ! Focus on WHAT users need and WHY
101
+ - ! Use `[NEEDS CLARIFICATION: question]` for any ambiguity
102
+ - ! Number all requirements (FR-001, NFR-001) for traceability
103
+ - ! Prioritize user stories (P1, P2, P3)
104
+ - ⊗ Include HOW to implement (no tech stack, APIs, code)
105
+ - ⊗ Guess when uncertain -- mark it instead
106
+ - ⊗ Create `specs/` directories or standalone `spec.md` files -- all content goes in the proposed/ date-prefixed vBRIEF(s)
107
+
108
+ ### Transition Criteria
109
+
110
+ - ! No `[NEEDS CLARIFICATION]` markers remain in narratives
111
+ - ! All user stories have acceptance scenarios
112
+ - ! Requirements are testable and unambiguous
113
+ - ! Stakeholders have approved specification narratives
114
+
115
+ ---
116
+
117
+ ## Phase 3: Plan (HOW)
118
+
119
+ **Goal:** Document HOW to build it with technical decisions.
120
+
121
+ **Input:** Approved WHAT/WHY narratives in the proposed/ date-prefixed vBRIEF(s) from Phase 2
122
+
123
+ **Output:** HOW narratives enriching the proposed/ vBRIEF(s) (v0.20; no singular specification.vbrief.json)
124
+
125
+ Add the following narrative keys to the proposed/ vBRIEF `plan.narratives`:
126
+
127
+ - `Architecture` -- high-level system design (components, data model, API contracts)
128
+ - `TechDecisions` -- technology choices with rationale
129
+ - `ImplementationPhases` -- phased delivery plan with dependencies
130
+ - `PreImplementationGates` -- simplicity gate, test-first gate
131
+
132
+ ### Guidelines
133
+
134
+ - ! Reference spec requirements (FR-001, etc.) from Phase 2 narratives
135
+ - ! Document rationale for every technology choice
136
+ - ! Pass all pre-implementation gates before proceeding
137
+ - ⊗ Write implementation code
138
+ - ⊗ Create `specs/` directories or standalone `plan.md` files -- all content goes in the proposed/ date-prefixed vBRIEF(s)
139
+
140
+ ### Post-Phase 3 Transition Gate: Render for Review
141
+
142
+ ! Phase 3 -> Phase 4 is gated on an explicit render-and-review step, mirroring the Phase 2 approval gate. Complete the steps below **in order** before advancing. [skills/deft-directive-setup/SKILL.md](../skills/deft-directive-setup/SKILL.md) is required to invoke `task spec:render` at this boundary when running speckit interactively; the gate fails silently otherwise (yolo-mode agents used to skip it -- that is what this gate exists to prevent).
143
+
144
+ 1. ! Run `task spec:render` (or `task project:render`) to (re-)produce derivative views from the proposed/ vBRIEFs + PROJECT-DEFINITION if needed for human review.
145
+ 2. ! Confirm any rendered `SPECIFICATION.md` (if emitted as derivative) exists at the project root and contains the `<!-- deft:deprecated-redirect -->` sentinel.
146
+ 3. ! The proposed/ vBRIEFs + PROJECT-DEFINITION are the source of truth. Derivatives are read-only exports.
147
+ 4. ! Human reviewer approves (or requests changes). On approval, proceed to Phase 4.
148
+
149
+ ### Transition Criteria
150
+
151
+ - ! All gates pass (or exceptions documented)
152
+ - ! Every spec requirement maps to a plan element
153
+ - ! Architecture reviewed and approved
154
+ - ! **Phase 3 -> Phase 4 transition criterion:** The proposed/ date-prefixed vBRIEF(s) + PROJECT-DEFINITION represent the approved spec (agents MUST NOT advance to Phase 4 without review of the v0.20 artifacts).
155
+
156
+ ---
157
+
158
+ ## Phase 4: Implementation Phase / Epic Scope Emission (v0.20)
159
+
160
+ **Goal:** Emit one broad scope vBRIEF per implementation phase or epic (plus stories via 4.5) so downstream tooling (`task roadmap:render`, `task project:render`, and Phase 4.5 decomposition) can operate against the lifecycle model described in [vbrief/vbrief.md](../vbrief/vbrief.md). All emitted to `proposed/` per v0.20 contract.
161
+
162
+ **Input:** Approved HOW narratives in the proposed/ date-prefixed vBRIEF(s) from Phase 3 (`ImplementationPhases` narrative describes IP-1..IP-N).
163
+
164
+ **Output:** N phase/epic scope vBRIEFs in `./vbrief/proposed/`, one per implementation phase or epic, using the filename convention `YYYY-MM-DD-ip<NNN>-<slug>.vbrief.json` (NNN = 3-digit zero-padded, 001..N). See [vbrief/vbrief.md — speckit Phase 4 scope vBRIEFs](../vbrief/vbrief.md#speckit-phase-4-scope-vbriefs) for the canonical convention. (v0.20: proposed/ not pending/.)
165
+
166
+ Phase 4 scopes are planning containers. They MAY keep broad acceptance in `plan.narratives.Acceptance` and MAY have `plan.items: []`. They are not valid concurrent swarm worker inputs unless explicitly marked as a single-story scope. Broad phase/epic scopes MUST pass through Phase 4.5 before swarm allocation.
167
+
168
+ ! After emitting the phase/epic scope vBRIEF(s) to `vbrief/proposed/`, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
169
+
170
+ ### Scope vBRIEF Shape
171
+
172
+ For each implementation phase IP-N, write a scope vBRIEF with:
173
+
174
+ - ! `vBRIEFInfo.version` — current `scripts/_vbrief_build.py::EMITTED_VBRIEF_VERSION`
175
+ - ! `plan.title` — phase title (e.g. "IP-3: Implement data layer")
176
+ - ! `plan.status` — `pending` (or proposed per lifecycle)
177
+ - ! `plan.narratives.Description` — short human summary of the phase
178
+ - ! `plan.narratives.Acceptance` — acceptance criteria copied from the spec
179
+ - ! `plan.narratives.Traces` — FR/NFR/IP IDs the phase covers (e.g. `FR-001, FR-003, NFR-002, IP-3`)
180
+ - ! `plan.references` — link back to the parent proposed/ vBRIEF from Phase 3 (`type: x-vbrief/plan`, `TrustLevel: internal`)
181
+ - ! `plan.metadata.kind` — `phase` or `epic`
182
+ - ! `plan.metadata.dependencies` — array of IP IDs this phase depends on / is blocked by (plan-level; mirrors the `edges[].blocks` structure used in earlier drafts)
183
+
184
+ ```json
185
+ {
186
+ "vBRIEFInfo": { "version": "<EMITTED_VBRIEF_VERSION>" },
187
+ "plan": {
188
+ "title": "IP-3: Implement data layer",
189
+ "status": "pending",
190
+ "narratives": {
191
+ "Description": "Stand up the data layer described in the Phase 3 proposed/ vBRIEF Architecture.",
192
+ "Acceptance": "Repository interfaces defined; CRUD round-trips pass integration tests.",
193
+ "Traces": "FR-001, FR-003, NFR-002, IP-3"
194
+ },
195
+ "metadata": {
196
+ "kind": "phase",
197
+ "dependencies": ["ip-1", "ip-2"]
198
+ },
199
+ "references": [
200
+ { "type": "x-vbrief/plan", "uri": "2026-05-26-ip002-plan.vbrief.json", "TrustLevel": "internal" }
201
+ ],
202
+ "items": []
203
+ }
204
+ }
205
+ ```
206
+
207
+ ### plan.vbrief.json — Session Tracker Only
208
+
209
+ - ! `plan.vbrief.json` reverts to its canonical session-todo role defined in [vbrief/vbrief.md — plan.vbrief.json](../vbrief/vbrief.md#planvbriefjson). It is the agent-private tactical plan for the current session, not the project-wide IP list.
210
+ - ! While working on a specific scope vBRIEF, `plan.vbrief.json` MUST carry a `planRef` to that scope vBRIEF in `vbrief/proposed/` or `vbrief/active/`.
211
+ - ⊗ Emit the project-wide Phase 4 task list to `plan.vbrief.json` — write per-IP scope vBRIEFs to `vbrief/proposed/` instead.
212
+
213
+ ### Migrating Legacy speckit Projects
214
+
215
+ - ~ Projects that already emitted a speckit-shaped `plan.vbrief.json` (project-wide IP list) can convert to the new model with:
216
+ ```
217
+ python scripts/migrate_vbrief.py --speckit-plan vbrief/plan.vbrief.json
218
+ ```
219
+ The translator emits one scope vBRIEF per IP into `vbrief/proposed/` (3-digit padded filenames, bilingual `edges` reader so both `from/to` and legacy `source/target` translate correctly) and writes the remaining session-level scaffold back to `plan.vbrief.json`.
220
+
221
+ ### Guidelines
222
+
223
+ - ! Derive one scope vBRIEF per implementation phase from `ImplementationPhases`
224
+ - ! Populate `Description`, `Acceptance`, and `Traces` narratives per [vbrief/vbrief.md — canonical narrative keys](../vbrief/vbrief.md#scope-vbrief-narrative-keys)
225
+ - ! Use `plan.metadata.dependencies` (plan-level) rather than item-level `blocks` edges for cross-scope dependencies
226
+ - ! Use `plan.metadata.kind = "phase"` or `"epic"` for broad implementation scopes
227
+ - ~ Size each phase for 1-4 hours of work so the swarm allocator can distribute cleanly
228
+ - ⊗ Create phases not traceable to a spec requirement
229
+ - ⊗ Allocate Phase 4 phase/epic scope vBRIEFs directly to concurrent swarm workers
230
+
231
+ ### Transition Criteria
232
+
233
+ - ! Every implementation phase from `ImplementationPhases` has a matching scope vBRIEF in `./vbrief/proposed/`
234
+ - ! Each scope vBRIEF has `Description`, `Acceptance`, and `Traces` narratives
235
+ - ! Each scope vBRIEF carries a `references` entry linking back to the parent Phase 3 proposed/ vBRIEF with `TrustLevel: internal`
236
+ - ! Cross-scope dependencies in `plan.metadata.dependencies` form a valid DAG (no cycles)
237
+
238
+ ---
239
+
240
+ ## Phase 4.5: Story Decomposition / Swarm Readiness
241
+
242
+ **Goal:** Convert approved Phase 4 phase/epic scopes into child story vBRIEFs suitable for parallel agents.
243
+
244
+ **Input:** Phase 4 phase/epic vBRIEFs in `./vbrief/pending/` or `./vbrief/active/`.
245
+
246
+ **Output:** Story-level child vBRIEFs whose executable acceptance criteria live in `plan.items` and whose `plan.metadata.swarm` contract proves they are safe to allocate.
247
+
248
+ ! After emitting the story vBRIEF(s) to `vbrief/proposed/`, surface the GitHub-issue tracking hint from [emit-hints.md](./emit-hints.md) — name all three patterns (none / `--umbrella` / `--per-vbrief`).
249
+
250
+ ### Process
251
+
252
+ 1. ! Inspect approved specification narratives and Phase 4 scope vBRIEFs.
253
+ 2. ! Identify `plan.metadata.kind = "phase"` or `"epic"` scopes that are too broad for direct implementation.
254
+ 3. ! Draft a deterministic decomposition proposal: stories, dependencies, expected file scope, verification commands, traces, and conflict groups.
255
+ 4. ! Store the temporary proposal artifact under `vbrief/.eval/decompositions/<parent-slug>.json`; derive `<parent-slug>` from the parent vBRIEF filename by removing `.vbrief.json` and any leading `YYYY-MM-DD-` date prefix.
256
+ 5. ! Ask for explicit user approval before writing child story vBRIEFs.
257
+ 6. ! Validate the approved draft with `task scope:decompose -- <parent.vbrief.json> --draft vbrief/.eval/decompositions/<parent-slug>.json --check`, then apply it without `--check`.
258
+ 7. ! Run `task swarm:readiness -- vbrief/active/*.vbrief.json` before concurrent allocation, or point it at the candidate child story files for a dry readiness review before activation.
259
+
260
+ ### Story vBRIEF Requirements
261
+
262
+ Each Phase 4.5 child story vBRIEF MUST include:
263
+
264
+ - ! `plan.metadata.kind = "story"`
265
+ - ! non-empty `plan.items`
266
+ - ! `plan.narratives.Description` with at least two concrete sentences
267
+ - ! `plan.narratives.ImplementationPlan` with at least two concrete implementation steps
268
+ - ! executable acceptance in each story's `plan.items`
269
+ - ! `plan.narratives.UserStory` in the form `As a <role>, I want <capability>, so that <outcome>.`
270
+ - ! 2-5 concrete, observable acceptance criteria unless explicitly justified
271
+ - ! explicit dependencies in `plan.metadata.swarm.depends_on`
272
+ - ! traceability back to requirements via `Traces` narratives or explicit trace justification
273
+ - ! expected file scope in `plan.metadata.swarm.file_scope`
274
+ - ! verify commands in `plan.metadata.swarm.verify_commands`
275
+ - ! expected outputs/evidence in `plan.metadata.swarm.expected_outputs`
276
+ - ! swarm readiness metadata in `plan.metadata.swarm`
277
+ - ! `planRef` pointing to the parent phase/epic scope
278
+ - ! parent phase/epic `references` updated to point to every child story
279
+
280
+ ### Decomposition Command
281
+
282
+ Use the deterministic command surface:
283
+
284
+ ```bash
285
+ task scope:decompose -- vbrief/pending/2026-05-12-ip001-auth.vbrief.json --draft vbrief/.eval/decompositions/ip001-auth.json --check
286
+ task scope:decompose -- vbrief/pending/2026-05-12-ip001-auth.vbrief.json --draft vbrief/.eval/decompositions/ip001-auth.json
287
+ task scope:decompose -- --check
288
+ ```
289
+
290
+ The draft JSON is a temporary proposal artifact, not a vBRIEF. Agents SHOULD write draft proposals under `vbrief/.eval/decompositions/`, which is gitignored specifically for local decomposition scratch. Derive `<parent-slug>` from the parent vBRIEF filename by removing `.vbrief.json` and any leading `YYYY-MM-DD-` date prefix. Agents MUST NOT leave decomposition draft JSON files at the workspace root. The command validates and applies a proposed decomposition rather than freely inventing one. It creates generated child story vBRIEFs as lifecycle artifacts, defaulting to `vbrief/pending/`, preserves origin/provenance references, sets each child `planRef` to the parent scope, updates parent references to include children, validates the dependency DAG, rejects dependency cycles, and rejects ready stories missing user-story shape, concrete observable acceptance, narrow file scope, focused verify commands, or traces. Parent `plan.items` are input signals, not automatic child stories.
291
+
292
+ Parent phase/epic acceptance MAY remain in `plan.narratives.Acceptance` as context. Executable acceptance for swarm work MUST be redistributed into child story `plan.items`.
293
+
294
+ ### Swarm Readiness Command
295
+
296
+ Use the readiness gate before swarm allocation:
297
+
298
+ ```bash
299
+ task swarm:readiness -- vbrief/active/*.vbrief.json
300
+ ```
301
+
302
+ The readiness report lists ready stories, blocked stories, decomposition-needed epics/phases, dependency waves, conflict groups, a file-overlap matrix, and missing fields. It exits non-zero when candidate work is not swarm-ready for concurrent allocation. `readiness=ready` means ready for concurrent allocation; sequential-safe or low-confidence work MUST use another state such as `sequential` or `needs_refinement` and will fail this gate until refined or scheduled outside concurrent swarm allocation.
303
+
304
+ ### Transition Criteria
305
+
306
+ - ! Candidate swarm work consists only of `kind=story` vBRIEFs
307
+ - ! Every candidate story has non-empty `plan.items`
308
+ - ! Every candidate story has a product-shaped `UserStory`, 2-5 observable acceptance criteria unless justified, file scope, verify commands, traces or trace justification, and readiness metadata.
309
+ - ! Dependencies resolve and form a DAG
310
+ - ! No unsafe file-scope overlap exists among parallel stories
311
+ - ! No `size=large` story is marked `parallel_safe=true`
312
+ - ! No ready story uses broad file globs, only generic verification such as `task check`, `parallel_safe=false`, or `file_scope_confidence=low`
313
+
314
+ ---
315
+
316
+ ## Phase 5: Implement
317
+
318
+ **Goal:** Execute scope vBRIEFs following test-first discipline.
319
+
320
+ **Input:** Story-level scope vBRIEFs in `./vbrief/pending/` (promote to `./vbrief/active/` via `task scope:activate` when work begins). `./vbrief/plan.vbrief.json` holds the current session's tactical todo list and carries a `planRef` to the active scope. Concurrent swarm implementation requires Phase 4.5-ready stories.
321
+
322
+ ### Process
323
+
324
+ - ! Write tests BEFORE implementation (Red)
325
+ - ! Implement minimal code to pass tests (Green)
326
+ - ! Refactor while keeping tests green (Refactor)
327
+ - ! Update scope vBRIEF `plan.status` and folder via `task scope:*` commands as work progresses (`pending` → `running` → `completed`)
328
+ - ! Update `./vbrief/plan.vbrief.json` session todos as tactical steps progress (session-scoped; do NOT put the project-wide IP list here)
329
+ - ~ Work on story vBRIEFs whose `plan.metadata.swarm.depends_on` entries are already completed in parallel when possible
330
+
331
+ ### File Creation Order
332
+
333
+ 1. Create contract/API specifications
334
+ 2. Create test files (contract → integration → unit)
335
+ 3. Create source files to make tests pass
336
+ 4. Refactor and document
337
+
338
+ ### Guidelines
339
+
340
+ - ! Follow the `Principles` narrative in `vbrief/PROJECT-DEFINITION.vbrief.json` throughout
341
+ - ! Move scope vBRIEFs through lifecycle folders using `task scope:activate|complete|cancel|block|unblock`
342
+ - ⊗ Implement without failing tests first
343
+ - ⊗ Skip refactoring phase
344
+ - ⊗ Write the project-wide IP list to `plan.vbrief.json` — use `vbrief/pending/` scope vBRIEFs as the durable task tracker
345
+ - ⊗ Allocate broad `kind=epic` or `kind=phase` scopes to concurrent swarm workers before decomposition
346
+
347
+ ---
348
+
349
+ ## Artifacts Summary (pre-v0.20, for reference only during migration)
350
+
351
+ | Phase | Artifact | Purpose |
352
+ |-------|----------|---------|
353
+ | 1. Principles | `vbrief/PROJECT-DEFINITION.vbrief.json` | Governing rules (Principles narrative) |
354
+ | 2. Specify | date-prefixed in `vbrief/proposed/` | WHAT/WHY narratives (v0.20) |
355
+ | 3. Plan | date-prefixed in `vbrief/proposed/` | HOW narratives (enriches Phase 2; v0.20) |
356
+ | 3b. Render (derivative) | `SPECIFICATION.md` (via `task spec:render`, sentinel only) | Read-only human review export (optional) |
357
+ | 3c. Render PRD (derivative) | `PRD.md` (via `task prd:render`, sentinel only) | Optional stakeholder-review export |
358
+ | 4. Tasks | `./vbrief/proposed/YYYY-MM-DD-ip<NNN>-<slug>.vbrief.json` (one per IP/epic) | Phase/epic scope vBRIEFs (v0.20: proposed/) drive roadmap/project render + decomposition |
359
+ | 4.5. Story decomposition | Child story vBRIEFs with `plan.metadata.swarm` in proposed/ | Swarm-ready executable units (v0.20) |
360
+ | 4b. Session todos | `./vbrief/plan.vbrief.json` | Session-level tactical plan (carries `planRef` to active scope) |
361
+ | 5. Implement | Code + tests | Working software, optionally via swarm |
362
+
363
+ ## Directory Structure (v0.20)
364
+
365
+ ```
366
+ project/
367
+ ├── vbrief/
368
+ │ ├── PROJECT-DEFINITION.vbrief.json # Phase 1: Principles narrative
369
+ │ ├── proposed/ # Phase 2+: date-prefixed WHAT/WHY/HOW + IP scopes + stories
370
+ │ │ └── YYYY-MM-DD-*.vbrief.json
371
+ │ │ └── YYYY-MM-DD-ip001-....vbrief.json
372
+ │ ├── plan.vbrief.json # Phase 4b: session todos (planRef to active scope)
373
+ │ └── pending/ active/ etc. # Lifecycle (seeded empty or with promoted)
374
+ ├── SPECIFICATION.md # Optional derivative (task spec:render; sentinel only)
375
+ ├── PRD.md # Optional derivative (task prd:render; sentinel only)
376
+ └── src/ # Phase 5
377
+ ```
378
+
379
+ (See ## v0.20 Output Shape and `strategies/v0-20-contract.md` for the authoritative table row for speckit.)
380
+
381
+ ---
382
+
383
+ ## v0.20 Output Shape (s5-migrate-speckit-rapid-enterprise / #1166)
384
+
385
+ This strategy has been migrated to the full v0.20 output shape so speckit-generated projects are accepted by the build skill Pre-Cutover Detection Guard with zero errors on first attempt (resolves the speckit row from the #1166 inconsistency table and the s5 story acceptance criteria, including story-level vBRIEFs in proposed/ instead of only phase/epic in pending/).
386
+
387
+ - ! Seed the five lifecycle folders under `vbrief/` if any are missing: `proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`.
388
+ - ! Emit all scope items (principles context, spec phases/stories, implementation phases/epics) exclusively as date-prefixed scope vBRIEFs in `vbrief/proposed/YYYY-MM-DD-<kebab-slug>.vbrief.json` (or the ipNNN convention for phases per vbrief.md). For speckit, phases use `YYYY-MM-DD-ip<NNN>-<slug>.vbrief.json` in proposed/; stories from Phase 4.5 also in proposed/. Decompose plans into focused, buildable vBRIEFs (v0.6 schema) rather than a monolithic legacy spec.
389
+ - ! After the proposed/ vBRIEFs are written (or at Phase 3/4 boundaries), invoke `task project:render` (or `task spec:render` post) from the repo root to generate/refresh the complete `vbrief/PROJECT-DEFINITION.vbrief.json` (items registry derived from the lifecycle folders).
390
+ - ⊗ Never emit `vbrief/specification.vbrief.json` (or any legacy dual-write).
391
+ - ~ `SPECIFICATION.md` / `PRD.md` at the project root, if produced at all, must be only read-only derivatives that include the v0.20 deprecated-redirect sentinel. The source of truth is the vbrief/ lifecycle (proposed/ phases + stories) + PROJECT-DEFINITION.
392
+ - ! Before writing any proposed/ vBRIEFs 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).
393
+ - ! 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 (a1: date-prefixed stories in proposed/ + deterministic gate; a2: speckit story-level in proposed/ not only pending phases; a3: no legacy specification.vbrief.json) and the 1166 decomposition.
394
+ - ! Cite the canonical contract `strategies/v0-20-contract.md` (s1-contract) for the exact shape and the per-strategy table row (speckit: Yes lifecycle; Yes PROJECT-DEFINITION Phase 1+; proposed/ (phases + stories date-prefixed); Never specification.vbrief.json; Omit (use task spec:render post) for SPEC/PRD).
395
+
396
+ ---
397
+
398
+ ## Artifacts Summary (v0.20)
399
+
400
+ **Speckit (full 5-phase with Phase 4/4.5):**
401
+
402
+ | Artifact | Purpose | Created By |
403
+ |----------|---------|------------|
404
+ | `vbrief/PROJECT-DEFINITION.vbrief.json` | Principles + full items registry | Speckit Phase 1 + `task project:render` |
405
+ | `vbrief/proposed/YYYY-MM-DD-*.vbrief.json` + `YYYY-MM-DD-ipNNN-*.vbrief.json` | All spec (WHAT/WHY/HOW) + phases/epics/stories (date-prefixed; per v0.20 contract and vbrief.md speckit convention) | Speckit Phases 2-4.5 |
406
+ | `vbrief/{proposed,pending,active,completed,cancelled}/` | All five lifecycle folders seeded | Speckit |
407
+ | (optional derivative) `SPECIFICATION.md` / `PRD.md` | Human-readable (includes deprecated-redirect sentinel only) | `task spec:render` / `task prd:render` (post) |
408
+ | `vbrief/plan.vbrief.json` | Session-level tactical plan (planRef to active) | Speckit (internal) |
409
+
410
+ **Pre-v0.20 / legacy artifacts that MUST NOT be produced by this strategy:**
411
+
412
+ - `vbrief/specification.vbrief.json`
413
+ - Primary handoff `SPECIFICATION.md` or `PRD.md` at project root (without sentinel)
414
+ - Phase/epic scopes in `pending/` (use `proposed/`)
415
+
416
+ See the full table and rules in `strategies/v0-20-contract.md` (speckit row reproduced above).
417
+
418
+ ---
419
+
420
+ ## Invoking This Strategy
421
+
422
+ Set in PROJECT-DEFINITION.vbrief.json narratives:
423
+ ```json
424
+ "Strategy": "strategies/speckit.md"
425
+ ```
426
+
427
+ Or explicitly:
428
+ ```
429
+ Use the speckit strategy for this project.
430
+ ```
431
+
432
+ Start with:
433
+ ```
434
+ I want to build [project] with features:
435
+ 1. [feature]
436
+ 2. [feature]
437
+ ```
@@ -0,0 +1,134 @@
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
+ # v0.20 Strategy Output Contract
8
+
9
+ Canonical contract for the artifacts that every spec-generating strategy MUST produce to be v0.20-conformant.
10
+
11
+ **Legend (from RFC2119):** !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
12
+
13
+ **⚠️ See also**: [vbrief/vbrief.md](../vbrief/vbrief.md) | [strategies/README.md](./README.md) | [strategies/artifact-guards.md](./artifact-guards.md) | [skills/deft-directive-build/SKILL.md](../skills/deft-directive-build/SKILL.md) (Pre-Cutover Detection Guard) | [scripts/migrate_vbrief.py](../../scripts/migrate_vbrief.py) | [conventions/machine-generated-banner.md](../conventions/machine-generated-banner.md)
14
+
15
+ ---
16
+
17
+ ## Purpose
18
+
19
+ Spec-generating strategies (interview, yolo, speckit, rapid, enterprise) historically produced inconsistent artifacts:
20
+
21
+ - Some wrote only the legacy `vbrief/specification.vbrief.json` + root `SPECIFICATION.md`
22
+ - Some wrote scope vBRIEFs without date prefixes and still dual-wrote the old singular spec file
23
+ - None consistently seeded the full v0.20 lifecycle folders + `PROJECT-DEFINITION.vbrief.json` + date-prefixed proposed/ items
24
+
25
+ This caused immediate build failures via the Pre-Cutover Detection Guard for any project generated through those strategies.
26
+
27
+ This contract is the single source of truth. All future strategy implementations and migrations target exactly these artifacts. The build skill, vbrief validators, and (post-s2) deterministic shape gate enforce it.
28
+
29
+ ## When to Use
30
+
31
+ Use this contract when authoring, reviewing, or migrating a spec-generating strategy that creates project definition artifacts, scope vBRIEFs, rendered views, or migration handoff material. It also applies when a guard, validator, or setup path needs to decide whether a project is current v0.20 output or legacy pre-cutover content.
32
+
33
+ ## Workflow
34
+
35
+ 1. Identify whether the strategy is spec-generating or preparatory.
36
+ 2. Apply the matching row in the per-strategy summary table.
37
+ 3. Create the required lifecycle folders before writing scope artifacts.
38
+ 4. Write authoritative vBRIEF content to `vbrief/PROJECT-DEFINITION.vbrief.json` and date-prefixed `vbrief/proposed/*.vbrief.json` files.
39
+ 5. Omit root `SPECIFICATION.md` / `PROJECT.md`, or write only deprecation redirect stubs when transitional UX requires them.
40
+ 6. Run the validator and content gates before treating the strategy output as v0.20-conformant.
41
+
42
+ ## Canonical v0.20 Output Shape
43
+
44
+ For a project that has completed any spec-generating strategy (or the full speckit flow), the following MUST exist and be the only authoritative sources:
45
+
46
+ ### Required Directory Structure
47
+ - `vbrief/proposed/`
48
+ - `vbrief/pending/`
49
+ - `vbrief/active/`
50
+ - `vbrief/completed/`
51
+ - `vbrief/cancelled/`
52
+
53
+ All five lifecycle folders MUST be present (even if empty). This is the cutover signal used by pre-cutover guards.
54
+
55
+ ### Required Root-Level vBRIEF Artifact
56
+ - `vbrief/PROJECT-DEFINITION.vbrief.json` (complete: narratives + items registry populated from the strategy session)
57
+
58
+ `task project:render` MAY be invoked by the strategy or left to the user; the end state after strategy + any render MUST have a non-skeleton PROJECT-DEFINITION.
59
+
60
+ ### Scope vBRIEF Placement & Naming (Strict)
61
+ - All new scope vBRIEFs (user stories, phases, epics from speckit Phase 4/4.5, etc.) MUST be written **only** to `vbrief/proposed/YYYY-MM-DD-<kebab-slug>.vbrief.json`
62
+ - Filenames MUST be date-prefixed using the creation date (immutable per vbrief.md conventions)
63
+ - Bare names (e.g. `scaffold.vbrief.json`) or names without date prefix are FORBIDDEN in v0.20
64
+ - The old singular `vbrief/specification.vbrief.json` MUST NOT be written or updated by v0.20 strategies (it is a legacy container; new work uses the lifecycle folders + PROJECT-DEFINITION)
65
+
66
+ ### SPECIFICATION.md & PROJECT.md (Derivative / Deprecated)
67
+ - Strategies SHOULD OMIT writing `SPECIFICATION.md` and `PROJECT.md` entirely. These are **rendered views** only.
68
+ - If a strategy does emit them (for UX continuity during transition), they MUST be written **exclusively** as deprecation-redirect stubs:
69
+ - Start with the canonical 4-line machine-generated banner (see conventions/machine-generated-banner.md)
70
+ - Fifth line: `<!-- deft:deprecated-redirect -->`
71
+ - Short explanatory body pointing to `vbrief/PROJECT-DEFINITION.vbrief.json` and the lifecycle folders
72
+ - Never contain real spec or project content
73
+ - Real content in these files (without the sentinel) triggers the build/setup/sync pre-cutover guards and forces migration.
74
+
75
+ ### Legacy `specification.vbrief.json`
76
+ - ⊗ No v0.20 strategy may create or dual-write `vbrief/specification.vbrief.json` alongside the new model artifacts.
77
+ - Existing legacy files are handled only by `task migrate:vbrief` (which ingests them into scope vBRIEFs + PROJECT-DEFINITION and leaves a redirect stub at root if needed).
78
+
79
+ ### plan.vbrief.json and continue.vbrief.json
80
+ - Session/tactical state files are permitted at vbrief/ root (they carry `planRef` links). They are not part of the "spec output" contract but strategies that maintain chaining state (e.g. interview) update them per their own rules.
81
+
82
+ ## Per-Strategy Summary Table (Target State After Migration)
83
+
84
+ | Strategy | Type | Must Create Lifecycle Folders | Must Write PROJECT-DEFINITION | Scope vBRIEFs Location | specification.vbrief.json | SPECIFICATION.md / PROJECT.md |
85
+ |--------------|------------------|-------------------------------|-------------------------------|-----------------------------------------|-----------------------------|----------------------------------------|
86
+ | interview | spec-generating | Yes | Yes (narratives + items) | proposed/YYYY-MM-DD-*.vbrief.json only | Never (post-migration) | Omit or deprecation redirect only |
87
+ | yolo | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.vbrief.json only | Never | Omit or deprecation redirect only |
88
+ | speckit | spec-generating | Yes | Yes (Phase 1+) | proposed/YYYY-MM-DD-*.vbrief.json only (phases + stories) | Never | Omit (use task spec:render post) |
89
+ | rapid | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.vbrief.json only | Never | Omit or deprecation redirect only |
90
+ | enterprise | spec-generating | Yes | Yes | proposed/YYYY-MM-DD-*.vbrief.json only | Never | Omit or deprecation redirect only |
91
+ | preparatory (research, discuss, map, etc.) | preparatory | Yes (if first touch) | No (unless also spec path) | proposed/YYYY-MM-DD-*.vbrief.json (context/decision vBRIEFs) | N/A | N/A (preparatory only) |
92
+
93
+ ## Agent & Strategy Author Rules
94
+
95
+ - ! Every spec-generating strategy document MUST contain an "Artifacts" or "Output" section that explicitly cites this contract (`strategies/v0-20-contract.md`) and reproduces the relevant row from the table above.
96
+ - ! Before emitting any vBRIEF artifact, follow the guards in `artifact-guards.md` (updated to reference this contract).
97
+ - ! Date prefixes on scope vBRIEFs are mandatory for swarm readiness, filename sorting, and dedup.
98
+ - ⊗ Write real content to root SPECIFICATION.md or PROJECT.md from a strategy.
99
+ - ⊗ Emit bare-named vBRIEFs in proposed/ or anywhere outside the dated convention.
100
+ - ⊗ Dual-write the old `specification.vbrief.json` in a v0.20 flow.
101
+
102
+ ## Verification & Enforcement
103
+
104
+ - Build / setup / sync skills: Pre-Cutover Detection Guard (any missing lifecycle folder or real-content legacy md triggers redirect to migrate).
105
+ - `task vbrief:validate` + `task check`: filename convention, folder/status consistency, PROJECT-DEFINITION presence.
106
+ - Post-s2: deterministic validation gate (s2 story) will parse strategy output trees against this contract and fail non-conformant generations.
107
+ - Content tests + migration stories exercise the before/after shapes.
108
+
109
+ ## Migration Path for Existing Strategies
110
+
111
+ The s3/s4/s5 stories migrate the individual strategy files (and their emitted examples) to the shape defined here. This contract document is the target spec they implement against; do not change strategies first.
112
+
113
+ ## When to Use
114
+
115
+ Use this contract when:
116
+ - Authoring a new spec-generating strategy (interview, yolo, speckit, rapid, enterprise, etc.).
117
+ - Migrating an existing strategy to v0.20 (the s3/s4/s5 work).
118
+ - Implementing or updating the deterministic validation gate (s2) or build pre-cutover guards.
119
+ - Writing migration tooling (`migrate_vbrief.py`, reconcile scripts, etc.).
120
+ - Auditing a generated project for v0.20 conformance.
121
+
122
+ ## Workflow
123
+
124
+ 1. Read the Canonical v0.20 Output Shape section.
125
+ 2. Ensure your strategy (or migration) writes exactly the required folders + `PROJECT-DEFINITION.vbrief.json` + dated proposed/ vBRIEFs.
126
+ 3. Never write the legacy `specification.vbrief.json` or real-content `SPECIFICATION.md`/`PROJECT.md`.
127
+ 4. Cite this contract explicitly in your strategy's "Artifacts" / "Output" section (see the Per-Strategy Summary Table).
128
+ 5. Run `task check` (or the deterministic gate once s2 lands) to validate.
129
+
130
+ ---
131
+
132
+ **Owned by**: `vbrief/active/2026-05-26-define-canonical-v020-strategy-output-contract.vbrief.json` (s1-contract of #1166 strategy consistency decomposition)
133
+
134
+ This contract lands first so that s2 (gate) and the migration stories have an unambiguous target.