implP4E4implemented · gate-open2026-09-27

Owner 新会话启动审计与 SW-1 有界采集窗口差分实验 · 实施增量

角色与边界:本页由 Implementation AI 交付,是实施记录而不是验收结论。真实设备/应用/进程身份只留私有证据,公开统一使用「设备 A」「目标 App A」;本页不含 UDID、序列号、Bundle ID 或真实 PID。无侵入红线保持:不改目标 App 源码、不重签、不注入、不 Hook、不嵌 SDK;本批未改 Total、配对规则、采集过滤、源重启、Network、FrameTime、Hybrid,未发布网站,未自判 PASS。

合同依据:Owner 新会话启动审计与 SW-1 有界采集窗口差分实验(Lead 方案提交 e634d3994106890567782e71319b1a140daa1e41)。试验变量只有一个:默认关闭的 PERFOWL_STARTUP_SCENE_WINDOW_EXPERIMENT。

入口分类更正(R1,2026-09-28,依 Lead 独立审计)

原快照把 §4 的两轮记作「两个真实 UI Session」并称「无功能性偏差」——这是错的,现予更正。两轮由驱动脚本直接 subprocess.Popen 包内 perfowl_collector_core stream --prewarm,再向其 stdin 发送 prepare_app → start → stop;未通过 App 的 perfowl.capture.toggle 操作,未由 App 自身启动该核心。其正确名称是「包内核心命令入口真机辅助轮」:真机 Raw 是有效的命令入口辅助证据,但不能充当真实 UI Session。

正式真实 UI E3 = NOT SATISFIED(本批未取得任何真实 UI 轮次);辅助轮结果为 inconclusive,正式真实 UI E4 = NOT EVALUATED(未评估),本页不构成任何 E4 判定。相同 planHash / CapturePlan 只证明 Start 之后的采集配置相同,不证明入口、预热或 App 生命周期相同,不推出启动时间稳定性提升。

已测得数字(开关读回、配置、hash、locator、stop/资源、主字段重放、未 applied、同域时间 null)原样保留,未抹改,只更正证据等级与入口归属。

1. 交付范围与 exact commit / parent

产品改动提交 65f82c1a22862af9d1cddcee11b8c7a7028bd94a,parent 1c86cf39fcf475e940fc48bf11174df85e8e3c75;范围 4 文件、+2294 / −1。

文件变化说明
MacApp/Sidecar/perfowl_collector_core/realtime.py+292 / −1唯一产品改动:开关解析、纯决策 helper、单次 opt-in 等待分支、9 条 manifest 遥测
MacApp/Sidecar/tests/test_sw1_scene_window_experiment.py+635(新增)23 项确定性测试:开关、决策、端到端等待
MacApp/Sidecar/tests/test_sw1_scene_window_locator.py+450(新增)24 项定位器对抗测试:分块/拆记录/夹块/假命中/身份/绑定/只 closer/他进程链
tools/validation/sw1/offline_scene_window_locator.py+917(新增)最小离线只读 locator(locate / replay)

唯一删除行:wait_reason = "max-startup-wait-exceeded" 改为按是否已应用实验延长而二选一的自描述 reason;其余全部为新增。未触碰 launch_trace.py、metric_engine、Network、FrameTime、任一 filter、source restart/rearm、Phase C、UI 指标默认选择、pre-push 与站点部署;未合并任何 G2/SSO/WIP 分支。

1.1 如实披露的偏差

首要偏差是实质性入口偏差:两轮未走 App perfowl.capture.toggle、核心非 App 启动 ⇒ 只能记为包内核心命令入口真机辅助轮,并因此正式真实 UI E3 = NOT SATISFIED。以下为工程/环境侧三条偏差。

2. E1:确定性测试与 OFF 回归

项目结果
本批新增测试23 + 24 = 47 项全绿(布局扩展后复跑仍 47 项 OK)
既有相关测试test_perfowl_realtime + test_perfowl_launch_trace 97 项全绿;本批聚焦合计 144 项 OK
Sidecar 全量1011 项中 6 项失败/错误,经同环境交错隔离对照证明在原始 HEAD 树上完全相同地失败⇒ 可归因回归 0,6 项待 Lead 复核(不写「0 失败」)
OFF 等价重放8 轮历史会话中 7 个含 CoreProfile 流的会话 mainDiff == {};E3 两轮新会话亦 mainDiff == {}(见 §4.3)
独立定位器交叉与 Lead 对 O1 的审计逐项吻合:recordsScanned=2235860、opener 0、closer 21(18 属他进程、3 映射未知)、假命中 0、gatedMappingRecords=118323
OFF 性能交错(3 配对)median base 92.485 MB/s、ship 93.944 MB/s ⇒ 吞吐变化 −1.578 %(门 ≤5 % 下降)PASS;ship 峰值 RSS 增量 0 B(门 ≤8 MiB)PASS;每样本单次整块读、base/ship decodedRecordCount 逐对相同、会话清单未变 PASS
ON 决策成本(单列)100 万次调用 OFF 270.53 ns / ON 530.86 ns / 非法值 287.47 ns,RSS 增量均 0,不触扫描路径,后台队列容量未扩大

