docs(N34): 网络不稳根因复盘总览(比喻版)+ 全景图 SVG 生成器
- 新增 网络不稳根因总览.md:七个误会(传达室比喻+机制+证据出处)→ 环↔拆法↔落点对照表 → E13 僵尸会话 Mermaid 时序图 → 一句话总结 - 新增 tools/arch_diagram/gen_net_instability_svg.py(draw-diagram 规范, 纯标准库)与产物 docs/images/网络不稳根因总览.svg(headless Edge 目检两轮) - N34 README:实施状态表补全阶段 1.5/2/3 与 E6 插桩行(原「阶段 2/3 未开始」陈旧口径修正);挂复盘总览为第一入口;§5.56 改紧邻写法 - 门禁:check_doc_links --sections-strict 本批 4 文件通过
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1560" height="1468" viewBox="0 0 1560 1468" font-family="Microsoft YaHei, Segoe UI, PingFang SC, sans-serif">
|
||||
<rect x="0" y="0" width="1560" height="1468" fill="#ffffff"/>
|
||||
<text x="26" y="40" font-size="20" font-weight="700" fill="#0f172a">为什么网络「一直不稳」——七个误会与逐个拆掉(N34 复盘)</text>
|
||||
<text x="26" y="62" font-size="13" fill="#64748b">左列 = 根因(比喻 + 机制);右列 = N34 阶段 0~3 的对应拆法;环与环叠加才构成「玄学」</text>
|
||||
<rect x="26" y="78.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="100.0" font-size="15" font-weight="700" fill="#e11d48">① 门铃会丢</text>
|
||||
<text x="136" y="100.0" font-size="11.5" fill="#64748b">Trap 22:丢中断</text>
|
||||
<rect x="42" y="110.0" width="422" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="253" y="131.6" font-size="13" fill="#1e293b" text-anchor="middle">症状:UI 复连永久拒连、FTP 第 29 轮自己死掉,全程不报一个错</text>
|
||||
<rect x="42" y="152.0" width="481" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="282" y="173.6" font-size="13" fill="#1e293b" text-anchor="middle">机制:快速复连时 INT# 门铃哑火,netTask 只靠门铃干活 → 状态静默滞留</text>
|
||||
<rect x="844" y="78.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="100.0" font-size="15" font-weight="700" fill="#16a34a">100ms 巡逻对账</text>
|
||||
<rect x="860" y="110.0" width="459" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1089" y="131.6" font-size="13" fill="#1e293b" text-anchor="middle">单一 reconciler:判据读驱动状态缓存(E2 背书 18.1µs),分级去抖</text>
|
||||
<rect x="860" y="152.0" width="288" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1004" y="173.6" font-size="13" fill="#1e293b" text-anchor="middle">门铃丢了不要紧,每 100ms 亲自数一遍人头</text>
|
||||
<line x1="722" y1="138.0" x2="834" y2="138.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 138.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="130.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="238.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="260.0" font-size="15" font-weight="700" fill="#e11d48">② 门铃总闸看一眼就清零</text>
|
||||
<text x="226" y="260.0" font-size="11.5" fill="#64748b">Trap 25 B3</text>
|
||||
<rect x="42" y="270.0" width="395" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="239" y="291.6" font-size="13" fill="#1e293b" text-anchor="middle">症状:别的 Socket 的 CONNECT/DISCONNECT 从此永久失踪</text>
|
||||
<rect x="42" y="312.0" width="505" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="294" y="333.6" font-size="13" fill="#1e293b" text-anchor="middle">机制:全局中断寄存器整体读即清,open/relisten 丢弃式读一遍=拔全楼门铃线</text>
|
||||
<rect x="844" y="238.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="260.0" font-size="15" font-weight="700" fill="#16a34a">总闸唯一读者</text>
|
||||
<rect x="860" y="270.0" width="526" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1123" y="291.6" font-size="13" fill="#1e293b" text-anchor="middle">F-NET-7:全局寄存器唯一读者=net_poll;open/relisten 只清本 Socket SINT</text>
|
||||
<rect x="860" y="312.0" width="223" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="971" y="333.6" font-size="13" fill="#1e293b" text-anchor="middle">查自己门铃时,不许拔别人家的线</text>
|
||||
<line x1="722" y1="298.0" x2="834" y2="298.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 298.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="290.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="398.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="420.0" font-size="15" font-weight="700" fill="#e11d48">③ 柜台和货梯是同一台</text>
|
||||
<text x="211" y="420.0" font-size="11.5" fill="#64748b">单连接模型</text>
|
||||
<rect x="42" y="430.0" width="260" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="172" y="451.6" font-size="13" fill="#1e293b" text-anchor="middle">症状:会话 EOF 之后端口「连接被拒」</text>
|
||||
<rect x="42" y="472.0" width="512" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="298" y="493.6" font-size="13" fill="#1e293b" text-anchor="middle">机制:监听 fd == 数据 fd,应用在 EOF 时 net_close = 把柜台连电梯一起拆</text>
|
||||
<rect x="844" y="398.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="420.0" font-size="15" font-weight="700" fill="#16a34a">送客走正门</text>
|
||||
<rect x="860" y="430.0" width="490" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1105" y="451.6" font-size="13" fill="#1e293b" text-anchor="middle">铁律:EOF 不得 close 监听 fd;新 API net_drop_conn(拆会话保柜台)</text>
|
||||
<rect x="860" y="472.0" width="401" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1060" y="493.6" font-size="13" fill="#1e293b" text-anchor="middle">net_drop_conn = 优雅 FIN + 本地拆除 + relisten,幂等</text>
|
||||
<line x1="722" y1="458.0" x2="834" y2="458.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 458.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="450.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="558.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="580.0" font-size="15" font-weight="700" fill="#e11d48">④ 三个临时工都在修电梯</text>
|
||||
<text x="226" y="580.0" font-size="11.5" fill="#64748b">多所有者 relisten</text>
|
||||
<rect x="42" y="590.0" width="429" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="256" y="611.5" font-size="13" fill="#1e293b" text-anchor="middle">症状:重建风暴、慢消费者的 EOF 被吞、新客户端数据被旧会话吸收</text>
|
||||
<rect x="42" y="632.0" width="490" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="287" y="653.5" font-size="13" fill="#1e293b" text-anchor="middle">机制:accept/recv/pending 三处都重建监听,谁先看到断连谁动手互相踩脚</text>
|
||||
<rect x="844" y="558.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="580.0" font-size="15" font-weight="700" fill="#16a34a">修电梯的只剩一个人</text>
|
||||
<rect x="860" y="590.0" width="528" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1124" y="611.5" font-size="13" fill="#1e293b" text-anchor="middle">重建收敛到唯一所有者(net_listener + reconciler),其余位置只置事实不动手</text>
|
||||
<rect x="860" y="632.0" width="457" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1088" y="653.5" font-size="13" fill="#1e293b" text-anchor="middle">不变量 II:唯一周期重建决策者(消费者即时重建三处保留,P2a 实测)</text>
|
||||
<line x1="722" y1="618.0" x2="834" y2="618.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 618.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="610.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="718.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="740.0" font-size="15" font-weight="700" fill="#e11d48">⑤ 传达员被按在椅子上</text>
|
||||
<text x="211" y="740.0" font-size="11.5" fill="#64748b">队头阻塞</text>
|
||||
<rect x="42" y="750.0" width="477" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="280" y="771.5" font-size="13" fill="#1e293b" text-anchor="middle">症状:FTP banner 迟到 25~30 s(E-02 实测),netTask 频繁冻结半秒</text>
|
||||
<rect x="42" y="792.0" width="468" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="276" y="813.5" font-size="13" fill="#1e293b" text-anchor="middle">机制:30 s 阻塞收 + 500 ms 盲等忙等,而 netTask 是全楼唯一传达员</text>
|
||||
<rect x="844" y="718.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="740.0" font-size="15" font-weight="700" fill="#16a34a">传达员永不离开传达室</text>
|
||||
<rect x="860" y="750.0" width="499" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1109" y="771.5" font-size="13" fill="#1e293b" text-anchor="middle">忙等统一为 net_sock_reset_sync 有界排渣(600 ms 硬上限),阻塞消息化</text>
|
||||
<rect x="860" y="792.0" width="489" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1104" y="813.5" font-size="13" fill="#1e293b" text-anchor="middle">阶段 1.5:net_recv 默认非阻塞 + net_recv_nb + 60 s tripwire 日志</text>
|
||||
<line x1="722" y1="778.0" x2="834" y2="778.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 778.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="770.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="878.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="900.0" font-size="15" font-weight="700" fill="#e11d48">⑥ 僵尸客人赖着不走</text>
|
||||
<text x="196" y="900.0" font-size="11.5" fill="#64748b">E13:网卡闪断</text>
|
||||
<rect x="42" y="910.0" width="381" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="232" y="931.5" font-size="13" fill="#1e293b" text-anchor="middle">症状:设备网络「莫名死了」、新连接被拒——在和幽灵做生意</text>
|
||||
<rect x="42" y="952.0" width="564" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="324" y="973.5" font-size="13" fill="#1e293b" text-anchor="middle">机制:PC 网卡闪断,内核悄悄撕掉 socket 不发 FIN,芯片侧仍 ESTABLISHED 占死柜台</text>
|
||||
<rect x="844" y="878.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="900.0" font-size="15" font-weight="700" fill="#16a34a">查岗处理幽灵</text>
|
||||
<rect x="860" y="910.0" width="557" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1138" y="931.5" font-size="13" fill="#1e293b" text-anchor="middle">keepalive 60/5/3(E11 实测 ≈30 s 判死)+ 芯片 TIMEOUT → QUARANTINE → 重建</text>
|
||||
<rect x="860" y="952.0" width="404" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1062" y="973.5" font-size="13" fill="#1e293b" text-anchor="middle">自愈 30~90 s,不需要冷启动(E13 台架收口:用户判断正确)</text>
|
||||
<line x1="722" y1="938.0" x2="834" y2="938.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 938.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="930.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="1038.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="1060.0" font-size="15" font-weight="700" fill="#e11d48">⑦ 只会礼貌送客不会轰人</text>
|
||||
<text x="226" y="1060.0" font-size="11.5" fill="#64748b">close 无 RST(手册定案)</text>
|
||||
<rect x="42" y="1070.0" width="440" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="262" y="1091.5" font-size="13" fill="#1e293b" text-anchor="middle">症状:FIN_WAIT_2 长尾,监听恢复受限于对端 close(E-02 定案)</text>
|
||||
<rect x="42" y="1112.0" width="483" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="283" y="1133.5" font-size="13" fill="#1e293b" text-anchor="middle">机制:芯片 close 只发 FIN;对端内核存活但应用挂死 = 回 ACK 却不起身</text>
|
||||
<rect x="844" y="1038.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="1060.0" font-size="15" font-weight="700" fill="#16a34a">知道他不轰人,就别指望他轰人</text>
|
||||
<rect x="860" y="1070.0" width="441" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1080" y="1091.5" font-size="13" fill="#1e293b" text-anchor="middle">定案写入 Trap 07:兜底靠查岗(keepalive/TIMEOUT),不靠 RST</text>
|
||||
<rect x="860" y="1112.0" width="415" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1067" y="1133.5" font-size="13" fill="#1e293b" text-anchor="middle">net_drop_conn 本地拆除 + reconciler 形态③④ 认领僵尸态</text>
|
||||
<line x1="722" y1="1098.0" x2="834" y2="1098.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 1098.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="1090.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<rect x="26" y="1198.0" width="690" height="120.0" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.45"/>
|
||||
<text x="42" y="1220.0" font-size="15" font-weight="700" fill="#e11d48">⑧ 垃圾不清越扫越脏</text>
|
||||
<text x="196" y="1220.0" font-size="11.5" fill="#64748b">残渣风暴态</text>
|
||||
<rect x="42" y="1230.0" width="448" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="266" y="1251.5" font-size="13" fill="#1e293b" text-anchor="middle">症状:同一份固件故障率 2%~54% 摆动(E8 实测),看起来像「玄学」</text>
|
||||
<rect x="42" y="1272.0" width="515" height="34" rx="7" fill="#ffffff" stroke="#e11d48" stroke-opacity="0.55"/>
|
||||
<text x="299" y="1293.5" font-size="13" fill="#1e293b" text-anchor="middle">机制:迟到 DISCONNECT 锁存 / 半死 Socket / 粘滞中断位,被带进下一条连接</text>
|
||||
<rect x="844" y="1198.0" width="690" height="120.0" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.45"/>
|
||||
<text x="860" y="1220.0" font-size="15" font-weight="700" fill="#16a34a">开张前把垃圾扫干净</text>
|
||||
<rect x="860" y="1230.0" width="527" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1123" y="1251.5" font-size="13" fill="#1e293b" text-anchor="middle">sock_reset 标准排渣:读空 RX → CLOSE → 排空事件 → 确认落地(byte0=00H)</text>
|
||||
<rect x="860" y="1272.0" width="397" height="34" rx="7" fill="#ffffff" stroke="#16a34a" stroke-opacity="0.55"/>
|
||||
<text x="1058" y="1293.5" font-size="13" fill="#1e293b" text-anchor="middle">M3 矛盾态门 + M5 drain-until-quiescent(风暴态免疫)</text>
|
||||
<line x1="722" y1="1258.0" x2="834" y2="1258.0" stroke="#94a3b8" stroke-width="2.5"/>
|
||||
<path d="M 834 1258.0 l -9 -6 v 12 z" fill="#94a3b8"/>
|
||||
<text x="780" y="1250.0" font-size="11" fill="#64748b" text-anchor="middle">拆掉</text>
|
||||
<line x1="86" y1="203.0" x2="86" y2="231.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 231.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<line x1="86" y1="363.0" x2="86" y2="391.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 391.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<line x1="86" y1="523.0" x2="86" y2="551.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 551.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<line x1="86" y1="683.0" x2="86" y2="711.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 711.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<line x1="86" y1="843.0" x2="86" y2="871.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 871.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<line x1="86" y1="1003.0" x2="86" y2="1031.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 1031.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<line x1="86" y1="1163.0" x2="86" y2="1191.0" stroke="#e11d48" stroke-width="1.6" stroke-dasharray="4 3" stroke-opacity="0.7"/>
|
||||
<path d="M 86 1191.0 l -4.5 -7 h 9 z" fill="#e11d48" fill-opacity="0.7"/>
|
||||
<text x="12" y="618.0" font-size="11" fill="#e11d48" transform="rotate(-90 12 618.0)">叠加累积 → 越扫越脏</text>
|
||||
<rect x="26" y="1344" width="690" height="78" rx="10" fill="#fff1f2" stroke="#e11d48" stroke-opacity="0.5"/>
|
||||
<text x="42" y="1372" font-size="15" font-weight="700" fill="#e11d48">七环叠加 =「玄学不稳」</text>
|
||||
<text x="42" y="1396" font-size="12" fill="#334155">随机 · 无错误日志 · 时好时坏——每个环节单看都「正常工作」</text>
|
||||
<rect x="844" y="1344" width="690" height="78" rx="10" fill="#f0fdf4" stroke="#16a34a" stroke-opacity="0.5"/>
|
||||
<text x="860" y="1372" font-size="15" font-weight="700" fill="#16a34a">逐环拆掉 = 稳(N34 阶段 0~3 已实施)</text>
|
||||
<text x="860" y="1396" font-size="12" fill="#334155">不依赖门铃 · 唯一主人 · 永不冻结 · 100ms 对账 · 开张前排渣——台架回归全绿</text>
|
||||
<text x="26" y="1452" font-size="12" fill="#94a3b8">证据链:docs/问题记录/CH395F_Trap_Records.md(Trap 07/09/14/17/22/23/25) · docs/网络/N34-自愈审计/实验方案.md(E1~E13) · 修复落地见 docs/网络/N34-自愈审计/实施方案.md</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
Reference in New Issue
Block a user