forgecraft-mcp 1.2.0 → 1.4.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 (185) hide show
  1. package/README.md +525 -525
  2. package/dist/artifacts/commit-hooks.d.ts +1 -1
  3. package/dist/artifacts/commit-hooks.d.ts.map +1 -1
  4. package/dist/artifacts/commit-hooks.js +2 -0
  5. package/dist/artifacts/commit-hooks.js.map +1 -1
  6. package/dist/cli/commands.d.ts +35 -1
  7. package/dist/cli/commands.d.ts.map +1 -1
  8. package/dist/cli/commands.js +109 -2
  9. package/dist/cli/commands.js.map +1 -1
  10. package/dist/cli/help.d.ts.map +1 -1
  11. package/dist/cli/help.js +51 -44
  12. package/dist/cli/help.js.map +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +10 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/registry/renderer-skeletons.js +92 -92
  17. package/dist/shared/gs-score-logger.js +6 -6
  18. package/dist/shared/result-utils.d.ts +27 -0
  19. package/dist/shared/result-utils.d.ts.map +1 -0
  20. package/dist/shared/result-utils.js +41 -0
  21. package/dist/shared/result-utils.js.map +1 -0
  22. package/dist/tools/add-module.js +123 -123
  23. package/dist/tools/advice-registry.js +18 -18
  24. package/dist/tools/check-cascade-report.js +64 -64
  25. package/dist/tools/close-cycle-helpers.d.ts +21 -2
  26. package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
  27. package/dist/tools/close-cycle-helpers.js +66 -10
  28. package/dist/tools/close-cycle-helpers.js.map +1 -1
  29. package/dist/tools/close-cycle.d.ts +2 -2
  30. package/dist/tools/close-cycle.d.ts.map +1 -1
  31. package/dist/tools/close-cycle.js +1 -1
  32. package/dist/tools/close-cycle.js.map +1 -1
  33. package/dist/tools/configure-mcp.d.ts +3 -0
  34. package/dist/tools/configure-mcp.d.ts.map +1 -1
  35. package/dist/tools/configure-mcp.js +10 -0
  36. package/dist/tools/configure-mcp.js.map +1 -1
  37. package/dist/tools/consolidate-status.d.ts +81 -0
  38. package/dist/tools/consolidate-status.d.ts.map +1 -0
  39. package/dist/tools/consolidate-status.js +251 -0
  40. package/dist/tools/consolidate-status.js.map +1 -0
  41. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  42. package/dist/tools/forgecraft-dispatch.js +13 -0
  43. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  44. package/dist/tools/forgecraft-router.d.ts +8 -0
  45. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  46. package/dist/tools/forgecraft-router.js +21 -1
  47. package/dist/tools/forgecraft-router.js.map +1 -1
  48. package/dist/tools/forgecraft-schema-params.d.ts +13 -4
  49. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  50. package/dist/tools/forgecraft-schema-params.js +21 -0
  51. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  52. package/dist/tools/forgecraft-schema.d.ts +14 -5
  53. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  54. package/dist/tools/forgecraft-schema.js +3 -0
  55. package/dist/tools/forgecraft-schema.js.map +1 -1
  56. package/dist/tools/gate-violations.d.ts +59 -0
  57. package/dist/tools/gate-violations.d.ts.map +1 -0
  58. package/dist/tools/gate-violations.js +152 -0
  59. package/dist/tools/gate-violations.js.map +1 -0
  60. package/dist/tools/generate-session-prompt.d.ts +3 -3
  61. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  62. package/dist/tools/generate-session-prompt.js +57 -15
  63. package/dist/tools/generate-session-prompt.js.map +1 -1
  64. package/dist/tools/refresh-output.js +14 -14
  65. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  66. package/dist/tools/roadmap-builder.js +19 -9
  67. package/dist/tools/roadmap-builder.js.map +1 -1
  68. package/dist/tools/scaffold-spec-stubs.js +115 -115
  69. package/dist/tools/scaffold-templates.js +62 -62
  70. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  71. package/dist/tools/session-prompt-builders.js +34 -10
  72. package/dist/tools/session-prompt-builders.js.map +1 -1
  73. package/dist/tools/setup-artifact-writers.d.ts +30 -0
  74. package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
  75. package/dist/tools/setup-artifact-writers.js +120 -8
  76. package/dist/tools/setup-artifact-writers.js.map +1 -1
  77. package/dist/tools/setup-phase1.d.ts +3 -0
  78. package/dist/tools/setup-phase1.d.ts.map +1 -1
  79. package/dist/tools/setup-phase1.js +79 -35
  80. package/dist/tools/setup-phase1.js.map +1 -1
  81. package/dist/tools/setup-phase2.d.ts +2 -0
  82. package/dist/tools/setup-phase2.d.ts.map +1 -1
  83. package/dist/tools/setup-phase2.js +10 -1
  84. package/dist/tools/setup-phase2.js.map +1 -1
  85. package/dist/tools/setup-project.d.ts +18 -0
  86. package/dist/tools/setup-project.d.ts.map +1 -1
  87. package/dist/tools/setup-project.js +77 -1
  88. package/dist/tools/setup-project.js.map +1 -1
  89. package/dist/tools/spec-parser-tags.d.ts +9 -0
  90. package/dist/tools/spec-parser-tags.d.ts.map +1 -1
  91. package/dist/tools/spec-parser-tags.js +92 -0
  92. package/dist/tools/spec-parser-tags.js.map +1 -1
  93. package/package.json +89 -86
  94. package/templates/analytics/instructions.yaml +37 -37
  95. package/templates/analytics/mcp-servers.yaml +11 -11
  96. package/templates/analytics/structure.yaml +25 -25
  97. package/templates/api/instructions.yaml +231 -231
  98. package/templates/api/mcp-servers.yaml +22 -13
  99. package/templates/api/nfr.yaml +23 -23
  100. package/templates/api/review.yaml +103 -103
  101. package/templates/api/structure.yaml +34 -34
  102. package/templates/api/verification.yaml +132 -132
  103. package/templates/cli/instructions.yaml +31 -31
  104. package/templates/cli/mcp-servers.yaml +11 -11
  105. package/templates/cli/review.yaml +53 -53
  106. package/templates/cli/structure.yaml +16 -16
  107. package/templates/data-lineage/instructions.yaml +28 -28
  108. package/templates/data-lineage/mcp-servers.yaml +22 -22
  109. package/templates/data-pipeline/instructions.yaml +84 -84
  110. package/templates/data-pipeline/mcp-servers.yaml +13 -13
  111. package/templates/data-pipeline/nfr.yaml +39 -39
  112. package/templates/data-pipeline/structure.yaml +23 -23
  113. package/templates/fintech/hooks.yaml +55 -55
  114. package/templates/fintech/instructions.yaml +112 -112
  115. package/templates/fintech/mcp-servers.yaml +13 -13
  116. package/templates/fintech/nfr.yaml +46 -46
  117. package/templates/fintech/playbook.yaml +210 -210
  118. package/templates/fintech/verification.yaml +239 -239
  119. package/templates/game/instructions.yaml +289 -289
  120. package/templates/game/mcp-servers.yaml +38 -38
  121. package/templates/game/nfr.yaml +64 -64
  122. package/templates/game/playbook.yaml +214 -214
  123. package/templates/game/review.yaml +97 -97
  124. package/templates/game/structure.yaml +67 -67
  125. package/templates/game/verification.yaml +174 -174
  126. package/templates/healthcare/instructions.yaml +42 -42
  127. package/templates/healthcare/mcp-servers.yaml +13 -13
  128. package/templates/healthcare/nfr.yaml +47 -47
  129. package/templates/hipaa/instructions.yaml +41 -41
  130. package/templates/hipaa/mcp-servers.yaml +13 -13
  131. package/templates/infra/instructions.yaml +104 -104
  132. package/templates/infra/mcp-servers.yaml +20 -20
  133. package/templates/infra/nfr.yaml +46 -46
  134. package/templates/infra/review.yaml +65 -65
  135. package/templates/infra/structure.yaml +25 -25
  136. package/templates/library/instructions.yaml +36 -36
  137. package/templates/library/mcp-servers.yaml +20 -20
  138. package/templates/library/review.yaml +56 -56
  139. package/templates/library/structure.yaml +19 -19
  140. package/templates/medallion-architecture/instructions.yaml +41 -41
  141. package/templates/medallion-architecture/mcp-servers.yaml +22 -22
  142. package/templates/ml/instructions.yaml +85 -85
  143. package/templates/ml/mcp-servers.yaml +11 -11
  144. package/templates/ml/nfr.yaml +39 -39
  145. package/templates/ml/structure.yaml +25 -25
  146. package/templates/ml/verification.yaml +156 -156
  147. package/templates/mobile/instructions.yaml +44 -44
  148. package/templates/mobile/mcp-servers.yaml +11 -11
  149. package/templates/mobile/nfr.yaml +49 -49
  150. package/templates/mobile/structure.yaml +27 -27
  151. package/templates/mobile/verification.yaml +121 -121
  152. package/templates/observability-xray/instructions.yaml +40 -40
  153. package/templates/observability-xray/mcp-servers.yaml +15 -15
  154. package/templates/realtime/instructions.yaml +42 -42
  155. package/templates/realtime/mcp-servers.yaml +13 -13
  156. package/templates/soc2/instructions.yaml +41 -41
  157. package/templates/soc2/mcp-servers.yaml +24 -24
  158. package/templates/social/instructions.yaml +43 -43
  159. package/templates/social/mcp-servers.yaml +24 -24
  160. package/templates/state-machine/instructions.yaml +42 -42
  161. package/templates/state-machine/mcp-servers.yaml +11 -11
  162. package/templates/tools-registry.yaml +164 -164
  163. package/templates/universal/hooks.yaml +723 -531
  164. package/templates/universal/instructions.yaml +1692 -1692
  165. package/templates/universal/mcp-servers.yaml +50 -50
  166. package/templates/universal/nfr.yaml +197 -197
  167. package/templates/universal/reference.yaml +326 -326
  168. package/templates/universal/review.yaml +204 -204
  169. package/templates/universal/skills.yaml +262 -262
  170. package/templates/universal/structure.yaml +67 -67
  171. package/templates/universal/verification.yaml +416 -416
  172. package/templates/web-react/hooks.yaml +44 -44
  173. package/templates/web-react/instructions.yaml +207 -207
  174. package/templates/web-react/mcp-servers.yaml +20 -20
  175. package/templates/web-react/nfr.yaml +27 -27
  176. package/templates/web-react/review.yaml +94 -94
  177. package/templates/web-react/structure.yaml +46 -46
  178. package/templates/web-react/verification.yaml +126 -126
  179. package/templates/web-static/instructions.yaml +115 -115
  180. package/templates/web-static/mcp-servers.yaml +20 -20
  181. package/templates/web3/instructions.yaml +44 -44
  182. package/templates/web3/mcp-servers.yaml +11 -11
  183. package/templates/web3/verification.yaml +159 -159
  184. package/templates/zero-trust/instructions.yaml +41 -41
  185. package/templates/zero-trust/mcp-servers.yaml +15 -15
