forked from aliyun/SimAI
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeature_list.json
More file actions
1474 lines (1474 loc) · 47.5 KB
/
Copy pathfeature_list.json
File metadata and controls
1474 lines (1474 loc) · 47.5 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
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"project": "SimAI-OXC",
"updated": "2026-06-24T00:00:00Z",
"summary": {
"done": 5,
"pending": 1,
"in_progress": 1,
"by_type": {
"refactor": 4,
"feature": 12,
"test": 3,
"bugfix": 17,
"unknown": 14
}
},
"active": [
{
"id": "F086",
"type": "feature",
"category": "decouple",
"description": "E2E decoupled test: add AS_DECOUPLED_OUTPUT env var, generate flow file, replay via ImportFlows, compare",
"status": "done",
"priority": "P0",
"files": [
"astra-sim-alibabacloud/astra-sim/system/MockNcclGroup.cc",
"astra-sim-alibabacloud/astra-sim/system/MockNcclGroup.h",
"astra-sim-alibabacloud/astra-sim/network_frontend/ns3/**",
"bin/*",
"scripts/build.sh",
"astra-sim-alibabacloud/extern/**",
"astra-sim-alibabacloud/extern/network_backend/ns3-interface/simulation/build/scratch/ns3.36.1-AstraSimNetwork-debug",
"*.txt",
"*.csv",
"*.conf",
".",
"/tmp/*.txt",
"/tmp/*.conf"
],
"verification_steps": [
"coupled total_time == decoupled total_time"
],
"passes": true,
"created_at": "2026-05-30T00:00:00Z",
"confidence": "HIGH: env var trigger + file replay, well-defined test",
"updated_at": "2026-05-30T09:32:36Z"
},
{
"id": "F087",
"type": "feature",
"category": "decouple",
"description": "AS_REPLAY_MODE env var to skip SimAI workload, enabling true decoupled NS3 replay via ImportFlows",
"status": "done",
"priority": "P0",
"files": [
"astra-sim-alibabacloud/astra-sim/network_frontend/ns3/AstraSimNetwork.cc",
"astra-sim-alibabacloud/astra-sim/network_frontend/ns3/entry.h",
"astra-sim-alibabacloud/extern/**",
".",
"*.txt",
"*.csv",
"*.conf",
"/tmp/*.txt",
"/tmp/*.conf"
],
"verification_steps": [
"replay mode: SimAI skipped, ImportFlows reads flow file, NS3 simulates",
"bytes sent/received match coupled run"
],
"passes": true,
"created_at": "2026-05-30T07:08:59Z",
"confidence": "HIGH: straightforward env var check in main()",
"updated_at": "2026-05-30T09:32:36Z"
},
{
"id": "F088",
"type": "test",
"category": "decouple",
"description": "E2E decoupled replay comparison: coupled vs replay NS3 bytes sent/received must match",
"status": "in_progress",
"priority": "P0",
"files": [
"astra-sim-alibabacloud/**",
"*.txt",
"*.csv",
"*.conf",
"/tmp/*",
"bin/*",
"scripts/*",
".",
"dashboard",
"server",
"dashboard/src/stores/network-store.ts"
],
"verification_steps": [
"coupled bytes sent/recv == replay bytes sent/recv per node"
],
"passes": true,
"created_at": "2026-05-30T07:08:59Z",
"confidence": "HIGH: compare sim_finish output",
"updated_at": "2026-05-30T09:32:36Z"
},
{
"id": "F089",
"type": "feature",
"category": "workload",
"description": "AICB LogItem CSV增加通信域ranks列+sidecar rank_mapping.csv, Python-only hybrid填充",
"status": "pending",
"priority": "P1",
"files": [
"aicb/**",
"aicb/log_analyzer/log.py",
"aicb/utils/rank_mapper.py",
"aicb/workload_generator/workload_generator.py",
"aicb/workload_generator/generate_megatron_workload.py",
"aicb/workload_generator/generate_deepspeed_stage1_2_workload.py",
"aicb/workload_generator/generate_deepspeed_stage3_workload.py",
"aicb/workload_generator/generate_collective_test.py",
"aicb/tests",
"aicb/tests/*",
"aicb/tests/verify_ranks.py",
"aicb/tests/test_rank_mapper.py",
"aicb/tests/test_logitem_ranks.py",
"aicb/visualize/generate.py",
"aicb/visualize/example.html",
"aicb/scripts/generate_per_rank_csv.py"
],
"verification_steps": [
"LogItem.ranks字段存在且CSV正确序列化",
"rank_mapper.get_rank_list_for_comm_group() 对tp/dp/pp/ep/all返回正确rank列表",
"所有generator创建的LogItem有非空ranks",
"mock model LogItem在dump时自动填充ranks+comm_group_size",
"sidecar _rank_mapping.csv写入正确的group分解",
"verify_ranks.py交叉校验CSV vs RankGenerator通过"
],
"passes": false,
"created_at": "2026-06-02T06:00:00Z",
"confidence": "HIGH: 3轮Architect+Critic审查通过, Python-only改动, 范围明确",
"updated_at": "2026-06-02T07:00:00Z"
},
{
"id": "F090",
"type": "refactor",
"category": "lld-v3-migration",
"description": "LLDP topology parsing pipeline v2→v3 migration: refactor 9 files (merger.py, ns3_emitter.py, edg_client.py, HomePage.tsx, lld_to_topology.py, lld.json, conftest.py, test_e2e_ns3_oxc.py) to support new LLDP v3.0.260530 format",
"status": "done",
"priority": "P0",
"phase": "phase3",
"files": [
"lld.json",
"server/edg/merger.py",
"server/edg/ns3_emitter.py",
"server/edg/edg_client.py",
"dashboard/src/pages/HomePage.tsx",
"scripts/lld_to_topology.py",
"server/edg/tests/conftest.py",
"server/edg/tests/test_e2e_ns3_oxc.py",
"astra-sim-alibabacloud/inputs/config/SimAI.conf",
"harness-lra-workflow",
"harness-lra-workflow/**",
"harness-lra-workflow.skill",
"COMPETITION_SUBMISSION.md",
"server/edg/tests/test_merger.py",
"example/aiob_data/gpu_compute_timing.txt",
"ncclFlowModel_EndToEnd.csv",
"/tmp/*",
"aicb/utils/utils.py",
"aicb/aicb.py",
"aicb/results/workload/**",
"aicb/*.py",
"aicb/workload_generator/**",
"aicb",
"."
],
"verification_steps": [
"python3 -c \"import json; lld=json.load(open(\"lld.json\")); assert lld[\"version\"]==\"v3.0.260530\"\"",
"cd server && python3 -m pytest edg/tests/ -v",
"cd dashboard && npx tsc --noEmit",
"python3 scripts/lld_to_topology.py lld.json --output-dir /tmp/topo_test",
"python3 server/edg/tests/test_e2e_ns3_oxc.py"
],
"passes": true,
"created_at": "2026-06-04T02:55:00Z",
"updated_at": "2026-06-08T00:00:00Z",
"confidence": "HIGH: 确定性字段重命名重构。v2-v3映射已在用户提供的JSON中明确:node_ip→node_id, a_node_ip→a_node_id, port_infos→port_id_list, port_name→port_id, server_type→chassis_topo。新增_chassis_to_npu_type()是简单split操作。无架构/算法/数据流变更。",
"confidence_reason": "确定性字段重命名重构。v2-v3映射已在用户提供的JSON中明确:node_ip→node_id, a_node_ip→a_node_id, port_infos→port_id_list, port_name→port_id, server_type→chassis_topo。新增_chassis_to_npu_type()是简单split操作。无架构/算法/数据流变更。"
},
{
"id": "F091",
"type": "feature",
"category": "edg-persistence",
"description": "EDG init data global persistence: migrate lld.json/init_crosses.json from per-session workspace to global EDG_DATA_ROOT/{topology_dir}/. wizard-store add zustand/persist for EDG graph data.",
"status": "done",
"priority": "P0",
"phase": "phase3",
"files": [
"server/config.py",
"server/edg/routes.py",
"dashboard/src/api/edg-api.ts",
"dashboard/src/pages/EdgPage.tsx",
"dashboard/src/stores/wizard-store.ts",
"/tmp/*",
"feature_list.json",
"progress.md",
"."
],
"verification_steps": [
"EDG init saves to global EDG_DATA_ROOT/{topology_dir}/",
"New session/workspace: baseline-graph loads without re-init",
"register-task loads from global store",
"wizard-store EDG graph data survives page refresh",
"Backward compatible: old workspace data still readable"
],
"passes": true,
"created_at": "2026-06-08T00:00:00Z",
"updated_at": "2026-06-08T00:00:00Z",
"confidence": "HIGH: 确定性存储迁移。根因明确(workspace session隔离),修复路径清晰(全局路径+topology_dir索引),改动范围可控(5文件)"
},
{
"id": "F092",
"type": "refactor",
"category": "naming",
"description": "Rename serverIps/server_ips to serverIds/server_ids: v3 lld server node_id is a name (superpod#0_server#0), not an IP. Keep server_ip in npu_match (external EDG protocol).",
"status": "done",
"priority": "P1",
"phase": "phase3",
"files": [
"dashboard/src/types/network.ts",
"dashboard/src/stores/network-store.ts",
"dashboard/src/api/edg-api.ts",
"dashboard/src/pages/HomePage.tsx",
"dashboard/src/pages/EdgPage.tsx",
"server/edg/routes.py",
"server/edg/merger.py",
"server/edg/tests/conftest.py",
"server/edg/tests/test_merger.py",
"server/edg/tests/test_e2e_ns3_oxc.py",
"dashboard/src/components/edg/EdgDiffGraph.tsx",
"feature_list.json",
"progress.md",
"."
],
"verification_steps": [
"tsc --noEmit passes",
"backend tests pass",
"E2E tests pass",
"npu_match server_ip field unchanged (external EDG contract)"
],
"passes": true,
"created_at": "2026-06-08T00:00:00Z",
"updated_at": "2026-06-08T00:00:00Z",
"confidence": "HIGH: 确定性重命名。搜索确认所有出现位置,npu_match server_ip 保留不改。"
},
{
"id": "F093",
"type": "feature",
"category": "compute-gap",
"description": "AIOB compute-time hardening for Megatron workload generator: replace bare args with self.args, populate grad_gather/grad_param_comm items with real AIOB times, fix final_column attention misidentification, add compute_time diagnostic logging",
"status": "in_progress",
"priority": "P0",
"files": [
"aicb/workload_generator/SimAI_training_workload_generator.py",
"aicb/utils/utils.py",
"server/simulation/workload_generator.py",
"server/simulation/workload_routes.py",
"example/workload_gpt13b_128g.txt",
"example/workload_analytical.txt"
],
"verification_steps": [
"workload_generate_aiob() runs without bare args global dependency (self.args used consistently)",
"grad_gather/grad_param_comm items have non-1 compute times from AIOB data",
"All layer items (attention_column, mlp_column, attention_row, mlp_row, embedding_layer) have real compute_times > 1",
"Regenerated workload_gpt13b_128g.txt has realistic compute gaps between layers",
"96 GPU simulation shows layers are staggered in time (not all comm firing simultaneously)"
],
"passes": false,
"created_at": "2026-06-24T00:00:00Z",
"confidence": "HIGH: well-defined fixes to already-working AIOB integration, root cause of compute_time=1 is stale workload file + fragile global args pattern",
"updated_at": "2026-06-24T00:00:00Z"
}
],
"done": [
{
"id": "F001",
"type": "feature",
"category": "workload",
"description": "Workload 配置与生成",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F002",
"type": "feature",
"category": "ranktable",
"description": "RankTable 配置与生成",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F003",
"type": "feature",
"category": "topology",
"description": "拓扑编辑器",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F004",
"type": "feature",
"category": "launch",
"description": "仿真启动配置",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F005",
"type": "feature",
"category": "visualization",
"description": "可视化面板(5 个标签页)",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F006",
"type": "feature",
"category": "integration",
"description": "端到端仿真流程(Workload -> RankTable -> Topology -> Launch -> Viz)",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F007",
"type": "bugfix",
"category": "robustness",
"description": "OXC HTTP 超时处理",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F015",
"type": "bugfix",
"category": "backend-safety",
"description": "全局单例线程安全修复",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F030",
"type": "bugfix",
"category": "backend-server",
"description": "Dashboard Process Service 参数契约修复(SimAI_analytical_oxc 子进程 255 退出)",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F031",
"type": "feature",
"category": "topology",
"description": "多 OXC 多组网拓扑发射支持 — merger.py 按 OXC domain 拆分拓扑,ns3 routes 生成多个 pod 拓扑文件",
"files": [
"server/edg/merger.py",
"server/edg/routes.py"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F032",
"type": "bugfix",
"category": "topology",
"description": "监控大屏移除 leaf-to-leaf OXC 交叉边,拓扑显示与 XML 原文完全一致",
"files": [
"dashboard/src/types/wizard.ts",
"dashboard/src/stores/wizard-store.ts",
"dashboard/src/pages/LaunchPage.tsx",
"server/process/process_service.py"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F033",
"type": "feature",
"category": "workload",
"description": "workload 生成集成 AIOB 真实 GPU compute timing(--comp_filepath + --aiob_enable)",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F034",
"type": "bugfix",
"category": "workload",
"description": "31204 compute_time=1 根因 — Dashboard workload 生成未传 AIOB 参数,需 --aiob_enable --comp_filepath",
"files": [
"server/simulation/workload_generator.py",
"server/simulation/workload_routes.py"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F035",
"type": "refactor",
"category": "portability",
"description": "Linux 移植 — 消除硬编码路径,CWD 依赖改为 PROJECT_ROOT 动态推导,绝对路径符号链接改为相对链接",
"files": [
"server/simulation/workload_routes.py",
"server/simulation/visualizer.py",
"scripts/build.sh",
"start_dashboard.sh",
"dashboard/start.sh",
"dashboard/stop.sh"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F036",
"type": "bugfix",
"category": "backend-server",
"description": "SimAI_analytical_oxc 路由修复 — binary 用 AstraParamParse CLI 但被错误分发到 OxcMain 分支,启动即 help 退出",
"files": [
"server/process/process_service.py",
"dashboard/src/pages/WorkloadPage.tsx",
"dashboard/src/api/simulation-api.ts"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F037",
"type": "bugfix",
"category": "workload",
"description": "comp_filepath 默认值解析失败 — inline import server.config 改为 __file__ 推导 PROJECT_ROOT",
"files": [
"server/simulation/workload_routes.py"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F038",
"type": "refactor",
"category": "frontend-refactor",
"description": "清理死代码 — 删除 TopologyPage, WizardStepper, debug tests, wizard.ts 僵尸类型",
"files": [
"dashboard/src/types/wizard.ts",
"dashboard/src/pages/TopologyPage.tsx",
"dashboard/src/components/wizard/WizardStepper.tsx",
"dashboard/tests/e2e/debug/"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F039",
"type": "bugfix",
"category": "infra",
"description": "start_dashboard.sh 漏洞 — 不检查旧进程就启动,导致旧 Flask 持续运行旧代码,重启后 fix 不生效",
"files": [
"start_dashboard.sh"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F040",
"type": "bugfix",
"category": "backend-results",
"description": "结果分析页面无法选中 analytical 任务 — _extract_result_prefix 取首个 -r 而非末个,且 process_service 重复加 -r",
"files": [
"server/simulation/results_routes.py",
"server/process/process_service.py"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F041",
"type": "feature",
"category": "results",
"description": "仿真结果命名全局唯一且体现任务特征 — frontend 用 model-tpX-ppY-dpZ-gN-ts 格式,后端 fallback 用 sim_result_ts",
"files": [
"server/process/process_service.py",
"dashboard/src/pages/LaunchPage.tsx",
"dashboard/src/pages/WorkloadPage.tsx"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F042",
"type": "bugfix",
"category": "backend-cpp",
"description": "Sys::generate_collective() size=0 死锁根因 — 修复 0 字节 EndToEnd.csv 和 Linux OOM Kill",
"files": [
"astra-sim-alibabacloud/astra-sim/system/Sys.cc"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F043",
"type": "bugfix",
"category": "backend-results",
"description": "ncclFlowModel_EndToEnd.csv 多仿真互相覆盖 + 按 prefix 匹配",
"files": [
"server/process/process_service.py",
"server/simulation/results_routes.py"
],
"passes": true,
"verification_steps": [
"simulation 结束后按 result_prefix 重命名 EndToEnd.csv",
"同一 workspace 多任务各自指向自己的 CSV"
]
},
{
"id": "F044",
"type": "feature",
"category": "frontend-launch",
"description": "LaunchPage + WorkloadPage 暴露全部参数 — overlap/带宽/vpp/ga",
"files": [
"dashboard/src/types/wizard.ts",
"dashboard/src/stores/wizard-store.ts",
"dashboard/src/pages/LaunchPage.tsx",
"server/simulation/workload_generator.py",
"server/simulation/workload_routes.py",
"dashboard/src/api/simulation-api.ts",
"dashboard/src/pages/WorkloadPage.tsx"
],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "F045",
"type": "bugfix",
"category": "backend-process",
"description": "NS3 并发防护 + is_ns3 顺序 fix — 同一 workspace 禁止同时跑两个 NS3 仿真",
"priority": "P0",
"files": [
"server/process/process_service.py"
],
"verification_steps": [
"同一 workspace 已有 NS3 运行时第二次 launch 被拦截",
"ns3 launch works"
],
"passes": true,
"notes": "NS3 hardcodes ncclFlowModel_ 输出路径,并发必然覆盖"
},
{
"id": "F046",
"type": "bugfix",
"category": "topology",
"description": "修复 EDG NS3 拓扑生成:GPU→Leaf 链路改为 NVSwitch→Leaf,消除 intra-server TP 通信走 NIC Switch 的 ECMP 问题",
"priority": "P0",
"phase": "phase1",
"verification_steps": [
"重新生成 EDG 拓扑,确认 GPU 不直连 Leaf switch",
"运行 NS3 仿真,确认 Expose TP comm 占比 < 10%",
"确认跨 server 通信路径正常(NVSwitch→Leaf→Leaf→NVSwitch)"
],
"passes": true,
"created_at": "2026-04-30T14:01:17.264120",
"updated_at": "2026-04-30T06:29:37Z"
},
{
"id": "F047",
"type": "feature",
"category": "topology",
"description": "GPU 直连 Leaf — emitter 为每个 GPU 生成独立 Leaf uplink,同时保留 NVSwitch intra-server 路径",
"priority": "P0",
"verification_steps": [
"GPU↔NVSwitch=32 + GPU↔Leaf=32 + NVSwitch↔Leaf=4 + Leaf↔Leaf=6, total=74 links ✓",
"每 GPU 有独立 Leaf uplink, cross-server 400Gbps/GPU ✓",
"intra TP: GPU→NVSwitch→GPU (2400Gbps) ✓",
"NS3 仿真通过, 101/101 测试全过 ✓"
],
"created_at": "2026-04-30T07:40:00Z",
"updated_at": "2026-04-30T07:45:00Z",
"passes": true
},
{
"id": "T001",
"category": "test-backend",
"description": "仿真模式冒烟测试矩阵(analytical/NS3 × OXC on/off)",
"priority": "P0",
"type": "test",
"verification_steps": [
"analytical 模式冒烟 ✓ (2层 workload, 8 GPU, 0.5s)",
"analytical_oxc 模式冒烟 ✓ (OXC 禁用回退)",
"NS3 模式冒烟 ✓ (Spectrum-X topology, local config)",
"NS3_oxc 模式冒烟 ✓"
],
"created_at": "2026-04-30T07:25:00Z",
"updated_at": "2026-04-30T07:35:00Z",
"passes": true
},
{
"id": "T021",
"type": "test",
"category": "test-automation",
"description": "pytest 基础设施 (pyproject.toml + conftest.py)",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "T023",
"type": "bugfix",
"category": "bugfix",
"description": "Fix workload dumper emitting literal 'None' for compute_time, which corrupts C++ ifstream parse and drops all layers after the first failure",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "T024",
"type": "bugfix",
"category": "enhancement",
"description": "结果分析页分页 + NS3 OXC 启动参数修复",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "T025",
"type": "bugfix",
"category": "bugfix",
"description": "NS3 OXC 结果可观测:csv 落到 workspace;结果页显示全部 finished 任务;ProcessList fail-loud",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "T026",
"type": "bugfix",
"category": "bugfix",
"description": "结果页 task label 用 workload 名而非 ncclFlowModel_ 前缀;0 字节 EndToEnd.csv 视为无结果",
"files": [],
"passes": true,
"verification_steps": [
"verified in session"
]
},
{
"id": "T027",
"type": "test",
"category": "test-cleanup",
"description": "清理过时测试:删除 TestApiClientSingleUser/TestDeployScripts/旧 GUI 语法检查,修复 bin/ 符号链接冲突",
"priority": "P0",
"verification_steps": [
"pytest 76 test 全部通过",
"lra-test.sh backend + tsc 阶段通过"
],
"passes": true,
"created_at": "2026-04-30T07:00:00Z",
"updated_at": "2026-04-30T07:04:15Z"
},
{
"id": "F048",
"type": "refactor",
"category": "naming",
"description": "全局命名调整: GPU→NPU, NVLink→服务器内带宽, 型号 A2(200G)/A3A5A6(400G)",
"priority": "P0",
"verification_steps": [
"C++ comments and identifiers use NPU not GPU",
"ns3_emitter NPU_INTRA_BW_MAP has A2(200G)/A3A5A6(400G)",
"common.h supports new GPU types"
],
"passes": true,
"updated_at": "2026-05-07T07:53:33Z"
},
{
"id": "F049",
"type": "bugfix",
"category": "results",
"description": "Dashboard 所有任务结果显示同一旧文件:_find_ns3_result_files 未按进程匹配各自结果文件",
"priority": "P0",
"verification_steps": [
"Flask 重启加载新 results_routes.py",
"dashboard /results 页面每个任务显示各自的结果文件,不再全部相同",
"最新任务文件名为 sim_result_1778138950 而非 1777446519"
],
"passes": true,
"updated_at": "2026-05-07T08:18:42Z"
},
{
"id": "F063",
"type": "bugfix",
"category": "lra",
"description": "Fix lra-mark-dirty.py: use 3-format parser from lra_common, respect status field in active items",
"files": [
"scripts/lra-mark-dirty.py"
],
"status": "done",
"priority": "P0",
"verification_steps": [
"Dirty marker finds correct in_progress feature",
"Done features in active[] not marked as in_progress"
],
"passes": true
},
{
"id": "T028",
"type": "test",
"category": "e2e",
"description": "NS3 full-mesh end-to-end dashboard launch verification (2-layer workload)",
"files": [
"dashboard/tests/e2e/ns3-fullmesh-launch.spec.ts",
"dashboard/",
"scripts/",
"bin/**"
],
"status": "done",
"verification_steps": [
"Playwright test logs in, generates 2-layer workload, creates full-mesh topology, launches NS3 via dashboard",
"Simulation completes within 4 minutes",
"Results page shows end-to-end CSV with communication/compute breakdown"
],
"passes": true
},
{
"id": "F055",
"type": "refactor",
"category": "lra",
"description": "LRA gate: 禁止无 files scope 的 in_progress feature,杜绝临时改 in_progress 绕过创建 feature",
"status": "done",
"priority": "P0",
"files": [
"scripts/lra-gate.py",
"scripts/lra-mark-dirty.py",
"scripts/lra-stop.py",
"scripts/lra-test.sh",
"install-lra.sh"
],
"verification_steps": [
"gate block 无 scope 的 in_progress ✓",
"dirty marker 不在 scope 则不标记 ✓",
"stop hook done-feature immutability ✓",
"install-lra.sh cp-based 最新脚本 ✓"
],
"passes": true
},
{
"id": "F056",
"type": "refactor",
"category": "lra",
"description": "LRA: progress.md historical entries immutability",
"status": "done",
"priority": "P0",
"files": [
"scripts/lra-stop.py",
"scripts/lra-test.sh",
"install-lra.sh"
],
"verification_steps": [
"old progress entries tampered → BLOCK ✓",
"new entries appended → PASS ✓"
],
"passes": true
},
{
"id": "F057",
"type": "bugfix",
"category": "lra",
"description": "uninstall-lra.sh missing .lra_done_hash cleanup",
"status": "done",
"priority": "P0",
"files": [
"uninstall-lra.sh"
],
"verification_steps": [
"uninstall removes .lra_done_hash ✓"
],
"passes": true
},
{
"id": "F058",
"type": "test",
"category": "lra",
"description": "Verify install/uninstall round-trip covers all new files",
"status": "done",
"priority": "P0",
"files": [
"install-lra.sh",
"uninstall-lra.sh"
],
"verification_steps": [
"install + uninstall --all round-trip clean ✓"
],
"passes": true
},
{
"id": "F059",
"type": "bugfix",
"category": "lra",
"description": "install-lra.sh: detect missing source scripts, print LRA_SRC hint",
"status": "done",
"priority": "P0",
"files": [
"install-lra.sh"
],
"verification_steps": [
"self-contained: works on any machine without cp ✓"
],
"passes": true
},
{
"id": "F060",
"type": "bugfix",
"category": "lra",
"description": "Bug-triage rule install at project level, not global",
"status": "done",
"priority": "P0",
"files": [
"install-lra.sh",
"uninstall-lra.sh"
],
"verification_steps": [
"rule installed in .claude/rules/common/ not ~/.claude/ ✓"
],
"passes": true
},
{
"id": "F061",
"type": "feature",
"category": "lra",
"description": "LRA Loop: autonomous execution engine with claude -p for 5h unattended runs",
"status": "done",
"priority": "P0",
"files": [
"scripts/lra-loop.sh",
"scripts/lra-gate.py",
"scripts/lra-stop.py",
"install-lra.sh"
],
"verification_steps": [
"gate: phase-aware (empty=Phase1, all-done, pending) ✓",
"stop: hollow feature detection ✓",
"CLAUDE.md: two-phase workflow ✓",
"install-lra.sh synced ✓"
],
"passes": true
},
{
"id": "F062",
"type": "refactor",
"category": "lra",
"description": "Extract lra_common.py: shared parser, find_root, is_allowed, parse_ts, compute_done_hash, compute_progress_hash",
"files": [
"scripts/lra_common.py",
"scripts/lra-gate.py",
"scripts/lra-stop.py",
"scripts/lra-mark-dirty.py",
"scripts/lra-test.sh",
"scripts/lra-context-save.sh",
"scripts/lra-loop.sh",
"init.sh",
"install-lra.sh",
"uninstall-lra.sh"
],
"status": "done",
"priority": "P0",
"verification_steps": [
"All 8+ components import from lra_common",
"No duplicated parser logic remains"
],
"passes": true,
"created_at": "2026-05-13T03:54:13Z"
},
{
"id": "F067",
"type": "bugfix",
"category": "workload",
"description": "Dashboard workload generator: aiob_enable defaults to False even when comp_filepath exists, causing 99% comm ratio",
"status": "done",
"priority": "P0",
"files": [
"server/simulation/workload_routes.py"
],
"verification_steps": [
"comp_filepath exists → aiob_enable auto-enabled",
"workload has real compute times from AIOB cache"
],
"passes": true,
"created_at": "2026-05-13T12:00:00Z"
},
{
"id": "F068",
"type": "bugfix",
"category": "dashboard",
"description": "Remove simulation architecture diagram box from homepage",
"status": "done",
"priority": "P3",
"files": [
"dashboard/src/pages/HomePage.tsx"
],
"verification_steps": [
"HomePage no longer shows 仿真架构 box"
],
"passes": true,
"created_at": "2026-05-13T12:00:00Z"
},
{
"id": "F069",
"type": "bugfix",
"category": "lra",
"description": "Update install-lra.sh and uninstall-lra.sh to reflect all session changes",
"status": "done",
"priority": "P2",
"files": [
"install-lra.sh",
"uninstall-lra.sh"
],
"verification_steps": [
"install in fresh repo works",
"uninstall cleans all"
],
"passes": true,
"created_at": "2026-05-13T12:00:00Z"
},
{
"id": "F070",
"type": "bugfix",
"category": "lra",
"description": "Sync install-lra.sh and uninstall-lra.sh with confidence enforcement",
"status": "done",
"priority": "P2",
"files": [
"install-lra.sh"
],
"verification_steps": [
"install-lra.sh embeds confidence gate"
],
"passes": true,
"created_at": "2026-05-13T12:00:00Z",
"confidence": "HIGH: pure sync, no logic change"
},
{