3. E2:实验包工程

包命名明确 experimental,冻结 Build74 包与回滚包全部保留(7 个既有 dist ZIP 收尾后 SHA-256 逐字未变)。

项目证据
Developer ID + hardened runtime构建启用 Developer ID 身份与 --options runtime(身份名称/指纹留私有证据)
secure timestamp对实验构建产物单独重签(产品脚本 build-app.sh 对嵌套代码用 --timestamp=none 的既有缺口未修改):signed_files_checked=323、missing_timestamp=0
公证status = Accepted(submission id 09605b71-bba3-42e7-a245-ece140c96b10)
staple + deep-strictxcrun stapler validate 通过;codesign --verify --deep --strict valid on disk / satisfies its Designated Requirement
Gatekeeperspctl -a -vvv -t install = accepted / source=Notarized Developer ID
独立解包启动另目录 ditto 解包后:deep-strict 通过、spctl accepted、staple 校验通过、包内核心 probe = "ready":true(metricContractCount=66、valid=true)
提交包 SHA-25698f57d67182c5b49def9671516ee84689d8564ed59b339c2edb9eadcefedd9e2(109,839,265 B)
分发包 SHA-2564234c273995e5f2e86c4043533e0f83752d2a8fa9c67a62ceba7b169d8fd0216(109,844,024 B)
核心 ↔ exact commit冻结核心 SHA-256 45c43e9effe83f7030168e2b8e18e89f9e5ccae62aa4fe30dff1a6c21e864745;git diff --exit-code HEAD 对核心构建输入 = NO_DIFF_VS_HEAD;build-sidecar-core.sh 缓存键(记录值 == 复算值)b0ea11e6f20a63ef2040d42bf1f270b1103125875d0c984afd31187a3eb16091
包内核心 == 冻结核心两者去签名后逐字节相同(同 2f807184…、同为 12,301,760 B、cmp 全等)⇒ 包内核心 SHA a1bd4097… 与冻结核心 45c43e9e… 的差异只是嵌入的代码签名块

包绝对路径:MacApp/dist/Perfowl-SW1-SceneWindow-Experimental-b75-x86_64-notarized.zip(另存提交包同名 -notarize-submit.zip)。仅有构建未安装到系统目录、未发布。

4. 包内核心命令入口真机辅助轮(已执行,OFF → ON;非真实 UI Session)

宿主解锁后,用同一个 E2 公证实验包、同一台设备 A、同一目标 App A、同一 controlled-cold-launch 流程,只勾 Startup Timing 12 项、关闭截图,OFF → ON 各执行一轮;单轮一次 Start/Stop、固定观测 30 s、每轮全新核心进程。

入口如实披露(本批实质性偏差):驱动脚本直接 subprocess.Popen 包内 perfowl_collector_core stream --prewarm,再向其 stdin 发送 prepare_app → start → stop(复现 App wire 序列)。未通过 App 的 perfowl.capture.toggle 操作、未由 App 自身启动该核心、未记录 App 原生 UI 操作与进程树 ⇒ 这两轮只能记为包内核心命令入口真机辅助轮,正式真实 UI E3 仍为 NOT SATISFIED。

两轮 planHashEcho 均命中冻结 capturePlanHash,sidecar-exited exitCode=0、fatal=None、safetyAborted=false,未触 wall 120 s / Raw 1 GiB 护栏。

项目OFF 轮ON 轮
会话别名 / 会话目录2b750830 / sessions/2b750830-22a8-4e4a-ae6a-8101639682f7e6fda76c / sessions/e6fda76c-7bf2-4b54-93a3-136cbc55c7ae
开关继承(核心实测)Enabled=falseEnabled=true(驱动 env=1)
Eligible / ExtensionAppliedtrue / falsefalse / false
决定原因experiment-off-unsetscene-open-phase-absent
4 s base-grace 到期时 openPhases["UIKit Scene Creation"]["Initial Frame Rendering"]
completion wait 状态 / 耗时timed-out / 4.018156 stimed-out / 4.000654 s
Raw SHA-256a41ca4d6666d26d9069ef93d33010615d7d5e19799b6c686680dcf1bc44f5af860e507ce74e9a186c9e8e28c4c87dba19fd3aab350f21754cd9db221086ac1fd
CoreProfile blob SHA-256 / 字节 / 块数8bee8b40313631542cc964450cd8e97917b05baf45d9b783198cdb3da6d89e5f / 260,490,968 / 61b5788142252a917f06a3b1023630ac4fc7e35762b0d14f026b1d67a4717e87af / 175,644,416 / 48
目标进程身份 / generation当轮唯一目标进程,身份 verified / 1同上 / 1
轮次 wall / Raw 峰值30.828 s / 260,990,632 B32.002 s / 176,116,005 B
只读封存清单(分析前后)30 文件 / 261,027,835 B30 文件 / 176,153,589 B