@@ -7,20 +7,20 @@
7
7
  */
8
8
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
9
9
  import { dirname } from "node:path";
10
- export const USE_CASES_STUB = `<!-- UNFILLED: Use Cases -->
11
- # Use Cases
12
-
13
- ## UC-01: [Name]
14
- **Actor**: <!-- FILL: who? -->
15
- **Precondition**: <!-- FILL: what must be true before? -->
16
- **Steps**: <!-- FILL: numbered steps -->
17
- **Success**: <!-- FILL: what changed? -->
18
-
19
- ## UC-02: [Name]
20
- <!-- FILL -->
21
-
22
- ## UC-03: [Name]
23
- <!-- FILL -->
10
+ export const USE_CASES_STUB = `<!-- UNFILLED: Use Cases -->
11
+ # Use Cases
12
+
13
+ ## UC-01: [Name]
14
+ **Actor**: <!-- FILL: who? -->
15
+ **Precondition**: <!-- FILL: what must be true before? -->
16
+ **Steps**: <!-- FILL: numbered steps -->
17
+ **Success**: <!-- FILL: what changed? -->
18
+
19
+ ## UC-02: [Name]
20
+ <!-- FILL -->
21
+
22
+ ## UC-03: [Name]
23
+ <!-- FILL -->
24
24
  `;
25
25
  /**
26
26
  * Build the UNFILLED stub content for docs/diagrams/c4-context.md.
@@ -29,16 +29,16 @@ export const USE_CASES_STUB = `<!-- UNFILLED: Use Cases -->
29
29
  * @returns Stub content with UNFILLED markers
