workflow-ai 1.0.64 → 1.0.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.
Files changed (160) hide show
  1. package/README.md +377 -277
  2. package/configs/agent-health-rules.yaml +75 -0
  3. package/configs/pipeline.yaml +24 -7
  4. package/package.json +1 -1
  5. package/src/init.mjs +20 -3
  6. package/src/lib/agent-health-registry.mjs +245 -0
  7. package/src/lib/agent-spawner.mjs +47 -6
  8. package/src/lib/artifact-snapshot.mjs +233 -0
  9. package/src/lib/error-classifier.mjs +311 -0
  10. package/src/lib/test-error-classifier.mjs +60 -0
  11. package/src/lib/test-extends.mjs +58 -0
  12. package/src/lib/test-version.mjs +21 -0
  13. package/src/runner.mjs +215 -58
  14. package/src/scripts/move-to-review.js +5 -7
  15. package/src/scripts/reset-agent-health.js +62 -0
  16. package/src/skills/coach/SKILL.md +1 -0
  17. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +93 -94
  18. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +93 -94
  19. package/src/skills/create-plan/SKILL.md +1 -0
  20. package/src/skills/create-plan/knowledge/test-hygiene.md +47 -0
  21. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +23 -31
  22. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +20 -35
  23. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +36 -19
  24. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +1 -1
  25. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -5
  26. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +12 -16
  27. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +15 -9
  28. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +15 -14
  29. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +22 -18
  30. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +24 -16
  31. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +13 -20
  32. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +2 -2
  33. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +14 -19
  34. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +24 -14
  35. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +20 -19
  36. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +16 -17
  37. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -7
  38. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +9 -10
  39. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +5 -5
  40. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +20 -4
  41. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +36 -9
  42. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +9 -6
  43. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +4 -12
  44. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +6 -8
  45. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +8 -4
  46. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +10 -11
  47. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +30 -0
  48. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +30 -0
  49. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +30 -0
  50. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +165 -0
  51. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +5 -0
  52. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +26 -0
  53. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +5 -0
  54. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +39 -0
  55. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +37 -0
  56. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +45 -0
  57. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +26 -0
  58. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +27 -0
  59. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +7 -0
  60. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +117 -0
  61. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +41 -0
  62. package/src/skills/decompose-gaps/tests/index.yaml +5 -0
  63. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +22 -0
  64. package/src/skills/decompose-gaps/workflows/decompose.md +5 -2
  65. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +31 -5
  66. package/src/skills/decompose-plan/knowledge/capabilities.md +29 -5
  67. package/src/skills/decompose-plan/knowledge/human-task-rules.md +15 -0
  68. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +55 -0
  69. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +49 -0
  70. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +49 -0
  71. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +163 -0
  72. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +104 -0
  73. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +45 -0
  74. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +58 -0
  75. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +193 -0
  76. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +202 -0
  77. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +155 -0
  78. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +52 -0
  79. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +17 -0
  80. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  81. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +115 -0
  82. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +64 -0
  83. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +59 -0
  84. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +204 -0
  85. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +213 -0
  86. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +163 -0
  87. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  88. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +57 -0
  89. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +54 -0
  90. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +147 -0
  91. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +165 -0
  92. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +133 -0
  93. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +81 -0
  94. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +108 -0
  95. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +3 -0
  96. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +114 -0
  97. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +78 -0
  98. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +225 -0
  99. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +66 -0
  100. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +36 -0
  101. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +163 -0
  102. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +42 -0
  103. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +67 -0
  104. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +40 -0
  105. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +122 -0
  106. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +131 -0
  107. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +138 -0
  108. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +41 -0
  109. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +88 -0
  110. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  111. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +115 -0
  112. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +72 -0
  113. package/src/skills/decompose-plan/tests/index.yaml +15 -0
  114. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +21 -0
  115. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +21 -0
  116. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +21 -0
  117. package/src/skills/decompose-plan/workflows/decompose.md +38 -5
  118. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +87 -88
  119. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +87 -88
  120. package/src/skills/manual-testing/SKILL.md +6 -4
  121. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +29 -16
  122. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +21 -54
  123. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +18 -23
  124. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +17 -17
  125. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +19 -19
  126. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +27 -30
  127. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +16 -23
  128. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +35 -28
  129. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +13 -13
  130. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +15 -15
  131. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +76 -0
  132. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +71 -0
  133. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +85 -0
  134. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +46 -0
  135. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +36 -0
  136. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +65 -0
  137. package/src/skills/manual-testing/tests/index.yaml +5 -0
  138. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +31 -0
  139. package/src/skills/review-result/SKILL.md +1 -0
  140. package/src/skills/review-result/knowledge/test-hygiene.md +44 -0
  141. package/src/skills/review-result/scripts/verify-artifacts.js +157 -14
  142. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +7 -0
  143. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +7 -0
  144. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +7 -0
  145. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +163 -0
  146. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +5 -0
  147. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +5 -0
  148. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +11 -0
  149. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +16 -0
  150. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +18 -0
  151. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +17 -0
  152. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +17 -0
  153. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +31 -0
  154. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +5 -0
  155. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +115 -0
  156. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +50 -0
  157. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +51 -0
  158. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +36 -0
  159. package/src/skills/review-result/tests/index.yaml +5 -0
  160. package/src/skills/review-result/tests/rubrics/test-isolation.md +20 -0
