外观
CORE-19 Energy Usage 产品化与负值哨兵修正方案
批次目标
CORE-18 已证明 Energy DVT Adapter 能随目标 PID 输出原始 energy.* 字段,但尚未进入 Mac 实时工作台;iOS 17 匿名样本还出现 energy.cost=-10 / energy.overhead=-10,现有引擎会把负值当成普通成本。CORE-19 只承接可信的 Energy Usage,不把 USB Battery Power 或缺失的 ThermalStatus 冒充可用。
交付身份升级为 Collector Foundation 1.1-beta、Mac App 1.0.0 (19) internal beta。
公式先行
| 指标 | 原始字段 | 转换 | scope / unit | 窗口 | 缺失与重置 | 版本 |
|---|---|---|---|---|---|---|
| Total Energy | energy.cost | 非负有限值原样承接;不对分项求和 | process / source-native-cost | 每个 Energy gauge 回包 | 字段缺失=missing;负数=source-sentinel;身份未核验=identity-unverified | energy-total-gauge.candidate.v1 |
| CPU/GPU/Network/Location/Display | 对应 energy.*.cost | 非负有限值原样承接 | process / source-native-cost | 同上 | 单字段负数=source-sentinel;若 Total 为负,则整帧七项均 missing | energy-cost-gauge.candidate.v2 |
| Overhead | energy.overhead | 非负有限值原样承接 | process / source-native-cost | 同上 | 负值明确视为源哨兵,不展示 -10 | energy-cost-gauge.candidate.v2 |
所有 Energy 值计算层保留 double、不取整、不插值、不换算为 mW/J。真实 0 仅在字段存在、身份 verified 且整帧没有负 Total 哨兵时保留。PerfDog 的 Low/High/Very High 阈值只作为待校准参考,本批不生成等级,避免 270 边界与上游语义未消歧时写死结论。
产品承接
- Registry 新增
ios.process.energy.total_cost,静态总数由 52 增至 53。 - Collector 实时 wire 增加 Total、CPU、GPU、Network、Location、Display、Overhead 七项及各自 quality/scope/unit。
- Swift
CollectorMetrics、PerformanceSample和 Session Review 完整解码七项。 - 指标选择器把
Energy Usage从 Unsupported 调整为 Partial;新增七条曲线,缺值显示“等待样本”,不写 0。 Battery继续 Unsupported:当前产品只发现 USB 设备,电流/功率受 USB 供电影响,不满足 PerfDog Wi-Fi 约 20 秒口径。Thermal Status继续 Partial:iOS 17/18 当前 Diagnostics payload 未观察到稳定字段。
验收门禁
- E2:Python 系统与冻结 3.12、Swift 全量测试;新增负 Total、负分项、真实 0、身份失败与 wire 解码测试。
- E2:同一 raw Session 双重派生哈希一致,Registry=53。
- E4:当前 iOS 17/18 各执行最终打包 Collector 短 Session;核验目标身份、Energy raw、Total/六分项质量、停止与交付哈希。
- E4 通过只证明来源与缺失处理正确;没有变化量或只有 0 时不宣称完成数值校准。
- 构建、站点、匿名证据、冻结 HTML 与本地窄范围提交同批完成;不推送。
停止条件
如果最终设备不再提供 energy.cost,则 Total 保持 missing,仍可交付 fail-closed 实现但批次状态记为 partial;如果身份不 verified、出现未解释的正负跳变或 Session 不能有界停止,则不点亮 Energy Usage。