结论先行(事实陈述):两轮采集配置逐项相同,但 ON 轮新增等待没有 applied —— ExtensionApplied=false,DeadlineMonotonicNs / ExtensionStartedMonotonicNs / ExtensionEndedMonotonicNs / DurationMs 全部为 null。窗口假设在本轮未获得判别性检验。

4.1 采集配置逐项对照(全部相同)

必比项两轮共同读数
capturePlanHashf9f5407724bdf97769f439a27ff4e87597fbfbdae77b5c8fc72b5bb9b79a8c3b(与冻结值一致)
registryHash 侧policyVersion=all-supported.v1;requestedMetricCount=12,ID 集合与冻结 12 项逐条相同
identityStatusverified
四类生命周期 kdf2['0x1F070000','0x2B870000','0x31CA0000','0x2BDC0000']
csd / bm / rp0 / 0 / 100
exact-debug-idframeFilterExperiment=exact-debug-id;requestedFrameFilter=0x31800318;effectiveFrameFilter=['0x1f070000','0x2b870000','0x31ca0000','0x2bdc0000']
coreProfileConfigSignature31a6c916320c749285b3a2be8c2d1c17803cf19ec00430ed484e9b509bc2da06
其余 DTX 参数samplingTriggerEnabled=false、callstackDepth=0、kdebugFilters==requestedKdebugFilters=[520552448,730267648,735838208,835321856]
采集模式 / 保留 / 生命周期startup-only / full / start 1 · stop 1 · restart 0

coreProfileConfigSignature 与 planHash 两轮逐字相同 ⇒ 两轮进入核心的采集配置是同一份;差异只出现在会话身份 UUID、数据量与设备相位。

4.2 独立只读纯字节 locator

读数OFF 轮ON 轮
verdict / 理由CLOSER-ONLY / thread-binding-unknown、closer-without-openerOPENER-ONLY / thread-binding-unknown、opener-without-closer
目标线程 IFR opener01(当轮唯一目标线程、debugID 730267696、blob offset 648448、chunk sequence=44)
目标线程 IFR closer260
全线程 opener / closer0 / 601 / 23
recordsScanned4,068,9062,743,178
gatedMappingRecords268,537158,704
identityMismatchedRecords00
conflictingThreads / conflictThreadEndpoints[] / 0[] / 0
unknownThreadEndpoints83
otherProcessCompleteChains / unalignedLifecyclePatternHits0 / 00 / 0
chunksBlobSkipped / streamRejectedReason12 / None12 / None

4.3 报告差分与隔离离线重放

全字段差分共 13 项不同:3 项为预期的实验遥测(Enabled false→true、Eligible true→false、DecisionReason);2 项为会话身份(DTX tc[0].uuid);2 项为数据量(blob 字节与 SHA);1 项为等待相位(耗时 4.018156 vs 4.000654,openPhases UIKit Scene Creation vs Initial Frame Rendering);4 项为派生产物(decodedRecordCount 4,068,906 vs 2,743,178;totalDurationMs 1524.98525 vs null;totalQuality repaired vs missing;totalSource coreprofile-endpoint-repaired vs null)。

报告形态差异(都不是开关造成的,因为 ON 轮开关未 applied):OFF 11 span、totalRepairReason=frame-end-repaired-ambiguous;ON 12 span、IFR reason=phase-boundary-incomplete。两轮 requiredMissingPhases=["Initial Frame Rendering"] 相同,unmatchedBeginCount=1、unmatchedEndCount=0 相同,源质量均 lossFree=true、liveQueueDropCount=0(设备 loss marker OFF 8 / ON 5)。

隔离离线重放(喂冻结口径、SW-1 强制 OFF):两轮均 mainUnchanged=true、mainDiff={}(OFF 61 块、ON 48 块,无 frame-continuation 跳过)⇒ OFF 等价性在两轮新会话上同样成立。原生 live/final 与离线重放分开交付:会话内保留 report-live.json、report-final.json、launch-trace-live.json、startup-report-live.json;离线重放只写批次 out/ 下独立 JSON,不覆盖会话内报告。

