身份/数值 PASS · UI 回归待补2026-09-03

Implementation Result · Batch A

P0 数据保真 + P1 已有源完整承接

0 值根因修复已经并入 A 批次基座:Mac App 显式传递所选 Bundle ID,Collector 精确解析并二次核对 PID,同名 executable 不再导致误绑。正式 App 内置 Collector 已在当前真机上完成前台 28 样本和后台同名进程 11 样本复验;Controller → 内置 Collector → Session Store 的 21 样本闭环生成 completed manifest 和一致 CSV。目标身份、动态数值和 FPS/GPU 前台归属门禁已通过;为保持证据分层,新版 App 的人工 UI 点击回归仍独立记为待补。

Schema v2Swift 26/26Python 10/10Target identity PASSValue dynamics PASSUI click PENDING

Approved scope

批准项与实际交付

范围本轮结果状态
P0 数据保真保留 Process/System/Graphics 原始区块、实际属性清单、累计 counter、rate 和质量状态已实现
P1 已有源承接CPU、Physical/Resident Memory、线程、CSwitch、Wakeups、磁盘、FPS、Render/Tiler/Device GPU已实现
客户端12 项指标可选展示,每图 MIN/AVG/MAX,missing/warmup/reset 不伪装成 0已实现
设备基座引入 OS 版本路由、独立 tunnel manager、按 UDID 恢复、真实 DVT 门禁与可见重试已实现
最终真机验收正式内置 Collector 目标身份、前台/后台归属、动态数值与 Controller/Session 闭环通过数值 PASS
UI 点击待补

Data fidelity

Raw Event → Metric(version) → Report

DVT Sysmontap / Graphics ├─ rawProcess / rawSystem / rawGraphics ├─ cumulative counters ├─ derived rates + warmup / valid / counter-reset / missing └─ capability attributes + sample interval ↓ CollectorWireEvent (protocol v1 / schema v2) ↓ PerformanceSample + Metric Registry v2 ↓ collector.jsonl + events.jsonl + metrics.csv + quality.json

协议版本继续为 perfowl.collector/1,Schema 独立升级到 v2;客户端仍可读取 Schema v1。未经 PerfDog/Xcode 同场校准的指标继续标记 Experimental。

Codesign4QC adaptation

设备连接基础服务不再由采集器猜测

本轮没有继续用临时命令绕过 tunnel,而是参照 Codesign4QC 已经处理成熟的连接链进行窄化适配。Perfowl 保留自己的 service/domain 边界,没有复制其签名、安装、自动化和巨型 AppModel。

直接借鉴

  • usbmuxd 事件驱动与 generation 隔离。
  • iOS 17.0–17.3 使用 USB RemoteXPC,17.4+ 使用 USB Lockdown tunnel。
  • tunneld 只做被动 HTTP manager,关闭自动 monitors。
  • 只 cancel/start 选中 UDID,不 clear 其他设备。
  • AppleScript 特权启动不使用 nohup,重定向全部描述符。
  • 真实 DVT process-list 通过后才发布 ready。

Perfowl 修正

  • 使用独立管理端口,不停止或清除其他 App 的 tunnel。
  • 设备、App 和性能服务分层就绪;不再把“USB 在线”当成“可采集”。
  • 选定 tunnel port 显式传入 Collector,避免隐式使用错误端口。
  • UI 提供性能服务阶段、实际 route 和独立重试。

Verification ledger

自动化、构建与代码基线

层级结果证据边界
Python Collector10/10 通过含同名 executable 选择、PID/Bundle 不一致 fail closed、非前台 graphics 门禁和长静止标记
Swift Core/UI26/26 通过含路由、tunneld 解码、后台启动、端口传递、Session 和 Fixture
Release App0.3.0 构建与严格签名校验通过内置 Collector 已包含 --bundle-id 和 ProcessControl;当前为本机 x86_64/ad-hoc
代码提交94dd99d 指标保真;caf46d0 设备连接就绪;本轮修复与文档同批提交本地 Git,未推送远程

Real-device acceptance

当前设备验收状态:身份和数值通过,UI 点击独立待补

验收全程为只读采集:不启动、不修改、不注入、不重签目标 App,也不代操作任何业务。公开材料统一使用“设备 A / 目标 App A、B、C”别名。

层级实际观测判定
设备与应用目录1 台 USB 设备;34 个 User App;USB Lockdown / DVT 路由;真实 DVT process-list 探测 Ready通过
Collector · 目标 App A125 个连续样本;attached/stopped 各 1;error/waiting/sequence gap 均为 0;每个 sample 保留 Raw Process/System/Graphics通过
Collector · 目标 App B186 个连续样本;attached/stopped 各 1;error/waiting/sequence gap 均为 0;每个 sample 保留 Raw Process/System/Graphics通过
内置 Collector · 前台目标28 样本,identity verified/foreground 全程为 true,唯一 PID;CPU 0.455%–3.032%,Thread 21–22,CSwitch 62.990–148.689/s,Wakeups 48.616–113.762/s身份/动态性 PASS
内置 Collector · 同名后台目标11 样本,identity verified=true、foreground=false;Raw Graphics 均保留,FPS 与三项 GPU 派生值全部省略,quality 为 not-target-foreground前台归属 PASS
Controller → Session Store21 样本,manifest=completed,metrics.csv=21 行,wire=30,identity verified=true,gap/duplicate/out-of-order/parse/writer failure 均为 0真机闭环 PASS
新版 App UI 点击本轮自动化环境未得到可重开的 App 主窗口;未用 Controller 闭环冒充点击证据人工回归待补
中断恢复客户端退出遗留的 recording Session 在重启后标记为 interrupted,没有误记 completed通过
结论分层
原 163 样本错误会话保留为根因反例,不被覆盖;2026-09-03 修复后证据已恢复目标身份、数值动态性、前台归属和 Controller/Session 闭环结论。完整记录见 0 值正确性复核,匿名化机器证据见 证据 JSON

Final device gate

当前结论与下一个停止点

已通过

  • Bundle ID → PID 解析与进程表二次校验。
  • 同名 executable 不再误绑,进程重启时重新解析。
  • 前台目标动态数值、后台 FPS/GPU 不归因、长静止 suspect 语义。
  • Raw/Derived/Quality 与 completed Session 文件闭环。

进入 P2 前建议补录

  • 在可视 App 窗口中手工选择设备/目标,点击开始与停止。
  • 确认 UI 显示“Bundle ID / PID 已校验”和前台状态。
  • 对应 Session 的 manifest=completed,且 metrics.csv 数值与页面最新样本一致。
  • 完成该 UI 门禁后再把 A 批次整体标记为 Full PASS。