# 验证记录(testing & audit records) > 生产通道实测矩阵与健壮性审计的**历史记录**,用于回归核对与结论追溯; > 协议行为以 [protocol.md](protocol.md) 为准。 ## Markdown 渲染实测矩阵(2026-08-16,生产通道单发验证) > 方法:一条综合测试气泡(passthrough 模式原样发送)→ 手机核对。结果用于 > Markdown 策略选型与文档。单发测试,遵循生产通道纪律。 ## 结果 | 元素 | 客户端渲染 | 备注 | |---|---|---| | h1–h4 标题 | ✅ | 有层级感 | | 粗体 `**x**` | ✅ | | | 斜体 `*x*`(非 CJK) | ✅ | | | **斜体 `*x*`(CJK)** | ⚠️ 异常 | 中文字体无斜体,标记可能透出或样式异常——**已知边界** | | 行内代码 `` `x` `` | ✅ | | | 无序/有序列表 | ✅ | 缩进正常 | | 引用块 `>` | ✅ | 左侧竖线 | | 表格 | ✅ | | | 代码块(围栏) | ✅ | 等宽/背景 | | 分隔线 `---` | ✅ | | | 链接 `[t](url)` | ✅ | passthrough 下 `![图](url)` 转为可点 URL | ## 结论与策略建议 - **passthrough(默认)**:除 CJK 斜体外的全部元素渲染正常——适合内容以中文为主、 模型输出含完整 Markdown 的场景;CJK 斜体标记可能透出(内容不丢失,仅样式)。 - **filter**:官方过滤器逐字段移植,剥离 CJK 斜体/斜粗体、h5/h6、行内图片—— 需要绝对保守的跨客户端渲染时使用(代价:丢失少量格式信息)。 - **plain**:全剥离,给完全不渲染 Markdown 的客户端用。 ## 更新记录 - 2026-08-16:生产通道单发实测(h1-h4/粗体/斜体/行内代码/列表/引用/表格/代码块/分隔线/链接全通过; CJK 斜体异常确认)。 --- ## 通道健壮性审计(2026-08-16,P1) > 范围:DSH⇄微信通道的可靠性。结论按「发现 → 处置」记录;修复均已过 > `pnpm verify`(98 项)+ 隔离干跑。对照基准:Tencent/openclaw-weixin 官方实现。 ## 发现与处置 | # | 发现 | 风险 | 处置 | |---|---|---|---| | F1 | **出站通用失败即丢消息**:outbox 先 shift 再发送,非 -12/-14 的失败(网络抖动/超时)直接丢弃,用户回复可能永久丢失 | 高 | **已修**:SendResult 增加 `retryable` 分类(服务器显式拒绝 ret≠0 → 不重试;传输层失败 → 重试);outbox 对可重试失败最多重试 2 次(共 3 次尝试),重入队到队尾 + 最小间隔自然退避,预算耗尽 onDrop('failed') 落日志 | | F2 | **context_token 不持久化**:重启后 peerContextTokens 为空,主动推送/Web 驱动的出站无 context_token,按官方文档语义可能不投递到对话窗口 | 高 | **已修**:contextTokens 持久化进 state.json(原子写+防抖),attach 时恢复,set 时落盘(对齐官方 per-account token 存储) | | F3 | **get_updates_buf 会话过期后重置**:-14 后 buf='' 重放/漏消息边界不明;且 buf 不持久化,进程重启后从空游标开始 | 中 | **已修**:buf 持久化到 poll-cursor.json(带所属 accountId,重配对不串号);-14 后**保留 buf**(对齐官方 monitor:stale-token 暂停不清游标),仅当身份变化(重配对)才重置 | | F4 | seen.mark 先于处理:崩溃窗口内已标记消息不会重处理 | 低 | 文档化(处理是进程内同步路径,窗口极小;宁可漏一次也不重复执行任务) | | F5 | 轮询 403(另一轮询者)致命停止后不自动恢复 | 低 | 设计如此(避免双轮询者互相踢);重启/重配对即恢复,面板有提示 | | F6 | 出站失败重试期间新消息优先级:重试条目排到同优先级队尾(旧 createdAt 失效) | — | 有意的公平性选择:新消息不阻塞重试,重试不插队 | ## 残留风险(接受) - **R1**:F1 的重试对"服务器 ack 但客户端静默丢弃"无能为力(媒体门禁类,见 porting-notes §6.1)——retryable 分类只覆盖传输层与显式拒绝。 - **R2**:出站重试最多 3 次尝试,超时后丢弃并仅落日志——没有死信/重放机制(agent 回复可由用户 /retry 重新触发,属于可接受的降级)。 ## 验证 - `pnpm verify`:98 项全绿(新增:可重试重试/显式拒绝即弃/预算耗尽丢弃/context token 持久化/游标持久化) - `scripts/dry-run.sh --check`:通过 - GitHub CI:通过