drain 读数:OFF drainStatus=timeout、chainObservedClosed=false、targetActionableCount=23、rejectedEventCount=23(thread-binding-unknown=18、no-opener=1);ON drainStatus=quiescent、chainObservedClosed=false、targetActionableCount=0。两轮都没有可闭合的 IFR 链。

4.4 同轴时序:本轮不可评估(遥测记录缺口)

合同 E4 要求判「端点出现在 base 截止之后的同域收到时间」。本批实现把 startupSceneWindowExperimentExtensionStartedMonotonicNs 定义为「延长实际开始时(即 base 截止点)」的读数,因此只有 applied 才会有值。两轮 ExtensionApplied=false ⇒ 该键与 DeadlineMonotonicNs 均为 null。

后果:sw1_endpoint_timing.py 两轮 baseCutoffMonotonicNs=null,所有端点的 deltaFromBaseCutoffMonotonicNs / receivedAfterBaseCutoff / receivedWithinMaxDeadline 全为 null;报告里的 …AfterBaseCutoff=0 只是「非 true 的计数」,不得读成「端点在 base 截止之前到达」。故本轮无法回答「更长窗口是否保留救到了端点」。这是遥测缺口而非产品缺陷;本批未擅自改动产品语义。

补充的、已记录的宿主域锚点(不是 base 截止,不能替代判据):OFF 轮目标 closer 的 chunk 收到时间跨度 534532393233813 → 534542570786815(launch_requested=534531388934869,stop 534557589616671);ON 轮唯一目标 opener 的 chunk 收到时间 534620735286539(launch_requested=534614922047009,stop 534642008509243,startupSemanticCompleteNs=534621005612204)。

4.5 封存、只读性与安全状态

两轮均先落只读封存清单再分析;分析结束重跑全文件重哈希:两轮各 30 文件、逐文件 size/mtimeNs/SHA-256 全部相同(IDENTICAL_ACROSS_ANALYSIS=true),包括 260 MB / 175 MB 的 core-profile-chunks.bin。两轮均 safetyAborted=false,Raw 峰值 ≪ 1 GiB 上限、wall ≪ 120 s;Stop 响应即时(stop_requested→stopped 约 0.155 s / 0.053 s),sidecar-exited exitCode=0。宿主资源为 1 Hz 环境观察(常驻内存约 11.83–12.07 GB),不是产品性能门禁。

5. 辅助轮结果对原 E4 判据的事实映射(只做事实映射,不裁定;正式 UI E4 未评估)

合同 §4 E4 判据本批两轮事实是否命中
ON 获得目标同线程 IFR opener + 合法 closer,身份/代际/tick 链闭合且原生配对 candidate 成立 ⇒ 该轮阳性ON 轮只有 opener、无 closer;verdict=OPENER-ONLY未命中
只有新增等待确实 applied、端点出现在 base 截止之后的同域收到时间,才能支持「更长窗口保留了端点」ExtensionApplied=false,base 截止未被记录 ⇒ 支持条件不成立,且该比较缺数据未命中
ON 端点早已在 base 截止之前,或 OFF 本来也完整 ⇒ 不具判别力OFF 本来也不完整(IFR opener 0、IFR 阶段 missing)未命中(判别力缺失来自 applied=0)
ON applied 但仍无 opener ⇒ 窗口假设本轮不支持,冻结该实验不适用(本轮未 applied)不适用
ON 未 eligible / 两轮形态不满足 ⇒ 如实 inconclusive,不自行扩样ON Eligible=false(scene-open-phase-absent);两轮端点形态不同(CLOSER-ONLY vs OPENER-ONLY)命中本情形
伪造/跨线程/跨代际/他进程链、原文件变化、OFF 行为回归、Stop 失效、资源越界 ⇒ REPAIR REQUIRED两轮 identityMismatchedRecords=0、conflictingThreads=[]、otherProcessCompleteChains=0、假命中 0;30/30 文件逐字节不变;离线强制 OFF 重放 mainDiff={};Stop ≤0.16 s;未触护栏未发现该类问题

实施方结论(不是验收结论):本批的包内核心命令入口辅助实验记 inconclusive(ON 未 eligible、两轮形态不满足),未追加轮次、未刷概率、未扩样。窗口假设既未被证实、也未被证伪。本表不构成任何 E4 判定:辅助轮不是真实 UI 轮次 ⇒ 正式真实 UI E3 = NOT SATISFIED、正式真实 UI E4 = NOT EVALUATED(未评估);表中「命中/未命中」只描述辅助轮观察事实。

6. 未证明项与遗留

7. 注册与联动(C2 / C3 / C5)与远程状态