30
30
  */
31
31
  export function buildC4ContextStub(projectName) {
32
- return `<!-- UNFILLED: C4 Context Diagram -->
33
- <!-- Run \`forgecraft generate_diagram\` to auto-generate from your spec -->
34
- # System Context Diagram
35
- \`\`\`mermaid
36
- C4Context
37
- title System Context: ${projectName}
38
- Person(user, "User", "<!-- FILL: Who uses the system? -->")
39
- System(system, "${projectName}", "<!-- FILL: What does the system do in one sentence? -->")
40
- Rel(user, system, "<!-- FILL: Primary interaction -->")
41
- \`\`\`
32
+ return `<!-- UNFILLED: C4 Context Diagram -->
33
+ <!-- Run \`forgecraft generate_diagram\` to auto-generate from your spec -->
34
+ # System Context Diagram
35
+ \`\`\`mermaid
36
+ C4Context
37
+ title System Context: ${projectName}
38
+ Person(user, "User", "<!-- FILL: Who uses the system? -->")
39
+ System(system, "${projectName}", "<!-- FILL: What does the system do in one sentence? -->")
40
+ Rel(user, system, "<!-- FILL: Primary interaction -->")
41
+ \`\`\`
42
42
  `;
43
43
  }
44
44
  /**
@@ -51,32 +51,32 @@ C4Context
51
51
  * @returns Stub content with UNFILLED markers and structural Mermaid syntax
52
52
  */
53
53
  export function buildSequenceDiagramStub(feature) {
54
- return `<!-- UNFILLED: Sequence Diagram — ${feature} -->
55
- <!-- Replace participant labels and messages with real actors and contracts -->
56
- # Sequence Diagram: ${feature}
57
-
58
- \`\`\`mermaid
59
- sequenceDiagram
60
- participant Client as <!-- FILL: initiating actor, e.g. Browser / CLI / Service -->
61
- participant API as <!-- FILL: entry-point service, e.g. API Gateway -->
62
- participant Service as <!-- FILL: domain service, e.g. AuthService -->
63
- participant Store as <!-- FILL: persistence layer, e.g. Database -->
64
-
65
- Note over Client,Store: <!-- FILL: describe the primary flow in one sentence -->
66
-
67
- Client->>API: <!-- FILL: request, e.g. POST /login {credentials} -->
68
- API->>Service: <!-- FILL: delegate, e.g. authenticate(credentials) -->
69
- Service->>Store: <!-- FILL: query, e.g. findUserByEmail(email) -->
70
- Store-->>Service: <!-- FILL: result, e.g. User | null -->
71
-
72
- alt <!-- FILL: failure case, e.g. User not found or wrong password -->
73
- Service-->>API: <!-- FILL: error response, e.g. AuthError -->
74
- API-->>Client: <!-- FILL: HTTP error, e.g. 401 Unauthorized -->
75
- else <!-- FILL: success case -->
76
- Service-->>API: <!-- FILL: success result, e.g. JWT token -->
77
- API-->>Client: <!-- FILL: HTTP success, e.g. 200 OK {token} -->
78
- end
79
- \`\`\`
54
+ return `<!-- UNFILLED: Sequence Diagram — ${feature} -->
55
+ <!-- Replace participant labels and messages with real actors and contracts -->
56
+ # Sequence Diagram: ${feature}
57
+
58
+ \`\`\`mermaid
59
+ sequenceDiagram
60
+ participant Client as <!-- FILL: initiating actor, e.g. Browser / CLI / Service -->
61
+ participant API as <!-- FILL: entry-point service, e.g. API Gateway -->
62
+ participant Service as <!-- FILL: domain service, e.g. AuthService -->
63
+ participant Store as <!-- FILL: persistence layer, e.g. Database -->
64
+
65
+ Note over Client,Store: <!-- FILL: describe the primary flow in one sentence -->
66
+
67
+ Client->>API: <!-- FILL: request, e.g. POST /login {credentials} -->
68
+ API->>Service: <!-- FILL: delegate, e.g. authenticate(credentials) -->
69
+ Service->>Store: <!-- FILL: query, e.g. findUserByEmail(email) -->
70
+ Store-->>Service: <!-- FILL: result, e.g. User | null -->
71
+
72
+ alt <!-- FILL: failure case, e.g. User not found or wrong password -->
73
+ Service-->>API: <!-- FILL: error response, e.g. AuthError -->
74
+ API-->>Client: <!-- FILL: HTTP error, e.g. 401 Unauthorized -->
75
+ else <!-- FILL: success case -->
76
+ Service-->>API: <!-- FILL: success result, e.g. JWT token -->
77
+ API-->>Client: <!-- FILL: HTTP success, e.g. 200 OK {token} -->
78
+ end
79
+ \`\`\`
80
80
  `;
81
81
  }
