@tiqora/tiqora 0.0.2-dev → 0.0.3-dev
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/_tiqora/agents/dev.md +2 -1
- package/_tiqora/workflows/4-implementation/create-story/checklist.md +82 -0
- package/_tiqora/workflows/4-implementation/create-story/instructions.xml +239 -0
- package/_tiqora/workflows/4-implementation/create-story/workflow.yaml +27 -0
- package/_tiqora/workflows/4-implementation/dev-story/checklist.md +91 -26
- package/_tiqora/workflows/4-implementation/dev-story/instructions.xml +245 -43
- package/_tiqora/workflows/4-implementation/dev-story/workflow.yaml +8 -0
- package/package.json +1 -1
package/_tiqora/agents/dev.md
CHANGED
|
@@ -24,7 +24,8 @@ You must fully embody this agent persona and follow activation rules exactly.
|
|
|
24
24
|
<reflex id="pm-mcp-context">If pm_tool is not none and ticket context is missing or stale, fetch ticket details via configured PM MCP connector before implementation decisions.</reflex>
|
|
25
25
|
<reflex id="branch-discipline">Before implementation starts, resolve branch name from branch_pattern plus ticket identifier and create/switch branch.</reflex>
|
|
26
26
|
<reflex id="mr-readiness">When work reaches review-ready state, prepare MR content with intent, scope, validation, and risks; create MR through provider integration when available, otherwise produce a ready-to-paste draft.</reflex>
|
|
27
|
-
<reflex id="status-sync">At workflow milestones, push PM status and summary updates when integration is configured.</reflex>
|
|
27
|
+
<reflex id="status-sync">At workflow milestones, push PM status and summary updates when integration is configured: start => In Progress, finish => In Review/Done, blocked => Blocked when available.</reflex>
|
|
28
|
+
<reflex id="worklog-sync">At workflow completion, push worklog using run timestamps (or user-provided duration fallback) when PM tool supports worklog operations.</reflex>
|
|
28
29
|
<reflex id="sync-fallback">If remote PM or MR operations fail, do not block delivery; append retry metadata to .tiqora/sync/queue.json and continue with explicit warning.</reflex>
|
|
29
30
|
</operational-reflexes>
|
|
30
31
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Tiqora Create-Story - Definition of Done Checklist"
|
|
3
|
+
validation-target: "New story creation run (conversational elicitation)"
|
|
4
|
+
validation-criticality: "HIGH"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tiqora Create-Story - DoD Checklist
|
|
8
|
+
|
|
9
|
+
## 1) Configuration & Setup
|
|
10
|
+
|
|
11
|
+
- [ ] Effective config built from `~/.tiqora.yaml` + project `.tiqora.yaml`.
|
|
12
|
+
- [ ] Required keys present: `pm_tool`, `git_host`, `branch_pattern`.
|
|
13
|
+
- [ ] Ready to discuss story with user.
|
|
14
|
+
|
|
15
|
+
## 2) Story Discussion (Natural Conversation)
|
|
16
|
+
|
|
17
|
+
- [ ] User described what they want to build/fix.
|
|
18
|
+
- [ ] Agent asked clarifying questions (not as a form, as natural conversation).
|
|
19
|
+
- [ ] Problem statement captured and understood.
|
|
20
|
+
- [ ] Expected outcome discussed and clear.
|
|
21
|
+
- [ ] User/stakeholder identified.
|
|
22
|
+
- [ ] Priority discussed (low/medium/high/critical).
|
|
23
|
+
- [ ] Scope boundaries discussed (what's in, what's out).
|
|
24
|
+
|
|
25
|
+
## 3) Acceptance Criteria (Conversational)
|
|
26
|
+
|
|
27
|
+
- [ ] User explained how they'd know when it's done.
|
|
28
|
+
- [ ] Agent clarified measurable outcomes (3-5 criteria).
|
|
29
|
+
- [ ] ACs captured in natural language (format not forced).
|
|
30
|
+
- [ ] Both agent and user agree on what "done" means.
|
|
31
|
+
- [ ] No critical ambiguities remain.
|
|
32
|
+
|
|
33
|
+
## 4) Dependencies & Gotchas (Discussed)
|
|
34
|
+
|
|
35
|
+
- [ ] Blockers/dependencies discussed naturally (if any).
|
|
36
|
+
- [ ] Risks or tricky parts identified.
|
|
37
|
+
- [ ] Impact on ecosystem considered.
|
|
38
|
+
- [ ] (May be "none" for simple stories - that's ok)
|
|
39
|
+
|
|
40
|
+
## 5) Story Document (From Our Conversation)
|
|
41
|
+
|
|
42
|
+
- [ ] Story title generated from problem statement (max 80 chars, searchable).
|
|
43
|
+
- [ ] Story description summarizes what we discussed:
|
|
44
|
+
- Problem statement (our words)
|
|
45
|
+
- Expected outcome
|
|
46
|
+
- User/Stakeholder
|
|
47
|
+
- Priority
|
|
48
|
+
- Acceptance criteria (as we described them)
|
|
49
|
+
- Scope (in/out)
|
|
50
|
+
- Dependencies & risks (if any)
|
|
51
|
+
- [ ] Document is clear enough for dev to challenge and implement.
|
|
52
|
+
|
|
53
|
+
## 6) User Approval
|
|
54
|
+
|
|
55
|
+
- [ ] Story document displayed to user.
|
|
56
|
+
- [ ] User reviewed and confirmed it matches their intent.
|
|
57
|
+
- [ ] Any edits applied before creation.
|
|
58
|
+
- [ ] User explicitly approved creation.
|
|
59
|
+
|
|
60
|
+
## 7) PM Tool Creation
|
|
61
|
+
|
|
62
|
+
- [ ] Story created in {{pm_tool}} using MCP connector.
|
|
63
|
+
- [ ] Story ID/Key captured as {{ticketId}}.
|
|
64
|
+
- [ ] Story is accessible and viewable in PM tool.
|
|
65
|
+
- [ ] (If creation failed, locally saved with sync queued)
|
|
66
|
+
|
|
67
|
+
## 8) Local Artifact Persistence
|
|
68
|
+
|
|
69
|
+
- [ ] Story artifact persisted to `.tiqora/workflows/stories/{{ticketId}}.json`.
|
|
70
|
+
- [ ] Includes all discussion details (problem, outcome, ACs, scope, etc).
|
|
71
|
+
- [ ] Includes metadata (pm_tool, git_host, document_language, created_at).
|
|
72
|
+
|
|
73
|
+
## 9) Communication
|
|
74
|
+
|
|
75
|
+
- [ ] Conversation in `communication_language` (natural).
|
|
76
|
+
- [ ] Story document in ENGLISH (clarity for dev).
|
|
77
|
+
- [ ] Clear next steps offered (dev-story, view, etc).
|
|
78
|
+
|
|
79
|
+
## Final Result
|
|
80
|
+
|
|
81
|
+
- [ ] **PASS**: Story created from natural discussion, ready for dev-story challenge.
|
|
82
|
+
- [ ] **FAIL**: Unresolved ambiguities or user not satisfied with story.
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
<workflow>
|
|
2
|
+
<critical>The workflow execution engine is governed by: {project-root}/_tiqora/core/tasks/workflow.xml</critical>
|
|
3
|
+
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
|
|
4
|
+
<critical>YOU MUST ALWAYS SPEAK OUTPUT in the configured communication_language resolved from merged tiqora config.</critical>
|
|
5
|
+
<critical>This is a CONVERSATIONAL workflow, not a form. Have a natural discussion with the user.</critical>
|
|
6
|
+
<critical>Generate story artifact in ENGLISH for clarity, but the conversation is in communication_language.</critical>
|
|
7
|
+
<critical>Execute ALL steps in exact order; do NOT skip steps.</critical>
|
|
8
|
+
|
|
9
|
+
<step n="1" goal="Load configuration">
|
|
10
|
+
<action>Load project config from {project_config} as required input.</action>
|
|
11
|
+
<action if="project config does not exist">HALT: "✗ No project .tiqora.yaml found. Run 'npx tiqora init' first."</action>
|
|
12
|
+
|
|
13
|
+
<action>Load profile config from {profile_config} when available (optional).</action>
|
|
14
|
+
<action>Build effective config as: profile config (base) + project config (override).</action>
|
|
15
|
+
<action>Apply defaults when missing: user_name={default_user_name}, communication_language={default_communication_language}, document_language={default_document_language}.</action>
|
|
16
|
+
|
|
17
|
+
<action>Validate required project keys: pm_tool, git_host, branch_pattern.</action>
|
|
18
|
+
<action if="any required project key is missing">HALT: "✗ Blocking configuration error in {project_config}: missing pm_tool, git_host, or branch_pattern. Edit .tiqora.yaml and add these keys."</action>
|
|
19
|
+
|
|
20
|
+
<output>[WORKFLOW] ✓ Config loaded and ready to discuss</output>
|
|
21
|
+
</step>
|
|
22
|
+
|
|
23
|
+
<step n="2" goal="Start conversational discussion about the story">
|
|
24
|
+
<critical>This is a natural conversation, not interrogation. Listen more than ask. Build on what the user says.</critical>
|
|
25
|
+
|
|
26
|
+
<action>Start by asking the user to describe what they want to build/fix:
|
|
27
|
+
"What do you want to work on? Tell me about it."
|
|
28
|
+
</action>
|
|
29
|
+
|
|
30
|
+
<action>Listen to their initial description and capture the core idea as {{initial_intent}}.</action>
|
|
31
|
+
|
|
32
|
+
<ask>[Start the conversation]
|
|
33
|
+
Tell me about what you want to build or fix. What's the idea?</ask>
|
|
34
|
+
|
|
35
|
+
<action>Based on their response, engage in natural back-and-forth. Ask clarifying questions when needed:
|
|
36
|
+
- If unclear: "Help me understand the problem better..."
|
|
37
|
+
- If scope seems big: "Is this everything, or are there phases?"
|
|
38
|
+
- If impact is unclear: "Who would benefit from this?"
|
|
39
|
+
- If success criteria missing: "How would we know this worked?"
|
|
40
|
+
</action>
|
|
41
|
+
|
|
42
|
+
<action>Keep iterating until {{problem_statement}}, {{expected_outcome}}, {{user_role}}, {{priority}}, {{scope_boundaries}} are captured naturally in the conversation.</action>
|
|
43
|
+
|
|
44
|
+
<output>[WORKFLOW] ✓ Initial understanding captured | Ready to refine</output>
|
|
45
|
+
</step>
|
|
46
|
+
|
|
47
|
+
<step n="3" goal="Refine acceptance criteria together">
|
|
48
|
+
<critical>Don't impose format. Guide naturally toward measurable outcomes.</critical>
|
|
49
|
+
|
|
50
|
+
<action>Ask the user how they'd know when this is done:
|
|
51
|
+
"What needs to be true for this to be 'done'?"
|
|
52
|
+
"How do we test/verify this works?"
|
|
53
|
+
</action>
|
|
54
|
+
|
|
55
|
+
<action>As they describe acceptance criteria, help clarify and structure them naturally. Examples:
|
|
56
|
+
- "So when a user [does X], they should [see Y]?"
|
|
57
|
+
- "Let's make sure this is testable: how would we verify that?"
|
|
58
|
+
</action>
|
|
59
|
+
|
|
60
|
+
<action>Capture {{acceptance_criteria}} through conversation (don't need Given/When/Then if they describe it differently).</action>
|
|
61
|
+
|
|
62
|
+
<action>Iterate until you have 3-5 clear, measurable outcomes that the user agrees on.</action>
|
|
63
|
+
|
|
64
|
+
<output>[WORKFLOW] ✓ Acceptance criteria refined and agreed</output>
|
|
65
|
+
</step>
|
|
66
|
+
|
|
67
|
+
<step n="4" goal="Identify dependencies, risks, and gotchas (conversational)">
|
|
68
|
+
<critical>Ask about blockers and complications naturally. Some stories don't have many.</critical>
|
|
69
|
+
|
|
70
|
+
<action>Engage in natural conversation about potential blockers:
|
|
71
|
+
"Are there any blockers or dependencies we should know about?"
|
|
72
|
+
"Does this depend on other work being done first?"
|
|
73
|
+
"Any tricky parts or things that could go wrong?"
|
|
74
|
+
"Any performance, security, or infrastructure concerns?"
|
|
75
|
+
</action>
|
|
76
|
+
|
|
77
|
+
<action>Capture {{dependencies}}, {{risks}}, {{constraints}} from user responses. If none, that's fine too.</action>
|
|
78
|
+
|
|
79
|
+
<output>[WORKFLOW] ✓ Dependencies and risks discussed</output>
|
|
80
|
+
</step>
|
|
81
|
+
|
|
82
|
+
<step n="5" goal="Generate story document from our discussion">
|
|
83
|
+
<critical>This is a summary of what we discussed. It should be clear enough for dev to challenge and implement.</critical>
|
|
84
|
+
|
|
85
|
+
<action>Generate story title from {{problem_statement}}:
|
|
86
|
+
- Format: "[FEATURE] Brief description" or "[BUG] Brief description"
|
|
87
|
+
- Max 80 characters
|
|
88
|
+
- Make it clear and searchable
|
|
89
|
+
</action>
|
|
90
|
+
|
|
91
|
+
<action>Generate story description (ENGLISH) as a clean summary of our conversation:
|
|
92
|
+
"## Problem Statement
|
|
93
|
+
|
|
94
|
+
{{problem_statement}}
|
|
95
|
+
|
|
96
|
+
## Expected Outcome
|
|
97
|
+
|
|
98
|
+
{{expected_outcome}}
|
|
99
|
+
|
|
100
|
+
## User / Stakeholder
|
|
101
|
+
|
|
102
|
+
{{user_role}}
|
|
103
|
+
|
|
104
|
+
## Priority
|
|
105
|
+
|
|
106
|
+
{{priority}}
|
|
107
|
+
|
|
108
|
+
## Acceptance Criteria
|
|
109
|
+
|
|
110
|
+
[List the outcomes we discussed - can be natural language, not forced format]
|
|
111
|
+
|
|
112
|
+
## Scope
|
|
113
|
+
|
|
114
|
+
In Scope:
|
|
115
|
+
- [What we agreed is included]
|
|
116
|
+
|
|
117
|
+
Out of Scope:
|
|
118
|
+
- [What we explicitly said is NOT included]
|
|
119
|
+
|
|
120
|
+
## Dependencies & Gotchas
|
|
121
|
+
|
|
122
|
+
{{dependencies}}
|
|
123
|
+
{{risks}}
|
|
124
|
+
|
|
125
|
+
## Notes
|
|
126
|
+
|
|
127
|
+
Created via Tiqora create-story workflow (conversational elicitation).
|
|
128
|
+
Ready for dev challenge and implementation."
|
|
129
|
+
</action>
|
|
130
|
+
|
|
131
|
+
<action>Store complete story as {{story_document}}.</action>
|
|
132
|
+
|
|
133
|
+
<output>[WORKFLOW] ✓ Story document created from our discussion</output>
|
|
134
|
+
</step>
|
|
135
|
+
|
|
136
|
+
<step n="6" goal="Review story together and get approval">
|
|
137
|
+
<critical>This is our chance to refine before creating. Make sure the story matches your intent.</critical>
|
|
138
|
+
|
|
139
|
+
<action>Display {{story_document}} to user for review.</action>
|
|
140
|
+
|
|
141
|
+
<ask>Here's what we discussed, structured as a story:
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
{{story_document}}
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
Does this look right? Anything you want to change before we create it?
|
|
148
|
+
|
|
149
|
+
Choose:
|
|
150
|
+
- (yes) Good, create it in {{pm_tool}}
|
|
151
|
+
- (edit) Let me tweak [section]
|
|
152
|
+
- (no) Actually, let's not do this</ask>
|
|
153
|
+
|
|
154
|
+
<check if="user chooses edit">
|
|
155
|
+
<ask>What needs to change? (You can describe what you want, I'll update it)</ask>
|
|
156
|
+
<action>Listen to user's suggested edits and apply them to {{story_document}}.</action>
|
|
157
|
+
<goto step="6" />
|
|
158
|
+
</check>
|
|
159
|
+
|
|
160
|
+
<check if="user chooses no">
|
|
161
|
+
<output>[WORKFLOW] ⏸ Story creation cancelled</output>
|
|
162
|
+
<action>HALT workflow.</action>
|
|
163
|
+
</check>
|
|
164
|
+
|
|
165
|
+
<check if="user chooses yes">
|
|
166
|
+
<action>Proceed to step 7 (create in PM tool).</action>
|
|
167
|
+
</check>
|
|
168
|
+
</step>
|
|
169
|
+
|
|
170
|
+
<step n="7" goal="Create story in PM tool">
|
|
171
|
+
<critical>Use PM MCP to create the story in Jira/GitHub/GitLab with the info we discussed.</critical>
|
|
172
|
+
|
|
173
|
+
<action if="pm_tool is not none">
|
|
174
|
+
Use PM MCP connector to create story:
|
|
175
|
+
- Title: {{story_title}}
|
|
176
|
+
- Description: {{story_description}}
|
|
177
|
+
- Project: {jira.project_key} or equivalent
|
|
178
|
+
- Priority: {{priority}}
|
|
179
|
+
- Type: "Story"
|
|
180
|
+
</action>
|
|
181
|
+
|
|
182
|
+
<check if="story creation succeeds">
|
|
183
|
+
<action>Capture returned story ID/key as {{ticketId}}.</action>
|
|
184
|
+
<action>Ensure directory exists: {story_artifact_dir}.</action>
|
|
185
|
+
<action>Persist story artifact to {created_story_file} (JSON) with all the details from our conversation.</action>
|
|
186
|
+
<output>[WORKFLOW] ✓ Story created in {{pm_tool}}
|
|
187
|
+
ID: {{ticketId}}
|
|
188
|
+
Artifact: {created_story_file}
|
|
189
|
+
</output>
|
|
190
|
+
</check>
|
|
191
|
+
|
|
192
|
+
<check if="story creation fails">
|
|
193
|
+
<ask>Couldn't create the story in {{pm_tool}}. Want to:
|
|
194
|
+
(retry) Try again?
|
|
195
|
+
(queue) Save locally and retry later?
|
|
196
|
+
(skip) Just keep it locally for now?</ask>
|
|
197
|
+
|
|
198
|
+
<check if="user chooses queue">
|
|
199
|
+
<action>Persist story locally with status = "pending_sync".</action>
|
|
200
|
+
<action>Queue retry in .tiqora/sync/queue.json.</action>
|
|
201
|
+
<output>⚠ Story saved locally, will try to create in {{pm_tool}} later.</output>
|
|
202
|
+
</check>
|
|
203
|
+
|
|
204
|
+
<check if="user chooses retry">
|
|
205
|
+
<goto step="7" />
|
|
206
|
+
</check>
|
|
207
|
+
|
|
208
|
+
<check if="user chooses skip">
|
|
209
|
+
<action>Persist story locally (not created in PM tool yet).</action>
|
|
210
|
+
<output>Story saved locally. You can create it manually later if needed.</output>
|
|
211
|
+
</check>
|
|
212
|
+
</check>
|
|
213
|
+
</step>
|
|
214
|
+
|
|
215
|
+
<step n="8" goal="Done — offer next steps">
|
|
216
|
+
<output>[WORKFLOW] ✅ STORY CREATED
|
|
217
|
+
ID: {{ticketId}}
|
|
218
|
+
Title: {{story_title}}
|
|
219
|
+
Artifact: {created_story_file}
|
|
220
|
+
</output>
|
|
221
|
+
|
|
222
|
+
<ask>What would you like to do next?
|
|
223
|
+
(dev) Start dev-story with {{ticketId}} (challenge + implementation)
|
|
224
|
+
(view) Show me the full story again
|
|
225
|
+
(done) We're good for now</ask>
|
|
226
|
+
|
|
227
|
+
<check if="user chooses dev">
|
|
228
|
+
<output>Great! Next: Run /tiq:workflow:dev-story {{ticketId}} to start the challenge and implementation flow.</output>
|
|
229
|
+
</check>
|
|
230
|
+
|
|
231
|
+
<check if="user chooses view">
|
|
232
|
+
<action>Display {{story_document}}.</action>
|
|
233
|
+
</check>
|
|
234
|
+
|
|
235
|
+
<check if="user chooses done">
|
|
236
|
+
<output>Story is ready whenever you want to start dev-story.</output>
|
|
237
|
+
</check>
|
|
238
|
+
</step>
|
|
239
|
+
</workflow>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: create-story
|
|
2
|
+
description: "Elicit and create implementation-ready story with PM persona, clear acceptance criteria, and scope boundaries"
|
|
3
|
+
author: "Tiqora"
|
|
4
|
+
|
|
5
|
+
# Workflow engine bootstrap (required by _tiqora/core/tasks/workflow.xml)
|
|
6
|
+
config_source: "{project-root}/.tiqora.yaml"
|
|
7
|
+
date: system-generated
|
|
8
|
+
|
|
9
|
+
# Workflow components
|
|
10
|
+
installed_path: "{project-root}/_tiqora/workflows/4-implementation/create-story"
|
|
11
|
+
instructions: "{installed_path}/instructions.xml"
|
|
12
|
+
validation: "{installed_path}/checklist.md"
|
|
13
|
+
|
|
14
|
+
# Runtime paths
|
|
15
|
+
story_artifact_dir: "{project-root}/.tiqora/workflows/stories"
|
|
16
|
+
created_story_file: "{story_artifact_dir}/{{ticketId}}.json"
|
|
17
|
+
|
|
18
|
+
# PM defaults
|
|
19
|
+
pm_in_progress_status: "In Progress"
|
|
20
|
+
pm_review_status: "In Review"
|
|
21
|
+
pm_done_status: "Done"
|
|
22
|
+
|
|
23
|
+
# Defaults applied by instructions.xml after config merge
|
|
24
|
+
default_user_name: "Developer"
|
|
25
|
+
default_idle_threshold_minutes: 15
|
|
26
|
+
default_communication_language: "Français"
|
|
27
|
+
default_document_language: "English"
|
|
@@ -8,40 +8,105 @@ validation-criticality: "HIGHEST"
|
|
|
8
8
|
|
|
9
9
|
## 1) Config and Context
|
|
10
10
|
|
|
11
|
-
- [ ] Effective config
|
|
12
|
-
- [ ] Required
|
|
13
|
-
- [ ] Ticket
|
|
11
|
+
- [ ] Effective config built: `~/.tiqora/config.yaml` (optional) + project `.tiqora.yaml` (required).
|
|
12
|
+
- [ ] Required keys present: `pm_tool`, `git_host`, `branch_pattern`.
|
|
13
|
+
- [ ] Ticket retrieved via PM MCP or fallback explicitly confirmed.
|
|
14
|
+
- [ ] PM tracking identifiers (key/id, transitions, workspace IDs) captured.
|
|
14
15
|
|
|
15
|
-
## 2)
|
|
16
|
+
## 2) Jira State Transitions (CRITICAL)
|
|
16
17
|
|
|
17
|
-
- [ ]
|
|
18
|
-
- [ ]
|
|
19
|
-
- [ ]
|
|
20
|
-
- [ ]
|
|
21
|
-
- [ ]
|
|
18
|
+
- [ ] **Step 3**: Ticket moved to `In Progress` immediately after fetch (worklog tracking started).
|
|
19
|
+
- [ ] **Step 4**: Challenge gate completed; artifact at `.tiqora/workflows/steps/{runId}-challenge.md` (ENGLISH).
|
|
20
|
+
- [ ] **Step 4**: Challenge summary comment posted to ticket with verdict, scope, risks.
|
|
21
|
+
- [ ] **Step 9**: Ticket moved to `Review` (or `Done` if no review stage) after commit and MR creation.
|
|
22
|
+
- [ ] **Step 9**: Final completion comment posted with MR link and time spent.
|
|
22
23
|
|
|
23
|
-
## 3)
|
|
24
|
+
## 3) Challenge Gate (Rigorous)
|
|
24
25
|
|
|
25
|
-
- [ ]
|
|
26
|
-
- [ ]
|
|
27
|
-
- [ ]
|
|
28
|
-
- [ ]
|
|
29
|
-
- [ ]
|
|
26
|
+
- [ ] PM persona loaded from `_tiqora/agents/pm.md`.
|
|
27
|
+
- [ ] Challenge analyzed 6 dimensions: clarity, consistency, scope, alignment, testability, risks.
|
|
28
|
+
- [ ] Challenge artifact includes: intent, AC checklist, PM verdict (PASS/FAIL), scope boundaries, approach, risks, dependencies, testability notes.
|
|
29
|
+
- [ ] PM verdict is PASS (not vague "ok, let's go").
|
|
30
|
+
- [ ] Ambiguities resolved BEFORE implementation started.
|
|
31
|
+
- [ ] Persona restored to entry persona before implementation.
|
|
30
32
|
|
|
31
|
-
## 4)
|
|
33
|
+
## 4) Implementation & Testing (Test-First)
|
|
32
34
|
|
|
33
|
-
- [ ]
|
|
34
|
-
- [ ]
|
|
35
|
-
- [ ]
|
|
36
|
-
- [ ]
|
|
35
|
+
- [ ] Dev persona loaded from `_tiqora/agents/dev.md`.
|
|
36
|
+
- [ ] Changes map 100% to approved challenge scope; no out-of-scope features.
|
|
37
|
+
- [ ] Tests written first (red), implementation (green), refactoring (refactor) when feasible.
|
|
38
|
+
- [ ] All unit tests passing.
|
|
39
|
+
- [ ] All regression tests passing.
|
|
40
|
+
- [ ] Lint/type/quality checks run and passing (if configured).
|
|
41
|
+
- [ ] At least one progress comment published during implementation (done/next/blockers format).
|
|
37
42
|
|
|
38
|
-
## 5)
|
|
43
|
+
## 5) Git Commit (MANDATORY)
|
|
39
44
|
|
|
40
|
-
- [ ]
|
|
41
|
-
- [ ]
|
|
42
|
-
-
|
|
45
|
+
- [ ] Changes staged: `git add .`
|
|
46
|
+
- [ ] Commit created with conventional message format:
|
|
47
|
+
- `feat:` for new features (or `fix:`, `refactor:`, `test:`)
|
|
48
|
+
- Ticket ID in message: `Fixes {{ticketId}}`
|
|
49
|
+
- Descriptive commit body with implementation details
|
|
50
|
+
- [ ] Commit includes all changes (no untracked files left).
|
|
51
|
+
- [ ] `git log` shows the commit on the branch.
|
|
52
|
+
|
|
53
|
+
## 6) MR Report
|
|
54
|
+
|
|
55
|
+
- [ ] MR Report generated at `.tiqora/workflows/runs/{runId}-mr-report.md` (in `document_language`).
|
|
56
|
+
- [ ] MR Report includes sections:
|
|
57
|
+
- Title + Description (what was built and why)
|
|
58
|
+
- Technical Choices (architecture decisions + justification)
|
|
59
|
+
- Changes Made (file-by-file explanation)
|
|
60
|
+
- Testing (unit/integration/manual steps)
|
|
61
|
+
- How to Run (step-by-step instructions)
|
|
62
|
+
- Deployment Notes (migrations, env vars, breaking changes, rollback plan)
|
|
63
|
+
- [ ] Developer reviewed and approved MR Report before push.
|
|
64
|
+
- [ ] MR/PR created in Git host (GitHub/GitLab) with MR Report as description.
|
|
65
|
+
|
|
66
|
+
## 7) Run-State and Traceability
|
|
67
|
+
|
|
68
|
+
- [ ] Branch name follows configured `branch_pattern`.
|
|
69
|
+
- [ ] Active run persisted to `.tiqora/state/active-run.json`.
|
|
70
|
+
- [ ] Run artifact persisted to `.tiqora/workflows/runs/{{runId}}.json` with:
|
|
71
|
+
- ticketId, branchName, runId
|
|
72
|
+
- Timestamps: challenge_started_at, implementation_started_at, mr_report_approved_at, completed_at
|
|
73
|
+
- worklog_start_time (for final calculation)
|
|
74
|
+
- final_mr_url (for traceability)
|
|
75
|
+
- [ ] Status transitions consistent: in_progress → review → completed.
|
|
76
|
+
|
|
77
|
+
## 8) Worklog Tracking
|
|
78
|
+
|
|
79
|
+
- [ ] Worklog tracking started at Step 3 (`worklog_start_time` captured).
|
|
80
|
+
- [ ] Worklog includes challenge + implementation time (from start to commit).
|
|
81
|
+
- [ ] Worklog computed: from {{worklog_start_time}} to commit time, rounded to {worklog_rounding_minutes} minutes, minimum {minimum_worklog_minutes} minutes.
|
|
82
|
+
- [ ] If timestamps unavailable, user explicitly provided time in minutes.
|
|
83
|
+
- [ ] Worklog pushed to PM tool (Jira/GitHub/etc.) at Step 9.
|
|
84
|
+
|
|
85
|
+
## 9) PM Sync (CRITICAL)
|
|
86
|
+
|
|
87
|
+
- [ ] **Challenge comment**: Posted with challenge verdict, scope, risks.
|
|
88
|
+
- [ ] **Progress comment(s)**: Posted during implementation (done/next/blockers).
|
|
89
|
+
- [ ] **Final comment**: Posted with MR link, time spent, validation evidence.
|
|
90
|
+
- [ ] **Status transitions**: In Progress (Step 3) → Review/Done (Step 9).
|
|
91
|
+
- [ ] **Worklog**: Pushed to PM tool.
|
|
92
|
+
- [ ] Any failed sync queued in `.tiqora/sync/queue.json` for retry.
|
|
93
|
+
|
|
94
|
+
## 10) Communication and Languages
|
|
95
|
+
|
|
96
|
+
- [ ] User-facing communication in `communication_language` (from config).
|
|
97
|
+
- [ ] Technical artifacts (challenge, implementation) in ENGLISH for clarity.
|
|
98
|
+
- [ ] Reports (MR Report, daily, retrospective) in `document_language` for team.
|
|
99
|
+
- [ ] Output concise; no unnecessary internal execution noise.
|
|
100
|
+
|
|
101
|
+
## 11) Final Artifact Structure
|
|
102
|
+
|
|
103
|
+
- [ ] `.tiqora/workflows/runs/{{runId}}/` contains:
|
|
104
|
+
- `{{runId}}.json` — run manifest (metadata, timestamps)
|
|
105
|
+
- `{{runId}}-challenge.md` — challenge artifact (ENGLISH)
|
|
106
|
+
- `{{runId}}-mr-report.md` — MR report (document_language)
|
|
107
|
+
- Any additional implementation notes
|
|
43
108
|
|
|
44
109
|
## Final Result
|
|
45
110
|
|
|
46
|
-
- [ ] PASS
|
|
47
|
-
- [ ] FAIL
|
|
111
|
+
- [ ] **PASS**: All items above satisfied. Workflow is complete and ready for code review.
|
|
112
|
+
- [ ] **FAIL**: Unresolved blockers listed with concrete next actions.
|
|
@@ -2,22 +2,23 @@
|
|
|
2
2
|
<critical>The workflow execution engine is governed by: {project-root}/_tiqora/core/tasks/workflow.xml</critical>
|
|
3
3
|
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
|
|
4
4
|
<critical>YOU MUST ALWAYS SPEAK OUTPUT in the configured communication_language resolved from merged tiqora config.</critical>
|
|
5
|
-
<critical>Generate artifacts
|
|
5
|
+
<critical>Generate technical artifacts (challenge, implementation, validation) in ENGLISH for clarity.</critical>
|
|
6
|
+
<critical>Generate developer-facing reports (MR Report, Daily, Retrospective) in document_language from config.</critical>
|
|
6
7
|
<critical>Execute ALL steps in exact order; do NOT skip steps.</critical>
|
|
7
|
-
<critical>Do not report "completed" until all implementation and
|
|
8
|
+
<critical>Do not report "completed" until all implementation, validation, and PM sync activities are truly finished.</critical>
|
|
8
9
|
|
|
9
|
-
<step n="1" goal="Load and
|
|
10
|
+
<step n="1" goal="Load and validate tiqora configuration (silent mode)">
|
|
10
11
|
<action>Load project config from {project_config} as required input.</action>
|
|
11
|
-
<action if="project config does not exist">HALT: "✗ No project .tiqora.yaml found. Run npx tiqora init
|
|
12
|
+
<action if="project config does not exist">HALT: "✗ No project .tiqora.yaml found. Run 'npx tiqora init' first."</action>
|
|
12
13
|
|
|
13
14
|
<action>Load profile config from {profile_config} when available (optional).</action>
|
|
14
15
|
<action>Build effective config as: profile config (base) + project config (override).</action>
|
|
15
16
|
<action>Apply defaults when missing: user_name={default_user_name}, idle_threshold_minutes={default_idle_threshold_minutes}, communication_language={default_communication_language}, document_language={default_document_language}.</action>
|
|
16
17
|
|
|
17
18
|
<action>Validate required project keys: pm_tool, git_host, branch_pattern.</action>
|
|
18
|
-
<action if="any required project key is missing">HALT: "✗ Blocking configuration error in {project_config}: missing
|
|
19
|
+
<action if="any required project key is missing">HALT: "✗ Blocking configuration error in {project_config}: missing pm_tool, git_host, or branch_pattern. Edit .tiqora.yaml and add these keys."</action>
|
|
19
20
|
|
|
20
|
-
<output>[WORKFLOW]
|
|
21
|
+
<output>[WORKFLOW] ✓ Config loaded and validated</output>
|
|
21
22
|
</step>
|
|
22
23
|
|
|
23
24
|
<step n="2" goal="Apply active run guard">
|
|
@@ -34,79 +35,280 @@
|
|
|
34
35
|
</check>
|
|
35
36
|
</step>
|
|
36
37
|
|
|
37
|
-
<step n="3" goal="Resolve ticket context">
|
|
38
|
+
<step n="3" goal="Resolve ticket context and transition to In Progress">
|
|
38
39
|
<action>If a ticket ID is provided, retrieve the ticket via configured PM MCP connector before challenge/implementation.</action>
|
|
39
|
-
<action>If pm_tool is configured and no ticket provided, ask user to choose: existing ticket or create ticket.</action>
|
|
40
|
+
<action>If pm_tool is configured and no ticket provided, ask user to choose: work on existing ticket or create new ticket.</action>
|
|
41
|
+
<action if="pm_tool is not none and ticket was retrieved">Capture PM tracking identifiers (ticket key/id, workspace/project identifiers, available transitions) needed for status, comments, and worklog operations.</action>
|
|
42
|
+
|
|
40
43
|
<check if="MCP retrieval fails">
|
|
41
|
-
<ask>Ticket retrieval failed. Retry MCP fetch or continue in standalone
|
|
44
|
+
<ask>Ticket retrieval failed. Retry MCP fetch or continue in standalone mode? (retry/standalone)</ask>
|
|
42
45
|
<check if="user chooses retry">
|
|
43
46
|
<action>Retry retrieval once and continue if successful.</action>
|
|
44
47
|
</check>
|
|
45
48
|
<check if="user chooses standalone">
|
|
46
|
-
<action>Continue with explicit ambiguity warning and queue sync retry metadata in .tiqora
|
|
49
|
+
<action>Continue with explicit ambiguity warning and queue sync retry metadata in .tiqora/sync/queue.json.</action>
|
|
47
50
|
</check>
|
|
48
51
|
</check>
|
|
52
|
+
|
|
53
|
+
<action if="pm_tool is not none and ticket was retrieved">IMMEDIATELY transition ticket to {pm_in_progress_status} via PM MCP connector with comment: "Starting analysis and implementation. Branch: {{branchName}}, Run ID: {{runId}}"</action>
|
|
54
|
+
<action if="pm_tool is not none and ticket was retrieved">Capture timestamp as {{worklog_start_time}} for worklog calculation (includes challenge + implementation duration).</action>
|
|
55
|
+
|
|
56
|
+
<check if="PM In Progress transition fails">
|
|
57
|
+
<action>Log warning: "⚠ Could not transition ticket to In Progress. Queued in .tiqora/sync/queue.json for retry. Continuing with implementation."</action>
|
|
58
|
+
</check>
|
|
59
|
+
|
|
60
|
+
<output>[WORKFLOW] ✓ Ticket context resolved | Jira status: In Progress | Worklog tracking started</output>
|
|
49
61
|
</step>
|
|
50
62
|
|
|
51
|
-
<step n="4" goal="Run mandatory challenge gate">
|
|
52
|
-
<critical>No implementation starts before challenge is passed.</critical>
|
|
63
|
+
<step n="4" goal="Run mandatory PM challenge gate (rigorous)">
|
|
64
|
+
<critical>No implementation starts before challenge is thoroughly passed. This is a critical gate.</critical>
|
|
53
65
|
<action>Capture current active persona as {{entry_persona}}.</action>
|
|
54
|
-
<action>Load PM persona from {project-root}/_tiqora/agents/pm.md for
|
|
55
|
-
|
|
56
|
-
<action>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
<action>Load PM persona from {project-root}/_tiqora/agents/pm.md for this challenge gate.</action>
|
|
67
|
+
|
|
68
|
+
<action>Conduct rigorous PM-quality challenge on the ticket analyzing:
|
|
69
|
+
1. CLARITY: Is the user story or ticket description clear and unambiguous?
|
|
70
|
+
2. CONSISTENCY: Do acceptance criteria align with ticket intent? Any contradictions?
|
|
71
|
+
3. SCOPE: Is the scope bounded and realistic? Any hidden dependencies?
|
|
72
|
+
4. ALIGNMENT: Does this ticket make sense in the project context? Check against project goals/architecture if available.
|
|
73
|
+
5. TESTABILITY: Are acceptance criteria measurable and testable? Can QA/user verify completion?
|
|
74
|
+
6. RISKS: What could go wrong? What dependencies exist? What's the impact of this work?
|
|
75
|
+
</action>
|
|
76
|
+
|
|
77
|
+
<action>Create challenge artifact at {workflow_steps_dir}/{{runId}}-challenge.md (ENGLISH) with these sections:
|
|
78
|
+
- **Ticket Intent**: What problem does this solve?
|
|
79
|
+
- **Acceptance Criteria** (checked): ✓ or ✗ for each AC
|
|
80
|
+
- **PM Challenge Verdict**: PASS or FAIL with justification
|
|
81
|
+
- **Scope Boundaries**: What's included, what's out-of-scope
|
|
82
|
+
- **Implementation Approach**: High-level technical direction
|
|
83
|
+
- **Risks & Blockers**: What could go wrong? Any known issues?
|
|
84
|
+
- **Dependencies**: Other tickets, external systems, prerequisites
|
|
85
|
+
- **Testability Notes**: How to verify implementation is complete
|
|
86
|
+
</action>
|
|
87
|
+
|
|
88
|
+
<check if="PM challenge identifies critical gaps or ambiguities">
|
|
89
|
+
<action>Restore persona to {{entry_persona}}.</action>
|
|
64
90
|
<action>Set run state to awaiting_user.</action>
|
|
65
|
-
<ask
|
|
91
|
+
<ask>⚠️ Challenge gate FAILED. Issues found:
|
|
92
|
+
[List the specific gaps/ambiguities]
|
|
93
|
+
|
|
94
|
+
Please clarify the ticket or update it in Jira before implementation can proceed. Waiting for your input.</ask>
|
|
66
95
|
</check>
|
|
67
|
-
|
|
96
|
+
|
|
97
|
+
<check if="ticket is clear and challenge passes">
|
|
98
|
+
<action if="pm_tool is not none and ticket was retrieved">Post challenge summary comment on ticket (ENGLISH):
|
|
99
|
+
"✓ Challenge Gate PASSED
|
|
100
|
+
- Scope: [1-2 sentences on what will be built]
|
|
101
|
+
- Approach: [1-2 sentences on technical direction]
|
|
102
|
+
- Key Risks: [bullet points if any]
|
|
103
|
+
- Branch: {{branchName}} | Run: {{runId}}"
|
|
104
|
+
</action>
|
|
68
105
|
<action>Restore persona to {{entry_persona}} before step 5+ implementation work.</action>
|
|
69
|
-
<output>[CHALLENGE]
|
|
106
|
+
<output>[CHALLENGE] ✓ Gate PASSED — ready for implementation</output>
|
|
70
107
|
</check>
|
|
71
108
|
</step>
|
|
72
109
|
|
|
73
|
-
<step n="5" goal="Create/switch branch and persist run state">
|
|
110
|
+
<step n="5" goal="Create/switch git branch and persist run state">
|
|
74
111
|
<action>Resolve branch name from ticket ID + slug using branch_pattern from effective config.</action>
|
|
75
|
-
<action>Create or switch to target branch.</action>
|
|
112
|
+
<action>Create or switch to target branch using git.</action>
|
|
76
113
|
<action>Ensure directories exist: {workflow_runs_dir} and {workflow_steps_dir}.</action>
|
|
77
|
-
|
|
78
|
-
<
|
|
79
|
-
|
|
114
|
+
|
|
115
|
+
<action>Persist active run state to {active_run_file} and run artifact to {workflow_runs_dir}/{{runId}}.json, including:
|
|
116
|
+
- ticketId, branchName, runId
|
|
117
|
+
- status: "in_progress"
|
|
118
|
+
- timestamps: challenge_started_at, implementation_started_at, last_activity_at
|
|
119
|
+
- worklog_start_time: {{worklog_start_time}} (for final worklog calculation)
|
|
120
|
+
- pm_tool, git_host, document_language (for later reporting)
|
|
121
|
+
</action>
|
|
122
|
+
|
|
123
|
+
<output>[WORKFLOW] ✓ Branch created: {{branchName}} | Run ID: {{runId}} | Worklog: tracking</output>
|
|
80
124
|
</step>
|
|
81
125
|
|
|
82
|
-
<step n="6" goal="Implement scope with test-first discipline">
|
|
83
|
-
<critical>Follow the approved challenge scope; do not implement out-of-scope features.</critical>
|
|
126
|
+
<step n="6" goal="Implement scope with test-first discipline + mandatory commit">
|
|
127
|
+
<critical>Follow the approved challenge scope EXACTLY; do not implement out-of-scope features.</critical>
|
|
128
|
+
<critical>At the end of this step, you MUST make a git commit with conventional commit messages.</critical>
|
|
129
|
+
|
|
84
130
|
<action>Load Developer persona from {project-root}/_tiqora/agents/dev.md for implementation and test execution.</action>
|
|
85
131
|
<action>Plan concrete implementation tasks from challenge + ticket context.</action>
|
|
86
132
|
<action>Write failing tests first when feasible (red), implement minimal code (green), then refactor safely (refactor).</action>
|
|
87
133
|
<action>Run targeted and regression tests.</action>
|
|
88
134
|
<action>Update run artifacts and notes under .tiqora as work progresses.</action>
|
|
89
|
-
|
|
135
|
+
|
|
136
|
+
<action if="pm_tool is not none and ticket was retrieved">Publish at least one progress comment during implementation with done/next/blockers. Format: "✓ Done: [X] | Next: [Y] | Blockers: [Z]" and update last_activity_at in run state.</action>
|
|
137
|
+
|
|
138
|
+
<check if="implementation is blocked and pm_tool is not none and ticket was retrieved">
|
|
139
|
+
<action>Transition ticket to {pm_blocked_status} via PM MCP (if available), otherwise add explicit blocker comment.</action>
|
|
140
|
+
</check>
|
|
141
|
+
|
|
142
|
+
<action if="required dependency or architectural change exceeds scope">ASK user approval: "This change exceeds approved scope. Approve to proceed? (yes/no)"</action>
|
|
143
|
+
|
|
144
|
+
<action>After all implementation is complete:
|
|
145
|
+
1. Run all tests one final time (regression check).
|
|
146
|
+
2. Generate conventional commit messages based on changes:
|
|
147
|
+
- Use "feat:" for new features (from ticket intent)
|
|
148
|
+
- Use "fix:" for bug fixes
|
|
149
|
+
- Use "refactor:" for code refactoring
|
|
150
|
+
- Use "test:" for test-only changes
|
|
151
|
+
- Add ticket ID in footer: "Fixes {{ticketId}}"
|
|
152
|
+
3. Stage all changes: git add .
|
|
153
|
+
4. Commit with message(s):
|
|
154
|
+
"feat: [brief description from ticket] ({{ticketId}})
|
|
155
|
+
|
|
156
|
+
- Implementation detail 1
|
|
157
|
+
- Implementation detail 2
|
|
158
|
+
- Testing notes
|
|
159
|
+
|
|
160
|
+
Fixes {{ticketId}}"
|
|
161
|
+
</action>
|
|
162
|
+
|
|
163
|
+
<action>Update run state: mark implementation_completed_at timestamp.</action>
|
|
164
|
+
|
|
165
|
+
<output>[WORKFLOW] ✓ Implementation complete | Changes committed to {{branchName}}</output>
|
|
90
166
|
</step>
|
|
91
167
|
|
|
92
|
-
<step n="7" goal="
|
|
168
|
+
<step n="7" goal="Generate MR Report and request developer validation">
|
|
169
|
+
<critical>MR Report is mandatory and must be validated by the developer before pushing.</critical>
|
|
170
|
+
|
|
171
|
+
<action>Analyze git diff from branch_base..HEAD to understand all changes made.</action>
|
|
172
|
+
|
|
173
|
+
<action>Generate MR Report at {workflow_runs_dir}/{{runId}}-mr-report.md in {{document_language}} with sections:
|
|
174
|
+
|
|
175
|
+
**Title**: [Brief summary of what was implemented]
|
|
176
|
+
|
|
177
|
+
**Description**:
|
|
178
|
+
[1-2 paragraphs explaining the feature/fix and its purpose]
|
|
179
|
+
|
|
180
|
+
**Technical Choices**:
|
|
181
|
+
- [Key architecture decision 1 and why]
|
|
182
|
+
- [Key architecture decision 2 and why]
|
|
183
|
+
- [Any libraries/tools introduced and justification]
|
|
184
|
+
|
|
185
|
+
**Changes Made**:
|
|
186
|
+
- [File path 1]: [What was changed and why]
|
|
187
|
+
- [File path 2]: [What was changed and why]
|
|
188
|
+
[List all significant changes]
|
|
189
|
+
|
|
190
|
+
**Testing**:
|
|
191
|
+
- Unit tests: [Where, what's tested]
|
|
192
|
+
- Integration tests: [Where, what's tested]
|
|
193
|
+
- Manual testing steps: [How to verify this works]
|
|
194
|
+
|
|
195
|
+
**How to Run**:
|
|
196
|
+
1. [Prerequisites/setup steps]
|
|
197
|
+
2. [Build/install command if needed]
|
|
198
|
+
3. [Running the feature/fix]
|
|
199
|
+
4. [Expected output/behavior]
|
|
200
|
+
|
|
201
|
+
**Deployment Notes**:
|
|
202
|
+
- [Any database migrations? Yes/No]
|
|
203
|
+
- [Any environment variables needed? List]
|
|
204
|
+
- [Breaking changes? Yes/No, describe]
|
|
205
|
+
- [Rollback plan if needed]
|
|
206
|
+
|
|
207
|
+
**Reviewed By**: [Developer name]
|
|
208
|
+
**Reviewed At**: [Timestamp]
|
|
209
|
+
</action>
|
|
210
|
+
|
|
211
|
+
<action>Display the generated MR Report to the developer and ask for validation.</action>
|
|
212
|
+
|
|
213
|
+
<ask>MR Report generated. Please review and validate:
|
|
214
|
+
[ ] Are technical choices explained clearly?
|
|
215
|
+
[ ] Are testing instructions complete and accurate?
|
|
216
|
+
[ ] Are deployment notes accurate?
|
|
217
|
+
|
|
218
|
+
Choose: (approve/edit/regenerate)</ask>
|
|
219
|
+
|
|
220
|
+
<check if="developer chooses edit or regenerate">
|
|
221
|
+
<action>If edit: Display prompt for developer to provide modifications. Apply changes to the report file.
|
|
222
|
+
If regenerate: Re-run the MR Report generation with developer guidance.</action>
|
|
223
|
+
</check>
|
|
224
|
+
|
|
225
|
+
<action>Once approved, mark run state: mr_report_approved_at = now.</action>
|
|
226
|
+
|
|
227
|
+
<output>[WORKFLOW] ✓ MR Report validated</output>
|
|
228
|
+
</step>
|
|
229
|
+
|
|
230
|
+
<step n="8" goal="Validate definition of done checklist">
|
|
93
231
|
<action>Load and execute validation checklist from {validation}.</action>
|
|
94
232
|
<action>If checklist fails, return to implementation/validation until pass or HALT with explicit blockers.</action>
|
|
95
233
|
</step>
|
|
96
234
|
|
|
97
|
-
<step n="
|
|
235
|
+
<step n="9" goal="Move to Review, push MR, sync Jira and finalize worklog">
|
|
236
|
+
<critical>This is the final step. Ensure all syncs are complete before marking done.</critical>
|
|
98
237
|
<action>Restore persona to {{entry_persona}} before final workflow status communication.</action>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
238
|
+
|
|
239
|
+
<check if="work is complete and validation passed and MR report approved">
|
|
240
|
+
<!-- STEP 9.1: Compute Worklog -->
|
|
241
|
+
<action if="pm_tool is not none and ticket was retrieved">
|
|
242
|
+
Compute time spent from {{worklog_start_time}} to now, rounding to {worklog_rounding_minutes} minutes with minimum {minimum_worklog_minutes} minutes.
|
|
243
|
+
If timestamps unavailable, ask user: "How much time did you spend on this ticket (in minutes)?"
|
|
244
|
+
Store as {{total_worklog_minutes}}.
|
|
245
|
+
</action>
|
|
246
|
+
|
|
247
|
+
<!-- STEP 9.2: Create/Push MR -->
|
|
248
|
+
<action>Push branch to remote: git push -u origin {{branchName}}</action>
|
|
249
|
+
|
|
250
|
+
<action>Create MR/PR in {{git_host}}:
|
|
251
|
+
- Title: "[{{ticketId}}] " + [MR Report title]
|
|
252
|
+
- Description: [MR Report content from step 7]
|
|
253
|
+
- Link to challenge artifact: {workflow_steps_dir}/{{runId}}-challenge.md
|
|
254
|
+
- Link to implementation notes: available in branch
|
|
255
|
+
</action>
|
|
256
|
+
|
|
257
|
+
<action>Capture MR/PR URL as {{mr_url}} for Jira comment.</action>
|
|
258
|
+
|
|
259
|
+
<!-- STEP 9.3: Transition Jira to Review -->
|
|
260
|
+
<action if="pm_tool is not none and ticket was retrieved">
|
|
261
|
+
Transition ticket to {pm_review_status} (or {pm_done_status} if no review stage) via PM MCP connector.
|
|
262
|
+
</action>
|
|
263
|
+
|
|
264
|
+
<!-- STEP 9.4: Push Final Jira Sync -->
|
|
265
|
+
<action if="pm_tool is not none and ticket was retrieved">
|
|
266
|
+
Add final completion comment to ticket (ENGLISH):
|
|
267
|
+
"✓ IMPLEMENTATION COMPLETE
|
|
268
|
+
|
|
269
|
+
Branch: {{branchName}}
|
|
270
|
+
MR: {{mr_url}}
|
|
271
|
+
Time spent: {{total_worklog_minutes}} minutes
|
|
272
|
+
|
|
273
|
+
Delivered:
|
|
274
|
+
- All acceptance criteria met
|
|
275
|
+
- Tests passing (unit + regression)
|
|
276
|
+
- Code review ready
|
|
277
|
+
|
|
278
|
+
Next: Await code review"
|
|
279
|
+
</action>
|
|
280
|
+
|
|
281
|
+
<action if="pm_tool is not none and ticket was retrieved">
|
|
282
|
+
Push worklog via PM MCP: {{total_worklog_minutes}} minutes
|
|
283
|
+
</action>
|
|
284
|
+
|
|
285
|
+
<check if="final PM/MR sync fails">
|
|
286
|
+
<action>Log warning: "⚠ Final PM/MR sync failed. Queued in .tiqora/sync/queue.json for retry."</action>
|
|
287
|
+
<action>Queue retry metadata with MR URL, worklog, and status transition details.</action>
|
|
288
|
+
</check>
|
|
289
|
+
|
|
290
|
+
<!-- STEP 9.5: Mark Complete -->
|
|
291
|
+
<action>Mark run state as completed and persist to {active_run_file} and {workflow_runs_dir}/{{runId}}.json.</action>
|
|
292
|
+
<action>Update run state: completed_at = now, status = "completed", final_mr_url = {{mr_url}}</action>
|
|
293
|
+
|
|
294
|
+
<output>[WORKFLOW] ✅ COMPLETE
|
|
295
|
+
├─ Ticket: {{ticketId}} → Review
|
|
296
|
+
├─ Branch: {{branchName}}
|
|
297
|
+
├─ MR: {{mr_url}}
|
|
298
|
+
├─ Time: {{total_worklog_minutes}} minutes
|
|
299
|
+
└─ Artifacts: {workflow_runs_dir}/{{runId}}/
|
|
300
|
+
</output>
|
|
102
301
|
</check>
|
|
302
|
+
|
|
303
|
+
<check if="validation failed">
|
|
304
|
+
<action>Restore run state to in_progress.</action>
|
|
305
|
+
<output>[WORKFLOW] ✗ DoD validation failed. Return to implementation.</output>
|
|
306
|
+
</check>
|
|
307
|
+
|
|
103
308
|
<check if="waiting on user input">
|
|
309
|
+
<action if="pm_tool is not none and ticket was retrieved">Add ticket comment: "Awaiting clarification on [topic]. Paused implementation."</action>
|
|
104
310
|
<action>Mark run state as awaiting_user and persist atomically.</action>
|
|
105
|
-
<output>[WORKFLOW]
|
|
106
|
-
</check>
|
|
107
|
-
<check if="implementation remains in progress">
|
|
108
|
-
<action>Keep run state as in_progress and persist atomically.</action>
|
|
109
|
-
<output>[WORKFLOW] dev-story in_progress — next implementation step queued</output>
|
|
311
|
+
<output>[WORKFLOW] ⏸ AWAITING_USER — clarification needed before proceeding</output>
|
|
110
312
|
</check>
|
|
111
313
|
</step>
|
|
112
314
|
</workflow>
|
|
@@ -18,6 +18,14 @@ active_run_file: "{project-root}/.tiqora/state/active-run.json"
|
|
|
18
18
|
workflow_runs_dir: "{project-root}/.tiqora/workflows/runs"
|
|
19
19
|
workflow_steps_dir: "{project-root}/.tiqora/workflows/steps"
|
|
20
20
|
|
|
21
|
+
# PM tracking defaults used by instructions.xml
|
|
22
|
+
pm_in_progress_status: "In Progress"
|
|
23
|
+
pm_review_status: "In Review"
|
|
24
|
+
pm_done_status: "Done"
|
|
25
|
+
pm_blocked_status: "Blocked"
|
|
26
|
+
worklog_rounding_minutes: 15
|
|
27
|
+
minimum_worklog_minutes: 15
|
|
28
|
+
|
|
21
29
|
# Defaults applied by instructions.xml after config merge
|
|
22
30
|
default_user_name: "Developer"
|
|
23
31
|
default_idle_threshold_minutes: 15
|
package/package.json
CHANGED