ai-dev-analytics 1.1.12 → 2.0.1

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 (192) hide show
  1. package/README.en.md +51 -57
  2. package/README.md +68 -485
  3. package/dist/cli/commands/doctor.d.ts +2 -0
  4. package/dist/cli/commands/doctor.d.ts.map +1 -0
  5. package/dist/cli/commands/doctor.js +125 -0
  6. package/dist/cli/commands/doctor.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts.map +1 -1
  8. package/dist/cli/commands/init.js +19 -176
  9. package/dist/cli/commands/init.js.map +1 -1
  10. package/dist/cli/commands/memory.d.ts.map +1 -1
  11. package/dist/cli/commands/memory.js +3 -13
  12. package/dist/cli/commands/memory.js.map +1 -1
  13. package/dist/cli/commands/rules.d.ts +0 -10
  14. package/dist/cli/commands/rules.d.ts.map +1 -1
  15. package/dist/cli/commands/rules.js +9 -34
  16. package/dist/cli/commands/rules.js.map +1 -1
  17. package/dist/cli/commands/skills.d.ts +0 -5
  18. package/dist/cli/commands/skills.d.ts.map +1 -1
  19. package/dist/cli/commands/skills.js +5 -24
  20. package/dist/cli/commands/skills.js.map +1 -1
  21. package/dist/cli/commands/sync.d.ts +2 -0
  22. package/dist/cli/commands/sync.d.ts.map +1 -0
  23. package/dist/cli/commands/sync.js +28 -0
  24. package/dist/cli/commands/sync.js.map +1 -0
  25. package/dist/cli/index.js +26 -85
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/{schemas/run-json.d.ts → internal/runtime/schema.d.ts} +4 -18
  28. package/dist/internal/runtime/schema.d.ts.map +1 -0
  29. package/dist/{schemas/run-json.js → internal/runtime/schema.js} +5 -9
  30. package/dist/internal/runtime/schema.js.map +1 -0
  31. package/dist/{utils/run-data.d.ts → internal/runtime/state.d.ts} +7 -8
  32. package/dist/internal/runtime/state.d.ts.map +1 -0
  33. package/dist/{utils/run-data.js → internal/runtime/state.js} +11 -12
  34. package/dist/internal/runtime/state.js.map +1 -0
  35. package/dist/internal/runtime/summary.d.ts +8 -0
  36. package/dist/internal/runtime/summary.d.ts.map +1 -0
  37. package/dist/internal/runtime/summary.js +260 -0
  38. package/dist/internal/runtime/summary.js.map +1 -0
  39. package/dist/internal/runtime/tokens.d.ts.map +1 -0
  40. package/dist/internal/runtime/tokens.js.map +1 -0
  41. package/dist/mcp/server.js +9 -8
  42. package/dist/mcp/server.js.map +1 -1
  43. package/dist/schemas/aida-project.d.ts +27 -1
  44. package/dist/schemas/aida-project.d.ts.map +1 -1
  45. package/dist/schemas/rules.d.ts +15 -0
  46. package/dist/schemas/rules.d.ts.map +1 -0
  47. package/dist/schemas/rules.js +5 -0
  48. package/dist/schemas/rules.js.map +1 -0
  49. package/dist/services/project-build.d.ts +44 -0
  50. package/dist/services/project-build.d.ts.map +1 -0
  51. package/dist/services/project-build.js +32 -0
  52. package/dist/services/project-build.js.map +1 -0
  53. package/dist/services/project-health.d.ts +14 -0
  54. package/dist/services/project-health.d.ts.map +1 -0
  55. package/dist/services/project-health.js +19 -0
  56. package/dist/services/project-health.js.map +1 -0
  57. package/dist/services/security-audit.d.ts +59 -0
  58. package/dist/services/security-audit.d.ts.map +1 -0
  59. package/dist/services/security-audit.js +638 -0
  60. package/dist/services/security-audit.js.map +1 -0
  61. package/dist/utils/ai-build.d.ts +3 -8
  62. package/dist/utils/ai-build.d.ts.map +1 -1
  63. package/dist/utils/ai-build.js +31 -117
  64. package/dist/utils/ai-build.js.map +1 -1
  65. package/dist/utils/guide.d.ts +3 -3
  66. package/dist/utils/guide.d.ts.map +1 -1
  67. package/dist/utils/guide.js +91 -68
  68. package/dist/utils/guide.js.map +1 -1
  69. package/dist/utils/import.d.ts.map +1 -1
  70. package/dist/utils/import.js +4 -15
  71. package/dist/utils/import.js.map +1 -1
  72. package/dist/utils/memory.d.ts +2 -0
  73. package/dist/utils/memory.d.ts.map +1 -1
  74. package/dist/utils/memory.js +440 -95
  75. package/dist/utils/memory.js.map +1 -1
  76. package/dist/utils/paths.d.ts +2 -10
  77. package/dist/utils/paths.d.ts.map +1 -1
  78. package/dist/utils/paths.js +5 -17
  79. package/dist/utils/paths.js.map +1 -1
  80. package/dist/utils/project-health.d.ts +39 -0
  81. package/dist/utils/project-health.d.ts.map +1 -0
  82. package/dist/utils/project-health.js +286 -0
  83. package/dist/utils/project-health.js.map +1 -0
  84. package/dist/utils/registry.d.ts +11 -0
  85. package/dist/utils/registry.d.ts.map +1 -0
  86. package/dist/utils/registry.js +65 -0
  87. package/dist/utils/registry.js.map +1 -0
  88. package/dist/utils/rules.d.ts +11 -1
  89. package/dist/utils/rules.d.ts.map +1 -1
  90. package/dist/utils/rules.js +76 -8
  91. package/dist/utils/rules.js.map +1 -1
  92. package/dist/utils/skills.d.ts +6 -9
  93. package/dist/utils/skills.d.ts.map +1 -1
  94. package/dist/utils/skills.js +26 -54
  95. package/dist/utils/skills.js.map +1 -1
  96. package/package.json +12 -14
  97. package/dist/cli/commands/build.d.ts +0 -2
  98. package/dist/cli/commands/build.d.ts.map +0 -1
  99. package/dist/cli/commands/build.js +0 -56
  100. package/dist/cli/commands/build.js.map +0 -1
  101. package/dist/cli/commands/dashboard.d.ts +0 -2
  102. package/dist/cli/commands/dashboard.d.ts.map +0 -1
  103. package/dist/cli/commands/dashboard.js +0 -70
  104. package/dist/cli/commands/dashboard.js.map +0 -1
  105. package/dist/cli/commands/import.d.ts +0 -2
  106. package/dist/cli/commands/import.d.ts.map +0 -1
  107. package/dist/cli/commands/import.js +0 -71
  108. package/dist/cli/commands/import.js.map +0 -1
  109. package/dist/cli/commands/log.d.ts +0 -2
  110. package/dist/cli/commands/log.d.ts.map +0 -1
  111. package/dist/cli/commands/log.js +0 -440
  112. package/dist/cli/commands/log.js.map +0 -1
  113. package/dist/cli/commands/merge-data.d.ts +0 -20
  114. package/dist/cli/commands/merge-data.d.ts.map +0 -1
  115. package/dist/cli/commands/merge-data.js +0 -574
  116. package/dist/cli/commands/merge-data.js.map +0 -1
  117. package/dist/cli/commands/merge.d.ts +0 -2
  118. package/dist/cli/commands/merge.d.ts.map +0 -1
  119. package/dist/cli/commands/merge.js +0 -82
  120. package/dist/cli/commands/merge.js.map +0 -1
  121. package/dist/cli/commands/migrate-dir.d.ts +0 -6
  122. package/dist/cli/commands/migrate-dir.d.ts.map +0 -1
  123. package/dist/cli/commands/migrate-dir.js +0 -125
  124. package/dist/cli/commands/migrate-dir.js.map +0 -1
  125. package/dist/cli/commands/migrate-legacy.d.ts +0 -2
  126. package/dist/cli/commands/migrate-legacy.d.ts.map +0 -1
  127. package/dist/cli/commands/migrate-legacy.js +0 -143
  128. package/dist/cli/commands/migrate-legacy.js.map +0 -1
  129. package/dist/cli/commands/migrate.d.ts +0 -2
  130. package/dist/cli/commands/migrate.d.ts.map +0 -1
  131. package/dist/cli/commands/migrate.js +0 -300
  132. package/dist/cli/commands/migrate.js.map +0 -1
  133. package/dist/cli/commands/reindex.d.ts +0 -14
  134. package/dist/cli/commands/reindex.d.ts.map +0 -1
  135. package/dist/cli/commands/reindex.js +0 -139
  136. package/dist/cli/commands/reindex.js.map +0 -1
  137. package/dist/cli/commands/report.d.ts +0 -2
  138. package/dist/cli/commands/report.d.ts.map +0 -1
  139. package/dist/cli/commands/report.js +0 -219
  140. package/dist/cli/commands/report.js.map +0 -1
  141. package/dist/cli/commands/start.d.ts +0 -2
  142. package/dist/cli/commands/start.d.ts.map +0 -1
  143. package/dist/cli/commands/start.js +0 -155
  144. package/dist/cli/commands/start.js.map +0 -1
  145. package/dist/cli/commands/status.d.ts +0 -2
  146. package/dist/cli/commands/status.d.ts.map +0 -1
  147. package/dist/cli/commands/status.js +0 -70
  148. package/dist/cli/commands/status.js.map +0 -1
  149. package/dist/cli/commands/update.d.ts +0 -2
  150. package/dist/cli/commands/update.d.ts.map +0 -1
  151. package/dist/cli/commands/update.js +0 -73
  152. package/dist/cli/commands/update.js.map +0 -1
  153. package/dist/schemas/run-json.d.ts.map +0 -1
  154. package/dist/schemas/run-json.js.map +0 -1
  155. package/dist/server/api.d.ts +0 -30
  156. package/dist/server/api.d.ts.map +0 -1
  157. package/dist/server/api.js +0 -239
  158. package/dist/server/api.js.map +0 -1
  159. package/dist/server/index.d.ts +0 -2
  160. package/dist/server/index.d.ts.map +0 -1
  161. package/dist/server/index.js +0 -228
  162. package/dist/server/index.js.map +0 -1
  163. package/dist/utils/run-data.d.ts.map +0 -1
  164. package/dist/utils/run-data.js.map +0 -1
  165. package/dist/utils/tokens.d.ts.map +0 -1
  166. package/dist/utils/tokens.js.map +0 -1
  167. package/src/assets/skills/audit.md +0 -98
  168. package/src/assets/skills/bug-fixer.md +0 -43
  169. package/src/assets/skills/code-generator.md +0 -71
  170. package/src/assets/skills/commit-code.md +0 -67
  171. package/src/assets/skills/dashboard-generator.md +0 -65
  172. package/src/assets/skills/dev-flower.md +0 -85
  173. package/src/assets/skills/deviation-recorder.md +0 -83
  174. package/src/assets/skills/docx-to-markdown.md +0 -69
  175. package/src/assets/skills/mcp-reviewer.md +0 -38
  176. package/src/assets/skills/requirement-analyzer.md +0 -103
  177. package/src/assets/skills/rules-evolver.md +0 -47
  178. package/src/assets/skills/self-reviewer.md +0 -49
  179. package/src/assets/skills/task-splitter.md +0 -60
  180. package/src/assets/skills/workflow-orchestrator.md +0 -209
  181. package/src/assets/templates/demo-run.json +0 -910
  182. package/src/assets/templates/run.json +0 -63
  183. package/src/dashboard/assets/index-B8QcPcg7.css +0 -1
  184. package/src/dashboard/assets/index-DcAl6lhS.js +0 -111
  185. package/src/dashboard/demo/overview.json +0 -71
  186. package/src/dashboard/demo/run.en.json +0 -1169
  187. package/src/dashboard/demo/run.json +0 -2667
  188. package/src/dashboard/demo/run.zh.json +0 -1169
  189. package/src/dashboard/demo/runs.json +0 -19
  190. package/src/dashboard/index.html +0 -13
  191. /package/dist/{utils → internal/runtime}/tokens.d.ts +0 -0
  192. /package/dist/{utils → internal/runtime}/tokens.js +0 -0
