Skip to content

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 持续运行
产品 CSV622 行观察样本,不代表完整启动端点
请求指标38 项非历史 startup-only 12 项配置,不用于成功率直接比较
CoreProfile39 chunks:31 binary + 8 bplist全部 startup-lifecycle / active
binary 解码记录2,235,860使用 RAW v2 头、跨 chunk 余数与实际流偏移对齐
IFR opener全线程 0,目标线程 0跨整个已保存 CoreProfile 字节扫描,不只查白名单/报告
IFR closer全线程 21,冻结映射可归属目标的 018 属其他进程、3 映射未知;未知不可冒认目标
可解释生命周期 action 记录全线程 42,冻结映射目标 13action 记录数不等于 report targetRecordCount
出厂 Totalnull / missing,status partialrequiredMissingPhases 仅 IFR;sceneWillConnectTo 另有不完整边界
当前纯内存重放10 个主字段与出厂报告零差异不调用会回写文件的 derive_session;不证明录制二进制版本相同
tap completion waittimed-out / startup-completion-grace-expired,4.040685 s非语义完整成功
结束时 open phaseUIKit Scene Creation当前延长条件仅 didFinishLaunchingOpen,此状态不获延长
tap stop drainquiescent,postStopChunkCount=0,post-startup observed bytes=0本次没有 A1 drain 候选可救
设备 loss marker4host liveQueueDrop=0 不等于设备无丢失;不能断言恰好丢了 IFR
writerQueueWaitP95 901.689 ms / max 1412.541 msbacklog 线索,尚无因果归因

文件独立 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缺值另批,不能靠这批扩大支持声明。

6. Implementation Update(2026-09-27) ​

本段是实施方交付记录,不是验收结论。E0/E1/E2 三个阶段已完成留证;原 E3 的两个 Session 已在宿主解锁后按 OFF → ON 执行,结果 inconclusive(ON 未 eligible)。

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

原 §6 把这两轮记作「两个真实 UI Session」,并称「无功能性偏差」——这是错的,现予更正。

两轮由驱动脚本直接 subprocess.Popen 包内 perfowl_collector_core stream --prewarm,再向其 stdin 发送 prepare_app → start → stop;它们没有通过 App 的 perfowl.capture.toggle 操作,也没有由 App 自身启动该核心。因此这两轮的正确名称是「包内核心命令入口真机辅助轮」,属有效的命令入口辅助证据,但不能充当原合同要求的两份真实 UI Session。

  • 正式真实 UI E3 = NOT SATISFIED:本批未取得任何真实 UI 轮次。
  • 辅助轮结果为 inconclusive;正式真实 UI E4 = NOT EVALUATED(未评估),本段不构成任何 E4 判定。
  • 相同 CapturePlan / planHash 只证明 Start 之后的采集配置相同,不证明入口、预热或 App 生命周期相同;不得据此推出启动时间稳定性提升。
  • 已测得数字(开关读回、配置、hash、locator、stop/资源、主字段重放、未 applied、同域时间 null)原样保留,未抹改;只更正证据等级与入口归属。

实施方不自判 PASS;正式结论由 Lead 独立裁定。

6.1 Exact commit / parent 与文件范围 ​

  • 交付 commit:65f82c1a22862af9d1cddcee11b8c7a7028bd94a,parent:1c86cf39fcf475e940fc48bf11174df85e8e3c75。
  • 范围 4 文件、+2294 / −1:
文件变化说明
MacApp/Sidecar/perfowl_collector_core/realtime.py+292 / −1唯一产品改动:开关解析、纯决策 helper、单次 opt-in 等待分支、9 条 manifest telemetry
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),工具 SHA-256 98ebdc1659fc2dc03b45c566d6d53b831206820689f3a40e5b5bcda40fb4940e

唯一删除行: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 分支。

