两轮真机非启动数据缺口修复
事实与方案 · 2026-10-03
同一测试包、同一指标计划的两轮短会话(设备 A / 目标 App A)均已封存,但 complete 只证明 Raw 与报告边界,不代表 26 项非启动请求指标全有值。两轮设备网络发送/接收各 0 个有效值;能力事件逐字记录 AttributeError: 'DeviceNetworkAggregateStream' object has no attribute '__aenter__'。聚合包装流实现了异步迭代,却未实现 Pmd3Session.open_channel() 所需的异步上下文协议,导致在 NetworkMonitor.startMonitoring 之前失败。不得把同轮进程网络值替代为整机网络。
同两轮逐帧原始记录分别有 165 / 258 个刷新率观测,产品实时样本也有刷新率、10 秒滚动 FrameTime P95 与 P95−P50 抖动值;然而最终 coverage 的三项均为 missing/0,产品 metrics.csv 缺相应列。报告消费者只接收 Raw/派生帧,未接收已发布的产品样本,CSV 列表亦未列这三个已有的 PerformanceSample 字段。这里是输出链路断层,不改采集源、公式或默认开关。
最小修法:①聚合流实现 __aenter__/__aexit__,仅委托固定上游服务且返回同一包装流,保留既有 stop-drain 与窗口 flush;②产品样本已发送后,在线报告以该样本的有限值与质量标签更新三项覆盖计数,缺值绝不补零,现有 report-state 恢复沿用覆盖账本;③在 CSV 末尾追加三个数值及其质量列,保留既有列的名称、次序与旧 Session。产品实时数值的现有公式、单位、scope 与 10 秒窗口不变:P95=nearest-rank 第 ceil(0.95n) 位(n≥5),Jitter=P95−P50,刷新率来自有效 refreshRateHz/refresh interval。质量证据仍为 candidate/valid,不是 E4 通过。
验收门:包装流预热→进入→迭代→stop-drain→退出的顺序和一次性关闭;网络来源失败时仍保持 missing-source、来源 receipt 不得伪造;显示三项有效样本出现在最终覆盖与 CSV,warmup/缺值/非有限值保持空值且不计数;旧 CSV 前缀和旧 Session 不变;匹配 Python/Swift 测试、全量回归、知识门禁和站点构建通过。实现后做同规模 19/22 样本与高量级网络聚合性能对照,测首响应、总耗时、CPU/RSS/I/O 能测项并如实登记 unknown。单源消费有界,记录/报告更新 O(1),CSV 每行增加常数列;网络聚合原有 O(n) 流式内存上界和 500 ms Stop 消费者窗口不放宽。测试以单进程、显式超时执行;上游 ActivityTrace 的 0.9–2.2 秒间隙另列,不能由本补丁宣称消除。
Implementation Update · 2026-10-03
实际修改:DeviceNetworkAggregateStream 现在委托固定上游 NetworkMonitor 的异步进入与退出,返回包装流自身,现有网络聚合、Stop drain 与末窗 flush 未改;OnlineReportSession.observe_live_display_sample() 只对已请求的 P95/Refresh/Jitter 计入已发布样本的有限、非负且质量为 valid/candidate 的值,Refresh 额外要求正值;realtime.py 在发布产品 sample 后交给报告账本;PerformanceSessionStore.swift 仅在 CSV 末尾追加三对值/质量列,不重排旧列。与方案无架构偏差,旧 Session、旧报告和原始值未改。
匹配验证:Python 聚焦 26/26;Sidecar 全量 1333/1333;Swift 存储聚焦 1/1、全量 217 项、3 skipped、0 failed。覆盖了网络包装流进入/退出各一次与异常传播、显示三项有效样本/缺值/非有限值、报告 checkpoint 恢复到 final、CSV 新列与实际数值。E2 程序测试不替代真机网络来源与显示持久化 E4。额外微基准(单进程、9 次中位):报告观察 19/22/10000 条分别约 0.071/0.080/46.274 ms,10000 条吞吐约 216104 条/s、进程峰值 RSS 27.43 MiB;空循环仅是控制开销,不当作旧产品的可比功能基线。该操作 O(1) 每样本,未见新增随 Session 长度增长的容器。构建/签名、同源码测试包及真机验证另记;CPU 与 I/O 峰值在此微基准中为 unknown。
当前状态:产品代码与离线测试 E2 修复已完成,完整交付待新包验证;旧两轮仍是设备网络 missing-source,三项旧最终覆盖仍为 missing/0,不得回填。新包 E4 需要实际 UI 复测:设备网络出现可核来源、合法非零正控/守恒;三项显示的最终覆盖计数与 CSV 和实时样本对应;上游 ActivityTrace 间隙单列,不能由本次输出链路修复推断已经消失。Startup 总时间与稳定性改善仍未证明。
Validation Update · 2026-10-03
本批同源码测试包版本 101 / x86_64 已构建。Developer ID 签名后,对 App 内全部可执行与扩展做安全时间戳复核:372 件、缺失 0;App 与交付 DMG 分别公证 Accepted、staple/validate 成功,codesign --verify --deep --strict 与 Gatekeeper 均通过。独立挂载 DMG 后再次核 App 版本 101、签名、公证票据与 Gatekeeper;旧版先正常退出并留私有回滚压缩包,再覆盖安装到本机,安装后启动冒烟通过。dist/ 只保留这一份测试 DMG,旧本地未公证测试 ZIP 已清理。交付 DMG 163409853 B、SHA-256 65582bbc1cf5d6d6e6e19b98095fedc9f156088c3ec3b54638b08c4acaa21987。
包装脚本当前仍对嵌套模块使用无安全时间戳签名;本批在提交公证前逐件补签并复核,不把临时操作称为脚本永久修复。包和安装验证是 E3;未在新包上采新真机 Session。下一步由使用者按真实 App UI 执行短轮:同一指标选择下观测设备网络双方向的来源/非零正控/字节守恒,检查三项显示的实时样本、CSV 非空数量与最终覆盖是否一致;保留缺值、质量标签和原始来源,不用进程网络代替整机网络。上游 FrameLifetime 约 0.9–2.2 秒接收间隙及少量 FrameTime 缺点继续独立观察。E4、Gate C/D/E 和完整 Beta 均未因本次 E2/E3 结果自动关闭。
两轮复测后的修复方案 · 2026-10-03(R2,先定公式后改代码)
版本 101 的后续两轮真实 UI 短会话分别请求 26 项非启动指标和 38 项(含启动)指标;产品 CSV 为 50/42 行,Raw→Metric→Report 哈希及末序列均匹配,Core 报告 sealed/complete,然而产品 manifest 均标为 partial。唯一登记的失败原因是 Python RequestsDependencyWarning;Swift CollectorSupervisor 把任何非空 stderr 发为 diagnostic,两个采集路径又不看退出码就把 diagnostic 置为 Session 失败。方案:stderr 仅保留为诊断文本,只有非零退出才引用为进程故障;正常退出仍必须同时满足 stopped、Core seal、delivery 哈希及原有协议错误门,不能以“忽略警告”跳过完整性检查。无终止事件也不能视为正常退出。两条采集路径同口径,预热故障与显式 error/control_rejected 仍失败。旧 partial manifest 不回写。
两轮设备级网络来源已观察到且源端/聚合端字节守恒,但一个 100 ms 初始聚合窗分别承载全轮收发字节的约 94%/79%;该窗源时间字段为 -1,分别导致约 5.01/2.01 GB/s 的候选峰值。对旧逐事件 Raw 的只读核对也显示负源时间先于非负源时间,且常含较大首批字节。这支持“负源时间不属于已校准测量区间”的保守门,不证明上游字段的全部语义或真实带宽。 公式版本从 network-window-rate.v3 升为 v4:每条 ConnectionUpdateEvent 的非负、有限字节仍进入来源守恒账;若其源 time < 0,该字节记入独立的 initialSnapshot{Tx,Rx}Bytes 与计数,不进入速率分子。聚合窗速率合格字节为 txBytes - initialSnapshotTxBytes / rxBytes - initialSnapshotRxBytes;仅当窗内至少有一条合格更新,才允许显式 0 为候选值。仅有初始快照的采样窗输出 null/warmup;无源事件仍为 null/missing-source;后续非正采样时长仍为 null/invalid-window。legacy 逐事件 time<0 同样排除;缺失 time 的历史输入保持原有行为并显式注明语义未核,不改写旧归档。来源与聚合原始总字节继续相等,另列被排除字节,不把初始快照丢成 0 或假称来源丢包。
关键路径与资源:聚合器仍按事件 O(1)、单窗口 O(1) 内存,无 per-connection 状态、无额外进程或重复解码;每条源事件只多一次整数比较和常数次加法;1 秒采样、100 ms 聚合与 Stop 预算不放宽。按 10 万事件同规模基准对照旧实现,记录总耗时、吞吐、首个输出、CPU/RSS/I/O 可测项及最差窗;针对两份现存封存会话做只读聚合反事实核对,不改原件,不把反事实当真实新 Session。验收覆盖负时间纯窗、负/非负混合窗、合法零、无源、epoch 切换、字节守恒、两条 Swift 采集路径的“警告+退出 0+封存完整”与“非零/缺 seal/显式错误”负例;聚焦测试、全量 Python/Swift 回归、知识门禁与网站构建均须完成。真机 E4 仍需新同配置短轮和独立网络正控,不用旧会话倒填 v4 值。
R2 Implementation Update · 2026-10-03
实际范围:PerformanceSessionController 的普通与预热采集两条路径共用退出判断——stderr 仅保存为诊断,退出码 0 不据此判失败;非零退出携带诊断失败,缺终止事件失败;显式 error/control_rejected、缺 stopped/Core seal/delivery 哈希的原有门禁不放宽。DeviceNetworkBurstAccumulator 将 time<0 的字节额外记入有界的初始快照计数与字节账,原始 txBytes/rxBytes 不减;RawMetricEngine 的 v4 分子仅扣除这部分初始化字节,纯初始化窗为 warmup,真实无源仍 missing-source,非负源时间的合法零仍可为 candidate。来源 receipt 增列三个初始快照字段;Swift Registry、Reviewed JSON 合同与 Canonical 知识页同批升 v4。没有改网络订阅、采样节奏、Stop 预算、进程网络或原始 Session。相对方案无架构偏差;旧聚合 Raw 因无逐事件负时间分解,不做原位重算。
两轮旧聚合 Raw 的只读下界:较早轮原始设备收发合计 5,020,394,023 B,其中全负时间聚合窗 4,737,296,881 B(94.36%);另有一个负/非负混合窗 68,387,141 B,旧聚合行无法精确拆分,故不报 v4 精确反事实峰值。较晚轮原始合计 2,007,271,411 B,全负时间窗 1,591,913,962 B(79.31%),无混合窗。只读数值不改写旧 v3 报告,也不等于新包实际速率或设备物理真值。
匹配验证:Python 聚焦 35/35(初始快照纯窗、混合窗、合法零、来源缺席、字节守恒及 receipt);全量 Sidecar 1335/1335。全量首跑有一项与本批无关的 200,000 消息计时敏感断言波动,单项复跑 PASS,第二次全量 1335/1335 PASS;保留首跑失败事实。Swift 对 stderr+正常/异常退出及两个普通采集 fixture 的聚焦 3/3,全量 218 项、3 skipped、0 failed。知识门禁 66 contracts PASS。两轮旧 Session 的 Raw/Metric/Report/Core seal 哈希与 Raw 序列先前只读核对均一致;本批只读解析旧聚合字段,不改写封存数据、不回填历史值。
效率同规模交错外的独立进程基准(100,000 连接更新,5 次中位,输入与模块装载方式一致):原版 0.382745 s / 261271 条每秒 / CPU 0.375687 s / RSS 19.05 MiB;v4 0.413136 s / 242051 条每秒 / CPU 0.407488 s / RSS 19.16 MiB。中位吞吐约低 7.36%,绝对每事件额外约 0.304 µs;首个输出 0.401/0.415 ms,最慢轮 0.426/0.423 s;生产短轮约数千网络事件,因此额外计算量为毫秒级。此微基准无磁盘写入,物理 I/O 峰值记 unknown;没有把不同环境数字合并。站点 build、签名公证包与新包 E4 分别留待后续验证,完整 Beta 仍 partial。
R2 Validation Update · 2026-10-03
知识门禁 66 contracts PASS;站点只构建、exit 0 / 43.89 s,新增 R2 归档 HTML 严格标签栈 0 错位 / 0 未闭合,docs/ 源、public/archive/ 与构建产物 SHA 逐字相同;未执行生产网站发布。公开变更行未见私人会话标识、目标 App Bundle ID、设备名、证书指纹或数值 PID(服务标识依知识页技术溯源规则保留)。
同源码测试包 版本 102 / x86_64:App 内嵌可执行/扩展 339 件均有安全时间戳;App 与 DMG 分别完成 Developer ID 签名、公证 Accepted、staple 与 validate。App 和 DMG 的签名严格验证通过,App Gatekeeper 为 accepted / Notarized Developer ID;DMG 独立只读挂载、复制到临时安装目录后,再次验证签名/票据/Gatekeeper 与版本 102,主程序字节与源包一致。仅清理 dist/ 的旧版本 101 DMG,保留唯一版本 102 测试 DMG。交付文件 MacApp/dist/Perfowl-b102-2026-10-03-x86_64-notarized.dmg:135664626 B、SHA-256 a061f2fc3419740693faa6416fd5b3980adcb78e416681c207950805002886b7。
本机 /Applications 的版本 101 在验证时仍运行;本批不强退用户当前 App、不覆盖活动安装,版本 102 的独立解包/复制验证不冒称已安装到 /Applications。下一步由使用者结束旧版后安装版本 102,按同一指标计划做有界真实 UI 两轮:①正常 Stop 时产品 manifest 应 completed、Core sealed/complete,警告不能独自致 partial;②设备网络 receipt 原始总字节仍守恒且独立列出初始快照排除字节,纯初始窗不产候选速率;③以设备侧已知非零流量验证合格窗口数值,不能仅凭来源守恒宣布物理准确。旧 Session 一字不回写。此处为 E2 程序门 + E3 包门,不是新包 E4;Gate C/D/E 与完整 Beta 仍 partial,Startup 稳定性改善仍 NOT PROVEN。
R3 方案 · 2026-10-03 · Network 作用域投影一致性修复
版本 102 的两轮真实 UI Session 分别请求 26 项非启动指标(86 样本)和 38 项含启动指标(83 样本);两份产品 manifest 均 completed,Raw/Metric/Report/产品 seal 的摘要与末序列匹配,产品解析/序列/写入失败均为 0。Device Network v4 在两轮分别排除 1,434,824,978 / 1,584,689,294 B 负源时间初始化字节,原始 source↔aggregate 字节仍相等且来源丢弃为 0。整机发送候选峰值分别为 25.375 / 98.137 MB/s;后者可由约 1.09 秒内 106.964 MB 的非初始化来源字节复算,尚无独立传输对照,不得把高峰直接裁成算法错误,也不得凭来源守恒裁成物理准确。含启动的第二轮启动报告仍 partial,是另一个未关闭门。
现已确认的产品缺陷在显示投影:Network 组的 CapturePlan 同时请求进程与设备各一对指标,而 LiveSampleProjector 在两对都有值时固定优先进程,单一 networkSend/ReceiveBytesPerSecond 字段加 networkScope 只能携带一对;工作台的 Send/Recv 没有作用域名称,CSV 也只写该单对。两轮产品 CSV 因此几乎全是 process(85/86、82/83 行),Core 最终报告另有 device 值。读者可能把不同作用域值当成同一指标前后不一致,或误以为整机速率已经显示/导出。本批只修投影与标签,不改 v4 来源字节、速率公式、原始 Session 或旧报告;不做阈值截断和推测性带宽“校准”。
最小实现:保留旧单对字段的现有 process-first 行为及 CSV 既有列,保证旧会话/导出消费者兼容;在同一产品 sample 增加显式 processNetworkSend/ReceiveBytesPerSecond、deviceNetworkSend/ReceiveBytesPerSecond 四个可空字段及各自质量;Workbench Network 改为“App Send/Recv”和“Device Send/Recv”四条独立曲线,设备项始终标 device 且 candidate 不提升为 valid;CSV 仅在末尾追加四数值/四质量列。缺源/纯初始化只能为 null,不以另一作用域回填;报告原有 device/process 两组统计不变。相关 Registry 指标 ID、source、单位和 v4 算式原样保留,旧历史数字不回写。
R3a 构建前回归增量(先定方案):全量 Swift 回归连续三次在“中途添加指标不重配来源”夹具出现 stopped 未到达,单测独跑与整个 Foundation 类独跑却通过。只读检查发现 CollectorSupervisor.start() 给子进程安装退出回调之后才调用 process.run(),而 output/process 等供 finish() 排空末尾管道的引用却在 run() 返回之后登记;瞬时退出可使 finish() 看见空引用。窄修法是在启动前登记输出/错误/输入句柄与进程身份,启动失败再对称清空;保留现有单队列与在途回调排空协议,不延长正常 Stop 预算。新增“hello→stopped→立即退出”的回归夹具并用全量套件复验。此增量只修正常退出末尾字节丢失,不修改网络公式/会话状态门,也不把失败子进程视为正常完成。
资源门:每产品样本最多读取四个现有缓存指标并写四个标量,时间/空间额外 O(1);不会增加 DTX 订阅、per-event Raw、轮询或进程。以 86/83 样本真实规模及 10,000 样本合成规模对照投影/CSV 前后耗时、CPU、RSS,记录 I/O 可测值与首样本/最慢情况。验收门:两对同有值时四条曲线与 CSV 各归其作用域;只一对、两对都缺、合法零、candidate/warmup 与旧字段兼容;从两份现有 Session 只读复算投影期望,不改原件;匹配及全量 Python/Swift 测试、知识门禁/站点构建、同源码 Developer ID/公证/staple/Gatekeeper/独立安装包验证。测试包可交付用户后,真实 UI 同配置正控仍单独验收整机物理带宽;不能把这次显示修复写成网络 E4 校准 PASS。
R3 Implementation Update · 2026-10-03
实际修改:Core 实时投影在原有兼容单对字段之外,同时提供进程、整机各 Send/Recv 的四个可空值和各自质量/作用域/单位;Swift wire model、产品 sample、Session CSV 与时间线导出 CSV 均只追加字段,不重排旧列。工作台 Network 四条曲线明确写 App / Device,开关按两行排布以适配窄卡片。回放旧 Session 时仅在旧 networkScope 明确为 process 或 device 且不存在新分作用域字段时,将旧单对数值显示在对应曲线上;另一作用域仍缺值。来源 Raw、v4 算式、报告统计、旧 Session 与旧 CSV 均未回写。相对 R3 方案无公式偏差。
R3a 构建前回归暴露的极短命子进程退出竞态另做最小修补:CollectorSupervisor.start() 在 run() 之前登记管道与进程引用,启动失败对称清理,保留原有回调在途计数和尾部排空。新增“hello→stopped→立即退出”12 次回归夹具,正常封存仍要求实际 stopped,无终止事件不会伪造成完成。先前全量 Swift 连续三次各在同一测试出现 stopped 丢失、隔离复跑通过;修补后两次全量均通过,首轮失败历史保留。
只读重放两轮既有封存 Raw,按旧窗口与同一投影器得分作用域字段:含启动轮进程发送 82 个非空、整机发送 78 个非空,整机候选最大约 98.137 MB/s;非启动轮进程发送 86 个非空、整机发送 79 个非空,整机候选最大约 25.375 MB/s。这与 Core 报告数量级一致,只是 E2 反事实投影,不替代新版本真 UI 会话,也不证明设备物理带宽正确。另用合成两对同值/单对/缺源/零值夹具核对作用域、质量与旧字段 process-first 兼容。
匹配与全量门:Sidecar 1337/1337,Swift 220 项 / 3 skipped / 0 failed。Python 首跑未配置 Sidecar 包路径,出现一项导入错误和一项并发计时断言失败;纠正运行环境并串行执行后全量通过。Swift 在 R3a 修补前的全量失败与隔离通过均保留,不把重跑当成首跑成功。git diff --check 干净。
投影微基准是同机独立进程、四个缓存网络值、每轮 10,000 样本、各 5 次中位:旧版 wall 420.717 ms / CPU 410.385 ms / RSS 峰 27.156 MiB / 首样本 0.042 ms;新版 wall 460.845 ms / CPU 445.405 ms / RSS 峰 26.965 MiB / 首样本 0.049 ms。投影局部 CPU 增约 35 ms/10,000 样本(约 3.5 µs/样本);86/83 样本的同进程交错测量约 3 ms 量级,不能外推为完整 Session 点击到最终报告耗时。CSV 增列只在每行附加固定八列,未增加 Raw 订阅或文件扫描;CSV 专项前后 I/O 峰值与整包端到端对照未取到,记 unknown,不伪填零。当前为 E2 程序修复,整机高峰的物理正控 E4 和含启动轮的 startup partial 仍分别开放。
R3 Validation Update · 2026-10-03
知识门禁 66 contracts PASS;站点构建在本批草稿归档上 exit 0、58.56 s,最终实施/包验记录写入后再次构建并核归档字节。此处仅构建,未发布生产网站。新增公开行隐私形态扫描零命中,既有归档不回改。
同源码内测包 b103 / x86_64:App 及 339 个内嵌可执行件各有安全时间戳,App 和 DMG 分别公证 Accepted、staple/validate 成功;codesign --verify --deep --strict 与 Gatekeeper 对 App、DMG 独立复制后的 App、最终 /Applications/Perfowl.app 均通过。只读挂载 DMG 后复制到独立临时安装目录,复核版本 103、主程序字节与源 App 相同;本机旧 b102 已正常退出,先生成私有回滚备份,再覆盖安装 b103,启动冒烟时主进程正常运行。旧 b102 安装备份与 DMG 留在私有回滚目录,dist/ 仅留一份 b103 测试 DMG。交付文件 MacApp/dist/Perfowl-b103-2026-10-03-x86_64-notarized.dmg:161807123 B,SHA-256 63a73e1a3797311405a9558019defa29ac724051c4f0155a8209083e57d1729b。
本地 E2/E3 已达到可交用户测试,不等于完整产品 E4/正式发行。用户下一轮用已安装 b103 的真实 UI,按上轮同指标计划分别做一轮非启动与一轮含启动短会话:①确认 App manifest completed、Core sealed,Network 面板 App/Device Send/Recv 四项各带正确作用域;②导出 CSV 的四个新增数值/质量对与同轮产品样本及 Core 分作用域统计对照,合法零保留零、缺源保留空;③在有可信且可计量的整机非零网络正控时,以源端字节/同轴窗口核整机候选峰值,不能仅靠来源守恒宣布物理带宽准确;④含启动轮的 startup partial 单列原因,不用网络修复遮盖。保留原始 Session 与原报告,不回填旧轮。当前 Gate C/D/E、整机网络物理正控、Startup 稳定性与完整 Beta 门禁仍开放;内部测试包可用不代表 GPL 法务/外部分发门已关闭。