外观
P4 Session 截图、标注与导出验收
结论
P4 的本地实现、最终 x86_64 发布包和当前 USB 真机只读链路均已复测;原生 UI 全链路仍保留为开放门禁。构建/Fixture 证据为 E2,最终 App 内置工具的 User App、DVT 截图和 Collector 短采集为 E4,因此本批状态使用 partial · gate-open,不把未点击验证的 ScreenShot 开关、Session 标注、停止、Review 导出描述为真机通过。
已执行检查
| 检查 | 结果 | 证据层级 |
|---|---|---|
| Swift 全量测试 | 61/61 通过 | E2 |
| Python Sidecar 测试 | 22/22 通过 | E2 |
| Python 编译检查 | 通过 | E2 |
| VitePress 文档构建 | 通过,归档同步 58 个文件 | E2 |
| x86_64 Sidecar 构建 | Mach-O 产物和 runtime 生成 | E2 |
x86_64 Perfowl.app 构建 | App、内置 Collector 与 pymobiledevice3 的 codesign --verify --deep --strict 均通过 | E2 |
| Controller Fixture | ScreenShot 开关、PNG 附件、Note flush、Review 加载通过 | E2 |
| 当前 USB 设备 User App 列表 | 最终 App 内置工具只读读取 46 条结构化记录 | E4 |
| 当前 USB 设备 DVT 截图 | 最终 App 内置工具返回有效 PNG,1170 × 2532,2,580,871 bytes | E4 |
| 最终 App 内置 Collector | 目标 App A 只读短采集 10 个样本,return code 0;首点 warmup | E4 |
质量核对
- 真实零值仍保留为零;截图或指标缺失使用空值与 quality 原因,不用 0 代替。
- 空闲预览和 Session 截图路径共享串行闸门;Session 未勾选
ScreenShot时不落截图事件。 - 有效截图附件加载时校验相对路径、PNG 签名和
byteCount;失败/取消事件没有伪造文件。 - Note 在 Session 停止前等待写入任务完成,并与样本、截图使用同一
session-timeline.v1坐标。 - JSONL / CSV 导出只读,元数据带
session-export.v1、时钟来源、锚点和时间轴质量;CSV 缺失留空、合法零固定六位小数导出。
尚未关闭的真机门禁
使用当前已连接设备完成以下人工步骤并留存截图/日志后,才能另发 E4 闭环结果:
- 打开工作台,确认顶部状态提示在确认后约 1 秒淡出。
- 选择设备与测试 App,确认 App 列表和顶部预览持续刷新。
- 在指标选择器勾选
ScreenShot,开始短 Session,确认至少一张 PNG 和一条样本落盘。 - 采集中添加一条标注,停止 Session,从“会话”打开 Review,确认截图、标注和曲线共用 elapsed。
- 在 Review 中分别导出 JSONL 与 CSV,重新打开文件并核对元数据和缺失语义。
本轮已用最终 App 内置工具完成命令级真机复测;由于当前自动化环境没有可驱动的原生 App 窗口,以上人工点击门禁仍需在可操作桌面上补录,不以命令级 E4 替代 UI 证据。
逐帧 Display/Hitches、PerfDog 同场数值校准、iOS 17+ 路由矩阵和云端上传不属于本批验收范围。