82
82
  /**
@@ -90,30 +90,30 @@ sequenceDiagram
90
90
  * @returns Stub content with UNFILLED markers and structural Mermaid syntax
91
91
  */
92
92
  export function buildStateMachineDiagramStub(entityName) {
93
- return `<!-- UNFILLED: State Machine — ${entityName} -->
94
- <!-- Replace state names (Draft, Pending, Active, etc.) and transition labels -->
95
- <!-- with the actual lifecycle states of your domain entity. -->
96
- # State Machine: ${entityName}
97
-
98
- \`\`\`mermaid
99
- stateDiagram-v2
100
- [*] --> Draft
101
-
102
- Draft --> Pending: submit()
103
- Pending --> Active: approve()
104
- Pending --> Rejected: reject()
105
- Active --> Completed: complete()
106
- Active --> Cancelled: cancel()
107
-
108
- Completed --> [*]
109
- Rejected --> [*]
110
- Cancelled --> [*]
111
-
112
- note right of Active
113
- FILL: add invariant or constraint
114
- e.g. "requires valid payment method"
115
- end note
116
- \`\`\`
93
+ return `<!-- UNFILLED: State Machine — ${entityName} -->
94
+ <!-- Replace state names (Draft, Pending, Active, etc.) and transition labels -->
95
+ <!-- with the actual lifecycle states of your domain entity. -->
96
+ # State Machine: ${entityName}
97
+
98
+ \`\`\`mermaid
99
+ stateDiagram-v2
100
+ [*] --> Draft
101
+
102
+ Draft --> Pending: submit()
103
+ Pending --> Active: approve()
104
+ Pending --> Rejected: reject()
105
+ Active --> Completed: complete()
106
+ Active --> Cancelled: cancel()
107
+
108
+ Completed --> [*]
109
+ Rejected --> [*]
110
+ Cancelled --> [*]
111
+
112
+ note right of Active
113
+ FILL: add invariant or constraint
114
+ e.g. "requires valid payment method"
115
+ end note
116
+ \`\`\`
117
117
  `;
118
118
  }
119
119
  /**
@@ -126,29 +126,29 @@ stateDiagram-v2
126
126
  * @returns Stub content with UNFILLED markers and structural Mermaid syntax
127
127
  */
128
128
  export function buildFlowDiagramStub(ucName) {
129
- return `<!-- UNFILLED: Flow Diagram — ${ucName} -->
130
- <!-- Replace node labels and edge conditions with real user journey steps -->
131
- # Flow: ${ucName}
132
-
133
- \`\`\`mermaid
134
- flowchart TD
135
- Start([<!-- FILL: trigger, e.g. User opens registration page -->])
136
-
137
- Start --> Input[<!-- FILL: first action, e.g. Fill in name, email, password -->]
138
- Input --> Validate{<!-- FILL: validation check, e.g. All fields valid? -->}
139
-
140
- Validate -->|<!-- FILL: failure label, e.g. Invalid -->| Error[<!-- FILL: error action, e.g. Show validation errors -->]
141
- Error --> Input
142
-
143
- Validate -->|<!-- FILL: success label, e.g. Valid -->| Process[<!-- FILL: main action, e.g. Create account -->]
144
- Process --> Check{<!-- FILL: guard check, e.g. Email already exists? -->}
145
-
146
- Check -->|<!-- FILL: conflict label, e.g. Yes -->| Conflict[<!-- FILL: conflict action, e.g. Show duplicate email error -->]
147
- Conflict --> End([<!-- FILL: exit label, e.g. User corrects email -->])
148
-
149
- Check -->|<!-- FILL: proceed label, e.g. No -->| Success[<!-- FILL: success action, e.g. Send confirmation email -->]
150
- Success --> End
151
- \`\`\`
129
+ return `<!-- UNFILLED: Flow Diagram — ${ucName} -->
130
+ <!-- Replace node labels and edge conditions with real user journey steps -->
131
+ # Flow: ${ucName}
132
+
133
+ \`\`\`mermaid
134
+ flowchart TD
135
+ Start([<!-- FILL: trigger, e.g. User opens registration page -->])
136
+
137
+ Start --> Input[<!-- FILL: first action, e.g. Fill in name, email, password -->]
138
+ Input --> Validate{<!-- FILL: validation check, e.g. All fields valid? -->}
139
+
140
+ Validate -->|<!-- FILL: failure label, e.g. Invalid -->| Error[<!-- FILL: error action, e.g. Show validation errors -->]
141
+ Error --> Input
142
+
143
+ Validate -->|<!-- FILL: success label, e.g. Valid -->| Process[<!-- FILL: main action, e.g. Create account -->]
144
+ Process --> Check{<!-- FILL: guard check, e.g. Email already exists? -->}
145
+
146
+ Check -->|<!-- FILL: conflict label, e.g. Yes -->| Conflict[<!-- FILL: conflict action, e.g. Show duplicate email error -->]
147
+ Conflict --> End([<!-- FILL: exit label, e.g. User corrects email -->])
148
+
149
+ Check -->|<!-- FILL: proceed label, e.g. No -->| Success[<!-- FILL: success action, e.g. Send confirmation email -->]
150
+ Success --> End
151
+ \`\`\`
152
152
  `;
153
153
  }
154
154
  /**
@@ -161,24 +161,24 @@ flowchart TD
161
161
  * @returns Stub content with UNFILLED markers and structural Mermaid syntax
162
162
  */
