ai-dev-analytics 1.0.0-beta.11

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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +422 -0
  3. package/README.zh-CN.md +422 -0
  4. package/dist/cli/commands/dashboard.d.ts +2 -0
  5. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  6. package/dist/cli/commands/dashboard.js +70 -0
  7. package/dist/cli/commands/dashboard.js.map +1 -0
  8. package/dist/cli/commands/init.d.ts +2 -0
  9. package/dist/cli/commands/init.d.ts.map +1 -0
  10. package/dist/cli/commands/init.js +367 -0
  11. package/dist/cli/commands/init.js.map +1 -0
  12. package/dist/cli/commands/log.d.ts +2 -0
  13. package/dist/cli/commands/log.d.ts.map +1 -0
  14. package/dist/cli/commands/log.js +438 -0
  15. package/dist/cli/commands/log.js.map +1 -0
  16. package/dist/cli/commands/migrate.d.ts +2 -0
  17. package/dist/cli/commands/migrate.d.ts.map +1 -0
  18. package/dist/cli/commands/migrate.js +300 -0
  19. package/dist/cli/commands/migrate.js.map +1 -0
  20. package/dist/cli/commands/reindex.d.ts +10 -0
  21. package/dist/cli/commands/reindex.d.ts.map +1 -0
  22. package/dist/cli/commands/reindex.js +94 -0
  23. package/dist/cli/commands/reindex.js.map +1 -0
  24. package/dist/cli/commands/report.d.ts +2 -0
  25. package/dist/cli/commands/report.d.ts.map +1 -0
  26. package/dist/cli/commands/report.js +219 -0
  27. package/dist/cli/commands/report.js.map +1 -0
  28. package/dist/cli/commands/rules.d.ts +2 -0
  29. package/dist/cli/commands/rules.d.ts.map +1 -0
  30. package/dist/cli/commands/rules.js +143 -0
  31. package/dist/cli/commands/rules.js.map +1 -0
  32. package/dist/cli/commands/start.d.ts +2 -0
  33. package/dist/cli/commands/start.d.ts.map +1 -0
  34. package/dist/cli/commands/start.js +173 -0
  35. package/dist/cli/commands/start.js.map +1 -0
  36. package/dist/cli/commands/status.d.ts +2 -0
  37. package/dist/cli/commands/status.d.ts.map +1 -0
  38. package/dist/cli/commands/status.js +74 -0
  39. package/dist/cli/commands/status.js.map +1 -0
  40. package/dist/cli/commands/update.d.ts +2 -0
  41. package/dist/cli/commands/update.d.ts.map +1 -0
  42. package/dist/cli/commands/update.js +146 -0
  43. package/dist/cli/commands/update.js.map +1 -0
  44. package/dist/cli/index.d.ts +3 -0
  45. package/dist/cli/index.d.ts.map +1 -0
  46. package/dist/cli/index.js +85 -0
  47. package/dist/cli/index.js.map +1 -0
  48. package/dist/mcp/server.d.ts +10 -0
  49. package/dist/mcp/server.d.ts.map +1 -0
  50. package/dist/mcp/server.js +704 -0
  51. package/dist/mcp/server.js.map +1 -0
  52. package/dist/schemas/run-json.d.ts +258 -0
  53. package/dist/schemas/run-json.d.ts.map +1 -0
  54. package/dist/schemas/run-json.js +22 -0
  55. package/dist/schemas/run-json.js.map +1 -0
  56. package/dist/server/api.d.ts +30 -0
  57. package/dist/server/api.d.ts.map +1 -0
  58. package/dist/server/api.js +239 -0
  59. package/dist/server/api.js.map +1 -0
  60. package/dist/server/index.d.ts +2 -0
  61. package/dist/server/index.d.ts.map +1 -0
  62. package/dist/server/index.js +228 -0
  63. package/dist/server/index.js.map +1 -0
  64. package/dist/utils/display.d.ts +12 -0
  65. package/dist/utils/display.d.ts.map +1 -0
  66. package/dist/utils/display.js +52 -0
  67. package/dist/utils/display.js.map +1 -0
  68. package/dist/utils/fs.d.ts +9 -0
  69. package/dist/utils/fs.d.ts.map +1 -0
  70. package/dist/utils/fs.js +43 -0
  71. package/dist/utils/fs.js.map +1 -0
  72. package/dist/utils/git.d.ts +4 -0
  73. package/dist/utils/git.d.ts.map +1 -0
  74. package/dist/utils/git.js +18 -0
  75. package/dist/utils/git.js.map +1 -0
  76. package/dist/utils/guide.d.ts +18 -0
  77. package/dist/utils/guide.d.ts.map +1 -0
  78. package/dist/utils/guide.js +172 -0
  79. package/dist/utils/guide.js.map +1 -0
  80. package/dist/utils/paths.d.ts +25 -0
  81. package/dist/utils/paths.d.ts.map +1 -0
  82. package/dist/utils/paths.js +45 -0
  83. package/dist/utils/paths.js.map +1 -0
  84. package/dist/utils/rules.d.ts +44 -0
  85. package/dist/utils/rules.d.ts.map +1 -0
  86. package/dist/utils/rules.js +208 -0
  87. package/dist/utils/rules.js.map +1 -0
  88. package/dist/utils/run-data.d.ts +37 -0
  89. package/dist/utils/run-data.d.ts.map +1 -0
  90. package/dist/utils/run-data.js +389 -0
  91. package/dist/utils/run-data.js.map +1 -0
  92. package/dist/utils/tokens.d.ts +26 -0
  93. package/dist/utils/tokens.d.ts.map +1 -0
  94. package/dist/utils/tokens.js +173 -0
  95. package/dist/utils/tokens.js.map +1 -0
  96. package/package.json +49 -0
  97. package/src/assets/skills/audit.md +98 -0
  98. package/src/assets/skills/bug-fixer.md +48 -0
  99. package/src/assets/skills/code-generator.md +82 -0
  100. package/src/assets/skills/commit-code.md +67 -0
  101. package/src/assets/skills/dashboard-generator.md +65 -0
  102. package/src/assets/skills/dev-flower.md +85 -0
  103. package/src/assets/skills/deviation-recorder.md +82 -0
  104. package/src/assets/skills/docx-to-markdown.md +69 -0
  105. package/src/assets/skills/mcp-reviewer.md +43 -0
  106. package/src/assets/skills/requirement-analyzer.md +103 -0
  107. package/src/assets/skills/rules-evolver.md +47 -0
  108. package/src/assets/skills/self-reviewer.md +53 -0
  109. package/src/assets/skills/task-splitter.md +58 -0
  110. package/src/assets/skills/workflow-orchestrator.md +209 -0
  111. package/src/assets/templates/demo-run.json +910 -0
  112. package/src/assets/templates/run.json +63 -0
  113. package/src/dashboard/assets/index-C-E7m3g4.css +1 -0
  114. package/src/dashboard/assets/index-CsU3dyCj.js +111 -0
  115. package/src/dashboard/demo/overview.json +71 -0
  116. package/src/dashboard/demo/run.json +2667 -0
  117. package/src/dashboard/demo/runs.json +19 -0
  118. package/src/dashboard/index.html +13 -0
@@ -0,0 +1,910 @@
1
+ {
2
+ "meta": {
3
+ "schemaVersion": "1.0",
4
+ "runId": "demo-feature",
5
+ "project": "aidevos-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": ".aidevos/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": ".aidevos/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": ".aidevos/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": ".aidevos/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": ".aidevos/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": ".aidevos/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
+ }