-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeature_list.json
More file actions
781 lines (781 loc) · 26.9 KB
/
Copy pathfeature_list.json
File metadata and controls
781 lines (781 loc) · 26.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
[
{
"id": "001",
"category": "core",
"priority": 1,
"dependencies": [],
"description": "用户可以用邮箱和密码注册账号",
"steps": [
"打开 http://localhost:3000/register",
"在邮箱输入框填写 [email protected]",
"在密码输入框填写 Password123",
"点击「注册」按钮",
"页面在 3 秒内跳转到 /dashboard,顶部显示「欢迎,[email protected]」",
"刷新页面,URL 仍为 /dashboard,用户保持登录状态"
],
"passes": true
},
{
"id": "002",
"category": "core",
"priority": 2,
"dependencies": [
"001"
],
"description": "用户可以用已注册的邮箱和密码登录",
"steps": [
"打开 http://localhost:3000/login",
"在邮箱输入框填写 [email protected]",
"在密码输入框填写 Password123",
"点击「登录」按钮",
"页面在 3 秒内跳转到 /dashboard",
"页面右上角显示用户邮箱或头像图标"
],
"passes": true
},
{
"id": "003",
"category": "core",
"priority": 3,
"dependencies": [
"001"
],
"description": "用户输入错误密码时登录失败并看到错误提示",
"steps": [
"打开 http://localhost:3000/login",
"在邮箱输入框填写 [email protected]",
"在密码输入框填写 WrongPassword",
"点击「登录」按钮",
"页面不跳转,显示红色错误提示文字「邮箱或密码错误」",
"URL 仍为 /login"
],
"passes": true
},
{
"id": "004",
"category": "core",
"priority": 4,
"dependencies": [
"002"
],
"description": "用户可以退出登录",
"steps": [
"以已登录状态访问 http://localhost:3000/dashboard",
"点击右上角用户头像或邮箱",
"在下拉菜单中点击「退出登录」",
"页面跳转到 /login",
"直接访问 http://localhost:3000/dashboard,页面重定向回 /login"
],
"passes": true
},
{
"id": "005",
"category": "core",
"priority": 5,
"dependencies": [
"002"
],
"description": "未登录用户访问受保护页面时被重定向到登录页",
"steps": [
"在未登录状态下直接访问 http://localhost:3000/dashboard",
"页面自动跳转到 /login",
"在未登录状态下直接访问 http://localhost:3000/projects/new",
"页面自动跳转到 /login"
],
"passes": true
},
{
"id": "006",
"category": "core",
"priority": 6,
"dependencies": [
"002"
],
"description": "用户可以在首页创建新项目并描述工具需求",
"steps": [
"以已登录状态访问 http://localhost:3000/dashboard",
"点击「新建项目」或「创建工具」按钮",
"页面跳转到 /projects/new",
"在文本输入框填写「帮我追踪每天喝水量,记录时间和容量」",
"点击「开始构建」按钮",
"页面跳转到 /projects/[id] 并显示加载状态"
],
"passes": true
},
{
"id": "007",
"category": "core",
"priority": 7,
"dependencies": [
"006"
],
"description": "Planner Agent 根据用户描述生成功能列表并展示给用户",
"steps": [
"在 /projects/new 页面输入「帮我追踪每天喝水量」并提交",
"页面跳转到 /projects/[id],显示「Planner 正在分析需求…」加载提示",
"等待最多 30 秒,页面显示由 Planner 生成的功能列表,包含至少 3 个功能条目",
"每个功能条目显示功能描述文字",
"页面显示「确认功能列表」和「修改需求」两个按钮"
],
"passes": true
},
{
"id": "008",
"category": "core",
"priority": 8,
"dependencies": [
"007"
],
"description": "用户可以确认 Planner 生成的功能列表以启动构建",
"steps": [
"在 /projects/[id] 页面看到 Planner 生成的功能列表",
"点击「确认功能列表」按钮",
"按钮变为不可点击状态",
"页面显示「Builder 正在构建…」提示",
"功能列表区域出现进度状态(如第一个功能显示「构建中」)"
],
"passes": true
},
{
"id": "009",
"category": "core",
"priority": 9,
"dependencies": [
"007"
],
"description": "用户可以修改需求描述并让 Planner 重新生成功能列表",
"steps": [
"在 /projects/[id] 页面看到 Planner 生成的功能列表",
"点击「修改需求」按钮",
"页面显示需求输入框,内容为原始需求文字",
"清空输入框并填写「帮我追踪每天喝水量和卡路里摄入」",
"点击「重新生成」按钮",
"等待最多 30 秒,功能列表更新为新生成的内容,包含与卡路里相关的功能条目"
],
"passes": true
},
{
"id": "010",
"category": "core",
"priority": 10,
"dependencies": [
"008"
],
"description": "Builder Agent 开始构建后通过 SSE 实时推送进度",
"steps": [
"用户确认功能列表后,在 /projects/[id] 页面观察进度区域",
"页面每隔不超过 5 秒自动更新一次进度内容,无需手动刷新",
"进度区域显示当前正在构建的功能名称,例如「正在实现:添加喝水记录」",
"已完成的功能条目显示绿色勾选图标",
"正在处理的功能条目显示加载动画"
],
"passes": true
},
{
"id": "011",
"category": "core",
"priority": 11,
"dependencies": [
"010"
],
"description": "Builder 构建每个功能后 QA Agent 自动对该功能进行验证",
"steps": [
"在 /projects/[id] 页面等待 Builder 完成第一个功能",
"第一个功能完成后,进度区域显示「QA 正在验证:[功能名称]」",
"QA 验证通过后,该功能条目显示「已验证」绿色标签",
"QA 验证失败后,该功能条目显示「验证失败」红色标签",
"QA 验证完成后,Builder 继续构建下一个功能"
],
"passes": true
},
{
"id": "012",
"category": "core",
"priority": 12,
"dependencies": [
"011"
],
"description": "所有功能构建并验证完成后生成可访问的工具链接",
"steps": [
"等待 /projects/[id] 页面所有功能条目完成构建和 QA 验证",
"页面显示「构建完成」标题",
"页面显示一个可点击的工具访问链接,格式为 http://localhost:3000/tools/[toolId]",
"点击该链接,页面打开用户定制的工具页面",
"工具页面包含用户在需求中描述的核心功能界面"
],
"passes": true
},
{
"id": "013",
"category": "core",
"priority": 13,
"dependencies": [
"012"
],
"description": "用户可以复制工具的分享链接",
"steps": [
"在 /projects/[id] 页面构建完成后,找到分享链接区域",
"点击链接旁边的「复制」按钮",
"按钮文字变为「已复制」并持续 2 秒",
"在新标签页粘贴并访问复制的链接",
"页面成功打开对应的工具,内容与直接访问一致"
],
"passes": true
},
{
"id": "014",
"category": "core",
"priority": 14,
"dependencies": [
"010"
],
"description": "构建过程中显示整体进度百分比",
"steps": [
"用户确认功能列表后,在 /projects/[id] 页面观察进度条",
"页面顶部或进度区域显示进度条组件",
"构建第一个功能时进度条不为 0%",
"每完成一个功能,进度条数值增加",
"所有功能完成后进度条显示 100%"
],
"passes": true
},
{
"id": "015",
"category": "core",
"priority": 15,
"dependencies": [
"006"
],
"description": "用户可以在 Dashboard 查看所有已创建的项目",
"steps": [
"以已登录状态访问 http://localhost:3000/dashboard",
"页面显示项目列表区域",
"列表中每个项目卡片显示项目名称或需求描述摘要",
"每个项目卡片显示创建时间",
"每个项目卡片显示构建状态(如「构建中」「已完成」「失败」)"
],
"passes": true
},
{
"id": "016",
"category": "core",
"priority": 16,
"dependencies": [
"015"
],
"description": "用户可以从 Dashboard 点击进入已有项目的详情页",
"steps": [
"以已登录状态访问 http://localhost:3000/dashboard",
"确保列表中存在至少一个项目",
"点击任意项目卡片",
"页面跳转到 /projects/[id]",
"页面显示该项目的需求描述和功能列表"
],
"passes": true
},
{
"id": "017",
"category": "enhancement",
"priority": 17,
"dependencies": [
"012"
],
"description": "用户可以查看项目的完整构建历史记录",
"steps": [
"访问一个已完成构建的项目页面 /projects/[id]",
"点击「构建历史」或「查看日志」标签",
"页面显示按时间排列的构建事件列表",
"每条记录显示时间戳和事件描述,例如「14:32 Planner 生成功能列表」",
"列表包含至少 5 条历史事件"
],
"passes": true
},
{
"id": "018",
"category": "enhancement",
"priority": 18,
"dependencies": [
"012"
],
"description": "用户可以在构建完成后追加新的功能需求",
"steps": [
"访问一个已完成构建的项目页面 /projects/[id]",
"点击「追加功能」按钮",
"在弹出的输入框中填写「增加导出 CSV 功能」",
"点击「确认追加」",
"页面显示新功能正在构建的进度,原有已完成功能保持绿色勾选状态"
],
"passes": true
},
{
"id": "019",
"category": "enhancement",
"priority": 19,
"dependencies": [
"011"
],
"description": "用户可以对验证失败的功能单独重试构建",
"steps": [
"访问一个包含验证失败功能的项目页面 /projects/[id]",
"找到标记为「验证失败」的功能条目",
"点击该条目旁边的「重试」按钮",
"该功能条目状态变为「构建中」",
"等待最多 60 秒,功能完成重建并重新触发 QA 验证"
],
"passes": true
},
{
"id": "020",
"category": "enhancement",
"priority": 20,
"dependencies": [
"015"
],
"description": "用户可以删除不需要的项目",
"steps": [
"以已登录状态访问 http://localhost:3000/dashboard",
"将鼠标悬停在某个项目卡片上,出现「删除」按钮",
"点击「删除」按钮,弹出确认对话框,显示「确定删除此项目?此操作不可撤销」",
"点击对话框中的「确认删除」按钮",
"项目列表中该卡片消失,页面显示「项目已删除」提示"
],
"passes": true
},
{
"id": "021",
"category": "enhancement",
"priority": 21,
"dependencies": [
"006"
],
"description": "用户可以为项目设置自定义名称",
"steps": [
"访问 /projects/[id] 页面",
"点击页面顶部项目标题旁的编辑图标",
"标题变为可编辑的输入框",
"清空内容并输入「我的喝水追踪器」",
"按下回车键或点击输入框外部",
"页面顶部显示「我的喝水追踪器」,刷新页面后名称仍保持"
],
"passes": true
},
{
"id": "022",
"category": "enhancement",
"priority": 22,
"dependencies": [
"007"
],
"description": "用户可以在对话框中与 Agent 进行多轮对话细化需求",
"steps": [
"在 /projects/new 页面输入「帮我做一个待办事项工具」并提交",
"Planner 生成功能列表后,页面底部显示对话输入框",
"在输入框填写「能不能加上优先级标签功能」并发送",
"Planner 回复并更新功能列表,新增优先级相关条目",
"点击「确认功能列表」按钮启动构建"
],
"passes": true
},
{
"id": "023",
"category": "ux",
"priority": 23,
"dependencies": [
"011"
],
"description": "构建失败时页面展示具体的失败原因",
"steps": [
"访问一个包含构建失败功能的项目页面 /projects/[id]",
"找到标记为红色的失败功能条目",
"点击该条目展开详情",
"展开区域显示具体错误信息文字,长度超过 10 个字符",
"错误信息不是「未知错误」等模糊描述"
],
"passes": true
},
{
"id": "024",
"category": "ux",
"priority": 24,
"dependencies": [
"001",
"002",
"006",
"010",
"012"
],
"description": "页面在移动端(375px 宽度)可正常显示和使用",
"steps": [
"在浏览器开发者工具中将视窗宽度设置为 375px",
"访问 http://localhost:3000/login,表单可正常显示,无元素溢出屏幕",
"访问 http://localhost:3000/dashboard,项目卡片纵向排列,可正常滚动",
"访问 /projects/new,文本输入框宽度自适应,「开始构建」按钮可点击",
"访问 /projects/[id],功能列表和进度条可正常显示,无横向滚动条"
],
"passes": true
},
{
"id": "025",
"category": "ux",
"priority": 25,
"dependencies": [
"007"
],
"description": "用户在等待 Agent 响应时看到加载动画而非空白",
"steps": [
"在 /projects/new 提交需求后,立即观察页面",
"页面在 Planner 响应返回前显示旋转加载图标或骨架屏",
"加载动画持续显示直到 Planner 返回功能列表",
"功能列表出现后加载动画消失",
"整个过程中页面不出现空白区域超过 1 秒"
],
"passes": true
},
{
"id": "026",
"category": "ux",
"priority": 26,
"dependencies": [
"001"
],
"description": "用户注册时邮箱格式不正确会看到即时验证提示",
"steps": [
"打开 http://localhost:3000/register",
"在邮箱输入框填写「notanemail」",
"点击密码输入框(触发邮箱字段失焦验证)",
"邮箱输入框下方显示红色提示文字「请输入有效的邮箱地址」",
"清空并填写正确格式 [email protected] 后,红色提示消失"
],
"passes": true
},
{
"id": "027",
"category": "ux",
"priority": 27,
"dependencies": [
"001"
],
"description": "用户注册时密码少于 8 位会看到验证提示",
"steps": [
"打开 http://localhost:3000/register",
"在密码输入框填写「abc123」(6 位)",
"点击页面其他区域触发失焦验证",
"密码输入框下方显示红色提示文字,包含「至少 8 位」相关描述",
"清空并填写「abc12345」(8 位)后,红色提示消失"
],
"passes": true
},
{
"id": "028",
"category": "ux",
"priority": 28,
"dependencies": [
"002"
],
"description": "页面切换时有平滑过渡动画,不出现白屏闪烁",
"steps": [
"以已登录状态访问 http://localhost:3000/dashboard",
"点击「新建项目」按钮跳转到 /projects/new",
"观察页面切换过程,内容区域有淡入或滑入过渡效果",
"返回浏览器后退按钮回到 /dashboard",
"页面切换过程中不出现全白或全黑的闪烁帧"
],
"passes": true
},
{
"id": "029",
"category": "ux",
"priority": 29,
"dependencies": [
"006"
],
"description": "用户在需求输入框中可以看到示例提示文字",
"steps": [
"以已登录状态访问 http://localhost:3000/projects/new",
"不点击需求输入框,观察其内容",
"输入框中显示灰色占位提示文字,例如「描述你想要的工具,例如:帮我追踪每天喝水量…」",
"点击输入框,占位文字消失",
"不输入任何内容点击输入框外部,占位文字重新出现"
],
"passes": true
},
{
"id": "030",
"category": "ux",
"priority": 30,
"dependencies": [
"012"
],
"description": "构建完成后用户看到明显的成功状态视觉反馈",
"steps": [
"等待 /projects/[id] 页面所有功能完成构建",
"页面顶部或主要区域出现成功状态标识(绿色图标或横幅)",
"显示「构建完成」或类似文字",
"工具访问链接以突出样式展示(如大按钮或高亮卡片)",
"成功状态在刷新页面后仍然显示"
],
"passes": true
},
{
"id": "031",
"category": "core",
"priority": 1,
"dependencies": [],
"description": "用户可以在 Dashboard 或工具详情页对工具进行重命名,修改后立即生效并同步显示",
"steps": [
"打开 /dashboard,点击某个项目卡片上的重命名按钮,在弹出的输入框中输入新名称并确认,预期该项目卡片标题更新为新名称",
"打开 /tools/[id],点击页面顶部工具名称旁的编辑图标,修改名称后提交,预期页面标题及浏览器 tab 同步更新"
],
"passes": true
},
{
"id": "032",
"category": "core",
"priority": 2,
"dependencies": [
"031"
],
"description": "用户可以删除工具及其全部关联数据,删除前需通过确认对话框二次确认",
"steps": [
"打开 /dashboard,点击某个项目卡片上的删除按钮,预期弹出包含工具名称的确认对话框",
"在确认对话框中点击「确认删除」,预期该工具从列表中消失,再次访问 /tools/[id] 返回 404"
],
"passes": true
},
{
"id": "033",
"category": "core",
"priority": 3,
"dependencies": [],
"description": "用户可以在工具详情页顶部查看工具的元信息,包括生成时间、功能数量和数据记录总数",
"steps": [
"打开 /tools/[id],预期页面顶部 meta 区域显示「生成时间」「功能数量」「数据记录总数」三项信息且数值与实际一致"
],
"passes": true
},
{
"id": "034",
"category": "core",
"priority": 4,
"dependencies": [
"033"
],
"description": "用户可以对已有工具重新触发 Builder 构建,新版本构建完成后覆盖原工具,工具链接不变",
"steps": [
"打开 /dashboard 或 /tools/[id],点击「重新构建」按钮,预期页面跳转至构建进度页并以 SSE 实时展示构建日志",
"构建完成后访问原工具链接 /tools/[id],预期工具功能已更新,元信息中生成时间刷新为本次构建时间"
],
"passes": true
},
{
"id": "035",
"category": "enhancement",
"priority": 5,
"dependencies": [
"032"
],
"description": "用户在确认删除对话框中可以看到将被删除的数据记录总数,帮助其评估删除影响",
"steps": [
"打开 /dashboard,点击某个含有数据记录的项目的删除按钮,预期确认对话框中显示「将同时删除 N 条数据记录」的警告文本"
],
"passes": true
},
{
"id": "036",
"category": "ux",
"priority": 6,
"dependencies": [
"031",
"032",
"034"
],
"description": "用户在 Dashboard 项目卡片上通过统一的操作菜单访问重命名、重新构建、删除等管理操作,界面简洁不凌乱",
"steps": [
"打开 /dashboard,将鼠标悬停在任意项目卡片上,预期右上角出现「⋮」更多操作按钮,点击后展开包含「重命名」「重新构建」「删除」三个选项的下拉菜单"
],
"passes": true
},
{
"id": "037",
"category": "core",
"priority": 1,
"dependencies": [],
"description": "用户在构建失败时能看到具体的错误原因,并能区分是 QA 校验失败还是系统异常",
"steps": [
"打开某个构建失败项目的构建页面 /projects/[id]/build,观察 BuildProgress 组件,预期:显示带颜色标识的错误信息区块,QA 失败显示「质量校验未通过:<具体原因>」,系统错误显示「系统错误:<错误描述>」,两类错误使用不同图标和颜色区分"
],
"passes": true
},
{
"id": "038",
"category": "core",
"priority": 2,
"dependencies": [
"037"
],
"description": "用户可以对构建失败的项目一键重新触发完整构建,平台将重置所有功能状态并重新执行 Builder 流程",
"steps": [
"打开构建失败项目的构建页面 /projects/[id]/build,点击「重新构建」按钮,预期:按钮变为加载态,后端将该项目所有 Feature 的 passes 字段重置为 false,随即重新触发 Builder+QA SSE 流程,BuildProgress 组件恢复初始进度并开始实时滚动输出"
],
"passes": true
},
{
"id": "039",
"category": "core",
"priority": 3,
"dependencies": [
"038"
],
"description": "用户在 Dashboard 项目卡片上能直观看到每个项目当前的构建状态角标",
"steps": [
"打开 Dashboard 页面 /dashboard,观察项目卡片右上角,预期:构建中的项目显示蓝色「构建中」角标并有动态脉冲动画,已完成的项目显示绿色「已完成」角标,构建失败的项目显示红色「失败」角标,未开始构建的项目不显示角标"
],
"passes": true
},
{
"id": "040",
"category": "core",
"priority": 4,
"dependencies": [
"037",
"038"
],
"description": "用户在构建完成后能看到本次构建的总耗时统计",
"steps": [
"打开一个正在构建的项目页面 /projects/[id]/build,等待构建流程结束,预期:BuildProgress 组件底部出现「构建完成,总耗时 X 分 X 秒」的汇总信息,耗时从用户触发构建或重新构建时开始计算至最后一个 Feature QA 通过时结束"
],
"passes": true
},
{
"id": "041",
"category": "enhancement",
"priority": 5,
"dependencies": [
"039"
],
"description": "用户在 Dashboard 上能看到构建失败的项目卡片高亮提示,并可直接从卡片跳转至错误详情",
"steps": [
"打开 Dashboard 页面 /dashboard,找到状态为「失败」的项目卡片,预期:卡片边框呈红色高亮,卡片内显示「查看错误」链接,点击后跳转至 /projects/[id]/build 并自动滚动到错误信息区块"
],
"passes": true
},
{
"id": "042",
"category": "ux",
"priority": 6,
"dependencies": [
"038",
"040"
],
"description": "用户在触发重新构建前能看到上一次构建的失败摘要和耗时,帮助其决策是否重新构建",
"steps": [
"打开构建失败项目的构建页面 /projects/[id]/build,预期:「重新构建」按钮上方显示一个摘要卡片,内容包含上次构建失败的功能数量、失败原因分类(QA 失败 N 条 / 系统错误 N 条)以及上次构建耗时,摘要卡片在重新构建开始后自动隐藏"
],
"passes": true
},
{
"id": "043",
"category": "core",
"priority": 1,
"dependencies": [],
"description": "用户能在工具数据记录页面点击列头对数据按该字段进行升序或降序排序",
"steps": "打开 /tools/[toolId]/records 页面,点击任意列头,数据按该列升序排列,再次点击同一列头,数据切换为降序排列",
"passes": true
},
{
"id": "044",
"category": "core",
"priority": 2,
"dependencies": [
"043"
],
"description": "用户能在工具数据记录页面通过关键词输入框在前端实时过滤筛选匹配的数据记录",
"steps": "打开 /tools/[toolId]/records 页面,在搜索框输入关键词,记录列表实时只显示包含该关键词的行,清空输入后恢复全部记录",
"passes": true
},
{
"id": "045",
"category": "core",
"priority": 3,
"dependencies": [
"043"
],
"description": "用户能将当前工具的全部数据记录一键导出为 CSV 文件并下载到本地",
"steps": "打开 /tools/[toolId]/records 页面,点击「导出 CSV」按钮,浏览器自动下载包含所有字段和记录的 CSV 文件",
"passes": true
},
{
"id": "046",
"category": "core",
"priority": 4,
"dependencies": [
"043"
],
"description": "用户能在工具数据记录页面批量勾选多条记录并一次性将其删除",
"steps": "打开 /tools/[toolId]/records 页面,勾选一条或多条记录的复选框,点击「批量删除」按钮,确认后所选记录从列表中移除并从数据库中删除",
"passes": true
},
{
"id": "047",
"category": "enhancement",
"priority": 5,
"dependencies": [],
"description": "用户能在 Dashboard 的项目卡片上直接看到该工具已收集的数据记录总条数",
"steps": "打开 /dashboard 页面,查看任意工具卡片,卡片上显示该工具的数据记录总条数数值,条数为 0 时显示 0",
"passes": true
},
{
"id": "048",
"category": "core",
"priority": 1,
"dependencies": [],
"description": "用户能在工具页面通过开关切换工具的公开或私有状态",
"steps": "打开 /tools/[id] 页面,点击公开/私有切换开关,预期工具可见性状态立即更新并持久化到数据库",
"passes": true
},
{
"id": "049",
"category": "core",
"priority": 2,
"dependencies": [
"048"
],
"description": "用户无需登录即可直接访问公开工具并提交数据",
"steps": "在未登录状态下访问 /tools/[id](该工具为公开状态),填写表单并提交,预期提交成功且数据被记录",
"passes": true
},
{
"id": "050",
"category": "core",
"priority": 3,
"dependencies": [
"048"
],
"description": "用户未登录时访问私有工具会被自动跳转到登录页",
"steps": "在未登录状态下访问 /tools/[id](该工具为私有状态),预期页面自动重定向至 /login 并保留原始 URL 作为回跳参数",
"passes": true
},
{
"id": "051",
"category": "ux",
"priority": 4,
"dependencies": [
"048"
],
"description": "用户能在工具页面直观看到当前工具是公开还是私有的状态标识",
"steps": "打开 /tools/[id] 页面,预期页面顶部或标题区域显示「公开」或「私有」徽标图标及文字标识",
"passes": true
},
{
"id": "052",
"category": "ux",
"priority": 5,
"dependencies": [
"049",
"051"
],
"description": "用户能在公开工具页面一键复制该工具的分享链接",
"steps": "打开公开状态的 /tools/[id] 页面,点击「复制链接」按钮,预期完整分享 URL 被写入剪贴板并显示复制成功提示",
"passes": true
}
]