dsh-issue2pr 0.1.0

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.
@@ -0,0 +1,4 @@
1
+ # dsh-issue2pr bundle patch:向宿主 cordis 注册 node 半
2
+ - insert:
3
+ - id: issue2pr
4
+ name: dsh-issue2pr
@@ -0,0 +1,59 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 420" role="img" aria-labelledby="bt">
2
+ <title id="bt">dsh-issue2pr — 从一条 Issue 到一份被合并的 PR,中间不能跳步</title>
3
+ <!-- 纸面档案底色(沿用 issue2pr-research.html 的设计语言) -->
4
+ <rect width="1200" height="420" fill="#F3EFE6"/>
5
+ <rect x="14" y="14" width="1172" height="392" fill="none" stroke="#DCD6C7" stroke-width="1.5"/>
6
+ <rect x="20" y="20" width="1160" height="380" fill="none" stroke="#E8E2D3" stroke-width="1"/>
7
+
8
+ <!-- 眉题 -->
9
+ <rect x="48" y="56" width="9" height="9" fill="#2A3F7A"/>
10
+ <text x="66" y="65" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="12.5" letter-spacing="3.5" fill="#2A3F7A">EVIDENCE-CHAINED · ISSUE → PULL REQUEST</text>
11
+
12
+ <!-- 标题与口号 -->
13
+ <text x="46" y="132" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="58" fill="#171820">dsh-issue2pr</text>
14
+ <text x="48" y="172" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="20" fill="#2B2D3A">从一条 Issue 到一份被合并的 PR,中间不能跳步。</text>
15
+ <text x="48" y="198" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="13.5" fill="#6F6B78">An 11-stage, review-gated pipeline that turns an issue into a mergeable, evidence-chained pull request.</text>
16
+
17
+ <!-- 档案印章 -->
18
+ <g transform="translate(1000 130) rotate(-7)">
19
+ <rect x="-84" y="-27" width="168" height="54" rx="6" fill="#F3E1DC" fill-opacity="0.6" stroke="#A6453A" stroke-width="2.5"/>
20
+ <rect x="-77" y="-20" width="154" height="40" rx="4" fill="none" stroke="#A6453A" stroke-width="1.2"/>
21
+ <text x="0" y="6" text-anchor="middle" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="700" font-size="15" letter-spacing="5" fill="#A6453A">每一步可审查</text>
22
+ </g>
23
+
24
+ <!-- 主流程条:Issue → P1..P11 → Pull Request -->
25
+ <g font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="700" font-size="13.5">
26
+ <rect x="48" y="258" width="92" height="36" rx="18" fill="#FBF8F1" stroke="#171820" stroke-width="1.8"/>
27
+ <text x="94" y="281" text-anchor="middle" fill="#171820">Issue</text>
28
+ <path d="M146 276 H164" stroke="#8A8578" stroke-width="1.8" marker-end="url(#mi2p-arrow)"/>
29
+ <!-- P1..P11(P5/P6/P9/P11 为复核门:藏青底;P10 失败旁路:砖红虚线) -->
30
+ <g font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="14">
31
+ <rect x="172" y="258" width="56" height="36" rx="7" fill="#FFFFFF" stroke="#C9C2B2" stroke-width="1.3"/><text x="200" y="281" text-anchor="middle" fill="#2B2D3A">P1</text>
32
+ <rect x="241" y="258" width="56" height="36" rx="7" fill="#FFFFFF" stroke="#C9C2B2" stroke-width="1.3"/><text x="269" y="281" text-anchor="middle" fill="#2B2D3A">P2</text>
33
+ <rect x="310" y="258" width="56" height="36" rx="7" fill="#FFFFFF" stroke="#C9C2B2" stroke-width="1.3"/><text x="338" y="281" text-anchor="middle" fill="#2B2D3A">P3</text>
34
+ <rect x="379" y="258" width="56" height="36" rx="7" fill="#FFFFFF" stroke="#C9C2B2" stroke-width="1.3"/><text x="407" y="281" text-anchor="middle" fill="#2B2D3A">P4</text>
35
+ <rect x="448" y="258" width="56" height="36" rx="7" fill="#2A3F7A" stroke="#15214A" stroke-width="1"/><text x="476" y="281" text-anchor="middle" fill="#FFFFFF">P5</text>
36
+ <rect x="517" y="258" width="56" height="36" rx="7" fill="#2A3F7A" stroke="#15214A" stroke-width="1"/><text x="545" y="281" text-anchor="middle" fill="#FFFFFF">P6</text>
37
+ <rect x="586" y="258" width="56" height="36" rx="7" fill="#FFFFFF" stroke="#C9C2B2" stroke-width="1.3"/><text x="614" y="281" text-anchor="middle" fill="#2B2D3A">P7</text>
38
+ <rect x="655" y="258" width="56" height="36" rx="7" fill="#FFFFFF" stroke="#C9C2B2" stroke-width="1.3"/><text x="683" y="281" text-anchor="middle" fill="#2B2D3A">P8</text>
39
+ <rect x="724" y="258" width="56" height="36" rx="7" fill="#2A3F7A" stroke="#15214A" stroke-width="1"/><text x="752" y="281" text-anchor="middle" fill="#FFFFFF">P9</text>
40
+ <rect x="793" y="258" width="56" height="36" rx="7" fill="#F3E1DC" stroke="#A6453A" stroke-width="1.3" stroke-dasharray="5 4"/><text x="821" y="281" text-anchor="middle" fill="#7C362E">P10</text>
41
+ <rect x="862" y="258" width="56" height="36" rx="7" fill="#2A3F7A" stroke="#15214A" stroke-width="1"/><text x="890" y="281" text-anchor="middle" fill="#FFFFFF">P11</text>
42
+ </g>
43
+ <path d="M922 276 H940" stroke="#8A8578" stroke-width="1.8" marker-end="url(#mi2p-arrow)"/>
44
+ <rect x="946" y="258" width="106" height="36" rx="18" fill="#FBF8F1" stroke="#171820" stroke-width="1.8"/>
45
+ <text x="999" y="281" text-anchor="middle" fill="#171820">Pull Request</text>
46
+ </g>
47
+ <text x="597" y="322" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11.5" fill="#6F6B78">深色底 = 人工复核门(P5 · P6 · P9 · P11)&#160;&#160;&#160;虚线 = 失败旁路(P10 · 仅失败时执行)</text>
48
+
49
+ <!-- 分隔线与五条不变命题 -->
50
+ <line x1="48" y1="352" x2="1152" y2="352" stroke="#DCD6C7" stroke-width="1"/>
51
+ <text x="600" y="388" text-anchor="middle" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15.5" letter-spacing="1" fill="#171820">不可跳步 · 可定位 · 可回滚 · 可审查 · 可复现</text>
52
+ <text x="1152" y="388" text-anchor="end" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#6F6B78">ARTIFACTS 01–11</text>
53
+
54
+ <defs>
55
+ <marker id="mi2p-arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
56
+ <path d="M0,0 L10,5 L0,10 z" fill="#8A8578"/>
57
+ </marker>
58
+ </defs>
59
+ </svg>
@@ -0,0 +1,175 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1360 830" role="img" aria-labelledby="pt">
2
+ <title id="pt">dsh-issue2pr 11 阶段流水线:主流程 P1→P9→P11,复核门 P5/P6/P9/P11,失败旁路 P10</title>
3
+ <rect width="1360" height="830" fill="#F3EFE6"/>
4
+
5
+ <!-- ===== 页头 ===== -->
6
+ <rect x="48" y="46" width="9" height="9" fill="#2A3F7A"/>
7
+ <text x="66" y="55" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="12" letter-spacing="2.5" fill="#2A3F7A">PIPELINE · MAIN FLOW P1→P9→P11 + FAILURE BYPASS P10</text>
8
+ <text x="48" y="96" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="700" font-size="25" fill="#171820">11 阶段流水线:每一步有自己的输入契约与产物</text>
9
+ <text x="48" y="124" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="13" fill="#6F6B78">触发源(GitHub / GitLab Issue 或本地需求文档)从 P1 进入;关键阶段停下等人工复核,任一阶段失败进入 P10 分类。</text>
10
+
11
+ <!-- 图例 -->
12
+ <g font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="12" fill="#2B2D3A">
13
+ <path d="M760 94 H792" stroke="#8A8578" stroke-width="1.8" marker-end="url(#i2p-ink)"/>
14
+ <text x="802" y="98">主流程</text>
15
+ <path d="M876 94 H908" stroke="#A6453A" stroke-width="1.8" stroke-dasharray="6 5" marker-end="url(#i2p-warn)"/>
16
+ <text x="918" y="98">失败旁路</text>
17
+ <rect x="990" y="83" width="58" height="20" rx="10" fill="#2A3F7A"/>
18
+ <text x="1019" y="97" text-anchor="middle" font-size="10.5" fill="#FFFFFF">复核门</text>
19
+ <text x="1056" y="98">需人工通过</text>
20
+ <text x="1160" y="98" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">01–11 产物</text>
21
+ </g>
22
+
23
+ <!-- ===== 阶段列标题 ===== -->
24
+ <g font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="12" letter-spacing="2" fill="#2A3F7A">
25
+ <text x="60" y="160">01 理解 · UNDERSTAND</text>
26
+ <text x="390" y="160">02 规划执行 · PLAN &amp; ACT</text>
27
+ <text x="720" y="160">03 验证 · VERIFY</text>
28
+ <text x="1050" y="160">04 交付 · DELIVER</text>
29
+ </g>
30
+
31
+ <!-- ===== 连接线(画在卡片下层) ===== -->
32
+ <g stroke="#8A8578" stroke-width="1.8" fill="none">
33
+ <!-- 列内垂直 -->
34
+ <path d="M170 262 V290" marker-end="url(#i2p-ink)"/>
35
+ <path d="M170 388 V416" marker-end="url(#i2p-ink)"/>
36
+ <path d="M170 514 V542" marker-end="url(#i2p-ink)"/>
37
+ <path d="M500 262 V290" marker-end="url(#i2p-ink)"/>
38
+ <path d="M500 388 V416" marker-end="url(#i2p-ink)"/>
39
+ <path d="M830 262 V290" marker-end="url(#i2p-ink)"/>
40
+ <!-- 跨列折线(进入下一列首行) -->
41
+ <path d="M280 594 H335 V216 H384" marker-end="url(#i2p-ink)"/>
42
+ <path d="M610 468 H665 V216 H714" marker-end="url(#i2p-ink)"/>
43
+ <path d="M940 342 H995 V216 H1044" marker-end="url(#i2p-ink)"/>
44
+ <!-- P11 → Gate 评测 -->
45
+ <path d="M1160 262 V290" marker-end="url(#i2p-ink)"/>
46
+ </g>
47
+ <!-- 失败旁路:任一阶段失败 → P10 -->
48
+ <path d="M830 388 V644" stroke="#A6453A" stroke-width="1.8" fill="none" stroke-dasharray="6 5" marker-end="url(#i2p-warn)"/>
49
+ <text x="844" y="560" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="11.5" fill="#A6453A">任一阶段失败</text>
50
+
51
+ <!-- ===== 阶段卡片 ===== -->
52
+ <g>
53
+ <!-- P1 -->
54
+ <rect x="60" y="170" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#D8D1BF" stroke-width="1.5"/>
55
+ <rect x="74" y="184" width="44" height="24" rx="5" fill="#2A3F7A"/>
56
+ <text x="96" y="201" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P1</text>
57
+ <text x="74" y="232" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">IssueAnalyzer</text>
58
+ <text x="74" y="251" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">01-issue-analysis.json</text>
59
+ <!-- P2 -->
60
+ <rect x="60" y="296" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#D8D1BF" stroke-width="1.5"/>
61
+ <rect x="74" y="310" width="44" height="24" rx="5" fill="#2A3F7A"/>
62
+ <text x="96" y="327" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P2</text>
63
+ <text x="74" y="358" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">Search Layer</text>
64
+ <text x="74" y="377" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">02-search-candidates.json</text>
65
+ <!-- P3 -->
66
+ <rect x="60" y="422" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#D8D1BF" stroke-width="1.5"/>
67
+ <rect x="74" y="436" width="44" height="24" rx="5" fill="#2A3F7A"/>
68
+ <text x="96" y="453" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P3</text>
69
+ <text x="74" y="484" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">Code Understanding</text>
70
+ <text x="74" y="503" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">03-code-understanding.md</text>
71
+ <!-- P4 -->
72
+ <rect x="60" y="548" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#D8D1BF" stroke-width="1.5"/>
73
+ <rect x="74" y="562" width="44" height="24" rx="5" fill="#2A3F7A"/>
74
+ <text x="96" y="579" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P4</text>
75
+ <text x="74" y="610" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">Hypothesis</text>
76
+ <text x="74" y="629" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">04-hypotheses.json</text>
77
+
78
+ <!-- P5(复核门) -->
79
+ <rect x="390" y="170" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#2A3F7A" stroke-width="1.8"/>
80
+ <rect x="404" y="184" width="44" height="24" rx="5" fill="#2A3F7A"/>
81
+ <text x="426" y="201" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P5</text>
82
+ <rect x="544" y="186" width="52" height="20" rx="10" fill="#2A3F7A"/>
83
+ <text x="570" y="200" text-anchor="middle" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="10.5" fill="#FFFFFF">复核门</text>
84
+ <text x="404" y="232" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">Planner · TaskGraph</text>
85
+ <text x="404" y="251" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">05-task-graph.json</text>
86
+ <!-- P6(复核门) -->
87
+ <rect x="390" y="296" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#2A3F7A" stroke-width="1.8"/>
88
+ <rect x="404" y="310" width="44" height="24" rx="5" fill="#2A3F7A"/>
89
+ <text x="426" y="327" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P6</text>
90
+ <rect x="544" y="312" width="52" height="20" rx="10" fill="#2A3F7A"/>
91
+ <text x="570" y="326" text-anchor="middle" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="10.5" fill="#FFFFFF">复核门</text>
92
+ <text x="404" y="358" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">代码优化(多智能体)</text>
93
+ <text x="404" y="377" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">06-implementation/</text>
94
+ <!-- P7 -->
95
+ <rect x="390" y="422" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#D8D1BF" stroke-width="1.5"/>
96
+ <rect x="404" y="436" width="44" height="24" rx="5" fill="#2A3F7A"/>
97
+ <text x="426" y="453" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P7</text>
98
+ <text x="404" y="484" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">Patch Pipeline</text>
99
+ <text x="404" y="503" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">ledger/patch-ledger.jsonl</text>
100
+
101
+ <!-- P8 -->
102
+ <rect x="720" y="170" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#D8D1BF" stroke-width="1.5"/>
103
+ <rect x="734" y="184" width="44" height="24" rx="5" fill="#2A3F7A"/>
104
+ <text x="756" y="201" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P8</text>
105
+ <text x="734" y="232" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">TestRunner</text>
106
+ <text x="734" y="251" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">07-test-report.json</text>
107
+ <!-- P9(复核门) -->
108
+ <rect x="720" y="296" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#2A3F7A" stroke-width="1.8"/>
109
+ <rect x="734" y="310" width="44" height="24" rx="5" fill="#2A3F7A"/>
110
+ <text x="756" y="327" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P9</text>
111
+ <rect x="874" y="312" width="52" height="20" rx="10" fill="#2A3F7A"/>
112
+ <text x="900" y="326" text-anchor="middle" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="10.5" fill="#FFFFFF">复核门</text>
113
+ <text x="734" y="358" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">Reviewer</text>
114
+ <text x="734" y="377" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">08-review-report.json</text>
115
+
116
+ <!-- P11(复核门) -->
117
+ <rect x="1050" y="170" width="220" height="92" rx="10" fill="#FFFFFF" stroke="#2A3F7A" stroke-width="1.8"/>
118
+ <rect x="1064" y="184" width="50" height="24" rx="5" fill="#2A3F7A"/>
119
+ <text x="1089" y="201" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P11</text>
120
+ <rect x="1204" y="186" width="52" height="20" rx="10" fill="#2A3F7A"/>
121
+ <text x="1230" y="200" text-anchor="middle" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="10.5" fill="#FFFFFF">复核门</text>
122
+ <text x="1064" y="232" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="15" fill="#171820">PRBuilder + Eval</text>
123
+ <text x="1064" y="251" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">10-pr-description.md</text>
124
+
125
+ <!-- Gate 六项评测 -->
126
+ <rect x="1050" y="296" width="220" height="180" rx="10" fill="#FBF8F1" stroke="#D8D1BF" stroke-width="1.5"/>
127
+ <text x="1064" y="320" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="11.5" fill="#2A3F7A">GATE 六项评测</text>
128
+ <text x="1064" y="336" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="10.5" fill="#A07A1F">11-eval-report.json</text>
129
+ <g font-size="11.5" fill="#2B2D3A" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif">
130
+ <text x="1064" y="360" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="10.5" fill="#2A3F7A">ROOT</text><text x="1112" y="360">根因有证据</text>
131
+ <text x="1064" y="380" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="10.5" fill="#2A3F7A">PATCH</text><text x="1112" y="380">干净应用</text>
132
+ <text x="1064" y="400" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="10.5" fill="#2A3F7A">TEST</text><text x="1112" y="400">无回归</text>
133
+ <text x="1064" y="420" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="10.5" fill="#2A3F7A">DIFF</text><text x="1112" y="420">可审查</text>
134
+ <text x="1064" y="440" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="10.5" fill="#2A3F7A">DESC</text><text x="1112" y="440">说明忠实</text>
135
+ <text x="1064" y="460" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="10.5" fill="#2A3F7A">ACCEPT</text><text x="1112" y="460">门控通过</text>
136
+ </g>
137
+
138
+ <!-- P10 失败旁路(位于 P8/P9 正下方) -->
139
+ <rect x="720" y="650" width="220" height="118" rx="10" fill="#F3E1DC" stroke="#A6453A" stroke-width="1.6" stroke-dasharray="6 5"/>
140
+ <rect x="734" y="664" width="44" height="24" rx="5" fill="#A6453A"/>
141
+ <text x="756" y="681" text-anchor="middle" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-weight="700" font-size="13" fill="#FFFFFF">P10</text>
142
+ <text x="734" y="710" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-weight="600" font-size="14.5" fill="#7C362E">失败分类 · 六类归因</text>
143
+ <text x="734" y="729" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">09-failure-analysis.json</text>
144
+ <g font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="10.5" fill="#7C362E">
145
+ <rect x="734" y="740" width="58" height="19" rx="9.5" fill="#FFFFFF" stroke="#A6453A" stroke-width="1"/><text x="763" y="753" text-anchor="middle">重跑</text>
146
+ <rect x="800" y="740" width="58" height="19" rx="9.5" fill="#FFFFFF" stroke="#A6453A" stroke-width="1"/><text x="829" y="753" text-anchor="middle">回滚</text>
147
+ <rect x="866" y="740" width="58" height="19" rx="9.5" fill="#FFFFFF" stroke="#A6453A" stroke-width="1"/><text x="895" y="753" text-anchor="middle">转人工</text>
148
+ </g>
149
+ <text x="390" y="690" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="12" fill="#6F6B78">v1 仅落盘分类与建议动作后停下,不自动执行;</text>
150
+ <text x="390" y="710" font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="12" fill="#6F6B78">重跑 / 回滚 / 转人工由人工在运行页确认触发。</text>
151
+ </g>
152
+
153
+ <!-- ===== 底部图例 ===== -->
154
+ <g font-family="'Inter','Segoe UI','PingFang SC','Microsoft YaHei',sans-serif" font-size="12" fill="#2B2D3A">
155
+ <path d="M48 786 H80" stroke="#8A8578" stroke-width="1.8" marker-end="url(#i2p-ink)"/>
156
+ <text x="90" y="790">主流程推进</text>
157
+ <path d="M180 786 H212" stroke="#A6453A" stroke-width="1.8" stroke-dasharray="6 5" marker-end="url(#i2p-warn)"/>
158
+ <text x="222" y="790">失败旁路(仅失败时)</text>
159
+ <rect x="384" y="777" width="52" height="18" rx="9" fill="#2A3F7A"/>
160
+ <text x="410" y="790" text-anchor="middle" font-size="10.5" fill="#FFFFFF">复核门</text>
161
+ <text x="444" y="790">人工复核点</text>
162
+ <text x="540" y="790" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11" fill="#A07A1F">07-test-report.json</text>
163
+ <text x="668" y="790">= 该阶段落盘产物(可独立审查、可打回重做)</text>
164
+ </g>
165
+ <text x="48" y="816" font-family="'JetBrains Mono','SFMono-Regular',Consolas,Menlo,monospace" font-size="11.5" fill="#6F6B78">reviewMode:every=每阶段复核 · key-only=仅 P5/P6/P9/P11 · auto=全自动&#160;&#160;|&#160;&#160;P6 执行模式:builtin=内置多智能体 · session=外部会话 · claude=委托 Claude Code CLI</text>
166
+
167
+ <defs>
168
+ <marker id="i2p-ink" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
169
+ <path d="M0,0 L10,5 L0,10 z" fill="#8A8578"/>
170
+ </marker>
171
+ <marker id="i2p-warn" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
172
+ <path d="M0,0 L10,5 L0,10 z" fill="#A6453A"/>
173
+ </marker>
174
+ </defs>
175
+ </svg>