@@ -1,910 +0,0 @@
1
- {
2
- "meta": {
3
- "schemaVersion": "1.0",
4
- "runId": "demo-feature",
5
- "project": "aida-demo",
6
- "developer": "demo-dev",
7
- "branch": "demo-feature",
8
- "aiModel": "claude-sonnet-4",
9
- "aiTool": "claude-code",
10
- "startTime": "2026-03-01T09:00:00.000Z",
11
- "endTime": "2026-03-01T15:30:00.000Z",
12
- "status": "completed",
13
- "prdPhases": [
14
- "PRD1"
15
- ]
16
- },
17
- "summary": {
18
- "totalTasks": 10,
19
- "completedTasks": 10,
20
- "bugCount": 3,
21
- "deviationCount": 5,
22
- "reviewCount": 12,
23
- "reviewPassCount": 10,
24
- "reviewFailCount": 2,
25
- "rulesSedimented": 3,
26
- "prdPhaseCount": 1,
27
- "filesChanged": 18,
28
- "linesAdded": 1240,
29
- "linesRemoved": 320
30
- },
31
- "workflow": [
32
- {
33
- "stage": "analysis",
34
- "prdPhase": "PRD1",
35
- "status": "completed",
36
- "startTime": "2026-03-01T09:00:00.000Z",
37
- "endTime": "2026-03-01T09:20:00.000Z"
38
- },
39
- {
40
- "stage": "task_decomposition",
41
- "prdPhase": "PRD1",
42
- "status": "completed",
43
- "startTime": "2026-03-01T09:20:00.000Z",
44
- "endTime": "2026-03-01T09:35:00.000Z"
45
- },
46
- {
47
- "stage": "coding",
48
- "prdPhase": "PRD1",
49
- "status": "completed",
50
- "startTime": "2026-03-01T09:35:00.000Z",
51
- "endTime": "2026-03-01T14:00:00.000Z"
52
- },
53
- {
54
- "stage": "review",
55
- "prdPhase": "PRD1",
56
- "status": "completed",
57
- "startTime": "2026-03-01T14:00:00.000Z",
58
- "endTime": "2026-03-01T14:30:00.000Z"
59
- },
60
- {
61
- "stage": "bug_fix",
62
- "prdPhase": "PRD1",
63
- "status": "completed",
64
- "startTime": "2026-03-01T14:30:00.000Z",
65
- "endTime": "2026-03-01T15:00:00.000Z"
66
- },
67
- {
68
- "stage": "completed",
69
- "prdPhase": "PRD1",
70
- "status": "completed",
71
- "startTime": "2026-03-01T15:00:00.000Z",
72
- "endTime": "2026-03-01T15:30:00.000Z"
73
- }
74
- ],
75
- "tasks": [
76
- {
77
- "taskId": "TASK-01",
78
- "title": "Define TypeScript interfaces for User entity",
79
- "status": "done",
80
- "stageName": "Infrastructure",
81
- "prdPhase": "PRD1",
82
- "acceptance": "Types compile without error",
83
- "createdAt": "2026-03-01T09:35:00.000Z",
84
- "completedAt": "2026-03-01T09:50:00.000Z"
85
- },
86
- {
87
- "taskId": "TASK-02",
88
- "title": "Create API service layer with CRUD endpoints",
89
- "status": "done",
90
- "stageName": "Infrastructure",
91
- "prdPhase": "PRD1",
92
- "acceptance": "API functions callable",
93
- "createdAt": "2026-03-01T09:35:00.000Z",
94
- "completedAt": "2026-03-01T10:20:00.000Z"
95
- },
96
- {
97
- "taskId": "TASK-03",
98
- "title": "Add i18n language keys for user module",
99
- "status": "done",
100
- "stageName": "i18n",
101
- "prdPhase": "PRD1",
102
- "acceptance": "All UI text has i18n keys",
103
- "createdAt": "2026-03-01T09:35:00.000Z",
104
- "completedAt": "2026-03-01T10:40:00.000Z"
105
- },
106
- {
107
- "taskId": "TASK-04",
108
- "title": "Create UserList page with table component",
109
- "status": "done",
110
- "stageName": "Views",
111
- "prdPhase": "PRD1",
112
- "acceptance": "Table renders with mock data",
113
- "createdAt": "2026-03-01T09:35:00.000Z",
114
- "completedAt": "2026-03-01T11:20:00.000Z"
115
- },
116
- {
117
- "taskId": "TASK-05",
118
- "title": "Implement search and filter form",
119
- "status": "done",
120
- "stageName": "Views",
121
- "prdPhase": "PRD1",
122
- "acceptance": "Filters work correctly",
123
- "createdAt": "2026-03-01T09:35:00.000Z",
124
- "completedAt": "2026-03-01T11:50:00.000Z"
125
- },
126
- {
127
- "taskId": "TASK-06",
128
- "title": "Create UserDetail drawer component",
129
- "status": "done",
130
- "stageName": "Views",
131
- "prdPhase": "PRD1",
132
- "acceptance": "Drawer opens with user data",
133
- "createdAt": "2026-03-01T09:35:00.000Z",
134
- "completedAt": "2026-03-01T12:20:00.000Z"
135
- },
136
- {
137
- "taskId": "TASK-07",
138
- "title": "Implement create/edit user form with validation",
139
- "status": "done",
140
- "stageName": "Interaction",
141
- "prdPhase": "PRD1",
142
- "acceptance": "Form validates and submits",
143
- "createdAt": "2026-03-01T09:35:00.000Z",
144
- "completedAt": "2026-03-01T13:00:00.000Z"
145
- },
146
- {
147
- "taskId": "TASK-08",
148
- "title": "Add role-based permission checks",
149
- "status": "done",
150
- "stageName": "Interaction",
151
- "prdPhase": "PRD1",
152
- "acceptance": "Buttons hidden for unauthorized users",
153
- "createdAt": "2026-03-01T09:35:00.000Z",
154
- "completedAt": "2026-03-01T13:30:00.000Z"
155
- },
156
- {
157
- "taskId": "TASK-09",
158
- "title": "Implement batch operations (delete, export)",
159
- "status": "done",
160
- "stageName": "Interaction",
161
- "prdPhase": "PRD1",
162
- "acceptance": "Batch delete and CSV export work",
163
- "createdAt": "2026-03-01T09:35:00.000Z",
164
- "completedAt": "2026-03-01T13:50:00.000Z"
165
- },
166
- {
167
- "taskId": "TASK-10",
168
- "title": "Add loading states and error handling",
169
- "status": "done",
170
- "stageName": "Polish",
171
- "prdPhase": "PRD1",
172
- "acceptance": "Skeleton loading + error toast",
173
- "createdAt": "2026-03-01T09:35:00.000Z",
174
- "completedAt": "2026-03-01T14:00:00.000Z"
175
- }
176
- ],
177
- "bugs": [
178
- {
179
- "bugId": "BUG-01",
180
- "title": "API response type mismatch on pagination",
181
- "severity": "high",
182
- "source": "self_review",
183
- "status": "fixed",
184
- "taskId": "TASK-02",
185
- "files": [
186
- "src/api/user.ts"
187
- ],
188
- "fix": "Fixed response type to match paginated wrapper",
189
- "fixedAt": "2026-03-01T14:15:00.000Z",
190
- "reportedAt": "2026-03-01T14:05:00.000Z"
191
- },
192
- {
193
- "bugId": "BUG-02",
194
- "title": "Form validation not triggered on blur",
195
- "severity": "medium",
196
- "source": "user_feedback",
197
- "status": "fixed",
198
- "taskId": "TASK-07",
199
- "files": [
200
- "src/views/user/UserForm.vue"
201
- ],
202
- "fix": "Added validateOnBlur prop to form fields",
203
- "fixedAt": "2026-03-01T14:45:00.000Z",
204
- "reportedAt": "2026-03-01T14:35:00.000Z"
205
- },
206
- {
207
- "bugId": "BUG-03",
208
- "title": "Export CSV missing header row",
209
- "severity": "low",
210
- "source": "testing",
211
- "status": "fixed",
212
- "taskId": "TASK-09",
213
- "files": [
214
- "src/utils/export.ts"
215
- ],
216
- "fix": "Prepend column headers before data rows",
217
- "fixedAt": "2026-03-01T14:55:00.000Z",
218
- "reportedAt": "2026-03-01T14:50:00.000Z"
219
- }
220
- ],
221
- "deviations": [
222
- {
223
- "deviationId": "DEV-01",
224
- "title": "Used Dialog instead of Drawer for user detail",
225
- "aiOutput": "Used el-dialog for user detail view",
226
- "expectedOutput": "Should use el-drawer per project convention",
227
- "rootCauseCategory": "rule-missing",
228
- "deviationCategory": "component-usage",
229
- "files": [
230
- "src/views/user/UserDetail.vue"
231
- ],
232
- "ruleSedimented": {
233
- "file": ".aida/rules/component-usage.md",
234
- "content": "Detail views must use Drawer component, not Dialog"
235
- },
236
- "detectedAt": "2026-03-01T12:30:00.000Z",
237
- "fixedAt": null
238
- },
239
- {
240
- "deviationId": "DEV-02",
241
- "title": "Hardcoded Chinese text in template",
242
- "aiOutput": "Wrote raw Chinese strings in template",
243
- "expectedOutput": "All text should use i18n $t() calls",
244
- "rootCauseCategory": "rule-missing",
245
- "deviationCategory": "i18n",
246
- "files": [
247
- "src/views/user/UserList.vue"
248
- ],
249
- "ruleSedimented": {
250
- "file": ".aida/rules/i18n-rule.md",
251
- "content": "All user-facing text must use $t() i18n calls, no hardcoded strings"
252
- },
253
- "detectedAt": "2026-03-01T11:30:00.000Z",
254
- "fixedAt": null
255
- },
256
- {
257
- "deviationId": "DEV-03",
258
- "title": "Invented non-existent API endpoint",
259
- "aiOutput": "Called /api/users/batch-update which does not exist",
260
- "expectedOutput": "Should check existing API docs before inventing endpoints",
261
- "rootCauseCategory": "hallucination",
262
- "deviationCategory": "api",
263
- "files": [
264
- "src/api/user.ts"
265
- ],
266
- "ruleSedimented": null,
267
- "detectedAt": "2026-03-01T13:10:00.000Z",
268
- "fixedAt": null
269
- },
270
- {
271
- "deviationId": "DEV-04",
272
- "title": "Wrong spacing in table action column",
273
- "aiOutput": "8px gap between action buttons",
274
- "expectedOutput": "12px gap per design system",
275
- "rootCauseCategory": "context-insufficient",
276
- "deviationCategory": "ui-spacing",
277
- "files": [
278
- "src/views/user/UserList.vue"
279
- ],
280
- "ruleSedimented": null,
281
- "detectedAt": "2026-03-01T11:55:00.000Z",
282
- "fixedAt": null
283
- },
284
- {
285
- "deviationId": "DEV-05",
286
- "title": "Used relative import instead of path alias",
287
- "aiOutput": "import { User } from '../../../types/user'",
288
- "expectedOutput": "import { User } from '@/types/user'",
289
- "rootCauseCategory": "rule-missing",
290
- "deviationCategory": "architecture",
291
- "files": [
292
- "src/views/user/UserForm.vue"
293
- ],
294
- "ruleSedimented": {
295
- "file": ".aida/rules/coding-style.md",
296
- "content": "Always use @/ path alias for imports, never relative paths with ../"
297
- },
298
- "detectedAt": "2026-03-01T13:05:00.000Z",
299
- "fixedAt": null
300
- }
301
- ],
302
- "reviews": [
303
- {
304
- "reviewId": "REV-01",
305
- "taskId": "TASK-01",
306
- "result": "pass",
307
- "issueCount": 0,
308
- "scope": "src/types/user.ts",
309
- "reviewedAt": "2026-03-01T09:55:00.000Z"
310
- },
311
- {
312
- "reviewId": "REV-02",
313
- "taskId": "TASK-02",
314
- "result": "fail",
315
- "issueCount": 1,
316
- "scope": "src/api/user.ts",
317
- "reviewedAt": "2026-03-01T10:25:00.000Z"
318
- },
319
- {
320
- "reviewId": "REV-03",
321
- "taskId": "TASK-02",
322
- "result": "pass",
323
- "issueCount": 0,
324
- "scope": "src/api/user.ts",
325
- "reviewedAt": "2026-03-01T10:35:00.000Z"
326
- },
327
- {
328
- "reviewId": "REV-04",
329
- "taskId": "TASK-03",
330
- "result": "pass",
331
- "issueCount": 0,
332
- "scope": "src/i18n/user.ts",
333
- "reviewedAt": "2026-03-01T10:45:00.000Z"
334
- },
335
- {
336
- "reviewId": "REV-05",
337
- "taskId": "TASK-04",
338
- "result": "pass",
339
- "issueCount": 0,
340
- "scope": "src/views/user/UserList.vue",
341
- "reviewedAt": "2026-03-01T11:25:00.000Z"
342
- },
343
- {
344
- "reviewId": "REV-06",
345
- "taskId": "TASK-05",
346
- "result": "pass",
347
- "issueCount": 0,
348
- "scope": "src/views/user/SearchForm.vue",
349
- "reviewedAt": "2026-03-01T11:55:00.000Z"
350
- },
351
- {
352
- "reviewId": "REV-07",
353
- "taskId": "TASK-06",
354
- "result": "fail",
355
- "issueCount": 2,
356
- "scope": "src/views/user/UserDetail.vue",
357
- "reviewedAt": "2026-03-01T12:25:00.000Z"
358
- },
359
- {
360
- "reviewId": "REV-08",
361
- "taskId": "TASK-06",
362
- "result": "pass",
363
- "issueCount": 0,
364
- "scope": "src/views/user/UserDetail.vue",
365
- "reviewedAt": "2026-03-01T12:40:00.000Z"
366
- },
367
- {
368
- "reviewId": "REV-09",
369
- "taskId": "TASK-07",
370
- "result": "pass",
371
- "issueCount": 0,
372
- "scope": "src/views/user/UserForm.vue",
373
- "reviewedAt": "2026-03-01T13:05:00.000Z"
374
- },
375
- {
376
- "reviewId": "REV-10",
377
- "taskId": "TASK-08",
378
- "result": "pass",
379
- "issueCount": 0,
380
- "scope": "src/views/user/permissions.ts",
381
- "reviewedAt": "2026-03-01T13:35:00.000Z"
382
- },
383
- {
384
- "reviewId": "REV-11",
385
- "taskId": "TASK-09",
386
- "result": "pass",
387
- "issueCount": 0,
388
- "scope": "src/views/user/BatchOps.vue",
389
- "reviewedAt": "2026-03-01T13:55:00.000Z"
390
- },
391
- {
392
- "reviewId": "REV-12",
393
- "taskId": "TASK-10",
394
- "result": "pass",
395
- "issueCount": 0,
396
- "scope": "src/views/user/",
397
- "reviewedAt": "2026-03-01T14:05:00.000Z"
398
- }
399
- ],
400
- "files": [
401
- {
402
- "path": "src/types/user.ts",
403
- "changeType": "created",
404
- "linesAdded": 45,
405
- "linesRemoved": 0,
406
- "changeCount": 1
407
- },
408
- {
409
- "path": "src/api/user.ts",
410
- "changeType": "created",
411
- "linesAdded": 120,
412
- "linesRemoved": 15,
413
- "changeCount": 3
414
- },
415
- {
416
- "path": "src/i18n/user.ts",
417
- "changeType": "created",
418
- "linesAdded": 80,
419
- "linesRemoved": 0,
420
- "changeCount": 1
421
- },
422
- {
423
- "path": "src/views/user/UserList.vue",
424
- "changeType": "created",
425
- "linesAdded": 180,
426
- "linesRemoved": 25,
427
- "changeCount": 4
428
- },
429
- {
430
- "path": "src/views/user/SearchForm.vue",
431
- "changeType": "created",
432
- "linesAdded": 65,
433
- "linesRemoved": 0,
434
- "changeCount": 1
435
- },
436
- {
437
- "path": "src/views/user/UserDetail.vue",
438
- "changeType": "created",
439
- "linesAdded": 95,
440
- "linesRemoved": 40,
441
- "changeCount": 3
442
- },
443
- {
444
- "path": "src/views/user/UserForm.vue",
445
- "changeType": "created",
446
- "linesAdded": 150,
447
- "linesRemoved": 30,
448
- "changeCount": 3
449
- },
450
- {
451
- "path": "src/views/user/permissions.ts",
452
- "changeType": "created",
453
- "linesAdded": 35,
454
- "linesRemoved": 0,
455
- "changeCount": 1
456
- },
457
- {
458
- "path": "src/views/user/BatchOps.vue",
459
- "changeType": "created",
460
- "linesAdded": 70,
461
- "linesRemoved": 10,
462
- "changeCount": 2
463
- },
464
- {
465
- "path": "src/utils/export.ts",
466
- "changeType": "modified",
467
- "linesAdded": 40,
468
- "linesRemoved": 5,
469
- "changeCount": 2
470
- },
471
- {
472
- "path": "src/router/index.ts",
473
- "changeType": "modified",
474
- "linesAdded": 15,
475
- "linesRemoved": 0,
476
- "changeCount": 1
477
- },
478
- {
479
- "path": "src/store/user.ts",
480
- "changeType": "created",
481
- "linesAdded": 55,
482
- "linesRemoved": 0,
483
- "changeCount": 1
484
- },
485
- {
486
- "path": "src/components/UserAvatar.vue",
487
- "changeType": "created",
488
- "linesAdded": 30,
489
- "linesRemoved": 0,
490
- "changeCount": 1
491
- },
492
- {
493
- "path": "src/views/user/index.ts",
494
- "changeType": "created",
495
- "linesAdded": 10,
496
- "linesRemoved": 0,
497
- "changeCount": 1
498
- },
499
- {
500
- "path": "src/styles/user.scss",
501
- "changeType": "created",
502
- "linesAdded": 60,
503
- "linesRemoved": 0,
504
- "changeCount": 1
505
- },
506
- {
507
- "path": "src/hooks/useUserTable.ts",
508
- "changeType": "created",
509
- "linesAdded": 45,
510
- "linesRemoved": 0,
511
- "changeCount": 1
512
- },
513
- {
514
- "path": "src/constants/user.ts",
515
- "changeType": "created",
516
- "linesAdded": 25,
517
- "linesRemoved": 0,
518
- "changeCount": 1
519
- },
520
- {
521
- "path": "src/views/user/StatusTag.vue",
522
- "changeType": "created",
523
- "linesAdded": 20,
524
- "linesRemoved": 0,
525
- "changeCount": 1
526
- }
527
- ],
528
- "metrics": {
529
- "aiDeviationRate": 0.5,
530
- "bugRate": 0.3,
531
- "reviewPassRate": 0.83,
532
- "firstPassRate": 0.8,
533
- "rulesSedimentedCount": 3,
534
- "deviationToRuleRatio": 0.6,
535
- "avgTaskTimeSeconds": 2340,
536
- "totalDevelopmentTimeSeconds": 23400
537
- },
538
- "timeline": [
539
- {
540
- "type": "workflow",
541
- "title": "Analysis started",
542
- "timestamp": "2026-03-01T09:00:00.000Z"
543
- },
544
- {
545
- "type": "workflow",
546
- "title": "Task decomposition",
547
- "timestamp": "2026-03-01T09:20:00.000Z"
548
- },
549
- {
550
- "type": "task",
551
- "title": "TASK-01: TypeScript interfaces",
552
- "timestamp": "2026-03-01T09:50:00.000Z"
553
- },
554
- {
555
- "type": "task",
556
- "title": "TASK-02: API service layer",
557
- "timestamp": "2026-03-01T10:20:00.000Z"
558
- },
559
- {
560
- "type": "review",
561
- "title": "REV-02: API review failed",
562
- "timestamp": "2026-03-01T10:25:00.000Z"
563
- },
564
- {
565
- "type": "task",
566
- "title": "TASK-03: i18n keys",
567
- "timestamp": "2026-03-01T10:40:00.000Z"
568
- },
569
- {
570
- "type": "task",
571
- "title": "TASK-04: UserList page",
572
- "timestamp": "2026-03-01T11:20:00.000Z"
573
- },
574
- {
575
- "type": "deviation",
576
- "title": "DEV-02: Hardcoded Chinese text",
577
- "timestamp": "2026-03-01T11:30:00.000Z"
578
- },
579
- {
580
- "type": "task",
581
- "title": "TASK-05: Search and filter",
582
- "timestamp": "2026-03-01T11:50:00.000Z"
583
- },
584
- {
585
- "type": "deviation",
586
- "title": "DEV-04: Wrong spacing",
587
- "timestamp": "2026-03-01T11:55:00.000Z"
588
- },
589
- {
590
- "type": "task",
591
- "title": "TASK-06: UserDetail drawer",
592
- "timestamp": "2026-03-01T12:20:00.000Z"
593
- },
594
- {
595
- "type": "deviation",
596
- "title": "DEV-01: Dialog instead of Drawer",
597
- "timestamp": "2026-03-01T12:30:00.000Z"
598
- },
599
- {
600
- "type": "rule",
601
- "title": "Rule: Use Drawer for detail views",
602
- "timestamp": "2026-03-01T12:35:00.000Z"
603
- },
604
- {
605
- "type": "task",
606
- "title": "TASK-07: User form",
607
- "timestamp": "2026-03-01T13:00:00.000Z"
608
- },
609
- {
610
- "type": "deviation",
611
- "title": "DEV-05: Relative import",
612
- "timestamp": "2026-03-01T13:05:00.000Z"
613
- },
614
- {
615
- "type": "rule",
616
- "title": "Rule: Always use @/ path alias",
617
- "timestamp": "2026-03-01T13:08:00.000Z"
618
- },
619
- {
620
- "type": "deviation",
621
- "title": "DEV-03: Invented API endpoint",
622
- "timestamp": "2026-03-01T13:10:00.000Z"
623
- },
624
- {
625
- "type": "task",
626
- "title": "TASK-08: Permission checks",
627
- "timestamp": "2026-03-01T13:30:00.000Z"
628
- },
629
- {
630
- "type": "task",
631
- "title": "TASK-09: Batch operations",
632
- "timestamp": "2026-03-01T13:50:00.000Z"
633
- },
634
- {
635
- "type": "task",
636
- "title": "TASK-10: Loading & error states",
637
- "timestamp": "2026-03-01T14:00:00.000Z"
638
- },
639
- {
640
- "type": "bug",
641
- "title": "BUG-01: API pagination type mismatch",
642
- "timestamp": "2026-03-01T14:05:00.000Z"
643
- },
644
- {
645
- "type": "bug",
646
- "title": "BUG-02: Form validation on blur",
647
- "timestamp": "2026-03-01T14:35:00.000Z"
648
- },
649
- {
650
- "type": "bug",
651
- "title": "BUG-03: CSV missing headers",
652
- "timestamp": "2026-03-01T14:50:00.000Z"
653
- },
654
- {
655
- "type": "workflow",
656
- "title": "All tasks completed",
657
- "timestamp": "2026-03-01T15:30:00.000Z"
658
- }
659
- ],
660
- "events": [
661
- {
662
- "type": "workflow_stage_changed",
663
- "time": "2026-03-01T09:00:00.000Z",
664
- "data": {
665
- "stage": "analysis"
666
- }
667
- },
668
- {
669
- "type": "workflow_stage_changed",
670
- "time": "2026-03-01T09:20:00.000Z",
671
- "data": {
672
- "stage": "task_decomposition"
673
- }
674
- },
675
- {
676
- "type": "task_created",
677
- "time": "2026-03-01T09:35:00.000Z",
678
- "data": {
679
- "count": 10
680
- }
681
- },
682
- {
683
- "type": "workflow_stage_changed",
684
- "time": "2026-03-01T09:35:00.000Z",
685
- "data": {
686
- "stage": "coding"
687
- }
688
- },
689
- {
690
- "type": "task_completed",
691
- "time": "2026-03-01T09:50:00.000Z",
692
- "data": {
693
- "taskId": "TASK-01"
694
- }
695
- },
696
- {
697
- "type": "task_completed",
698
- "time": "2026-03-01T10:20:00.000Z",
699
- "data": {
700
- "taskId": "TASK-02"
701
- }
702
- },
703
- {
704
- "type": "review_created",
705
- "time": "2026-03-01T10:25:00.000Z",
706
- "data": {
707
- "reviewId": "REV-02",
708
- "result": "fail"
709
- }
710
- },
711
- {
712
- "type": "task_completed",
713
- "time": "2026-03-01T10:40:00.000Z",
714
- "data": {
715
- "taskId": "TASK-03"
716
- }
717
- },
718
- {
719
- "type": "task_completed",
720
- "time": "2026-03-01T11:20:00.000Z",
721
- "data": {
722
- "taskId": "TASK-04"
723
- }
724
- },
725
- {
726
- "type": "deviation_created",
727
- "time": "2026-03-01T11:30:00.000Z",
728
- "data": {
729
- "deviationId": "DEV-02"
730
- }
731
- },
732
- {
733
- "type": "task_completed",
734
- "time": "2026-03-01T11:50:00.000Z",
735
- "data": {
736
- "taskId": "TASK-05"
737
- }
738
- },
739
- {
740
- "type": "deviation_created",
741
- "time": "2026-03-01T11:55:00.000Z",
742
- "data": {
743
- "deviationId": "DEV-04"
744
- }
745
- },
746
- {
747
- "type": "task_completed",
748
- "time": "2026-03-01T12:20:00.000Z",
749
- "data": {
750
- "taskId": "TASK-06"
751
- }
752
- },
753
- {
754
- "type": "deviation_created",
755
- "time": "2026-03-01T12:30:00.000Z",
756
- "data": {
757
- "deviationId": "DEV-01"
758
- }
759
- },
760
- {
761
- "type": "rule_sedimented",
762
- "time": "2026-03-01T12:35:00.000Z",
763
- "data": {
764
- "ruleId": "RULE-01"
765
- }
766
- },
767
- {
768
- "type": "task_completed",
769
- "time": "2026-03-01T13:00:00.000Z",
770
- "data": {
771
- "taskId": "TASK-07"
772
- }
773
- },
774
- {
775
- "type": "deviation_created",
776
- "time": "2026-03-01T13:05:00.000Z",
777
- "data": {
778
- "deviationId": "DEV-05"
779
- }
780
- },
781
- {
782
- "type": "rule_sedimented",
783
- "time": "2026-03-01T13:08:00.000Z",
784
- "data": {
785
- "ruleId": "RULE-02"
786
- }
787
- },
788
- {
789
- "type": "deviation_created",
790
- "time": "2026-03-01T13:10:00.000Z",
791
- "data": {
792
- "deviationId": "DEV-03"
793
- }
794
- },
795
- {
796
- "type": "task_completed",
797
- "time": "2026-03-01T13:30:00.000Z",
798
- "data": {
799
- "taskId": "TASK-08"
800
- }
801
- },
802
- {
803
- "type": "task_completed",
804
- "time": "2026-03-01T13:50:00.000Z",
805
- "data": {
806
- "taskId": "TASK-09"
807
- }
808
- },
809
- {
810
- "type": "task_completed",
811
- "time": "2026-03-01T14:00:00.000Z",
812
- "data": {
813
- "taskId": "TASK-10"
814
- }
815
- },
816
- {
817
- "type": "workflow_stage_changed",
818
- "time": "2026-03-01T14:00:00.000Z",
819
- "data": {
820
- "stage": "review"
821
- }
822
- },
823
- {
824
- "type": "bug_created",
825
- "time": "2026-03-01T14:05:00.000Z",
826
- "data": {
827
- "bugId": "BUG-01"
828
- }
829
- },
830
- {
831
- "type": "bug_fixed",
832
- "time": "2026-03-01T14:15:00.000Z",
833
- "data": {
834
- "bugId": "BUG-01"
835
- }
836
- },
837
- {
838
- "type": "workflow_stage_changed",
839
- "time": "2026-03-01T14:30:00.000Z",
840
- "data": {
841
- "stage": "bug_fix"
842
- }
843
- },
844
- {
845
- "type": "bug_created",
846
- "time": "2026-03-01T14:35:00.000Z",
847
- "data": {
848
- "bugId": "BUG-02"
849
- }
850
- },
851
- {
852
- "type": "bug_fixed",
853
- "time": "2026-03-01T14:45:00.000Z",
854
- "data": {
855
- "bugId": "BUG-02"
856
- }
857
- },
858
- {
859
- "type": "bug_created",
860
- "time": "2026-03-01T14:50:00.000Z",
861
- "data": {
862
- "bugId": "BUG-03"
863
- }
864
- },
865
- {
866
- "type": "bug_fixed",
867
- "time": "2026-03-01T14:55:00.000Z",
868
- "data": {
869
- "bugId": "BUG-03"
870
- }
871
- },
872
- {
873
- "type": "workflow_stage_changed",
874
- "time": "2026-03-01T15:00:00.000Z",
875
- "data": {
876
- "stage": "completed"
877
- }
878
- }
879
- ],
880
- "rules": [
881
- {
882
- "ruleId": "RULE-01",
883
- "file": ".aida/rules/component-usage.md",
884
- "content": "Detail views must use Drawer component, not Dialog",
885
- "sourceDeviation": "DEV-01",
886
- "sedimentedAt": "2026-03-01T12:35:00.000Z"
887
- },
888
- {
889
- "ruleId": "RULE-02",
890
- "file": ".aida/rules/coding-style.md",
891
- "content": "Always use @/ path alias for imports, never relative paths with ../",
892
- "sourceDeviation": "DEV-05",
893
- "sedimentedAt": "2026-03-01T13:08:00.000Z"
894
- },
895
- {
896
- "ruleId": "RULE-03",
897
- "file": ".aida/rules/i18n-rule.md",
898
- "content": "All user-facing text must use $t() i18n calls, no hardcoded strings",
899
- "sourceDeviation": "DEV-02",
900
- "sedimentedAt": "2026-03-01T11:35:00.000Z"
901
- }
902
- ],
903
- "context": {
904
- "currentPrdPhase": "PRD1",
905
- "currentTaskId": null,
906
- "currentStage": "completed",
907
- "lastUpdated": "2026-03-01T15:30:00.000Z"
908
- },
909
- "extensions": {}
910
- }