163
163
  export function buildC4ContainerStub(projectName) {
164
- return `<!-- UNFILLED: C4 Container Diagram -->
165
- <!-- Replace container labels, technology fields, and relations with your stack -->
166
- # Container Diagram — ${projectName}
167
-
168
- \`\`\`mermaid
169
- C4Container
170
- title Container Diagram: ${projectName}
171
-
172
- Person(user, "<!-- FILL: actor name -->", "<!-- FILL: actor description -->")
173
-
174
- Container(web, "<!-- FILL: frontend name, e.g. Web Application -->", "<!-- FILL: technology, e.g. React -->", "<!-- FILL: responsibility -->")
175
- Container(api, "<!-- FILL: backend name, e.g. API Server -->", "<!-- FILL: technology, e.g. Node.js / Express -->", "<!-- FILL: responsibility -->")
176
- Container(db, "<!-- FILL: database name, e.g. Primary Database -->", "<!-- FILL: technology, e.g. PostgreSQL -->", "<!-- FILL: responsibility -->")
177
-
178
- Rel(user, web, "<!-- FILL: interaction, e.g. Uses -->", "<!-- FILL: protocol, e.g. HTTPS -->")
179
- Rel(web, api, "<!-- FILL: call, e.g. API calls -->", "<!-- FILL: protocol, e.g. REST / JSON -->")
180
- Rel(api, db, "<!-- FILL: query, e.g. Reads and writes -->", "<!-- FILL: protocol, e.g. SQL -->")
181
- \`\`\`
164
+ return `<!-- UNFILLED: C4 Container Diagram -->
165
+ <!-- Replace container labels, technology fields, and relations with your stack -->
166
+ # Container Diagram — ${projectName}
167
+
168
+ \`\`\`mermaid
169
+ C4Container
170
+ title Container Diagram: ${projectName}
171
+
172
+ Person(user, "<!-- FILL: actor name -->", "<!-- FILL: actor description -->")
173
+
174
+ Container(web, "<!-- FILL: frontend name, e.g. Web Application -->", "<!-- FILL: technology, e.g. React -->", "<!-- FILL: responsibility -->")
175
+ Container(api, "<!-- FILL: backend name, e.g. API Server -->", "<!-- FILL: technology, e.g. Node.js / Express -->", "<!-- FILL: responsibility -->")
176
+ Container(db, "<!-- FILL: database name, e.g. Primary Database -->", "<!-- FILL: technology, e.g. PostgreSQL -->", "<!-- FILL: responsibility -->")
177
+
178
+ Rel(user, web, "<!-- FILL: interaction, e.g. Uses -->", "<!-- FILL: protocol, e.g. HTTPS -->")
179
+ Rel(web, api, "<!-- FILL: call, e.g. API calls -->", "<!-- FILL: protocol, e.g. REST / JSON -->")
180
+ Rel(api, db, "<!-- FILL: query, e.g. Reads and writes -->", "<!-- FILL: protocol, e.g. SQL -->")
181
+ \`\`\`
182
182
  `;
183
183
  }
184
184
  /**
@@ -1,76 +1,76 @@
1
1
  /**
2
2
  * scaffold-templates: Static template strings and render functions for scaffold_project.
3
3
  */
4
- export const PROJECT_SPECIFIC_TEMPLATE = `# Project-Specific Rules
5
- <!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->
6
- <!-- Add project-specific rules, framework choices, conventions, and corrections here. -->
7
- <!-- The sentinel CLAUDE.md links here so any AI reading your project can find it. -->
8
-
9
- ## Framework & Stack Choices
10
- <!-- e.g. We use Prisma for ORM. Deploy target is Railway. Python 3.11+. -->
11
-
12
- ## Custom Corrections Log
13
- <!-- Log AI corrections so the pattern isn't repeated. -->
14
- <!-- Format: - YYYY-MM-DD: [description of correction] -->
15
-
16
- ## Project-Specific Gates
17
- <!-- Add quality rules specific to this project that don't belong in universal standards. -->
4
+ export const PROJECT_SPECIFIC_TEMPLATE = `# Project-Specific Rules
5
+ <!-- This file is owned by YOU. ForgeCraft will never overwrite it. -->
6
+ <!-- Add project-specific rules, framework choices, conventions, and corrections here. -->
7
+ <!-- The sentinel CLAUDE.md links here so any AI reading your project can find it. -->
8
+
9
+ ## Framework & Stack Choices
10
+ <!-- e.g. We use Prisma for ORM. Deploy target is Railway. Python 3.11+. -->
11
+
12
+ ## Custom Corrections Log
13
+ <!-- Log AI corrections so the pattern isn't repeated. -->
14
+ <!-- Format: - YYYY-MM-DD: [description of correction] -->
15
+
16
+ ## Project-Specific Gates
17
+ <!-- Add quality rules specific to this project that don't belong in universal standards. -->
18
18
  `;
19
19
  export const EXCEPTIONS_TEMPLATE = JSON.stringify({
20
20
  version: "1",
21
21
  _comment: "Hook false-positive exceptions. Add entries here to prevent rediscovering the same false positive each session. Each entry: {id, hook, pattern, reason, addedAt, addedBy, adr?}",
22
22
  exceptions: [],
23
23
  }, null, 2) + "\n";
24
- export const PROJECT_GATES_TEMPLATE = `version: "1"
25
- # Project-specific quality gates.
26
- # Gates you discover while working that should be enforced for this project.
27
- # Set generalizable: true + fill in evidence to contribute to the community registry.
28
- # See: https://github.com/jghiringhelli/quality-gates/issues/new?template=quality-gate-proposal.md
29
- gates: []
24
+ export const PROJECT_GATES_TEMPLATE = `version: "1"
25
+ # Project-specific quality gates.
26
+ # Gates you discover while working that should be enforced for this project.
27
+ # Set generalizable: true + fill in evidence to contribute to the community registry.
28
+ # See: https://github.com/jghiringhelli/quality-gates/issues/new?template=quality-gate-proposal.md
29
+ gates: []
30
30
  `;
