From 82ea9bf69fb1c997ec5297cff3a87e9ca03be511 Mon Sep 17 00:00:00 2001 From: Rogee Date: Sat, 5 Sep 2026 23:42:53 +0800 Subject: [PATCH] docs: record verified tray recovery and cross-process gate evidence --- docs/validation/M6-Stability-2026-09-05.md | 19 +++++- .../M6-20260905/7e29041-command-gate.json | 10 +++ .../M6-20260905/7e29041-recovery.json | 18 ++++++ .../7e29041-validation-summary.json | 62 +++++++++++++++++++ 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 docs/validation/evidence/M6-20260905/7e29041-command-gate.json create mode 100644 docs/validation/evidence/M6-20260905/7e29041-recovery.json create mode 100644 docs/validation/evidence/M6-20260905/7e29041-validation-summary.json diff --git a/docs/validation/M6-Stability-2026-09-05.md b/docs/validation/M6-Stability-2026-09-05.md index 9392346..6de82ad 100644 --- a/docs/validation/M6-Stability-2026-09-05.md +++ b/docs/validation/M6-Stability-2026-09-05.md @@ -54,13 +54,30 @@ - Linux 59/59 通过;完整 Release 构建 0 警告、0 错误。新增独立队列实例互斥、取消后可再次使用、非争用 I/O 异常不盲重试等回归。 - Windows 跨进程门禁验证脚本:`scripts/windows/Test-CommandGate.ps1`,由 M6 验证脚本统一调用。其结果必须单独检查,不能仅凭 Linux 通过认定 Windows 通过。 +## 托盘名称不可用与跨进程真机回归(7e29041) + +候选 `786932e` 在正常关闭到托盘后,MSAA 按名称匹配得到 0 个微信图标,恢复失败;该失败目录完整保留,没有当作通过。 + +使用公开 `Shell_NotifyIconGetRect` 验证了当前微信进程的 `Qt51514WxTrayIconMessageWindowClass` 窗口及图标 ID 0,随后加入共享定位回退。只对唯一候选、且坐标命中可见通知区域根窗口的情况双击;不读写 Explorer 内存、不发送猜测的托盘回调消息、不启动微信新实例。类名/图标 ID 集中维护;这不是未经验证的跨版本兼容声明。 + +- 产物提交:`7e29041`;SHA-256:`8175C97346E2C2B45D6C6E86EBA1A7CF5A309858B00F72D6BF7940DC6AE3A68E`。 +- Linux Core:65/65 通过;全量 Release 构建 0 警告、0 错误。 +- Windows 9 项验证均通过,包括新增跨进程门禁检查。 +- 外部 PowerShell 独占同一个锁文件时:恢复命令按预期返回 `Timeout`/124;旧监听命令按自身 1 秒时长正常返回、0 条消息;释放锁后恢复命令 exit 0。 +- 最小化、关闭到托盘均恢复同一 HWND/PID,三个关键 UI 控件全部可用。 +- 30 秒稳定性样本实测 30.1091299 秒、CompletedDuration=true、Healthy=true;依然不构成长时证据。 +- 完整本地证据:`artifacts/m6-7e29041/m6-7e29041-validation/`;脱敏摘要随仓库保存。 + +两次独立审计子进程因宿主缺少 `@earendil-works/pi-tui` 启动失败,未产生审计结论;不能算作独立审查通过。其余功能矩阵由主进程继续核对。 + ## 尚待完成的验收 - [ ] 8/24/72 小时真实监听及长时资源趋势。 - [ ] 网络中断/恢复、20 次微信重启后的恢复(不能绕过登录或锁屏)。 - [ ] 常见弹窗、会话切换的专门恢复回归。 - [ ] 多会话/多子窗口消息归属与去重、长列表滚动场景。 -- [ ] 重新核对 M2 连续 500 条发送无重复与 M3 8 小时监听证据;未找到对应证据前仍未验收。 +- [ ] M2 连续 500 条发送无重复。 +- 开发计划记录了用户取消早期 M3 的单项 8 小时测试;不把它重新作为 M3 单项阻塞,但 M6 §11.3 独立要求的 8/24/72 小时仍待验证。 - [ ] Windows 10 多 DPI 与 Windows 11 兼容矩阵。目前仅证明 Windows 10 / 96 DPI。 - [ ] 汇总此前阶段尚未真机覆盖的回归项;M4/M5 中仅编译/门禁验证的写操作不冒充端到端验收。 - [ ] 全部要求通过后更新阶段结论,并提交、PUSH 阶段验收记录。 diff --git a/docs/validation/evidence/M6-20260905/7e29041-command-gate.json b/docs/validation/evidence/M6-20260905/7e29041-command-gate.json new file mode 100644 index 0000000..97c3364 --- /dev/null +++ b/docs/validation/evidence/M6-20260905/7e29041-command-gate.json @@ -0,0 +1,10 @@ +{ + "SessionId": 1, + "UnexpectedListenerMessageCount": 0, + "Passed": true, + "BaselineExit": 0, + "ListenerExit": 0, + "RecoveryAfterReleaseExit": 0, + "ContendedError": "Timeout", + "ContendedExit": 124 +} \ No newline at end of file diff --git a/docs/validation/evidence/M6-20260905/7e29041-recovery.json b/docs/validation/evidence/M6-20260905/7e29041-recovery.json new file mode 100644 index 0000000..f2edb17 --- /dev/null +++ b/docs/validation/evidence/M6-20260905/7e29041-recovery.json @@ -0,0 +1,18 @@ +[ + { + "State": "minimized", + "TransitionObserved": true, + "SameInstance": true, + "MainViewFound": true, + "SessionsFound": true, + "MessagesFound": true + }, + { + "State": "tray-hidden", + "TransitionObserved": true, + "SameInstance": true, + "MainViewFound": true, + "SessionsFound": true, + "MessagesFound": true + } +] \ No newline at end of file diff --git a/docs/validation/evidence/M6-20260905/7e29041-validation-summary.json b/docs/validation/evidence/M6-20260905/7e29041-validation-summary.json new file mode 100644 index 0000000..e959aa0 --- /dev/null +++ b/docs/validation/evidence/M6-20260905/7e29041-validation-summary.json @@ -0,0 +1,62 @@ +{ + "BinarySha256": "8175C97346E2C2B45D6C6E86EBA1A7CF5A309858B00F72D6BF7940DC6AE3A68E", + "Passed": true, + "OperatingSystem": "Microsoft Windows NT 10.0.19044.0", + "Results": [ + { + "ExitCode": 0, + "Name": "recover", + "StartedAt": "\/Date(1788622760642)\/", + "FinishedAt": "\/Date(1788622790810)\/" + }, + { + "ExitCode": 0, + "Name": "doctor", + "StartedAt": "\/Date(1788622790811)\/", + "FinishedAt": "\/Date(1788622791263)\/" + }, + { + "ExitCode": 0, + "Name": "inspect", + "StartedAt": "\/Date(1788622791263)\/", + "FinishedAt": "\/Date(1788622792041)\/" + }, + { + "ExitCode": 0, + "Name": "smoke", + "StartedAt": "\/Date(1788622792041)\/", + "FinishedAt": "\/Date(1788622793922)\/" + }, + { + "ExitCode": 0, + "Name": "recovery", + "StartedAt": "\/Date(1788622793922)\/", + "FinishedAt": "\/Date(1788622796552)\/" + }, + { + "ExitCode": 0, + "Name": "listener", + "StartedAt": "\/Date(1788622796552)\/", + "FinishedAt": "\/Date(1788622806190)\/" + }, + { + "ExitCode": 0, + "Name": "stability", + "StartedAt": "\/Date(1788622806190)\/", + "FinishedAt": "\/Date(1788622836645)\/" + }, + { + "ExitCode": 0, + "Name": "diagnose", + "StartedAt": "\/Date(1788622836645)\/", + "FinishedAt": "\/Date(1788622837611)\/" + }, + { + "ExitCode": 0, + "Name": "command-gate", + "StartedAt": "\/Date(1788622837611)\/", + "FinishedAt": "\/Date(1788622843067)\/" + } + ], + "SessionId": 1 +} \ No newline at end of file