@exaudeus/workrail 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/dist/cli.js +140 -23
- package/dist/cli.js.map +1 -1
- package/dist/infrastructure/storage/multi-directory-workflow-storage.d.ts +50 -0
- package/dist/infrastructure/storage/multi-directory-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/multi-directory-workflow-storage.js +209 -0
- package/dist/infrastructure/storage/multi-directory-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/storage.d.ts +7 -2
- package/dist/infrastructure/storage/storage.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.js +15 -2
- package/dist/infrastructure/storage/storage.js.map +1 -1
- package/dist/utils/config.d.ts +11 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +6 -3
- package/dist/utils/config.js.map +1 -1
- package/package.json +4 -2
- package/spec/examples/adaptive-ticket-creation.json +170 -0
- package/spec/examples/ai-task-prompt-workflow.json +80 -0
- package/spec/examples/coding-task-workflow.json +141 -0
- package/spec/examples/conditional-workflow-example.json +216 -0
- package/spec/examples/invalid-workflow.json +20 -0
- package/spec/examples/valid-workflow.json +118 -0
- package/spec/mcp-api-v1.0.md +714 -0
- package/spec/mcp-compliance-summary.md +211 -0
- package/spec/mcp-protocol-handshake.md +603 -0
- package/spec/workflow.schema.json +327 -0
- package/workflows/adaptive-ticket-creation.json +257 -0
- package/workflows/coding-task-workflow.json +115 -0
- package/workflows/mr-review-workflow.json +79 -0
- package/workflows/presentation-creation.json +245 -0
- package/workflows/workflow-for-workflows.json +74 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://workflowlookup.io/schemas/workflow/v0.0.1",
|
|
4
|
+
"title": "Workflow Schema",
|
|
5
|
+
"description": "Schema for defining workflows in the Workflow Orchestration System",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"id": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Unique identifier for the workflow",
|
|
11
|
+
"pattern": "^[a-z0-9-]+$",
|
|
12
|
+
"minLength": 3,
|
|
13
|
+
"maxLength": 64
|
|
14
|
+
},
|
|
15
|
+
"name": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Human-friendly title of the workflow",
|
|
18
|
+
"minLength": 1,
|
|
19
|
+
"maxLength": 128
|
|
20
|
+
},
|
|
21
|
+
"description": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "What this workflow accomplishes",
|
|
24
|
+
"minLength": 1,
|
|
25
|
+
"maxLength": 512
|
|
26
|
+
},
|
|
27
|
+
"version": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Semantic version of the workflow (e.g., 0.0.1, 0.1.0)",
|
|
30
|
+
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
|
|
31
|
+
"examples": ["0.0.1", "0.1.0", "0.0.1-alpha.1"]
|
|
32
|
+
},
|
|
33
|
+
"preconditions": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"description": "Prerequisites that must be met before starting the workflow",
|
|
36
|
+
"items": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"minLength": 1,
|
|
39
|
+
"maxLength": 256
|
|
40
|
+
},
|
|
41
|
+
"uniqueItems": true
|
|
42
|
+
},
|
|
43
|
+
"clarificationPrompts": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"description": "Questions to ask upfront to resolve ambiguities",
|
|
46
|
+
"items": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"minLength": 1,
|
|
49
|
+
"maxLength": 256
|
|
50
|
+
},
|
|
51
|
+
"uniqueItems": true
|
|
52
|
+
},
|
|
53
|
+
"steps": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"description": "The sequence of steps in the workflow",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "object",
|
|
58
|
+
"properties": {
|
|
59
|
+
"id": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"description": "Unique identifier for the step",
|
|
62
|
+
"pattern": "^[a-z0-9-]+$",
|
|
63
|
+
"minLength": 3,
|
|
64
|
+
"maxLength": 64
|
|
65
|
+
},
|
|
66
|
+
"title": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"description": "Human-friendly title of the step",
|
|
69
|
+
"minLength": 1,
|
|
70
|
+
"maxLength": 128
|
|
71
|
+
},
|
|
72
|
+
"prompt": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "The detailed instructions or prompt for this step.",
|
|
75
|
+
"minLength": 1,
|
|
76
|
+
"maxLength": 2048
|
|
77
|
+
},
|
|
78
|
+
"guidance": {
|
|
79
|
+
"type": "array",
|
|
80
|
+
"description": "Optional array of strings providing tactical advice for this step.",
|
|
81
|
+
"items": {
|
|
82
|
+
"type": "string"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"askForFiles": {
|
|
86
|
+
"type": "boolean",
|
|
87
|
+
"description": "Whether the agent should ask for relevant files before executing the step.",
|
|
88
|
+
"default": false
|
|
89
|
+
},
|
|
90
|
+
"requireConfirmation": {
|
|
91
|
+
"type": "boolean",
|
|
92
|
+
"description": "Whether to require user confirmation before proceeding",
|
|
93
|
+
"default": false
|
|
94
|
+
},
|
|
95
|
+
"runCondition": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"description": "Optional condition that determines if this step should be executed. Uses simple expression format with operators like 'equals', 'and', 'or', etc.",
|
|
98
|
+
"properties": {
|
|
99
|
+
"var": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "Variable name from execution context"
|
|
102
|
+
},
|
|
103
|
+
"equals": {
|
|
104
|
+
"description": "Check if variable equals this value"
|
|
105
|
+
},
|
|
106
|
+
"not_equals": {
|
|
107
|
+
"description": "Check if variable does not equal this value"
|
|
108
|
+
},
|
|
109
|
+
"gt": {
|
|
110
|
+
"type": "number",
|
|
111
|
+
"description": "Check if variable is greater than this number"
|
|
112
|
+
},
|
|
113
|
+
"gte": {
|
|
114
|
+
"type": "number",
|
|
115
|
+
"description": "Check if variable is greater than or equal to this number"
|
|
116
|
+
},
|
|
117
|
+
"lt": {
|
|
118
|
+
"type": "number",
|
|
119
|
+
"description": "Check if variable is less than this number"
|
|
120
|
+
},
|
|
121
|
+
"lte": {
|
|
122
|
+
"type": "number",
|
|
123
|
+
"description": "Check if variable is less than or equal to this number"
|
|
124
|
+
},
|
|
125
|
+
"and": {
|
|
126
|
+
"type": "array",
|
|
127
|
+
"description": "Logical AND of multiple conditions",
|
|
128
|
+
"items": {
|
|
129
|
+
"type": "object"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"or": {
|
|
133
|
+
"type": "array",
|
|
134
|
+
"description": "Logical OR of multiple conditions",
|
|
135
|
+
"items": {
|
|
136
|
+
"type": "object"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"not": {
|
|
140
|
+
"type": "object",
|
|
141
|
+
"description": "Logical NOT of a condition"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"additionalProperties": false
|
|
145
|
+
},
|
|
146
|
+
"validationCriteria": {
|
|
147
|
+
"description": "Optional validation rules to check step output quality. Can be an array of rules (all must pass) or a composition object with logical operators.",
|
|
148
|
+
"oneOf": [
|
|
149
|
+
{
|
|
150
|
+
"type": "array",
|
|
151
|
+
"description": "Array of validation rules (all must pass)",
|
|
152
|
+
"items": {
|
|
153
|
+
"$ref": "#/$defs/validationRule"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"$ref": "#/$defs/validationComposition"
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"required": [
|
|
163
|
+
"id",
|
|
164
|
+
"title",
|
|
165
|
+
"prompt"
|
|
166
|
+
],
|
|
167
|
+
"additionalProperties": false
|
|
168
|
+
},
|
|
169
|
+
"minItems": 1
|
|
170
|
+
},
|
|
171
|
+
"metaGuidance": {
|
|
172
|
+
"type": "array",
|
|
173
|
+
"description": "Persistent best practices that apply throughout the workflow",
|
|
174
|
+
"items": {
|
|
175
|
+
"type": "string",
|
|
176
|
+
"minLength": 1,
|
|
177
|
+
"maxLength": 256
|
|
178
|
+
},
|
|
179
|
+
"uniqueItems": true
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"required": [
|
|
183
|
+
"id",
|
|
184
|
+
"name",
|
|
185
|
+
"description",
|
|
186
|
+
"version",
|
|
187
|
+
"steps"
|
|
188
|
+
],
|
|
189
|
+
"additionalProperties": false,
|
|
190
|
+
"$defs": {
|
|
191
|
+
"validationRule": {
|
|
192
|
+
"type": "object",
|
|
193
|
+
"properties": {
|
|
194
|
+
"type": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"enum": ["contains", "regex", "length", "schema"],
|
|
197
|
+
"description": "Type of validation rule"
|
|
198
|
+
},
|
|
199
|
+
"value": {
|
|
200
|
+
"type": "string",
|
|
201
|
+
"description": "Expected value for 'contains' type"
|
|
202
|
+
},
|
|
203
|
+
"pattern": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"description": "Regex pattern for 'regex' type"
|
|
206
|
+
},
|
|
207
|
+
"flags": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"description": "Regex flags for 'regex' type"
|
|
210
|
+
},
|
|
211
|
+
"min": {
|
|
212
|
+
"type": "number",
|
|
213
|
+
"description": "Minimum length for 'length' type"
|
|
214
|
+
},
|
|
215
|
+
"max": {
|
|
216
|
+
"type": "number",
|
|
217
|
+
"description": "Maximum length for 'length' type"
|
|
218
|
+
},
|
|
219
|
+
"message": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"description": "Error message when validation fails"
|
|
222
|
+
},
|
|
223
|
+
"schema": {
|
|
224
|
+
"type": "object",
|
|
225
|
+
"description": "JSON Schema object for 'schema' type validation",
|
|
226
|
+
"additionalProperties": true
|
|
227
|
+
},
|
|
228
|
+
"condition": {
|
|
229
|
+
"type": "object",
|
|
230
|
+
"description": "Optional condition that determines if this validation rule should be applied. Uses same format as step runCondition.",
|
|
231
|
+
"properties": {
|
|
232
|
+
"var": {
|
|
233
|
+
"type": "string",
|
|
234
|
+
"description": "Variable name from execution context"
|
|
235
|
+
},
|
|
236
|
+
"equals": {
|
|
237
|
+
"description": "Check if variable equals this value"
|
|
238
|
+
},
|
|
239
|
+
"not_equals": {
|
|
240
|
+
"description": "Check if variable does not equal this value"
|
|
241
|
+
},
|
|
242
|
+
"gt": {
|
|
243
|
+
"type": "number",
|
|
244
|
+
"description": "Check if variable is greater than this number"
|
|
245
|
+
},
|
|
246
|
+
"gte": {
|
|
247
|
+
"type": "number",
|
|
248
|
+
"description": "Check if variable is greater than or equal to this number"
|
|
249
|
+
},
|
|
250
|
+
"lt": {
|
|
251
|
+
"type": "number",
|
|
252
|
+
"description": "Check if variable is less than this number"
|
|
253
|
+
},
|
|
254
|
+
"lte": {
|
|
255
|
+
"type": "number",
|
|
256
|
+
"description": "Check if variable is less than or equal to this number"
|
|
257
|
+
},
|
|
258
|
+
"and": {
|
|
259
|
+
"type": "array",
|
|
260
|
+
"description": "Logical AND of multiple conditions",
|
|
261
|
+
"items": {
|
|
262
|
+
"type": "object"
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
"or": {
|
|
266
|
+
"type": "array",
|
|
267
|
+
"description": "Logical OR of multiple conditions",
|
|
268
|
+
"items": {
|
|
269
|
+
"type": "object"
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"not": {
|
|
273
|
+
"type": "object",
|
|
274
|
+
"description": "Logical NOT of a condition"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
"additionalProperties": false
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"required": ["type", "message"],
|
|
281
|
+
"additionalProperties": false
|
|
282
|
+
},
|
|
283
|
+
"validationComposition": {
|
|
284
|
+
"type": "object",
|
|
285
|
+
"description": "Logical composition of validation rules using boolean operators",
|
|
286
|
+
"properties": {
|
|
287
|
+
"and": {
|
|
288
|
+
"type": "array",
|
|
289
|
+
"description": "Logical AND - all criteria must pass",
|
|
290
|
+
"items": {
|
|
291
|
+
"$ref": "#/$defs/validationCriteria"
|
|
292
|
+
},
|
|
293
|
+
"minItems": 1
|
|
294
|
+
},
|
|
295
|
+
"or": {
|
|
296
|
+
"type": "array",
|
|
297
|
+
"description": "Logical OR - at least one criteria must pass",
|
|
298
|
+
"items": {
|
|
299
|
+
"$ref": "#/$defs/validationCriteria"
|
|
300
|
+
},
|
|
301
|
+
"minItems": 1
|
|
302
|
+
},
|
|
303
|
+
"not": {
|
|
304
|
+
"$ref": "#/$defs/validationCriteria",
|
|
305
|
+
"description": "Logical NOT - criteria must not pass"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
"additionalProperties": false,
|
|
309
|
+
"oneOf": [
|
|
310
|
+
{"required": ["and"]},
|
|
311
|
+
{"required": ["or"]},
|
|
312
|
+
{"required": ["not"]}
|
|
313
|
+
]
|
|
314
|
+
},
|
|
315
|
+
"validationCriteria": {
|
|
316
|
+
"description": "A validation rule or composition of rules",
|
|
317
|
+
"oneOf": [
|
|
318
|
+
{
|
|
319
|
+
"$ref": "#/$defs/validationRule"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"$ref": "#/$defs/validationComposition"
|
|
323
|
+
}
|
|
324
|
+
]
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "adaptive-ticket-creation",
|
|
3
|
+
"name": "Adaptive Ticket Creation Workflow",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"description": "An intelligent workflow for creating high-quality Jira tickets. Uses LLM-driven path selection to automatically choose between Simple, Standard, or Epic complexity paths based on request analysis.",
|
|
6
|
+
"preconditions": [
|
|
7
|
+
"User has provided a clear objective for the ticket(s) to be created",
|
|
8
|
+
"Agent has access to relevant context (PRDs, Figma links, etc.) if available",
|
|
9
|
+
"Agent has file system access for persistent feedback mechanism",
|
|
10
|
+
"Agent can maintain context variables throughout the workflow"
|
|
11
|
+
],
|
|
12
|
+
"clarificationPrompts": [
|
|
13
|
+
"What is the main feature or task you want to implement?",
|
|
14
|
+
"Do you have any supporting documentation (PRDs, designs, specs)?",
|
|
15
|
+
"What are your team's Jira conventions or preferences?",
|
|
16
|
+
"Are there any specific constraints or requirements?",
|
|
17
|
+
"What is the expected timeline or priority level?"
|
|
18
|
+
],
|
|
19
|
+
"steps": [
|
|
20
|
+
{
|
|
21
|
+
"id": "phase-0-intelligent-triage",
|
|
22
|
+
"title": "Phase 0: Intelligent Triage & Path Selection",
|
|
23
|
+
"prompt": "**PREP**: Analyze the user's request to determine the appropriate complexity path.\n\n**IMPLEMENT**: Evaluate the request for complexity indicators:\n- **Simple Path**: Single ticket, clear requirements, minimal dependencies, straightforward implementation\n- **Standard Path**: Multiple related tickets, moderate complexity, some analysis needed, clear scope\n- **Epic Path**: Complex feature requiring decomposition, extensive planning, multiple teams/dependencies\n\n**VERIFY**: Document your path selection reasoning and set the pathComplexity context variable. Load any existing rules from `./.workflow_rules/ticket_creation.md` to follow team preferences.",
|
|
24
|
+
"guidance": [
|
|
25
|
+
"Look for complexity indicators: scope size, unknowns, dependencies, team impact",
|
|
26
|
+
"Make the decision autonomously based on the request analysis",
|
|
27
|
+
"Set context variables that will be used in subsequent conditional steps"
|
|
28
|
+
],
|
|
29
|
+
"requireConfirmation": true
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "phase-a1-simple-ticket-gen",
|
|
33
|
+
"title": "Path A: Simple Ticket Generation",
|
|
34
|
+
"runCondition": {
|
|
35
|
+
"var": "pathComplexity",
|
|
36
|
+
"equals": "Simple"
|
|
37
|
+
},
|
|
38
|
+
"prompt": "**PREP**: Since this is a simple request, focus on creating a single high-quality ticket.\n\n**IMPLEMENT**: Generate a complete ticket with:\n- Clear, descriptive title following team conventions\n- Detailed description with sufficient context\n- Specific, testable acceptance criteria\n- Appropriate labels, priority, and story points\n- Any relevant links or attachments\n\n**VERIFY**: Review the ticket for completeness and clarity. This completes the Simple path workflow.",
|
|
39
|
+
"validationCriteria": [
|
|
40
|
+
{
|
|
41
|
+
"type": "regex",
|
|
42
|
+
"pattern": "(?i)##?\\s*Title:?",
|
|
43
|
+
"message": "Ticket must include a clear title (e.g., 'Title:' or '## Title')"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "regex",
|
|
47
|
+
"pattern": "(?i)##?\\s*Description:?",
|
|
48
|
+
"message": "Ticket must include a detailed description (e.g., 'Description:' or '## Description')"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"type": "regex",
|
|
52
|
+
"pattern": "(?i)##?\\s*Acceptance Criteria:?",
|
|
53
|
+
"message": "Ticket must include specific acceptance criteria (e.g., 'Acceptance Criteria:' or '## Acceptance Criteria')"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"type": "regex",
|
|
57
|
+
"pattern": "\\[\\s*\\].{5,}",
|
|
58
|
+
"message": "Acceptance criteria should include checkboxes followed by descriptive text (at least 5 characters)."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"type": "length",
|
|
62
|
+
"min": 300,
|
|
63
|
+
"max": 2000,
|
|
64
|
+
"message": "Ticket should be between 300-2000 characters for adequate detail"
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"guidance": [
|
|
68
|
+
"This is the complete fast track - workflow ends after this step",
|
|
69
|
+
"Focus on quality over quantity - one excellent ticket",
|
|
70
|
+
"Include all necessary context for the developer"
|
|
71
|
+
],
|
|
72
|
+
"requireConfirmation": true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "phase-c0-context-priming",
|
|
76
|
+
"title": "Path C, Phase 0: Comprehensive Context Gathering",
|
|
77
|
+
"runCondition": {
|
|
78
|
+
"or": [
|
|
79
|
+
{"var": "pathComplexity", "equals": "Standard"},
|
|
80
|
+
{"var": "pathComplexity", "equals": "Epic"}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"prompt": "**PREP**: Gather comprehensive context for this complex project.\n\n**IMPLEMENT**: Collect and analyze all available project materials:\n- Load existing rules from `./.workflow_rules/ticket_creation.md`\n- Review provided PRDs, technical specs, and design documents\n- Understand team conventions and Jira formatting preferences\n- Identify key stakeholders and dependencies\n- Note any constraints or special requirements\n\n**VERIFY**: Confirm you have sufficient context to proceed with analysis. Document any missing information that would be critical for planning.",
|
|
84
|
+
"guidance": [
|
|
85
|
+
"Thorough context gathering is critical for complex projects",
|
|
86
|
+
"Don't proceed without sufficient information",
|
|
87
|
+
"Set context variables for team conventions and project details"
|
|
88
|
+
],
|
|
89
|
+
"askForFiles": true,
|
|
90
|
+
"requireConfirmation": true
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "phase-c1-analysis-and-questions",
|
|
94
|
+
"title": "Path C, Phase 1: Analysis & Risk Identification",
|
|
95
|
+
"runCondition": {
|
|
96
|
+
"or": [
|
|
97
|
+
{"var": "pathComplexity", "equals": "Standard"},
|
|
98
|
+
{"var": "pathComplexity", "equals": "Epic"}
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
"prompt": "**PREP**: Analyze all provided context to identify ambiguities, risks, and missing information.\n\n**IMPLEMENT**: Create a structured analysis:\n- Identify unclear requirements or acceptance criteria\n- Highlight potential technical risks or blockers\n- Note missing information that could impact planning\n- Flag any conflicting requirements or constraints\n- Assess feasibility and effort implications\n\n**VERIFY**: Present findings as prioritized questions or clarifications needed. Only proceed when critical ambiguities are resolved.",
|
|
102
|
+
"guidance": [
|
|
103
|
+
"This is a critical risk reduction step",
|
|
104
|
+
"Better to ask questions now than discover issues later",
|
|
105
|
+
"Focus on blockers and high-impact unknowns"
|
|
106
|
+
],
|
|
107
|
+
"requireConfirmation": true
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "phase-c2-high-level-plan",
|
|
111
|
+
"title": "Path C, Phase 2: Create High-Level Plan",
|
|
112
|
+
"runCondition": {
|
|
113
|
+
"or": [
|
|
114
|
+
{"var": "pathComplexity", "equals": "Standard"},
|
|
115
|
+
{"var": "pathComplexity", "equals": "Epic"}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"prompt": "**PREP**: With clarified requirements, create a comprehensive high-level plan.\n\n**IMPLEMENT**: Generate a structured plan document:\n- **Project Summary**: Clear overview of the feature/project\n- **Key Deliverables**: Main components or features to be built\n- **In-Scope**: Explicitly defined scope boundaries\n- **Out-of-Scope**: Clear exclusions to prevent scope creep\n- **Success Criteria**: Measurable definition of done\n- **High-Level Timeline**: Major milestones and phases\n\n**VERIFY**: Ensure the plan is comprehensive and aligns with the original request. This plan will guide ticket creation.",
|
|
119
|
+
"validationCriteria": [
|
|
120
|
+
{
|
|
121
|
+
"type": "regex",
|
|
122
|
+
"pattern": "(?i)##?\\s*Project Summary:?",
|
|
123
|
+
"message": "Plan must include a Project Summary section"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"type": "regex",
|
|
127
|
+
"pattern": "(?i)##?\\s*Key Deliverables:?",
|
|
128
|
+
"message": "Plan must include a Key Deliverables section"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"type": "regex",
|
|
132
|
+
"pattern": "(?i)##?\\s*In-Scope:?",
|
|
133
|
+
"message": "Plan must explicitly define In-Scope items"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"type": "regex",
|
|
137
|
+
"pattern": "(?i)##?\\s*Out-of-Scope:?",
|
|
138
|
+
"message": "Plan must explicitly define Out-of-Scope items"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"type": "regex",
|
|
142
|
+
"pattern": "(?i)##?\\s*Success Criteria:?",
|
|
143
|
+
"message": "Plan must include measurable Success Criteria"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "regex",
|
|
147
|
+
"pattern": "(?i)##?\\s*High-Level Timeline:?",
|
|
148
|
+
"message": "Plan must include a High-Level Timeline section"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"type": "length",
|
|
152
|
+
"min": 800,
|
|
153
|
+
"message": "Plan should be at least 800 characters for comprehensive coverage"
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"guidance": [
|
|
157
|
+
"This plan becomes the foundation for all ticket generation",
|
|
158
|
+
"Be explicit about scope to prevent misunderstandings",
|
|
159
|
+
"For Standard path, this leads directly to ticket generation"
|
|
160
|
+
],
|
|
161
|
+
"requireConfirmation": true
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "phase-c3a-epic-decomposition",
|
|
165
|
+
"title": "Path C, Phase 3a: Epic Decomposition",
|
|
166
|
+
"runCondition": {
|
|
167
|
+
"var": "pathComplexity",
|
|
168
|
+
"equals": "Epic"
|
|
169
|
+
},
|
|
170
|
+
"prompt": "**PREP**: Decompose the approved high-level plan into a logical hierarchy.\n\n**IMPLEMENT**: Create a structured breakdown:\n- **Epic**: Main feature/project container\n- **Features/Stories**: Logical groupings of related functionality\n- **Tasks**: Specific implementation work items\n- **Dependencies**: Clear relationships between items\n- **Rationale**: Explain the decomposition logic and groupings\n\n**VERIFY**: Ensure the hierarchy is logical, dependencies are clear, and nothing is missed from the original plan.",
|
|
171
|
+
"guidance": [
|
|
172
|
+
"Epic path only - creates the story hierarchy",
|
|
173
|
+
"Focus on logical groupings that make sense for development",
|
|
174
|
+
"Consider team capacity and parallel work opportunities"
|
|
175
|
+
],
|
|
176
|
+
"requireConfirmation": true
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"id": "phase-c3b-estimation-and-dependencies",
|
|
180
|
+
"title": "Path C, Phase 3b: Estimation & Dependency Mapping",
|
|
181
|
+
"runCondition": {
|
|
182
|
+
"var": "pathComplexity",
|
|
183
|
+
"equals": "Epic"
|
|
184
|
+
},
|
|
185
|
+
"prompt": "**PREP**: Add effort estimates and dependency mapping to the decomposed stories.\n\n**IMPLEMENT**: For each story, provide:\n- **Effort Estimate**: S/M/L/XL sizing with detailed justification\n- **Dependencies**: Prerequisites and blockers\n- **Risk Assessment**: Technical or business risks\n- **Priority Ranking**: Relative importance and sequencing\n- **Team Assignment**: Suggested team or skill requirements\n\n**VERIFY**: Review estimates for consistency and identify any oversized stories that need further breakdown.",
|
|
186
|
+
"guidance": [
|
|
187
|
+
"Epic path only - adds planning details",
|
|
188
|
+
"Conservative estimates are better than optimistic ones",
|
|
189
|
+
"Identify critical path items and potential bottlenecks"
|
|
190
|
+
],
|
|
191
|
+
"requireConfirmation": true
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "phase-c4-batch-ticket-generation",
|
|
195
|
+
"title": "Path C, Phase 4: Batch Ticket Generation",
|
|
196
|
+
"runCondition": {
|
|
197
|
+
"or": [
|
|
198
|
+
{"var": "pathComplexity", "equals": "Standard"},
|
|
199
|
+
{"var": "pathComplexity", "equals": "Epic"}
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"prompt": "**PREP**: Generate all necessary Jira tickets based on the approved plan.\n\n**IMPLEMENT**: Create comprehensive tickets for every story/task:\n- **Epic Ticket**: Overall project container (Epic path only)\n- **Feature/Story Tickets**: Individual work items with full details\n- **Consistent Formatting**: Follow team conventions and templates\n- **Complete Information**: Title, description, acceptance criteria, labels, estimates\n- **Proper Linking**: Dependencies and epic relationships\n\n**VERIFY**: Review all tickets for completeness, consistency, and accuracy. Present the full batch for approval.",
|
|
203
|
+
"validationCriteria": [
|
|
204
|
+
{
|
|
205
|
+
"type": "regex",
|
|
206
|
+
"pattern": "(?i)##\\s*(Ticket\\s*\\d+|Epic)",
|
|
207
|
+
"message": "Output must contain multiple numbered tickets (e.g., '## Ticket 1') or an Epic ('## Epic')"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"type": "regex",
|
|
211
|
+
"pattern": "(?i)Story Points?:",
|
|
212
|
+
"message": "Tickets should include story point estimates"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"type": "regex",
|
|
216
|
+
"pattern": "(?i)Priority:",
|
|
217
|
+
"message": "Tickets should include priority levels"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"type": "length",
|
|
221
|
+
"min": 1000,
|
|
222
|
+
"message": "Batch ticket output should be substantial (1000+ characters) for multiple tickets"
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
"guidance": [
|
|
226
|
+
"Automated batch generation saves significant time",
|
|
227
|
+
"Ensure consistency across all tickets",
|
|
228
|
+
"Include all necessary metadata and relationships"
|
|
229
|
+
],
|
|
230
|
+
"requireConfirmation": true
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"id": "phase-c5-continuous-improvement",
|
|
234
|
+
"title": "Path C, Phase 5: Continuous Improvement & Learning",
|
|
235
|
+
"runCondition": {
|
|
236
|
+
"var": "pathComplexity",
|
|
237
|
+
"equals": "Epic"
|
|
238
|
+
},
|
|
239
|
+
"prompt": "**PREP**: Capture lessons learned and improve future ticket creation.\n\n**IMPLEMENT**: Based on feedback from the ticket review:\n- **Identify Patterns**: What worked well vs. what could be improved\n- **Extract Rules**: Formulate specific operational guidelines\n- **Document Preferences**: Team-specific conventions and requirements\n- **Update Rules File**: Append new rules to `./.workflow_rules/ticket_creation.md`\n- **Validate Learning**: Confirm the new rules make sense for future projects\n\n**VERIFY**: Ensure the persistent rules will improve future ticket creation quality and consistency.",
|
|
240
|
+
"guidance": [
|
|
241
|
+
"Epic path only - creates persistent learning",
|
|
242
|
+
"Focus on actionable, specific rules",
|
|
243
|
+
"This makes the AI smarter over time"
|
|
244
|
+
],
|
|
245
|
+
"requireConfirmation": true
|
|
246
|
+
}
|
|
247
|
+
],
|
|
248
|
+
"metaGuidance": [
|
|
249
|
+
"Maintain the persona of an expert Product Manager and Mobile Tech Lead",
|
|
250
|
+
"Make autonomous decisions based on context analysis rather than asking users to choose",
|
|
251
|
+
"If crucial information is missing, pause and request it with clear justification",
|
|
252
|
+
"Accumulate and maintain context throughout the workflow",
|
|
253
|
+
"Focus on creating high-quality, actionable tickets",
|
|
254
|
+
"Use team conventions and persistent rules to ensure consistency",
|
|
255
|
+
"Prioritize thoroughness for complex projects, efficiency for simple ones"
|
|
256
|
+
]
|
|
257
|
+
}
|