偏差:存在实质性入口偏差(入口分类更正见 §6 开头:两轮为包内核心命令入口辅助轮,不是真实 UI Session)。工程侧另有三条如实披露的偏差 ——(a)构建环境重建(§6.4);(b)为免 build-app.sh 的 rm -rf 覆盖 Build74 公证 App,在构建前把它就地改名为 Perfowl-Build74-Phase2-f3c9b73-notarized.app(未复制、未删除、逐字节保留);(c)定位器布局扩展:上表记录的 98ebdc16… 是 E1 阶段使用的修订版,本批辅助轮会话由新打包脚本产出、其会话产物平铺在会话根(manifest.json/raw-events.jsonl/core-profile-chunks.bin 直接在会话根),而定位器原先把 collector-core/ 嵌套路径写死。为使同一把只读尺子能量测新会话,新增 session_core_dir() 解析器(嵌套优先,找不到才退回平铺)并替换 4 处取路径点,纯增量 28 行、无行为分支改写;locate_lifecycle_endpoints 的字节级算法、映射门、判决逻辑一行未动。辅助轮阶段的工具 SHA-256 为 f95d619c528a680907e29755eddfa8e376d1347d4c3e5dabc0ff090d9ba8299d。回归证据:本批 47 项专项测试(tests.test_sw1_scene_window_locator + tests.test_sw1_scene_window_experiment,stdlib unittest)全绿;并在一个嵌套布局的真实历史会话(census-S2,当轮唯一目标进程、recordsScanned=1421166)上取到正常判决,证明嵌套路径仍按原样解析。E1 的既有证据仍绑定 98ebdc16… 修订版,两者不混用。共享工作区只显式暂存本批路径,未 reset/clean/全量暂存。

6.2 E1:确定性测试与 OFF 回归(已完成) ​

  • 新增 23 + 24 = 47 项测试全绿;test_perfowl_realtime + test_perfowl_launch_trace 97 项全绿;本批聚焦合计 144 项 OK。
  • Sidecar 全量 1011 项中 6 项失败/错误。基线归因未独立闭合:本次归因所用的唯一临时目录已在验证后移除,未保留可供核对的双侧原始日志,因此只能记下「6 项在原始 HEAD 树上同形失败」这一当时观察,不得写成已证明的「零回归」;6 项待 Lead 独立复核。
  • OFF 等价重放:8 轮历史会话中 7 个含 CoreProfile 流的会话 mainDiff == {} 全一致(按冻结口径喂全部块 + emit_completed_trace=True + report() 不传 hash,复现出厂发布的冻结修订版);ui-appA-r1 无 CoreProfile 流,如实标“不适用”。会话 collector-core 清单分析前后逐字节相同。
  • 独立定位器交叉:与 Lead 对 O1 的审计逐项吻合(recordsScanned=2235860、opener 0、closer 21(18 属其他进程、3 映射未知)、假命中 0、gatedMappingRecords=118323);定位器按冻结同门取映射(launch 作用域、跳过 frame-continuation),因此不能靠最终进程映射把线程重用冲突洗白。
  • 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,不触扫描路径,后台队列容量未扩大。

6.3 E2:实验包工程(已完成) ​

包命名明确 experimental,冻结 Build74 包与回滚包全部保留(7 个 ZIP 收尾后 SHA-256 逐字未变;就地保留的 Build74 公证 App 可执行文件仍为 5c1b8aae…)。

项目证据
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 = The validate action worked!;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)。仅有构建未安装到系统目录、未发布。

6.4 环境偏差(如实披露) ​

本批发现文档化的冻结构建环境 /private/tmp/perfowl-core-py312 已被 macOS 的 /private/tmp 定期清理掏空——目录树尚在但 PyInstaller/、altgraph/、macholib/、_pyinstaller_hooks_contrib/、setuptools/ 均为 0 文件,pyvenv.cfg 为空使解释器退回系统 3.12 并从 user site 解析模块,import PyInstaller 失败。按 build-app.sh 既有的 bootstrap 路径,用已提交的锁文件在同一路径重建同一环境(非新建常驻 venv、不改任何仓库配置):就绪判据 READY 3.12.3 x86_64 11.3.1 6.22.3。损坏目录已备份为 …/perfowl-core-py312.gutted-20260927。另有本机批量删除守卫拦截构建脚本自身的 rm -rf,按既有 env -u … 前缀执行,未放宽任何策略。

