外观
全量采集与流式报告改造——实现结果
本批按已批准的 D0–D8 任务书完成实现。采集计划、显示偏好、能力账本与报告封存已经拆开;产品侧仍保留旧 Session 字段用于历史读取。当前结论为 E2 implemented · gate-open:代码、协议、离线回归和合成资源基准已完成,真实设备两轮、原生 UI、Developer ID/公证和 GPL 法务门禁继续单独计账。
实现范围
| 任务 | 实现 | 关键位置 |
|---|---|---|
| D0/D1 计划与显示解耦 | CapturePlan.allSupported 固定取 Registry 全部 64 个 metricID;DisplayPreferences 只保存可见图表组;Swift/Python 共享规范化 JSON 与 SHA-256 | MacApp/Sources/PerfowlCore/CapturePlan.swift、MacApp/Sidecar/perfowl_collector_core/capture_plan.py |
| D2 全源准备 | 选择应用后发送一次全量准备请求;预热进程按设备复用,应用切换采用 request/app/device generation;USB 能耗由能力账本标为 not-applicable | PerformanceSessionController.swift、source_preparation.py、realtime.py |
| D3 覆盖账本 | 每个 metricID 持有 preparation/collection/value quality、原因、样本序号、source epoch、重连窗口;显示选择不会改变采集集合 | capture_plan.py、CollectorReadiness.swift |
| D4 在线聚合 | 单 writer 消费 Raw、MetricFrame、decoder 输出;Welford 统计、网络精确时间戳 join、FPS/FrameTime 精确序列索引和 64 项快照均在采集期间更新 | online_report.py、streaming_stats.py、exact_order_index.py、session_writer.py |
| D5 启动与帧实时发布 | startup revision、frame JSONL 明细和历史兼容投影即时落盘;启动结果不再等待 Stop 才首次展示 | realtime.py、online_report.py |
| D6 检查点与恢复 | report-state、report-checkpoint、Frame JSONL digest、SQLite 逻辑边界和 network pending 状态可恢复;检查点后的未提交帧尾会截断 | online_report.py、checkpoint_policy.py |
| D7 双层封存 | writer-seal.v1 绑定 Raw/Metric/report 同一序号;产品层 foundation-delivery/2 只读取已封存小清单;旧全量 finalizer 保留作独立审计 | live_seal.py、delivery.py |
| D8 客户端状态 | Stop 先反馈采集停止,再等待有界封存;封存序号和完整性模式回传至原生 UI | PerformanceSessionController.swift、PerformanceSessionStore.swift |
关键语义
- 新会话永远以全量 64 项 Registry 为采集合同;
+和隐藏图表只改显示投影。 - 64 项账本的
sampleCount=0、value=null、quality=missing表示尚未取得观测,不以数字 0 填充。 - USB 只影响明确的物理电池功率适用性;CPU、GPU、网络和系统能耗仍按各自源合同记录。
sourceEpoch或重连代次变化会开启新的 coverage window,差分、帧间隔和网络 join 不跨静默间隙计算。- 正常 Stop 走同一有序 writer 的在线
seal,不调用完整 Raw/Metric 回读链;历史 finalizer 仍可由独立审计命令显式运行。
兼容与故障边界
旧 PerformanceSessionPlan、旧 capture-plan.json 和缺少 online seal 字段的报告仍可读取。新报告对序号缺口、重复回包、写入失败、digest 不一致、检查点边界不一致和 poison writer 均保持 fail-closed;产品层不会把旧缓存或部分 source 结果升级成完整证据。
验证结果(E2)
- Python sidecar:355 项通过。
- Swift Package:135 项执行,0 失败,3 项显式资源基准按合同跳过。
- CapturePlan 跨语言 hash:
60af7f3ea9c97fd87543c84e62cc701db90885ae38d901ae945cab445f7f5c63。 - 新增覆盖账本、在线 snapshot 节流、非连续序号、旧计划兼容、双层 seal、失败注入和恢复测试;Stop 测试通过对 Raw/Metric/Report 回读函数做断言,确认在线路径不触发完整重算。
- 合成全 Registry 资源基准见验收记录。
未关闭门禁与下一阶段
当前实现还没有将 E2 合成资源结果升级为 E4。下一阶段执行两轮真实设备/目标 App 启动与完整采集,核验九阶段实时值、停止响应、报告落盘和原生 UI;随后完成 arm64/universal2、Developer ID、Notary、staple、Gatekeeper、独立安装与 GPL-3.0 法务门禁。旧启动、Frame 长窗口、Battery 物理放电和 GPU Counter 数值门禁保持原有状态。