31
- export const SMOKE_TESTS_README = `# Smoke Tests
32
-
33
- Generated by ForgeCraft scaffold. Fill in the critical paths from your tech spec.
34
-
35
- ## What smoke tests cover
36
- - Every API entry point that serves real users
37
- - Every critical user journey end-to-end
38
- - Every DB migration (verify schema applied correctly)
39
- - Every external integration handshake
40
-
41
- ## Format
42
- Use the tool configured in forgecraft.yaml deployment.testing.smokeTool (or default to HTTP assertions).
43
- All smoke tests must complete in < 60 seconds total.
44
-
45
- ## Running
46
- See forgecraft.yaml tools.test or your project's test runner.
47
- Results are written to .forgecraft/reports/smoke-latest.json.
48
-
49
- ## Required before deployment
50
- All smoke tests must pass against staging before any production deploy.
51
- See verification.yaml deployment-gates phase.
31
+ export const SMOKE_TESTS_README = `# Smoke Tests
32
+
33
+ Generated by ForgeCraft scaffold. Fill in the critical paths from your tech spec.
34
+
35
+ ## What smoke tests cover
36
+ - Every API entry point that serves real users
37
+ - Every critical user journey end-to-end
38
+ - Every DB migration (verify schema applied correctly)
39
+ - Every external integration handshake
40
+
41
+ ## Format
42
+ Use the tool configured in forgecraft.yaml deployment.testing.smokeTool (or default to HTTP assertions).
43
+ All smoke tests must complete in < 60 seconds total.
44
+
45
+ ## Running
46
+ See forgecraft.yaml tools.test or your project's test runner.
47
+ Results are written to .forgecraft/reports/smoke-latest.json.
48
+
49
+ ## Required before deployment
50
+ All smoke tests must pass against staging before any production deploy.
51
+ See verification.yaml deployment-gates phase.
52
52
  `;
53
- export const LOAD_TESTS_README = `# Load Tests
54
-
55
- Generated by ForgeCraft scaffold. Fill in the parameters from your tech spec.
56
-
57
- ## Parameters (fill in from forgecraft.yaml deployment.testing.load)
58
- - Concurrent users: [TODO: concurrentUsers from forgecraft.yaml]
59
- - Target RPS: [TODO: targetRps from forgecraft.yaml]
60
- - p99 ceiling: [TODO: p99CeilingMs ms]
61
- - Duration: [TODO: durationSeconds seconds minimum]
62
-
63
- ## When these parameters are missing
64
- Deploying without stated load test parameters is full deployment with manual monitoring.
65
- The paper requires: parameters named in spec BEFORE the test runs, not after.
66
- Add them to forgecraft.yaml deployment.testing.load before running.
67
-
68
- ## Tool
69
- Use the tool configured in forgecraft.yaml deployment.testing.load.tool (k6, Artillery, Locust, etc.)
70
- Results are written to .forgecraft/reports/load-latest.json.
71
-
72
- ## Required before pre-release
73
- See verification.yaml pre-release-hardening phase, load-test step.
53
+ export const LOAD_TESTS_README = `# Load Tests
54
+
55
+ Generated by ForgeCraft scaffold. Fill in the parameters from your tech spec.
56
+
57
+ ## Parameters (fill in from forgecraft.yaml deployment.testing.load)
58
+ - Concurrent users: [TODO: concurrentUsers from forgecraft.yaml]
59
+ - Target RPS: [TODO: targetRps from forgecraft.yaml]
60
+ - p99 ceiling: [TODO: p99CeilingMs ms]
61
+ - Duration: [TODO: durationSeconds seconds minimum]
62
+
63
+ ## When these parameters are missing
64
+ Deploying without stated load test parameters is full deployment with manual monitoring.
65
+ The paper requires: parameters named in spec BEFORE the test runs, not after.
66
+ Add them to forgecraft.yaml deployment.testing.load before running.
67
+
68
+ ## Tool
69
+ Use the tool configured in forgecraft.yaml deployment.testing.load.tool (k6, Artillery, Locust, etc.)
70
+ Results are written to .forgecraft/reports/load-latest.json.
71
+
72
+ ## Required before pre-release
73
+ See verification.yaml pre-release-hardening phase, load-test step.
74
74
  `;
75
75
  /**
76
76
  * Render the bootstrap README for docs/adrs/.
@@ -1 +1 @@
1
- {"version":3,"file":"session-prompt-builders.d.ts","sourceRoot":"","sources":["../../src/tools/session-prompt-builders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWxD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,kDAAkD,CAAC;AAWtF;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAU3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA2B/D;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CA2BrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAQtE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CASvF;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA6B3D"}
1
+ {"version":3,"file":"session-prompt-builders.d.ts","sourceRoot":"","sources":["../../src/tools/session-prompt-builders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWxD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,kDACc,CAAC;AAelD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAY3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqC/D;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAyCrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAQtE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,MAAM,GACtB,aAAa,GAAG,IAAI,CActB;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAuC3D"}
@@ -13,8 +13,12 @@ import { buildContextLoadBlock, buildTddGateSection, buildContextRetrievalSectio
13
13
  /** Primary-use text shown for the forgecraft server entry. */
14
14
  export const FORGECRAFT_PRIMARY_USE = "check_cascade, generate_session_prompt, audit";
15
15
  const CONSTITUTION_PATHS = [
16
- "CLAUDE.md", "AGENTS.md", ".github/copilot-instructions.md",
17
- ".cursor/rules", ".windsurfrules", ".clinerules",
16
+ "CLAUDE.md",
17
+ "AGENTS.md",
18
+ ".github/copilot-instructions.md",
19
+ ".cursor/rules",
20
+ ".windsurfrules",
21
+ ".clinerules",
18
22
  ];
