siesa-agents 2.1.65 → 2.1.66
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/bmad/bmm/workflows/sync-epics-stories/data/templates/epic-template.json +13 -0
- package/bmad/bmm/workflows/sync-epics-stories/data/templates/story-template.json +13 -0
- package/bmad/bmm/workflows/sync-epics-stories/data/templates/subtask-template.json +4 -0
- package/bmad/bmm/workflows/sync-epics-stories/data/templates/task-template.json +7 -0
- package/bmad/bmm/workflows/sync-epics-stories/steps/step-04-epics.md +8 -25
- package/bmad/bmm/workflows/sync-epics-stories/steps/step-05-stories.md +8 -34
- package/package.json +1 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"provider": "jira",
|
|
3
|
+
"issueTypeName": "Epic",
|
|
4
|
+
"projectKey": "{{project_key}}",
|
|
5
|
+
"parent": "{{Parent_Key}}",
|
|
6
|
+
"summary": "Epic {{Epic Number}}: {{Epic Name}}",
|
|
7
|
+
"description": "## Epic Goal\n{{goal}}\n\n## Details\n{{description}}\n\n---\n*Source: {{file_path}}*",
|
|
8
|
+
"additional_fields": {
|
|
9
|
+
"priority": { "name": "Medium" },
|
|
10
|
+
"labels": ["prd-sync", "automated", "epic-file-sync", "{{epic-slug}}"],
|
|
11
|
+
"customfield_10011": "Epic {{Epic Number}}: {{Epic Name}}"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"provider": "jira",
|
|
3
|
+
"issueTypeName": "Story",
|
|
4
|
+
"projectKey": "{{project_key}}",
|
|
5
|
+
"summary": "Story {{Story ID}}: {{Story Name}}",
|
|
6
|
+
"description": "## User Story\n{{user_story}}\n\n## Acceptance Criteria\n{{acceptance_criteria}}\n\n## Dev Notes\n{{dev_notes}}\n\n---\n*Source: {{file_path}}*",
|
|
7
|
+
"parent": "{{Parent_Epic_Key}}",
|
|
8
|
+
"additional_fields": {
|
|
9
|
+
"priority": { "name": "Medium" },
|
|
10
|
+
"labels": ["prd-sync", "automated", "story-file-sync", "{{parent-epic-slug}}"],
|
|
11
|
+
"customfield_10014": "{{Parent_Epic_Key}}"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -4,7 +4,6 @@ description: 'Synchronize Epics from markdown to Jira'
|
|
|
4
4
|
|
|
5
5
|
# Path Definitions
|
|
6
6
|
workflow_path: '{project-root}/_bmad/bmm/workflows/sync-epics-stories'
|
|
7
|
-
|
|
8
7
|
# File References
|
|
9
8
|
thisStepFile: '{workflow_path}/steps/step-04-epics.md'
|
|
10
9
|
nextStepStories: '{workflow_path}/steps/step-05-stories.md'
|
|
@@ -37,6 +36,7 @@ To read `epics.md`, check for existing Epics in Jira, create missing ones, and u
|
|
|
37
36
|
|
|
38
37
|
- Read `{configFile}` to get `project_key` and `cloud_id`.
|
|
39
38
|
- Read `{epicsFile}`.
|
|
39
|
+
- **CRITICAL:** Read the epic template payload from `{project-root}/_bmad/bmm/workflows/sync-epics-stories/data/templates/epic-template.json`.
|
|
40
40
|
|
|
41
41
|
### 2. Iterate and Sync
|
|
42
42
|
|
|
@@ -54,33 +54,16 @@ For each Epic in the file:
|
|
|
54
54
|
|
|
55
55
|
3. **Creation (Atomic Transaction):**
|
|
56
56
|
|
|
57
|
-
- Execute `createJiraIssue
|
|
57
|
+
- Execute `createJiraIssue`. DO NOT use hardcoded JSON.
|
|
58
|
+
- You MUST format the JSON object using the `epic-template.json` file you loaded in Step 1.
|
|
59
|
+
- Extract the `{{Epic Number}}` (e.g., "1" from "Epic 1: Core Inventory Visibility...") and `{{Epic Name}}` from the Markdown.
|
|
60
|
+
- Inject those, along with `{{goal}}`, `{{description}}`, and `{{project_key}}` into the template payload.
|
|
61
|
+
- **Hierarchy Handling (CRITICAL):** Check `project_config.yaml` for `hierarchy_level_2_name`.
|
|
62
|
+
- **If present (Custom Hierarchy):** Search for this issue using JQL to get its Key. Inject that Key into `{{Parent_Key}}` in the template.
|
|
63
|
+
- **If absent (Standard Hierarchy):** Remove the `"parent": "{{Parent_Key}}"` property completely from the JSON payload before sending it to Jira.
|
|
58
64
|
|
|
59
65
|
- ⚠️ **CRITICAL CONSTRAINT:** `issueTypeName` MUST be exactly `"Epic"`. DO NOT translate to "Épica" or any other language. The API requires the English identifier.
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
```json
|
|
64
|
-
|
|
65
|
-
{
|
|
66
|
-
|
|
67
|
-
"provider": "jira",
|
|
68
|
-
|
|
69
|
-
"issueTypeName": "Epic",
|
|
70
|
-
|
|
71
|
-
"summary": "[Epic] {{Epic Name}}",
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
"description": "## Epic Goal\n{{goal}}\n\n## Details\n{{description}}\n\n---\n*Source: {{file_path}}*",
|
|
75
|
-
"projectKey": "{{project_key}}",
|
|
76
|
-
"additional_fields": {
|
|
77
|
-
"priority": { "name": "Medium" },
|
|
78
|
-
"labels": ["prd-sync", "automated", "epic-file-sync", "{{epic-slug}}"],
|
|
79
|
-
"customfield_10011": "{{Epic Name}}"
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
67
|
4. **Immediate File Persistence (CRITICAL):**
|
|
85
68
|
- **IMMEDIATELY** after obtaining the new `key` (or finding an existing one):
|
|
86
69
|
- Update `{epicsFile}` **RIGHT NOW**. Do not wait for the loop to finish.
|
|
@@ -59,6 +59,7 @@ To read story files from `{storiesFolder}`, link them to Parent Epics (found in
|
|
|
59
59
|
- Read `{configFile}`.
|
|
60
60
|
- Get list of all `.md` files in `{storiesFolder}`.
|
|
61
61
|
- Read `{epicsFile}` (to lookup Parent Epic IDs).
|
|
62
|
+
- **CRITICAL:** Read the template payloads from `{project-root}/_bmad/bmm/workflows/sync-epics-stories/data/templates/` (`story-template.json`, `task-template.json`, and `subtask-template.json`).
|
|
62
63
|
|
|
63
64
|
### 3. Iterate and Sync
|
|
64
65
|
|
|
@@ -94,23 +95,10 @@ For each markdown file in `{storiesFolder}`:
|
|
|
94
95
|
- Proceed to Step 4.
|
|
95
96
|
|
|
96
97
|
4. **Creation (Atomic Transaction - If Condition Not Found):**
|
|
97
|
-
- Execute `createJiraIssue
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
"provider": "jira",
|
|
102
|
-
"issueTypeName": "Story",
|
|
103
|
-
"projectKey": "{{project_key}}",
|
|
104
|
-
"summary": "{{Story Name}}",
|
|
105
|
-
"description": "## User Story\n{{user_story}}\n\n## Description\n{{description}}\n\n## Acceptance Criteria\n{{acceptance_criteria}}\n\n---\n*Source: {{file_path}}*",
|
|
106
|
-
"parent": "{{Parent_Epic_Key}}",
|
|
107
|
-
"additional_fields": {
|
|
108
|
-
"priority": { "name": "Medium" },
|
|
109
|
-
"labels": ["prd-sync", "automated", "epic-file-sync", "{{parent-epic-slug}}"],
|
|
110
|
-
"customfield_10014": "{{Parent_Epic_Key}}" // 'Epic Link' field. IMPORTANT: Check project capability for field ID.
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
98
|
+
- Execute `createJiraIssue`. DO NOT use hardcoded JSON.
|
|
99
|
+
- You MUST format the JSON object using `story-template.json` that you loaded in Step 2.
|
|
100
|
+
- Extract the `{{Story ID}}` (e.g. "1.1") and `{{Story Name}}` from the Markdown file's main H1 header.
|
|
101
|
+
- Inject those, along with `{{user_story}}`, `{{acceptance_criteria}}`, `{{dev_notes}}`, and `{{Parent_Epic_Key}}` into the template payload.
|
|
114
102
|
- **Set:** `{{KEY}}` = New Issue Key.
|
|
115
103
|
|
|
116
104
|
5. **Immediate File Persistence (CRITICAL):**
|
|
@@ -140,23 +128,9 @@ For each markdown file in `{storiesFolder}`:
|
|
|
140
128
|
- Check: Is `{{Task Name}}` already present in the *already synced tasks* list?
|
|
141
129
|
- **If YES:** **SKIP** this task. Log "Task '{{Task Name}}' already synced."
|
|
142
130
|
- **If NO:** **PROCEED** to Create.
|
|
143
|
-
- **Create:** Execute `createJiraIssue
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
"provider": "jira",
|
|
147
|
-
"issueTypeName": "Sub-task",
|
|
148
|
-
"projectKey": "{{project_key}}",
|
|
149
|
-
"parent": "{{KEY}}",
|
|
150
|
-
"summary": "{{Task Text}}"
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
- **Context:** If the task has nested items (indented bullets), combine them into a **simple markdown bulleted list** (ensuring no checklist `[ ]` syntax is used) and execute `addCommentToJiraIssue`:
|
|
154
|
-
```json
|
|
155
|
-
{
|
|
156
|
-
"issueIdOrKey": "{{New_SubTask_Key}}",
|
|
157
|
-
"commentBody": "## Details\n\n{{nested_bullets_content}}"
|
|
158
|
-
}
|
|
159
|
-
```
|
|
131
|
+
- **Create:** Execute `createJiraIssue` formatting the `task-template.json` loaded in Step 2.
|
|
132
|
+
- Remember to inject `{{Story ID}}` parsed from earlier, `{{Task Name}}`, and `{{project_key}}`.
|
|
133
|
+
- **Context:** If the task has nested items (indented bullets), combine them into a **simple markdown bulleted list** (ensuring no checklist `[ ]` syntax is used) and execute `addCommentToJiraIssue` formatting the `subtask-template.json` loaded in Step 2.
|
|
160
134
|
- **Persistence (Append Update):**
|
|
161
135
|
- **Immediately** append a new row to the `## Synced Tasks` table (create table header if it doesn't exist yet):
|
|
162
136
|
```markdown
|