6.5 包内核心命令入口真机辅助轮(已执行,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 操作与进程树。故这两轮记为包内核心命令入口真机辅助轮:其真机 Raw 是有效的命令入口辅助证据,但不能充当真实 UI Session;正式真实 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=false(驱动 sceneWindowEnvPresent=false)Enabled=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 / startup-completion-grace-expired / 4.018156 s同上 / 4.000654 s
Raw SHA-256a41ca4d6666d26d9069ef93d33010615d7d5e19799b6c686680dcf1bc44f5af860e507ce74e9a186c9e8e28c4c87dba19fd3aab350f21754cd9db221086ac1fd
CoreProfile blob SHA-256 / 字节 / 块数8bee8b40313631542cc964450cd8e97917b05baf45d9b783198cdb3da6d89e5f / 260,490,968 / 61b5788142252a917f06a3b1023630ac4fc7e35762b0d14f026b1d67a4717e87af / 175,644,416 / 48
目标进程 / generation / 身份当轮唯一目标进程(主机侧身份 verified)/ 1 / identityVerified=true、targetForeground=true同上 / 1 / 同上
clickToLaunchRequestMs3738.3533525.946
轮次 wall / Raw 峰值30.828 s / 260,990,632 B32.002 s / 176,116,005 B
只读封存清单(分析前后)30 文件 / 261,027,835 B30 文件 / 176,153,589 B

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

6.5.1 采集配置逐项对照(合同必比项,全部相同) ​

必比项两轮共同读数
capturePlanHash(planHash)f9f5407724bdf97769f439a27ff4e87597fbfbdae77b5c8fc72b5bb9b79a8c3b(与冻结值一致)
registryHash 侧(policyVersion + 12 项 metric ID)all-supported.v1;requestedMetricCount=12,ID 集合与冻结 12 项逐条相同
identityStatusverified
四类生命周期 kdf2['0x1F070000','0x2B870000','0x31CA0000','0x2BDC0000'](与冻结族逐项相同)
csd / bm / rp0 / 0 / 100
ta / tk[[3],[0],[2],[1,1,0]] / 3
exact-debug-id(帧过滤)frameFilterExperiment=exact-debug-id;requestedFrameFilter=0x31800318;effectiveFrameFilter=['0x1f070000','0x2b870000','0x31ca0000','0x2bdc0000']
coreProfileConfigSignature31a6c916320c749285b3a2be8c2d1c17803cf19ec00430ed484e9b509bc2da06
其余 DTX 参数samplingTriggerEnabled=false、callstackDepth=0、kdebugFilters==requestedKdebugFilters=[520552448,730267648,735838208,835321856]
采集模式 / 保留startup-only / coreProfileRawRetention=full
源生命周期coreProfileStartCount=1、coreProfileStopCount=1、coreProfileRestartCount=0

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

6.5.2 独立只读纯字节 locator(offline_scene_window_locator.py locate) ​

读数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
gatedMappingRecords(launch 作用域映射门)268,537158,704
distinctThreadsBound / targetThreadCount2455 / 992421 / 82
identityMismatchedRecords00
conflictingThreads / conflictThreadEndpoints[] / 0[] / 0
unknownThreadEndpoints83
otherProcessCompleteChains00
unalignedLifecyclePatternHits(非 48 偏移假命中)00
chunksBlobSkipped / extraRawHeaderChunks / prefixChunks12 / 0 / 112 / 0 / 1
streamRejectedReasonNoneNone

三点必须如实并列:

  1. ON 轮出现了本批首次记录到的目标线程 IFR opener(此前 O1 与本次 OFF 轮均为全线程 0 opener)。但 ON 轮没有合法 closer,故 verdict=OPENER-ONLY。
  2. 端点存在 ≠ IFR 阶段闭合:ON 轮报告里该 debugID 被当作 UIKit Scene Creation span 的 end 使用(spanCount=12、supersededBeginCount=1),IFR 阶段仍 quality=missing、requiredMissingPhases=["Initial Frame Rendering"]。
  3. 两轮端点形态不同(OFF 只有 closer、ON 只有 opener),不是同形态配对;OFF 轮与 O1 同形。

6.5.3 报告差分与隔离离线重放 ​

sw1_ui_diff.py 对两轮做全字段差分,共 13 项不同,其中:

  • 3 项为预期的实验遥测:startupSceneWindowExperimentEnabled(false→true)、Eligible(true→false)、DecisionReason(experiment-off-unset→scene-open-phase-absent)。
  • 2 项为会话身份:DTX tc[0].uuid(ea420af5… vs c786e2c1…)。
  • 2 项为数据量:coreProfileBlobByteCount、coreProfileBlobSHA256。
  • 1 项为等待相位:CompletionWaitElapsedSeconds(4.018156 vs 4.000654)与 CompletionWaitOpenPhases[0](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、status=partial、reason=lifecycle-spans-incomplete、totalRepairReason=frame-end-repaired-ambiguous;ON 12 span、totalQuality=missing、IFR quality=missing 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 语义下主字段与出厂封存报告零差异,OFF 等价性在两轮新会话上同样成立。

drain 读数(取自 launch-trace-report.json,非 manifest):OFF drainStatus=timeout、chainObservedClosed=false、targetActionableCount=23、rejectedEventCount=23(thread-binding-unknown=18、no-opener=1);ON drainStatus=quiescent、chainObservedClosed=false、targetActionableCount=0、rejectedEventCount=0(thread-binding-unknown=26)。两轮都没有可闭合的 IFR 链。

原生 live/final 与隔离离线重放分开交付:会话内保留 report-live.json、report-final.json、launch-trace-live.json、startup-report-live.json 等出厂在线产物;离线重放只写本批 out/ 下的独立 JSON,不覆盖会话内报告。

6.5.4 同轴时序:本轮不可评估(telemetry 记录缺口,如实披露) ​

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

后果:sw1_endpoint_timing.py 的两轮输出 baseCutoffMonotonicNs=null,所有端点的 deltaFromBaseCutoffMonotonicNs / receivedAfterBaseCutoff / receivedWithinMaxDeadline 全部为 null,targetOpenersReceivedAfterBaseCutoff=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)。

这是本批暴露的 telemetry 缺口,不是产品缺陷:若后续仍要检验该假设,需由 Lead 决定是否新增「无条件记录 base-grace 到期点」的字段;本批未擅自改动产品语义。

6.5.5 封存、只读性与安全状态 ​

  • 两轮会话均先落只读封存清单再分析;分析结束后重跑全文件重哈希:两轮各 30 文件、逐文件 size/mtimeNs/SHA-256 全部相同(IDENTICAL_ACROSS_ANALYSIS=true),包括 260 MB / 175 MB 的 core-profile-chunks.bin。(清单的 generatedUtc 按设计不同,其余字段一致。)
  • 两轮均未触安全护栏:safetyAborted=false,Raw 峰值 260,990,632 B / 176,116,005 B ≪ 1 GiB 上限,wall 30.8 s / 32.0 s ≪ 120 s。Stop 响应即时(stop_requested→stopped OFF 约 0.155 s、ON 约 0.053 s),sidecar-exited exitCode=0。
  • 宿主资源(驱动 1 Hz 采样,psutil):两轮常驻内存约 11.83–12.07 GB,CPU 区间 OFF 30.0–100.0 %、ON 0.0–47.7 %;采样为环境观察,非产品性能门禁(产品性能门禁见 §6.2 OFF 交错)。
  • 两轮使用的核心与 App 可执行文件 SHA 与 §6.3 一致(a1bd4097… / ee3dfc15…)。

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

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

实施方结论(不是验收结论):本批的包内核心命令入口辅助实验记 inconclusive(ON 未 eligible、两轮形态不满足),未追加轮次、未刷概率、未扩样。窗口假设既未被证实、也未被证伪。

本表不构成任何 E4 判定:辅助轮不是真实 UI 轮次,故 正式真实 UI E3 = NOT SATISFIED、正式真实 UI E4 = NOT EVALUATED(未评估)。表中「命中/未命中」只描述辅助轮的观察事实,不能读成正式 E4 结论。

6.6.1 未证明项与遗留 ​

  • 窗口假设未取得判别性真机证据(命令入口辅助轮同样未取得);不得据此宣称修复有效或产品验收通过。
  • 本批未取得任何真实 UI 轮次:正式真实 UI E3 = NOT SATISFIED、正式真实 UI E4 = NOT EVALUATED(未评估)。辅助轮不占原合同「最多两个真实 UI Session」预算,同时也不能替代它。
  • 「更长窗口是否保留救到了端点」本轮无法回答:base 截止未被记录(§6.5.4)。若 Lead 仍要检验该假设,需先决定是否为「base-grace 到期点」补一条无条件遥测;本批未改产品语义。
  • «ON 轮出现 1 个目标线程 IFR opener» 是单轮观察,与 OFF 轮形态不同;不能据此推断开关有效果(ON 轮开关未 applied),也不能排除设备/系统侧运行间差异。
  • 两轮均无 drain 内可闭合链(OFF timeout、ON quiescent,chainObservedClosed=false)。
  • 冻结核心与既有两个包的分发工程另有既有偏差(TSA 打包脚本、archive renderer)不在本批范围。
  • 生产开关保持默认关闭;A1 正式 UI E4、Build74 正式验收、Phase C Hybrid 均不因此改变;Network 巨值与 FrameTime 时钟/P95/Jitter 仍另批。

6.7 C2 / C3 / C5 与远程状态 ​

  • C2(已执行):site/devlog/index.md 时间线顶部新增本批节点;docs/architecture/perfowl-p4-startup-owner-session-window-differential-plan-2026-09-27-implementation-update.html 为本批实施增量快照(手写归档源,不派生自 site/public/;prebuild 的 sync-archive 会同步为 /archive/…)。
  • C3(已执行):「当前位置」顶部新增本批段落;「八阶段总计划」P4 行与「未关门门禁」的 P4 SW-1 行由「产品尚未实施」更新为「包内核心命令入口辅助轮已执行、辅助实验 inconclusive;正式真实 UI E3 未满足、E4 未评估、待 Lead 裁定」,并保留 A1 正式 UI E4 OPEN、Phase C Hybrid FROZEN。
  • C5(已执行):本批不新增指标、不改变任何指标的支持状态或计数。经检索 site/knowledge/ 与 site/.vitepress/theme/components/HomeExtras.vue,不存在描述该实验(默认关闭开关 / completion-wait 窗口)的位置,故按合同「只在确有对应实验说明位置增加默认关闭、未验收说明」的要求,未向任何用户页插入说明 —— 避免把未验收的实验写成用户可见能力;「默认关闭、未验收」的表述只留在本 devlog 与归档快照中。npm run build 通过:知识门禁 PASS: 66 Registry contracts、sync-archive 283 文件(含本批新快照)、VitePress build complete in 33.33s、无死链报错。
  • 远程:GitHub 与 GitLab 各只尝试一次普通快进推送;GitLab 失败不重试、不阻断,失败即单列 partial,不用本地镜像代替真实远程。本批不发布网站(未执行 npm run deploy)。
  • 本批提交范围(一个窄范围本地提交):本 devlog、site/devlog/index.md、docs/architecture/…-implementation-update.html、tools/validation/sw1/offline_scene_window_locator.py(布局扩展,偏差 c)。共享工作区其余他方 WIP 与 MacApp/Tests/1.trace/ 未触碰,未 reset/clean/全量暂存。

6.8 R1 入口更正与交付修正(2026-09-28) ​

依 Lead 独立审计(5d700fa7863a6db62880007d9e9e6e0d8c161ddc;方案 site/devlog/p4-startup-sw1-lead-audit-and-true-ui-revalidation-plan-2026-09-28.md)执行 R1 · 最小文档和交付修正:未采集任何新 Session、未改产品代码、未触碰他方 WIP、未发布网站。R1 的实施记录落在本 §6.8,不修改已发表的历史数字与旧归档。

项目结果
实施起点的冻结状态HEAD 5d700fa7863a6db62880007d9e9e6e0d8c161ddc;本批四条目标路径未被他人推进(5d700fa 仅新增 Lead 方案与 handoff,未触碰 devlog/索引/归档/locator)
受保护四项他方 WIPp4-build74-phase2-post-r3-minimal-repair-plan-2026-09-24.md 3302191444fca89cab542a0a736a288f5797dfc1237eeed5fedc47a0dec447d3;p4-build74-instruments-subscription-and-startup-endpoint-differential-audit-plan.md bcc5e64d4684f9ff066e9af7b3bdb254bee003a61be52cbdcdca2bed16ec75d2;p4-build74-owner-e4-two-session-targeted-validation-plan-20260924.md fd35bf6d91285c6077471b2772cc1124e4ee0d119b3f817510eb98fa5c0709cd;MacApp/Tests/1.trace/ 820 文件 / 314,106,259 B / 聚合指纹 fafe529aa58c5a84d72e956c98627c65998a23fac87260403e0d5e76bfa51a08 —— 全部逐字节未触碰
入口分类更正两轮统一改称「包内核心命令入口真机辅助轮」;正式真实 UI E3 = NOT SATISFIED、正式真实 UI E4 = NOT EVALUATED(未评估);辅助轮不占也不替代「最多两个真实 UI Session」预算
偏差更正「无功能性偏差」→「存在实质性入口偏差」(未走 App perfowl.capture.toggle、核心非 App 启动)
公开隐私移除 2 处真实 PID(§6.1 历史样本描述 1 处、§6.2 O1 closer 归属 1 处);本批新增内容对 PID / UDID / 序列号 / Bundle ID / 设备型号 / iOS build / 证书指纹 / 凭据档名 扫描 零命中
数值保全全部实测数字(开关读回、配置、hash、locator、stop/资源、主字段重放、未 applied、同域时间 null)原样保留;旧归档与既有已发表行未改
locator 平铺/嵌套补丁+24/−4(28 行),仅新增 session_core_dir() 并替换 4 处取路径点;字节级算法、映射门、判决逻辑与身份门一行未动(git diff 复核);工作树 SHA-256 f95d619c528a680907e29755eddfa8e376d1347d4c3e5dabc0ff090d9ba8299d(HEAD 侧为 E1 的 98ebdc16…)
聚焦测试PYTHONPATH=tests:. 下 test_sw1_scene_window_locator + test_sw1_scene_window_experiment + test_perfowl_realtime + test_perfowl_launch_trace = Ran 144 tests … OK(144/144)
全量六项异常基线归因未独立闭合:归因用临时目录已在验证后移除,未保留可核双侧日志 ⇒ 只记「6 项在原始 HEAD 树上同形失败」的当时观察,不写「零回归」;6 项待 Lead 独立复核
三处材料一致性devlog / site/devlog/index.md / 归档快照的状态、数字、入口表述逐项对齐;归档快照严格 HTML 校验:DOCTYPE 存在、lang="zh-CN"、标签完全平衡(0 错、0 残留)、无未引号属性、7 个 <h2> / 6 个 <h3> / 7 个 <table>
站点 build(只构建,不部署生产)npm run build RC=0:[metric-knowledge-gate] PASS: 66 Registry contracts…(含既有 42 条 content-risk WARN,未变)、[sync-archive] docs/ -> public/archive/ (283 files)、build complete in 273.36s、无死链报错;归档副本与源逐字节相同(23c57779…,31,506 B);site/public/archive/ 属 .gitignore 生成物,不入 Git
构建环境偏差(如实披露)首次 npm run build 被本机批量删除守卫拦截、第二次 sync-archive.sh 的 rm -rf public/archive 触发 broker 读超时;按既有 env -u CODEBUDDY_SAFE_DELETE_BULK_STATE_DIR -u CODEBUDDY_TOOL_CALL_ID 前缀并把 broker 读超时上限调高后通过。未放宽任何安全策略、未改脚本、未执行 npm run deploy
远程GitHub 普通快进推送一次;GitLab 最多一次,失败单列 partial、不重试、不阻断其他技术工作
边界R1 不给 SW-1 产品 E4 PASS。R2(真实 App UI OFF→ON 复验)仅在 R1 经 Lead 复核后由 Test AI 实施;本批未进入 R2,未开启 Network / FrameTime / Hybrid / 首页改版

遗留(交 Lead 复核):site/devlog/index.md 存在 3 行既有已发表内容含设备型号、术语「Bundle ID」与历史凭据档名(第 198 / 939 / 1001 行)。它们不在本批 diff 行范围内(本批仅改第 28–29 / 247 / 294 / 305–308 行),按 R1「不得触碰已发表历史数字、旧归档」的边界未改动,在此如实列出供 Lead 决定是否另批处理。

Perfowl · Performance Observer