Owner 新会话启动审计与 SW-1 有界采集窗口差分实验
1. Lead 决策与边界
Lead 独立读取 Owner 新录制会话 O1 的产品报告、核心清单、原始事件、外置二进制与指标文件,并在当前 5309283a28499c613bc312a2192f798a65dbdd97 进行只读核验。本页 E4 指真实会话证据;本页新增实验尚未实施,不能据此宣称修复有效或产品验收通过。
本次完整启动时间仍 missing;现有字节中没有 IFR opener。批准 SW-1 默认关闭的单变量窗口实验,不批准生产策略修改。 A1 UI E4 保持 OPEN;Phase C Hybrid 保持 FROZEN;Network 与 FrameTime 各自另批。
Owner 的固定流程:Lead 落盘方案并派发,Implementation 按合同执行,交付后 Lead 独立验收;无需逐批等待 Owner 再次审批。Owner 新增规则:GitLab 每批只尝试一次推送,失败不重试、不阻断 GitHub、实验或技术验收。远程同步失败单列 partial,不篡改真实 ref,不 force。此规则不授权绕过现有生产部署守卫;本批不发布网站。
2. O1 独立证据
原始位置与真实设备/应用/进程身份只留私有证据;公开统一用 O1、设备 A、目标 App A。私有目录:~/Perfowl-Local-Archive/owner-startup-audit-20260927/,只有脚本与证据,没有新 worktree、虚拟环境或 Raw 副本。
| 项目 | 独立读数 | 解释 |
|---|---|---|
| 全会话时长 | 629.939 s | 长会话不等于启动 tap 持续运行 |
| 产品 CSV | 622 行 | 观察样本,不代表完整启动端点 |
| 请求指标 | 38 项 | 非历史 startup-only 12 项配置,不用于成功率直接比较 |
| CoreProfile | 39 chunks:31 binary + 8 bplist | 全部 startup-lifecycle / active |
| binary 解码记录 | 2,235,860 | 使用 RAW v2 头、跨 chunk 余数与实际流偏移对齐 |
| IFR opener | 全线程 0,目标线程 0 | 跨整个已保存 CoreProfile 字节扫描,不只查白名单/报告 |
| IFR closer | 全线程 21,冻结映射可归属目标的 0 | 18 属其他进程、3 映射未知;未知不可冒认目标 |
| 可解释生命周期 action 记录 | 全线程 42,冻结映射目标 13 | action 记录数不等于 report targetRecordCount |
| 出厂 Total | null / missing,status partial | requiredMissingPhases 仅 IFR;sceneWillConnectTo 另有不完整边界 |
| 当前纯内存重放 | 10 个主字段与出厂报告零差异 | 不调用会回写文件的 derive_session;不证明录制二进制版本相同 |
| tap completion wait | timed-out / startup-completion-grace-expired,4.040685 s | 非语义完整成功 |
| 结束时 open phase | UIKit Scene Creation | 当前延长条件仅 didFinishLaunchingOpen,此状态不获延长 |
| tap stop drain | quiescent,postStopChunkCount=0,post-startup observed bytes=0 | 本次没有 A1 drain 候选可救 |
| 设备 loss marker | 4 | host liveQueueDrop=0 不等于设备无丢失;不能断言恰好丢了 IFR |
| writerQueueWait | P95 901.689 ms / max 1412.541 ms | backlog 线索,尚无因果归因 |
文件独立 SHA-256:
- Raw:
8db320b3c2af40bdc9887329911829bf4b5001a2cb611f5e3d55510f532afef4。 - CoreProfile blob:
d4e04e594555b9f223614488770702f68f2758e1cc3c3e735f11dc185e51fb3d。 - Derived metrics:
571216701bd0cb0362d9daa63ad88d981ef91bce9a9651ee0e2fab7e1099a8c8。
各 chunk SHA 也逐块核验。整个 Session 全文件的 SHA、size、mtimeNs 在审计前后相同;只证明本次审计区间未变,不追溯此前不可变性。私有脚本一次审计约 5.96 s(包括前后哈希),不是产品性能门禁。
2.1 时钟与源码交叉核验
主机域:launch.requested → startupSemanticComplete 约 7.720 s;semantic flag → tap stop request 约 48.698 ms;stop request → drain complete 约 770.286 ms。completion wait 4.040685 s 是其中一个等待阶段,不能称为“点击后 4 s 停源”。设备域已保存的最大 kernel tick 相对选定 launch-start tick约 +1438.815 ms;这是覆盖读数,不是 Total、也不是与主机域同轴的窗口。
realtime.py 的等待循环允许 didFinishLaunchingOpen 获得一次 8 s 延长,且总 deadline 受 launch-request 主机时钟 +15 s 约束。grace 到期后仍会设置 startup_semantic_complete 并 request_stop_for_drain。名称里的 complete 因此不能单独证明 IFR 完整。实际安装包来源尚未绑定到 Git 完整 SHA:当前源码说明候选机制,Raw/manifest 证明本次真实结果,两者证据分开。
已排除的直接修复方向:O1 没有 opener,修改 A1 role 保留、重新配对现有 closer、重放原文件,都不能恢复缺失端点。尚未证明:端点在 stop 后产生/送达,设备 overflow 丢了 opener,或目标行为/系统 schema 本来不同。延长窗口只是可证伪的假设,不是根因结论。
2.2 其他性能读数与独立异常
- CSV 目标 CPU 均值约 1.85%,峰值 175.86%:目标进程非归一化口径可超过 100%,不是整机 CPU。物理 footprint 约 438.6–525.6 MiB;均为现有 candidate 观察,未做同场校准。
- CSV FrameTime 613 点,均值约 18.46 ms;frame-report 使用 5554 条呈现记录、5407 个区间,平均约 65.65 ms。两者样本/窗口不同;不能把后者作为这 10 分钟 App 卡顿真值。FrameTime P95、Pacing Jitter coverage 仍 missing,时钟/窗口另批。
- CSV 出现 process network Send 约
1.7029451528330846e19 bytes/s,仍标 candidate。这是明确的数值可信度异常,禁止据其算平均带宽/性能结论;是否 unsigned 哨兵、reset、上游差分或时间窗问题待独立 Raw 归因。不同于此前 DeviceNetworkAggregateStream 入口缺陷,不能直接沿用旧根因。本批不改 Network。 processObservedRunningMs/foregroundReadyMs的 4179.916543 ms 是轮询观察值,不是完整 App Launch Total;九段累计约 949.285121 ms 也不是 Total。
3. SW-1:唯一实施合同
3.1 目标与实验变量
回答一件事:在同一正确 UI 配置下,UIKit Scene Creation 尚开且 IFR 未配对时,多保留剩余的现有主机预算,是否能获得目标线程真实 IFR opener/closer?
默认 OFF 的环境开关 PERFOWL_STARTUP_SCENE_WINDOW_EXPERIMENT:缺值/0=OFF,1=ON,其他值 fail-closed OFF 并记录解析诊断。开关在核心启动时固定,不支持中途翻转。
ON 仅在原 base-grace 到期的检查点生效,必须同时满足:未 Stop/closing、有效动态目标身份、尚未 completionObserved、UIKit Scene Creation 仍在现有 decoder openPhases、现有 launch-request 主机 max_deadline 尚未到达。此时只允许一次延长,deadline 设为现有 max_deadline,不另造 deadline。已存在 didFinish-open 路径保持原样并优先,禁止延长叠加。延長必须被显式标记为 scene-window-experiment,不伪称 completion-observed 或干净完成。
这是最多补足 launch-request 后 15 s 的主机等待,不是设备 tick 准入上界。Stop 必须随时打断;completionObserved 仍立即结束;max deadline 仍失败闭合并保留 missing。openPhases 为空、仅其他 phase、目标未验证、时钟边界缺失,一律不进入新增分支。
3.2 允许范围
MacApp/Sidecar/perfowl_collector_core/realtime.py:上述单次 opt-in 等待分支、解析与少量 telemetry;可提取一个纯等待决策 helper 以便 deterministic tests。- 专项测试文件:边界/竞态/资源测试;最小新增离线只读 locator 工具可放现有 tools 路径。不引入外部依赖。
- 关联 devlog 实施增量及 C2/C3;由于触及实验采集链,Implementation 做 C5 闭环复核,knowledge/HomeExtras 保持原支持状态/计数,只在确有对应实验说明位置增加默认关闭、未验收说明,不包装成支持率提升。
- 新包构建、签名、公证与独立安装;包命名明确 experimental,冻结 Build74 包和回滚包保留。
禁止改:launch_trace.py 配对/保留/质量/Total,metric_engine/Network/FrameTime,kdf2/bm/bso/bsoc/csd/rp/frame filter,source restart/rearm,Phase C,普通首帧替代端点,UI 指标默认选择,pre-push/网站生产部署。不得合并 G2/SSO/WIP 分支。
3.3 最少 telemetry(原主机域,缺值保留 null)
manifest 增量命名保持 startupSceneWindowExperiment* 前缀:enabled、eligible、extensionApplied、decisionReason、deadlineMonotonicNs、extensionStartedMonotonicNs、extensionEndedMonotonicNs、openPhasesAtDecision;同域耗时按 (end-start)/1e6,负/缺值置 null。记录现有 completion waitStatus/reason、tap stop/drain 与 sourceEpoch/targetGeneration,保留 original 字段语义,不回写旧会话。
不新增指标、不新增总时间公式。读取检查点 snapshot 一次、内存 O(1) 状态、最多 3 条新增控制 telemetry;禁止高频轮询/每记录格式化/无界 ledger。等待继续复用 event race,每个 wait 子任务在 finally 取消并 gather。
4. 实施与验收顺序(不刷概率)
E0:先复核录制来源与同类历史
复核当前 HEAD/status;只读定位 O1 所用安装包(真实 executable 路径、Info.plist、核心 SHA、可获得的完整源码 provenance)。缺来源标 unknown,不编造。阅读历史 dedicated/prewarm/grace/rearm 记录:若发现已完成完全同条件窗口实验,停止重复,实现前交 Lead 该证据。异类 bm/bso、rearm 与角色反事实不算同实验。
复跑 O1 namespace scan,明确 RAW v2 头、bplist、跨 chunk partial record、外置 blob SHA与偏移,不按 blob 全局64字节步长扫描;opener 的 func-bit 变体也覆盖。输出 main-thread witnesses、所有未知 closer 身份;禁止靠最终 PID map 把线程重用冲突洗白。必要时用第二个纯字节定位器复核 code12,不新增整棵源码复制。
E1:确定性测试 + OFF 等价
必须覆盖:OFF/无开关/非法值,唯一 Scene-open 可延长,其他 phase 不延长,无动态身份,已完成,不存在 launch边界,deadline 恰等/已过,didFinish 已延长不叠加,Stop 在决策前/等待中/完成同时到来,source closing,任务取消与无泄漏,超时保持 missing。
旧四轮 + 三轮 UI + O1 的 Raw/报告只读重放,证明 OFF 主字段、pairing、保留与指标算法不变;不同 schema 使用隔离工具兼容,不改原文件。新工具测试包含分块拆头、拆记录、bplist夹块、debugID出现在 args 的假命中、跨源/代际、映射未知/冲突、只 closer、其它进程完整链;假命中不能形成 PASS。
专项与现有 Sidecar 全量匹配验证;不以计时 flake 自行判回归/非回归。OFF 性能交错至少 3 配对,同 Python/字节码状态:单MB扫描吞吐下降 ≤5%,RSS 增量 ≤8 MiB,无额外 Raw全量复制/I/O;首响应与 Stop响应不劣化。ON 最长等待是刻意的实验成本,必须分列,不能与 OFF 同预算掩盖。ON 后台队列原容量不扩大。
E2:实验新包工程
Developer ID、secure timestamp、hardened runtime、notary Accepted、staple、deep-strict、Gatekeeper、独立解包启动、ZIP完整 SHA、核心 SHA与exact commit绑定均要留证。仅有构建不进入真机。嵌套 TSA 的既有缺口只对实验构建产物重签,不并改 build-app.sh;证据如实区分原脚本与产物处理。
E3:最多两个新真实 UI Session
同一个新实验包,设备 A、目标 App A、相同 cold-launch 流程,只勾 Startup Timing 12 项、关闭截图;逐项比较 planHash/registryHash、identity、四 lifecycle kdf2、csd0、bm0、rp100、exact-debug-id。O1 的 38 项+截图不是这一对的基线,不用新旧不同配置宣称提升。
按 OFF → ON 顺序各一轮,最多 2 个新 Session,包括 INVALID 轮也计入预算;每轮一次 Start/Stop,固定观测30 s,若启动完成也不提前人为挑窗口。每次切换 env 后完整重启 App及其预热核心,验证实际核心继承状态;不要重用旧进程。未按预定开关/配置进入核心即 INVALID,停止,不补刷。
先落只读封存清单再分析,分析结束全文件重哈希。UI 原生 live/final 与隔离 offline replay分别交付;App 未写诊断块属于已知路径差异,不覆盖成 offline 报告。每轮有界收集宿主 CPU/RSS/I/O 与 UI同轴操作记录;策略不允许的项写 unknown,不绕路自升证据。单轮 wall 上限120 s、Raw 观察安全预算1 GiB;触线立即按真实 UI Stop收尾,记录 safety-aborted,不继续采样;不人为加压/延迟/改 drain。
E4:Lead 判据
- ON 获得实际目标同线程 IFR opener +合法closer,raw locator/身份/代际/设备 tick链闭合且现有原生配对 candidate成立:只说明该轮实验阳性;2轮不证明稳定性提高。只有新增等待确实 applied、端点出现在 base截止之后的同域收到时间,才能支持“更长窗口保留救到了端点”。
- ON 端点早已在 base截止之前,或 OFF 本来也完整:实验对“窗口致缺失”不具判别力,不自判修复。
- ON applied但仍无opener:窗口假设本轮不支持,冻结该实验,下一步由 Lead依 loss/线程/source证据选择源丢失取证,不继续加时间、刷轮数。
- ON 未 eligible / 两轮形态不满足:如实 inconclusive,不自行扩样。
- 任意伪造/跨线程/跨代际/其他进程链、原文件变化、OFF行为回归、Stop失效、资源越界:REPAIR REQUIRED。
若阳性,Lead另定生产最小补丁与至少跨设备/配置正负回归;这之前默认开关仍关闭,A1 UI E4/Build74正式验收均不因此关闭。Native active candidate不等于 A1 drain正向,实验也不强行要求事件落在drain。
5. 交付合同与环境纪律
只使用主工作区、现有依赖和一个私有批次目录。零新增常驻 worktree/venv;若测试必须临时隔离,最多一个目录、验证后移除并交代。四项他方 WIP 与 Instruments trace逐字节保全;只显式暂存本批路径,不 reset/clean/全量暂存。
Implementation 交付 exact commit/parent/五类文件范围与偏差,deterministic测试与OFF回归,包绝对路径与完整SHA/provenance,两轮真实UI原始哈希/配置/同域窗口/locator/loss/资源/报告差分,所有unknown及停止理由,C2/C3/C5、GitHub与GitLab一次尝试分别状态、Webhook。不生产发布;不自判PASS;不得开启Network、FrameTime、Hybrid下一阶段。
整体路线:SW-1窗口假设验证 → Lead选择生产最小修复或源丢失分支 → 同配置跨设备稳定性验证 → 新包正式E4。Dedicated已实施不等于端点稳定;Hybrid没有完成,继续冻结。网络巨值另建待办;FrameTime时钟与P95/Jitter缺值另批,不能靠这批扩大支持声明。