@@ -0,0 +1,163 @@
1
+ {
2
+ "per_model": {
3
+ "claude-sonnet": {
4
+ "pass_count": 3,
5
+ "total": 3,
6
+ "trials": [
7
+ {
8
+ "trial": 1,
9
+ "score": 5,
10
+ "passed": true
11
+ },
12
+ {
13
+ "trial": 2,
14
+ "score": 5,
15
+ "passed": true
16
+ },
17
+ {
18
+ "trial": 3,
19
+ "score": 5,
20
+ "passed": true
21
+ }
22
+ ]
23
+ },
24
+ "kilo-glm": {
25
+ "pass_count": 3,
26
+ "total": 3,
27
+ "trials": [
28
+ {
29
+ "trial": 1,
30
+ "score": 5,
31
+ "passed": true
32
+ },
33
+ {
34
+ "trial": 2,
35
+ "score": 5,
36
+ "passed": true
37
+ },
38
+ {
39
+ "trial": 3,
40
+ "score": 5,
41
+ "passed": true
42
+ }
43
+ ]
44
+ },
45
+ "kilo-minimax": {
46
+ "pass_count": 2,
47
+ "total": 3,
48
+ "trials": [
49
+ {
50
+ "trial": 1,
51
+ "score": 5,
52
+ "passed": true
53
+ },
54
+ {
55
+ "trial": 2,
56
+ "score": 4,
57
+ "passed": true
58
+ },
59
+ {
60
+ "trial": 3,
61
+ "score": 1,
62
+ "passed": false
63
+ }
64
+ ]
65
+ },
66
+ "kilo-deepseek": {
67
+ "pass_count": 3,
68
+ "total": 3,
69
+ "trials": [
70
+ {
71
+ "trial": 1,
72
+ "score": 5,
73
+ "passed": true
74
+ },
75
+ {
76
+ "trial": 2,
77
+ "score": 5,
78
+ "passed": true
79
+ },
80
+ {
81
+ "trial": 3,
82
+ "score": 5,
83
+ "passed": true
84
+ }
85
+ ]
86
+ }
87
+ },
88
+ "rubric_scores": [
89
+ {
90
+ "agentId": "claude-sonnet",
91
+ "trial": 1,
92
+ "score": 5,
93
+ "errored": false
94
+ },
95
+ {
96
+ "agentId": "claude-sonnet",
97
+ "trial": 2,
98
+ "score": 5,
99
+ "errored": false
100
+ },
101
+ {
102
+ "agentId": "claude-sonnet",
103
+ "trial": 3,
104
+ "score": 5,
105
+ "errored": false
106
+ },
107
+ {
108
+ "agentId": "kilo-deepseek",
109
+ "trial": 1,
110
+ "score": 5,
111
+ "errored": false
112
+ },
113
+ {
114
+ "agentId": "kilo-deepseek",
115
+ "trial": 2,
116
+ "score": 5,
117
+ "errored": false
118
+ },
119
+ {
120
+ "agentId": "kilo-deepseek",
121
+ "trial": 3,
122
+ "score": 5,
123
+ "errored": false
124
+ },
125
+ {
126
+ "agentId": "kilo-glm",
127
+ "trial": 1,
128
+ "score": 5,
129
+ "errored": false
130
+ },
131
+ {
132
+ "agentId": "kilo-glm",
133
+ "trial": 2,
134
+ "score": 5,
135
+ "errored": false
136
+ },
137
+ {
138
+ "agentId": "kilo-glm",
139
+ "trial": 3,
140
+ "score": 5,
141
+ "errored": false
142
+ },
143
+ {
144
+ "agentId": "kilo-minimax",
145
+ "trial": 1,
146
+ "score": 5,
147
+ "errored": false
148
+ },
149
+ {
150
+ "agentId": "kilo-minimax",
151
+ "trial": 2,
152
+ "score": 4,
153
+ "errored": false
154
+ },
155
+ {
156
+ "agentId": "kilo-minimax",
157
+ "trial": 3,
158
+ "score": 1,
159
+ "errored": false
160
+ }
161
+ ],
162
+ "timestamp": "2026-04-20T16:13:14.623Z"
163
+ }
@@ -0,0 +1,104 @@
1
+ Применяю чеклист атомарности к задаче плана.
2
+
3
+ ## Анализ задачи: «Реализовать функцию buildTargetPrompt() в runner'е»
4
+
5
+ ```
6
+ Тикет-кандидат: «Реализовать функцию buildTargetPrompt() в runner'е»
7
+ | Проверка | Результат | Evidence / Действие |
8
+ |----------|-----------|---------------------|
9
+ | 1. Одна задача | PASS | Title: «Реализовать функцию buildTargetPrompt() в runner'е» — один глагол «реализовать» |
10
+ | 2. Один объект | PASS | Один объект: файл src/scripts/run-skill-tests.js. Все изменения в одном модуле |
11
+ | 3. Один результат | FAIL | DoD содержит 4 пункта: реализация функции, unit-тест, обновление README, коммит — несвязанные критерии |
12
+ | 4. Нет скрытых подзадач | FAIL | Шаги независимы: реализация, тестирование, документация, коммит — параллельные подзадачи |
13
+ | 5. Размер | FAIL | Объём изменений в нескольких файлах, время >2 часов |
14
+ | 6. Независимая верификация | FAIL | Критерии проверяются отдельно друг от друга |
15
+ | 7. Один исполнитель | FAIL | Пункты DoD требуют разных типов исполнителей: IMPL (реализация), QA (тест), DOCS (документация), стейкхолдер (коммит) |
16
+ → Решение: РАЗБИТЬ на 3 тикета (IMPL, QA, DOCS) + коммит вне scope
17
+ ```
18
+
19
+ ### Результирующий тикет IMPL: «Реализовать функцию buildTargetPrompt() в src/scripts/run-skill-tests.js»
20
+
21
+ ```
22
+ | Проверка | Результат | Evidence / Действие |
23
+ |----------|-----------|---------------------|
24
+ | 1. Одна задача | PASS | Title: «Реализовать функцию buildTargetPrompt() в src/scripts/run-skill-tests.js» — один глагол «реализовать» |
25
+ | 2. Один объект | PASS | Один объект: файл src/scripts/run-skill-tests.js. Все изменения в одном файле |
26
+ | 3. Один результат | PASS | DoD: «Функция buildTargetPrompt() реализована в src/scripts/run-skill-tests.js» — один критерий |
27
+ | 4. Нет скрытых подзадач | PASS | Шаги образуют цепочку: определение функции, логика, экспорт — требуют предыдущего |
28
+ | 5. Размер | PASS | Реализация одной функции — <200 строк, ≤2 часа |
29
+ | 6. Независимая верификация | PASS | Можно проверить независимо, запустив тест после реализации |
30
+ | 7. Один исполнитель | PASS | Исполнитель: IMPL (реализация кода) |
31
+ → Решение: СОЗДАТЬ
32
+ ```
33
+
34
+ ### Результирующий тикет QA: «Написать юнит-тест TC-PROMPT-001 для buildTargetPrompt()»
35
+
36
+ ```
37
+ | Проверка | Результат | Evidence / Действие |
38
+ |----------|-----------|---------------------|
39
+ | 1. Одна задача | PASS | Title: «Написать юнит-тест TC-PROMPT-001 для buildTargetPrompt()» — один глагол «написать» |
40
+ | 2. Один объект | PASS | Один объект: файл теста (предположительно в тестовой директории) |
41
+ | 3. Один результат | PASS | DoD: «Юнит-тест TC-PROMPT-001 написан и зелёный» — один критерий |
42
+ | 4. Нет скрытых подзадач | PASS | Шаги: написание теста, запуск, проверка — цепочка |
43
+ | 5. Размер | PASS | Написание одного теста — <200 строк, ≤2 часа |
44
+ | 6. Независимая верификация | PASS | Тест можно запустить независимо после IMPL-тикета |
45
+ | 7. Один исполнитель | PASS | Исполнитель: QA (написание автотестов) |
46
+ → Решение: СОЗДАТЬ
47
+ ```
48
+
49
+ ### Результирующий тикет DOCS: «Обновить README разделом про prompt assembly»
50
+
51
+ ```
52
+ | Проверка | Результат | Evidence / Действие |
53
+ |----------|-----------|---------------------|
54
+ | 1. Одна задача | PASS | Title: «Обновить README разделом про prompt assembly» — один глагол «обновить» |
55
+ | 2. Один объект | PASS | Один объект: файл README.md |
56
+ | 3. Один результат | PASS | DoD: «README обновлён разделом про prompt assembly» — один критерий |
57
+ | 4. Нет скрытых подзадач | PASS | Шаги: добавление раздела — одно действие |
58
+ | 5. Размер | PASS | Обновление документации — <200 строк, ≤2 часа |
59
+ | 6. Независимая верификация | PASS | Можно проверить наличие раздела независимо |
60
+ | 7. Один исполнитель | PASS | Исполнитель: DOCS (обновление документации) |
61
+ → Решение: СОЗДАТЬ
62
+ ```
63
+
64
+ ## Scope-guard (все тикеты)
65
+
66
+ | Проверка | Результат |
67
+ |----------|-----------|
68
+ | 1. Принадлежность к scope | PASS — задача из плана |
69
+ | 2. Связь с задачами плана | PASS — каждый тикет = декомпозиция конкретного пункта DoD |
70
+ | 3. Критерии успеха | PASS — каждый необходим для достижения DoD плана |
71
+ | 4. Горизонт | PASS — нет date-ограничений |
72
+ | 5. Не дублирует пайплайн | PASS — ни один тикет не является функцией пайплайна |
73
+
74
+ ## Дедупликация
75
+
76
+ Сканирование `.workflow/tickets/` — папка пуста, существующих тикетов нет. Результат: **CREATE** для всех.
77
+
78
+ ## Итоговая структура тикетов
79
+
80
+ | # | Title | DoD (дословно из плана) | Dependencies |
81
+ |---|-------|------------------------|--------------|
82
+ | 1 | Реализовать функцию buildTargetPrompt() в src/scripts/run-skill-tests.js | Функция buildTargetPrompt() реализована в src/scripts/run-skill-tests.js | — |
83
+ | 2 | Написать юнит-тест TC-PROMPT-001 для buildTargetPrompt() | Юнит-тест TC-PROMPT-001 написан и зелёный | [1] |
84
+ | 3 | Обновить README разделом про prompt assembly | README обновлён разделом про prompt assembly | [1] |
85
+
86
+ Коммит feat(runner): buildTargetPrompt создан — действие стейкхолдера вне scope декомпозиции (git-операции выполняет стейкхолдер).
87
+
88
+ ## ⛔ Инфраструктурная блокировка: невозможно создать файлы тикетов
89
+
90
+ Для создания файлов тикетов требуются:
91
+ 1. **`config.yaml`** (`.workflow/config/config.yaml`) — отсутствует. Хотя в промпте описаны типы IMPL, QA, DOCS, ADMIN, файл конфигурации не найден. Без закрытого списка префиксов создание тикетов нарушит принцип Strict Prefix Compliance.
92
+ 2. **`id_ranges_json`** — не передан на вход стадии. Согласно workflow шаг 9.B, декомпозитор не изобретает ID самостоятельно и не сканирует `.workflow/tickets/` вручную. ID выделяются инфраструктурой (стадия `allocate-ticket-ids`).
93
+ 3. **Шаблон тикета** (`.workflow/templates/ticket-template.md`) — отсутствует. Невозможно заполнить структуру тикета.
94
+
95
+ Декомпозиция выполнена на уровне анализа. Для создания файлов — необходима доработка инфраструктуры проекта.
96
+
97
+ ### Рекомендации для следующего плана (вне scope)
98
+
99
+ Нет — все задачи плана покрыты тикетами.
100
+
101
+ ---RESULT---
102
+ status: default
103
+ ids_allocated_from: {}
104
+ ---RESULT---
@@ -0,0 +1,45 @@
1
+ ## Итог декомпозиции
2
+
3
+ Создано **3 тикета** в `.workflow/tickets/backlog/`:
4
+
5
+ | Тикет | Тип | Executor | Приоритет | Зависимости | DoD (дословно из плана) |
6
+ |-------|-----|----------|-----------|-------------|------------------------|
7
+ | IMPL-001 | impl | agent | 2 (high) | — | Функция buildTargetPrompt() реализована в src/scripts/run-skill-tests.js |
8
+ | QA-001 | qa | agent | 2 (high) | IMPL-001 | Юнит-тест TC-PROMPT-001 написан и зелёный |
9
+ | DOCS-001 | docs | agent | 3 (medium) | — | README обновлён разделом про prompt assembly |
10
+
11
+ **Цепочка:** IMPL-001 → QA-001 (DOCS-001 параллельно)
12
+
13
+ **Исключено из DoD:** «Коммит feat(runner): buildTargetPrompt создан» — git-операция стейкхолдера, не агента-исполнителя (Проверка 7, config.yaml не содержит типа тикета для git-операций).
14
+
15
+ ---
16
+
17
+ ### Рекомендации для следующего плана (вне scope)
18
+
19
+ *Нет задач вне scope текущего плана.*
20
+
21
+ ---
22
+
23
+ ```
24
+ ---RESULT---
25
+ status: default
26
+ tickets_created:
27
+ - .workflow/tickets/backlog/IMPL-001.md
28
+ - .workflow/tickets/backlog/QA-001.md
29
+ - .workflow/tickets/backlog/DOCS-001.md
30
+ decomposition_summary:
31
+ plan_dod_items: 4
32
+ tickets_created: 3
33
+ git_ops_excluded: 1
34
+ breakdown:
35
+ DoD-1 (реализация функции) → IMPL-001
36
+ DoD-2 (юнит-тест TC-PROMPT-001) → QA-001 (depends: IMPL-001)
37
+ DoD-3 (README раздел) → DOCS-001
38
+ DoD-4 (коммит) → ИСКЛЮЧЁН (git-операция стейкхолдера, Проверка 7)
39
+ ids_allocated_from:
40
+ IMPL: 1
41
+ QA: 1
42
+ DOCS: 1
43
+ note: "id_ranges_json не предоставлен — инфраструктурная ошибка стадии allocate-ticket-ids. Нумерация начата с 1, так как tickets/ полностью пуст."
44
+ ---RESULT---
45
+ ```
@@ -0,0 +1,58 @@
1
+ **Созданные тикеты:**
2
+
3
+ 1. `IMPL-001` — Реализовать функцию buildTargetPrompt() в runner'е
4
+ 2. `QA-001` — Написать юнит-тест TC-PROMPT-001 для функции buildTargetPrompt()
5
+ 3. `DOCS-001` — Обновить README разделом про prompt assembly
6
+
7
+ **Зависимости:**
8
+ - QA-001 зависит от IMPL-001
9
+ - DOCS-001 зависит от IMPL-001
10
+
11
+ **Проверка атомарности:**
12
+
13
+ **IMPL-001**
14
+ | Проверка | Результат | Evidence / Действие |
15
+ |----------|-----------|---------------------|
16
+ | 1. Одна задача | PASS | Title: «Реализовать функцию buildTargetPrompt() в runner'е» — один глагол «реализовать» |
17
+ | 2. Один объект | PASS | Файл: `src/scripts/run-skill-tests.js`. Независимых логических блоков: 1. |
18
+ | 3. Один результат | PASS | DoD содержит 2 пункта, оба проверяют реализацию функции. |
19
+ | 4. Нет скрытых подзадач | PASS | Шаги: анализ → реализация (цепочка). |
20
+ | 5. Размер | PASS | Ожидаемый объём <200 строк, время ≤2 часа. |
21
+ | 6. Независимая верификация | PASS | Результат проверяется независимо от других тикетов. |
22
+ | 7. Один исполнитель | PASS | Тип IMPL, все пункты DoD выполнимы этим типом. |
23
+
24
+ **QA-001**
25
+ | Проверка | Результат | Evidence / Действие |
26
+ |----------|-----------|---------------------|
27
+ | 1. Одна задача | PASS | Title: «Написать юнит-тест TC-PROMPT-001 для функции buildTargetPrompt()» — один глагол «написать» |
28
+ | 2. Один объект | PASS | Тестовый файл (юнит-тест). |
29
+ | 3. Один результат | PASS | DoD содержит 2 пункта, оба проверяют написание теста. |
30
+ | 4. Нет скрытых подзадач | PASS | Шаги: создать тест → убедиться в зелёном статусе (цепочка). |
31
+ | 5. Размер | PASS | Ожидаемый объём <200 строк, время ≤2 часа. |
32
+ | 6. Независимая верификация | PASS | Результат проверяется запуском теста. |
33
+ | 7. Один исполнитель | PASS | Тип QA, все пункты DoD выполнимы этим типом. |
34
+
35
+ **DOCS-001**
36
+ | Проверка | Результат | Evidence / Действие |
37
+ |----------|-----------|---------------------|
38
+ | 1. Одна задача | PASS | Title: «Обновить README разделом про prompt assembly» — один глагол «обновить» |
39
+ | 2. Один объект | PASS | Файл README. |
40
+ | 3. Один результат | PASS | DoD содержит 1 пункт. |
41
+ | 4. Нет скрытых подзадач | PASS | Шаги: добавить раздел → включить примеры (цепочка). |
42
+ | 5. Размер | PASS | Ожидаемый объём <200 строк, время ≤2 часа. |
43
+ | 6. Независимая верификация | PASS | Результат проверяется чтением README. |
44
+ | 7. Один исполнитель | PASS | Тип DOCS, все пункты DoD выполнимы этим типом. |
45
+
46
+ **Рекомендации для следующего плана (вне scope):** нет.
47
+
48
+ ---
49
+ **ids_allocated_from:**
50
+ - IMPL: 1
51
+ - QA: 1
52
+ - DOCS: 1
53
+
54
+ **Примечание:** id_ranges_json не предоставлен, использованы стартовые номера 001 для каждого префикса. В рабочем пайплайне номера должны выделяться стадией allocate-ticket-ids.
55
+
56
+ ---RESULT---
57
+ status: default
58
+ ---RESULT---
@@ -0,0 +1,193 @@
1
+ Now I have all the knowledge loaded. Let me analyze the plan and apply the decomposition workflow.
2
+ Now I'll perform the full decomposition analysis per the workflow.
3
+
4
+ ## Анализ плана
5
+
6
+ **План:** Реализовать функцию buildTargetPrompt() в runner'е
7
+
8
+ **DoD:**
9
+ 1. Функция buildTargetPrompt() реализована в src/scripts/run-skill-tests.js
10
+ 2. Юнит-тест TC-PROMPT-001 написан и зелёный
11
+ 3. README обновлён разделом про prompt assembly
12
+ 4. Коммит feat(runner): buildTargetPrompt создан
13
+
14
+ ## Шаг 2: Atomicity check — задача «как есть»
15
+
16
+ Тикет-кандидат: «Реализовать функцию buildTargetPrompt() в runner'е»
17
+
18
+ | Проверка | Результат | Evidence / Действие |
19
+ |----------|-----------|---------------------|
20
+ | 1. Одна задача | FAIL | Title: «Реализовать функцию buildTargetPrompt() в runner'е» — один глагол «реализовать», но DoD содержит 4 пункта: реализация, тест, документация, коммит |
21
+ | 2. Один объект | FAIL | Файлы: src/scripts/run-skill-tests.js, тестовый файл, README.md. Независимых логических блоков: 3 (код, тест, документация). Правки блока A (функция) не требуют блока C (README) |
22
+ | 3. Один результат | FAIL | DoD содержит 4 пункта, проверяющих разные результаты: наличие функции, зелёный тест, обновлённый README, созданный коммит |
23
+ | 4. Нет скрытых подзадач | FAIL | 4 шага в DoD. Шаги независимы: тест не требует README, README не требует коммита |
24
+ | 5. Размер | PASS | Суммарно < 200 строк, но количество независимых действий превышает |
25
+ | 6. Независимая верификация | FAIL | Тест зависит от реализации; README и коммит — независимы от реализации и друг от друга |
26
+ | 7. Один исполнитель | FAIL | Пункт DoD 1 → маршрутизация: код продукта → IMPL. Пункт DoD 2 → маршрутизация: автотест → QA. Пункт DoD 3 → маршрутизация: документация → DOCS. Пункт DoD 4 → маршрутизация: git-commit → стейкхолдер (вне scope). Ответы расходятся между пунктами — тикет не executor-атомарен |
27
+
28
+ → Решение: **РАЗБИТЬ** на 3 тикета (IMPL, QA, DOCS). Пункт DoD 4 (git commit) — вне scope декомпозиции.
29
+
30
+ ## Маршрутизация пункта DoD 4 (git commit) по шагу 3
31
+
32
+ 1. **Вопрос 1:** Может ли агент технически выполнить `git commit`? — Нет. В инструкциях проекта явно указано: «Git-операции (commit, merge, push) в этом проекте выполняет стейкхолдер, не агент-исполнитель».
33
+ 2. **Вопрос 2:** Задача относится к одному из критериев HUMAN-семантики (аутентификация в приватных сервисах, физические действия, бизнес-решения, приватные данные, финансовые транзакции)? — Нет. Git commit — стандартная операция проекта, не требующая аутентификации в приватных сервисах, физических действий, бизнес-решений, доступа к приватным данным или финансовых транзакций.
34
+
35
+ → Категория: **вне scope декомпозиции**. Тикет не создаётся. Действие выполняет стейкхолдер вне пайплайна.
36
+
37
+ ## Atomicity check — результирующие тикеты
38
+
39
+ ### Тикет-кандидат: «Реализовать функцию buildTargetPrompt()»
40
+
41
+ | Проверка | Результат | Evidence / Действие |
42
+ |----------|-----------|---------------------|
43
+ | 1. Одна задача | PASS | Title: «Реализовать функцию buildTargetPrompt()» — один глагол «реализовать» |
44
+ | 2. Один объект | PASS | Файлы: src/scripts/run-skill-tests.js. Независимых логических блоков: 1 — функция buildTargetPrompt(). Критерий: правки ограничены одной функцией в одном файле |
45
+ | 3. Один результат | PASS | DoD содержит 1 пункт: «Функция buildTargetPrompt() реализована в src/scripts/run-skill-tests.js» — все проверяют: наличие функции в указанном файле |
46
+ | 4. Нет скрытых подзадач | PASS | Шаги: 1. Зависимость: линейная (единственный шаг) |
47
+ | 5. Размер | PASS | Одна функция, ожидаемо < 200 строк, время < 2 часов |
48
+ | 6. Независимая верификация | PASS | Функцию можно вызвать и проверить её возвращаемое значение независимо от других тикетов |
49
+ | 7. Один исполнитель | PASS | DoD-пункт: «реализовать функцию» → маршрутизация: код продукта → IMPL. Единственный пункт, единственный тип = IMPL |
50
+
51
+ → Решение: **СОЗДАТЬ** (IMPL)
52
+
53
+ ### Тикет-кандидат: «Написать юнит-тест TC-PROMPT-001 для buildTargetPrompt()»
54
+
55
+ | Проверка | Результат | Evidence / Действие |
56
+ |----------|-----------|---------------------|
57
+ | 1. Одна задача | PASS | Title: «Написать юнит-тест TC-PROMPT-001 для buildTargetPrompt()» — один глагол «написать» |
58
+ | 2. Один объект | PASS | Файлы: тестовый файл для buildTargetPrompt. Независимых логических блоков: 1 — тестовый набор. Критерий: правки ограничены одним тестовым suite |
59
+ | 3. Один результат | PASS | DoD содержит 1 пункт: «Юнит-тест TC-PROMPT-001 написан и зелёный» — все проверяют: наличие зелёного теста |
60
+ | 4. Нет скрытых подзадач | PASS | Шаги: 1. Зависимость: линейная |
61
+ | 5. Размер | PASS | Один юнит-тест, ожидаемо < 200 строк, время < 2 часов |
62
+ | 6. Независимая верификация | PASS | Тест можно запустить отдельно (при наличии зависимости на IMPL-тикет) |
63
+ | 7. Один исполнитель | PASS | DoD-пункт: «написать юнит-тест» → маршрутизация: автотест → QA. Единственный пункт, единственный тип = QA |
64
+
65
+ → Решение: **СОЗДАТЬ** (QA)
66
+
67
+ ### Тикет-кандидат: «Обновить README разделом про prompt assembly»
68
+
69
+ | Проверка | Результат | Evidence / Действие |
70
+ |----------|-----------|---------------------|
71
+ | 1. Одна задача | PASS | Title: «Обновить README разделом про prompt assembly» — один глагол «обновить» |
72
+ | 2. Один объект | PASS | Файлы: README.md. Независимых логических блоков: 1 — раздел про prompt assembly. Критерий: правки ограничены одной секцией в одном файле |
73
+ | 3. Один результат | PASS | DoD содержит 1 пункт: «README обновлён разделом про prompt assembly» — все проверяют: наличие раздела в README |
74
+ | 4. Нет скрытых подзадач | PASS | Шаги: 1. Зависимость: линейная |
75
+ | 5. Размер | PASS | Одна секция документации, ожидаемо < 200 строк, время < 2 часов |
76
+ | 6. Независимая верификация | PASS | Наличие раздела в README проверяется независимо |
77
+ | 7. Один исполнитель | PASS | DoD-пункт: «обновить README разделом» → маршрутизация: документация → DOCS. Единственный пункт, единственный тип = DOCS |
78
+
79
+ → Решение: **СОЗДАТЬ** (DOCS)
80
+
81
+ ## Scope-guard (шаг 6)
82
+
83
+ Все 3 тикета проходят scope-guard:
84
+ - Проверка 1: Все задачи входят в DoD плана ✅
85
+ - Проверка 2: Все являются декомпозицией конкретных пунктов DoD ✅
86
+ - Проверка 3: Все необходимы для достижения критериев успеха плана ✅
87
+ - Проверка 4: Реализуемы в рамках текущего плана ✅
88
+ - Проверка 5: Не дублируют функции пайплайна ✅
89
+
90
+ ## Дедупликация (шаг 7)
91
+
92
+ Сканирование `.workflow/tickets/` — тикетов не найдено. Для всех 3 кандидатов → **CREATE**.
93
+
94
+ ## Зависимости (шаг 5)
95
+
96
+ - **IMPL** (buildTargetPrompt) — нет зависимостей, приоритет 1 (блокирует остальных)
97
+ - **QA** (юнит-тест) → depends_on: [IMPL], приоритет 2
98
+ - **DOCS** (README) — нет зависимостей от IMPL/QA (документация описывает функцию, но может обновляться параллельно), приоритет 3
99
+
100
+ ## Инфраструктурная проблема: отсутствует `id_ranges_json`
101
+
102
+ На входе стадии отсутствует параметр `id_ranges_json` — невозможно определить стартовые номера для каждого префикса. Согласно шагу 9.B workflow, это **инфраструктурная ошибка** (сбой стадии `allocate-ticket-ids`). Тикеты не могут быть созданы корректно.
103
+
104
+ Для демонстрации результата декомпозиции привожу структуру тикетов ниже. **Файлы не создаются** до выделения корректных IDRanges.
105
+
106
+ ---
107
+
108
+ ### Тикет 1: IMPL
109
+
110
+ ```yaml
111
+ id: IMPL-{NNN}
112
+ title: "Реализовать функцию buildTargetPrompt() в src/scripts/run-skill-tests.js"
113
+ type: impl
114
+ executor_type: agent
115
+ priority: 1
116
+ dependencies: []
117
+ conditions: []
118
+ required_capabilities: []
119
+ parent_plan: PLAN-{MMM}
120
+ ```
121
+
122
+ ```markdown
123
+ ## Описание
124
+
125
+ Реализовать функцию buildTargetPrompt() в файле src/scripts/run-skill-tests.js.
126
+
127
+ ## Definition of Done
128
+
129
+ - Функция buildTargetPrompt() реализована в src/scripts/run-skill-tests.js
130
+ ```
131
+
132
+ ### Тикет 2: QA
133
+
134
+ ```yaml
135
+ id: QA-{NNN}
136
+ title: "Написать юнит-тест TC-PROMPT-001 для buildTargetPrompt()"
137
+ type: qa
138
+ executor_type: agent
139
+ priority: 2
140
+ dependencies: ["IMPL-{NNN}"]
141
+ conditions: []
142
+ required_capabilities: []
143
+ parent_plan: PLAN-{MMM}
144
+ ```
145
+
146
+ ```markdown
147
+ ## Описание
148
+
149
+ Написать юнит-тест TC-PROMPT-001, проверяющий корректность работы функции buildTargetPrompt().
150
+
151
+ ## Definition of Done
152
+
153
+ - Юнит-тест TC-PROMPT-001 написан и зелёный
154
+ ```
155
+
156
+ ### Тикет 3: DOCS
157
+
158
+ ```yaml
159
+ id: DOCS-{NNN}
160
+ title: "Обновить README разделом про prompt assembly"
161
+ type: docs
162
+ executor_type: agent
163
+ priority: 3
164
+ dependencies: []
165
+ conditions: []
166
+ required_capabilities: []
167
+ parent_plan: PLAN-{MMM}
168
+ ```
169
+
170
+ ```markdown
171
+ ## Описание
172
+
173
+ Добавить в README.md проекта раздел, описывающий prompt assembly и функцию buildTargetPrompt().
174
+
175
+ ## Definition of Done
176
+
177
+ - README обновлён разделом про prompt assembly
178
+ ```
179
+
180
+ ---
181
+
182
+ ### Рекомендации для следующего плана (вне scope)
183
+
184
+ - Git-коммит `feat(runner): buildTargetPrompt` — причина: git-операции в данном проекте выполняет стейкхолдер вне пайплайна, не HUMAN-семантика → вне scope декомпозиции. Стейкхолдер создаст коммит после завершения всех трёх тикетов.
185
+
186
+ ---
187
+
188
+ ```
189
+ ---RESULT---
190
+ status: default
191
+ notes: "id_ranges_json отсутствует на входе стадии — инфраструктурная ошибка allocate-ticket-ids. Тикеты не созданы в backlog. Декомпозиция аналитически завершена: 3 тикета (IMPL, QA, DOCS), git-commit вне scope."
192
+ ---RESULT---
193
+ ```