19
23
  const ADR_DIRS = ["docs/adrs", "docs/adr"];
20
24
  // ── MCP Tools Section ────────────────────────────────────────────────
@@ -34,7 +38,9 @@ export function loadMcpServerDescriptions() {
34
38
  for (const server of parsed.servers ?? [])
35
39
  map.set(server.name, server);
36
40
  }
37
- catch { /* Return empty map */ }
41
+ catch {
42
+ /* Return empty map */
43
+ }
38
44
  return map;
39
45
  }
40
46
  /**
@@ -66,7 +72,9 @@ export function buildMcpToolsSection(projectDir) {
66
72
  : (descriptions.get(name)?.description ?? "MCP server");
67
73
  lines.push(`- **${name}** — ${primaryUse}`);
68
74
  }
69
- return `## Active MCP Tools\n\nThese tools are available in this session. Use them:\n` + lines.join("\n") + "\n\n";
75
+ return (`## Active MCP Tools\n\nThese tools are available in this session. Use them:\n` +
76
+ lines.join("\n") +
77
+ "\n\n");
70
78
  }
71
79
  // ── Artifact Discovery ───────────────────────────────────────────────
72
80
  /**
@@ -97,8 +105,17 @@ export function discoverArtifacts(projectDir) {
97
105
  existsSync(join(projectDir, "docs/UseCases.md"));
98
106
  const activeGateDir = join(projectDir, ".forgecraft/gates/project/active");
99
107
  const activeGateCount = existsSync(activeGateDir)
100
- ? readdirSync(activeGateDir).filter((f) => f.endsWith(".yaml")).length : 0;
101
- return { constitutionPath, statusExists, adrCount, adrDir, diagramsExist, useCasesExist, activeGateCount };
108
+ ? readdirSync(activeGateDir).filter((f) => f.endsWith(".yaml")).length
109
+ : 0;
110
+ return {
111
+ constitutionPath,
112
+ statusExists,
113
+ adrCount,
114
+ adrDir,
115
+ diagramsExist,
116
+ useCasesExist,
117
+ activeGateCount,
118
+ };
102
119
  }
103
120
  /**
104
121
  * Extract the last meaningful section of Status.md for context.
@@ -141,7 +158,12 @@ export function buildRoadmapItemAmbiguity(itemDescription) {
141
158
  field: "roadmap_item",
142
159
  understood_as: `Interpreting '${itemDescription}' as its most common literal meaning`,
143
160
  understood_example: `I scoped the session prompt to: ${itemDescription} (minimal implementation)`,
144
- alternatives: [{ label: "If broader scope intended", action: `Include related concerns: error handling, integration tests, ADR for architectural decisions` }],
161
+ alternatives: [
162
+ {
163
+ label: "If broader scope intended",
164
+ action: `Include related concerns: error handling, integration tests, ADR for architectural decisions`,
165
+ },
166
+ ],
145
167
  resolution_hint: `Pass a more specific item_description, e.g. 'Add JWT authentication with email/password login, bcrypt hashing, and a /auth/refresh endpoint'`,
146
168
  };
147
169
  }
@@ -153,15 +175,17 @@ export function buildRoadmapItemAmbiguity(itemDescription) {
153
175
  * @returns Complete, ready-to-paste session prompt
154
176
  */
155
177
  export function buildPrompt(input) {
156
- const { projectDir, itemDescription, sessionType, scopeNote, acceptanceCriteria, artifacts, statusSummary } = input;
178
+ const { projectDir, itemDescription, sessionType, scopeNote, acceptanceCriteria, artifacts, statusSummary, } = input;
157
179
  const contextLoadBlock = buildContextLoadBlock(artifacts);
158
- const scopeBlock = scopeNote ? `\n## Out of Scope\nDo NOT touch: ${scopeNote}\n` : "";
180
+ const scopeBlock = scopeNote
181
+ ? `\n## Out of Scope\nDo NOT touch: ${scopeNote}\n`
182
+ : "";
159
183
  const criteriaLines = acceptanceCriteria.map((c) => `- [ ] ${c}`).join("\n");
160
184
  const conventionalType = sessionType === "fix" ? "fix" : sessionType;
161
185
  let prompt = `# Session Prompt — Bound\n\n> Generated by ForgeCraft \`generate_session_prompt\`. Load context, then issue this prompt.\n\n---\n\n`;
162
186
  prompt += `## Context Load Order\n\nLoad these artifacts **before** issuing the implementation prompt:\n\n${contextLoadBlock}\n`;
163
187
  if (statusSummary) {
164
- prompt += `## Current State (from Status.md)\n\n\`\`\`\n${statusSummary}\n\`\`\`\n\n`;
188
+ prompt += statusSummary + "\n\n";
165
189
  }
166
190
  prompt += `---\n\n## Implementation Prompt\n\n*(Paste everything below this line to the AI assistant)*\n\n---\n\n`;
167
191
  prompt += `### Task\n\n${itemDescription}\n\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"session-prompt-builders.js","sourceRoot":"","sources":["../../src/tools/session-prompt-builders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-prompt-builders.js","sourceRoot":"","sources":["../../src/tools/session-prompt-builders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAmCtC,wEAAwE;AAExE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GACjC,+CAA+C,CAAC;AAElD,MAAM,kBAAkB,GAAG;IACzB,WAAW;IACX,WAAW;IACX,iCAAiC;IACjC,eAAe;IACf,gBAAgB;IAChB,aAAa;CACL,CAAC;AAEX,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,UAAU,CAAU,CAAC;AAEpD,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,GAAG,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAmB,CAAC;QAC5E,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,sFAAsF,CAAC;IAChG,CAAC;IAED,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAG9D,CAAC;QACF,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAE3B,CAAC;QACd,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sFAAsF,CAAC;IAChG,CAAC;IAED,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,UAAU,GACd,IAAI,KAAK,YAAY;YACnB,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,IAAI,YAAY,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,UAAU,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CACL,+EAA+E;QAC/E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAChB,MAAM,CACP,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,gBAAgB,GACpB,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC1E,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC3B,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;gBACvB,MAAM,GAAG,GAAG,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IACtD,MAAM,aAAa,GACjB,UAAU,CAAC,WAAW,CAAC;QACvB,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,MAAM,aAAa,GACjB,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,UAAU,CAAC,aAAa,CAAC;QAC/C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QACtE,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,gBAAgB;QAChB,YAAY;QACZ,QAAQ;QACR,MAAM;QACN,aAAa;QACb,aAAa;QACb,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAChF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB;IAC1D,OAAO;QACL,mCAAmC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK;QAC3E,gDAAgD;QAChD,gDAAgD;QAChD,yCAAyC;QACzC,6CAA6C;KAC9C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,eAAuB;IAEvB,IAAI,eAAe,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,aAAa,EAAE,iBAAiB,eAAe,sCAAsC;QACrF,kBAAkB,EAAE,mCAAmC,eAAe,2BAA2B;QACjG,YAAY,EAAE;YACZ;gBACE,KAAK,EAAE,2BAA2B;gBAClC,MAAM,EAAE,8FAA8F;aACvG;SACF;QACD,eAAe,EAAE,8IAA8I;KAChK,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EACJ,UAAU,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,aAAa,GACd,GAAG,KAAK,CAAC;IAEV,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,oCAAoC,SAAS,IAAI;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;IAErE,IAAI,MAAM,GAAG,qIAAqI,CAAC;IACnJ,MAAM,IAAI,kGAAkG,gBAAgB,IAAI,CAAC;IAEjI,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,aAAa,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,wGAAwG,CAAC;IACnH,MAAM,IAAI,eAAe,eAAe,MAAM,CAAC;IAC/C,IAAI,UAAU;QAAE,MAAM,IAAI,UAAU,GAAG,IAAI,CAAC;IAE5C,MAAM,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,yBAAyB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,qFAAqF,CAAC;IAChG,MAAM,IAAI,kGAAkG,aAAa,MAAM,CAAC;IAChI,MAAM,IAAI,qPAAqP,SAAS,CAAC,MAAM,IAAI,YAAY,MAAM,CAAC;IACtS,MAAM,IAAI,4HAA4H,CAAC;IAEvI,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -3,6 +3,23 @@
3
3
  */
4
4
  import type { CascadeDecision } from "../shared/types.js";
5
5
  import { deriveDefaultCascadeDecisions } from "./cascade-defaults.js";
6
+ /**
7
+ * Result of a pre-flight git environment check.
8
+ *
9
+ * - `repo` — a `.git` directory exists; all good.
10
+ * - `no-repo` — git is installed but no repository exists yet; ForgeCraft will init one.
11
+ * - `no-git` — git binary not found; user must install git before setup can proceed.
12
+ */
13
+ export type GitStatus = "repo" | "no-repo" | "no-git";
14
+ /**
15
+ * Check whether a git repository and the git binary are present.
16
+ *
17
+ * Does NOT modify the filesystem. Safe to call at any time.
18
+ *
19
+ * @param projectDir - Absolute path to the project root
20
+ * @returns Current git status for the directory
21
+ */
22
+ export declare function checkGitStatus(projectDir: string): GitStatus;
6
23
  /**
7
24
  * Initialise a git repository in projectDir if one does not already exist.
8
25
  * Falls back gracefully when git is not installed.
@@ -60,6 +77,19 @@ export declare function writePrd(projectDir: string, projectName: string, aiFiel
60
77
  */
61
78
  export declare function writeUseCases(projectDir: string, projectName: string, aiFields: AiExtractedFields, _specContent: string | null): boolean;
62
79
  export { deriveDefaultCascadeDecisions };
80
+ /**
81
+ * Write docs/sample-outcome.md — a stub for the first real deliverable of
82
+ * a generative tool. Created when Phase 2 receives tool_sample_split = "tool_and_sample".
83
+ *
84
+ * The AI assistant should fill in the sections from the creative content
85
+ * described in the spec (the book, song, game, artwork, etc.).
86
+ * Never overwrites an existing file.
87
+ *
88
+ * @param projectDir - Project root
89
+ * @param toolName - Name of the core generative tool
90
+ * @returns True if the file was written
91
+ */
92
+ export declare function writeSampleOutcome(projectDir: string, toolName: string): boolean;
63
93
  /**
64
94
  * Load cascade decisions from forgecraft.yaml (convenience re-used in writers).
65
95
  */
@@ -1 +1 @@
1
- {"version":3,"file":"setup-artifact-writers.d.ts","sourceRoot":"","sources":["../../src/tools/setup-artifact-writers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAItE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAwBtD;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,eAAe,EAAE,EAC5B,aAAa,CAAC,EAAE,OAAO,EACvB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAkBT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAcpE;AAID,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAMT;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAMT;AAgBD,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,IAAI,CAUzF"}
1
+ {"version":3,"file":"setup-artifact-writers.d.ts","sourceRoot":"","sources":["../../src/tools/setup-artifact-writers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAItE;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAQ5D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAwBtD;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,eAAe,EAAE,EAC5B,aAAa,CAAC,EAAE,OAAO,EACvB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CA8BT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAwBpE;AAID,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAMT;AAwBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAUT;AAuDD,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAIzC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CA4CT;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,GACjB,eAAe,EAAE,GAAG,IAAI,CAY1B"}