willFinish回调:方案与结果
---
type: devlog
title: Fixture Lab:willFinish启动回调单项正控验收
date: 2026-10-17
status: validated
kind: plan
stage: P4
evidence: E4
metric: ios.process.startup.will_finish_launching_ms
---
# willFinish:实际等待正控、来源闭环与可选语义
## 1. 边界与基线
Owner合一/不派子代理。main18e4038刚完成Scene五新轮限定E4、603件封存/网站9页核同/通知成功,GitLab唯一128不重试。留存8/66、启动7/12,历史8/54旧7未重验不相加。当前仅willFinishLaunchingWithOptions(),下一阶段不提前验。179/Lab90.21.8保持,产品算法/配置/频率不改;Owner暂缓公证,GPL/整GUI-main差异/旧性能/Total过渡UI另列。所有新编排/复核源码先留私有scripts并pin,不仅存临时目录;原临时工具丢失/历史pin缺口不追认。
## 2. 定义、公式与可选边界(先文档后实现)
真实Registry metricID ios.process.startup.will_finish_launching_ms,process/ms/candidate。class0x2B/subclass0x87的code23结束Scene并开始willFinish、code24结束willFinish并恢复Scene;本Fixture原始debugID分别730267740/730267744,主目标线程单次闭合span,开始/结束同代targetGeneration/sourceEpoch/reconnectGeneration,位于clean Total窗口。设备正整数timebase稳定,duration=((endTicks-startTicks)*numer//denom)/1e6;Raw64字节/逻辑流位置/角色/目标线程映射、逐段与聚合/全部有值live/两最终报告误差≤1e-6ms,0<阶段≤1000ms,恰1span。原/副本/Raw/封口/安装模块副本重放一致,无周期CSV列。
这是可选App回调,不发生时不能补0;完整有效launch且确无该回调BEGIN才能按现有产品标not-applicable,其余missing/partial如实保留。本Fixture已显式实现回调且消费单次请求,故本批缺失/不适用一律不算通过。软件负控覆盖这些情况,不修改产品来让Fixture过门,不外推其他App一定实现该回调。
## 3. 正控与固定五轮
LabStartupDelegate在willFinish中调用beginProcess,实际加载/claim请求、测量等待/记录回调;actualDelayNs是App自己在设备内测得的实际等待,不是外部物理仪器。原Scene两轮willFinish5.200791/313.245041ms仅离线诊断,不计新分母。选择0/300/0/300/0五个全新run/生命/Session,正常产品Start/Stop,准备生命不同、独立参考absent→present。0组实际等待≤10ms/300组300–350ms;每轮 -1ms≤阶段耗时−实际等待≤50ms(允许claim/IO/回调开销),组间(phase中位差−实际等待中位差)绝对值≤50ms。这是有界正控无明显偏离门,不称独立物理精度或行业标准;最终仍candidate。
串行1/轮间15秒/600秒队列;每轮90秒工作/105秒外、RPC8秒/URL12秒/replay30秒、RSS192MiB/Session256MiB;首失败停、不自动重试/替换/补轮。复用刚通过Scene的不变通道资格,但正常UI/设备/idle/无pending每轮重新核。采集不得与网站构建发布并发。
## 4. 环境恢复与容量保全
当前Mac179未运行。先核安装/core/GUI/唯一包来源不变,正常打开一次既有App(不重装/重签);只读确认正常UI后必要时只选择精确设备A与自有Lab、startup已选,不提前采集。若连接未知/目标不空闲即停止并另记,不杀其他App/系统服务,不重复Owner旧求助。
活动run预计32;一次明确只读与封存核对后,把刚完成Scene五run各四文件(主机603封存,清单SHA50da86b01f0d32f85a24a633e8aba1eb4921aa2947faefa09bb1bfc75a2f0dcc)逐字核同,仅同容器rename到retired/will-finish-capacity-20261017,32→27、删除0/释放0。产品/自有App idle、无pending、独占不存在目标,失败保留partial不自动回滚。旧retired/Raw/失败/清单保留,不能默改容量上限。
## 5. 软件、效率、复核与交付
单测覆盖字段/公式/真值不适用/绑定/代际/非数值/正控差错、固定分母和首失败停止。旧原件两轮只读诊断,四安装模块/main忽略调试位置核同;相同约8MiB规模各5次SHA与完整阶段原始核对,wall/CPU/RSS/读字节落盘,物理IO unknown。O(bytes)流式1MiB/carry63、≤5端点/128映射,不缓存全记录,不进产品热路径;空间≥10GiB且≥预估两倍,首次/批末/30分钟检查,只清已完成可重建站点副本。
独立核对器不调用执行器audit/check函数,重读原/副本/Raw/tuple/映射/设备公式/消费者/实际等待正控/不同生命/固定五轮/资源与封口;通过才8→9/66(启动8/12),历史旧7不重算。实现/知识难点随过程写入唯一startup-phases与本devlog,完成后C1–C7/不可变HTML/窄main双推各一次/精确干净发布/线上独立核同/一次中文通知。镜像失败或工具留存边界另列,不因网站成功抹除。下一仅didFinish单项独立合同,不顺带通过。
## Implementation Update · 2026-10-17 · 正式轮前准入
14项软件方法通过;旧Scene两轮仅只读诊断,本回调5.200791/313.245041ms、控制差与实际等待差误差6.813709ms,不计本批分母。同规模五次SHA中位0.005601s/原始阶段核对0.069597s,RSS55,664,640B。既有179来源/签名核同后一次正常打开,4.555883s、未安装/重签;正常UI精确重选设备A/自有Lab,采集Start0。重启后本次只读Apple服务实际connected且ddiServicesAvailable=true(8.017418s),不拿成功exit替代状态。新UI与容量工具已持久保存/预先SHA登记,下一按§4一次保全Scene五run,未开始正式五轮。共享WIP不动。
### Decision Update · 2026-10-17 · 容量准入停止与精确自有空闲恢复
首次容量准入已核603件主机封存,但自有Lab仍有生命,因此在owned-idle停止:Start/Stop/终止/rename均0、五句柄关闭、3.641402s/70,205,440B。另一次只读精确记录该生命,2.507465s,未采集/写手机;出现原因unknown,不猜测用户或系统行为。保持这两次停止原件。明确新恢复决策:先正常产品idle/无pending与原已观察生命双查一致,才对自有Lab该生命单次SIGTERM、确认absent,不碰其他App或服务;无自动重复信号。恢复成立后独立新容量attempt-r1,重新核全部603封存/各四件身份及不存在retirement目标,一次执行,原容量attempt不重跑。正式五轮仍0/5,恢复不计样本。
### Formal Admission Update · 2026-10-17
精确已记录自有生命/无pending/产品idle核同后单次SIGTERM确认absent,3.728227s/68,923,392B;不碰其他应用。新capacity-r1一次成功,7.709632s外墙,Scene603封存及手机四件全核、活动32→27/退役5、删除0/释放0,旧失败不覆盖。现在明确准入固定[0,300,0,300,0]五新轮,持久队列/分离复核源码与执行器/参考/GUI/core均在运行前SHA冻结。原URL路线,不做AFC替代传输;首失败停/不补轮,全部正式结果待独立复核。
### Failure / Repair Decision · 2026-10-17 · 正常重开后采集项未恢复
首正式队列第1轮在startup-source-armed门停止,0/5;正常Start/Stop各1、Session已durable保留原/副本,startupEnabled=false,未运行本指标采集,不把该普通Session记为有效轮。原因是正常重开客户端后仅恢复设备/目标,未恢复启动指标选择(与用户设备解锁无关),为本批测试准入遗漏。准备URL成功且该请求可能未消费;不覆盖/重放此请求。先只读身份/原件/产品idle/自有idle检查,把精确等于失败轮已保存pending的字节保全到独占归档目录(仅同容器rename,目的空目录、前后比对,非替代传输新请求),不删除或重采旧Session。通过正常指标选择器一次开启启动项,工具只允许这两个精确按钮、操作前落journal/唯一元素与当前描述匹配。执行器新增采样前正常UI启动卡准入负控,防止遗漏到Start后才被发现。工具变更先软件回归再新明示R1五轮合同/预pin;原0/5队列与停次分列,绝不补入原分母。产品代码/算法不改。
### Decision Update · 2026-10-17 · 失败轮的实际落盘核对
只读发现pending已被正常冷启动消费,失败输入Lab四件已completed且原请求与准备件对应、活动28;普通Session启动源未armed,不能据Lab completed宣称本指标通过。自有生命仍在,先记录后精确单次SIGTERM/absent;此失败Lab四件先完整SHA/字节保留主机,再独占同容器退役到will-finish-first-stopped(28→27),保留全部原始字节,不删除/不再次启动该输入。上述潜在pending归档分支因此无需执行。下一新R1队列完整5轮另列,绝不以成功轮抹去首队列0/5与准入遗漏。
### R1 Formal Admission · 2026-10-17
正常UI一次选择Startup Timing并关闭弹层,已见对应卡片,未采集。精确终止失败轮残留自有生命已完成;其后恢复脚本误用退役前活动集合,capacity-preserved断言失败(不是再次设备故障),原失败如实保留、未重复信号。后续保全脚本独立核空闲/无pending、28个活动、失败四件精确字节并同容器rename后27,3.684251s/69,476,352B、5句柄全关/删除0,证明当前正确终态。原首队列执行器/校验器四源码按原预pin逐字保存,再加“正常UI启动卡必须存在、在设备刺激前校验”及两个负控,16软件方法通过。明确新R1固定[0,300,0,300,0]五新生命/Session,首失败停/无自动补轮;原首队列0/5独立保留,历史停止不得隐去。新队列和分离复核源码预pin,当前主线算法不改。
### R1 Stop / R2 Repair Decision · 2026-10-17
R1前三轮4.184291/313.279500/4.412750ms来源与正控逐轮门通过,但第4轮在initial-owned-idle停止(Start/Stop/URL/普通启动0),R1正式仍3/5 partial、不算验收,不补第4/5轮。新只读确认另一个完整身份的新生命,非前三正式生命,无pending、活动30;此前第三轮参考已连续absent到结束,该生命在随后间隔新生,原因unknown,不归因产品或用户。已请求Owner测试期间暂不操作自有Lab,不要求重启或重装。
修复仅为测试准备:每轮在正常UI目标/启动卡/idle及无pending先核之后,如自有Lab存在,只对双查同一完整身份的自有生命单次SIGTERM/absent,记录initial life;每轮最多一次初始归一化,无自动重复/重试、不碰其他App,准备生命/正式生命仍全新且独立参考absent→present。不放松正式来源/正控门。原R1四执行源码先保存并逐一核原pin,再修改工具/加负控。新R2仍完整固定5轮,原0/5与R1 3/5永久分列,R2首失败停,不以持续重试追求通过。
容量:原Static Runtime五run主机596封存SHA176412972c37249ec2d1ac3fde03d724e2cd0e89cd52e75011cc4a32a60a5e45与手机四件重新核同后,仅同容器退役到will-finish-r2-capacity(30→25),删除0/释放0;保留原R1三新run和全部失败。新R2准入前先本次精确已记录残留生命归一化,独立容量guard再次核空闲/无pending,源码持久预pin。
### R2 Formal Admission · 2026-10-17
17软件方法通过(含归一化必须在UI/无pending/旧件身份门后、刺激前且最多一次)。本次精确已记录残留生命单次终止/absent、30活动,无pending/句柄全关,3.822766s/69,914,624B。Static Runtime596封存及各四件核同保全一次成功,7.870680s外墙、30→25/退役5/删除0。明确仅新R2完整固定五轮,原0/5和R1 3/5保留;不放宽来源/正控或时间资源门、初始归一化不充当正式启动样本。新队列与分离复核源码预pin(含每轮初始生命/单次终止计数检查),首失败停、不补轮。
## Independent Acceptance Update · 2026-10-17 · willFinish R2五新轮限定E4
**willFinishLaunchingWithOptions()本项限定E4 candidate通过**。179正常产品入口与自有Lab90.21.8,R2固定[0,300,0,300,0]五新产品生命/不同Session;原始code23/24单span/主线程同代绑定/稳定设备timebase整数ns差分、原始完整端点集合、全部有值实时包与两最终报告/安装模块副本重放成立。新设计留存8/66→9/66(启动8/12),历史非启动8/54旧7未重验不相加。接受本Fixture回调范围的来源一致与无明显偏离,不是独立物理精度/私有事件语义校准或任意App永久100%。
| 轮 | 设定 ms | App内实际等待 ms | 回调阶段 ms | 阶段−实际等待 ms | 有值实时包 | 门 |
| --- | ---: | ---: | ---: | ---: | ---: | --- |
| 1 | 0 | 0.000417 | 4.375916 | 4.375499 | 5 | 通过 |
| 2 | 300 | 301.011750 | 311.561083 | 10.549333 | 5 | 通过 |
| 3 | 0 | 0.000458 | 5.536250 | 5.535792 | 5 | 通过 |
| 4 | 300 | 301.030750 | 311.735041 | 10.704291 | 4 | 通过 |
| 5 | 0 | 0.000375 | 4.000750 | 4.000375 | 4 | 通过 |
每轮0组实际等待≤10ms、300组300–350ms;阶段−实际等待在预设[-1,50]ms内。阶段零组中位4.375916ms、300组中位311.648062ms,实际等待中位差301.020833ms,控制差误差6.251313ms≤50。App自身actualDelayNs不是外部参考仪器,只作局部正控无明显偏离门。
R2队列290.856209s≤600、串行1/轮间15秒,五轮均首次执行,没有补轮/替换;各Start/Stop一次,准备/正式生命不同,参考absent→present,未知/未观察尾部如实保留。分离复核未调用执行器audit/check函数,独立重读原/副本SHA/Raw计数/逻辑流tuple/线程映射/代际/全部转移、设备差分、消费者、实际等待与封口,1.448809s/RSS57946112B;sqlite逻辑摘要未重算,物理原/副本核同。无周期CSV列,不伪造连续率。
**失败与分母**:原首队列0/5因正常重开后startup未选停止,普通Session/原副本/已消费Fixture四件及原四源码保留;修复在设备刺激前核正常UI启动卡。R1前三轮4.184291/313.279500/4.412750ms逐轮门成立,但第4轮initial-owned-idle停止,故R1保持3/5 partial,第四轮Start/Stop/URL0、不补轮。只读证实间隔中新生的另一自有生命,非前三正式生命;第三轮参考此前已absent到结束,重新出现原因unknown,不归因产品或Owner。R1原四源码按预pin保存后,新增每轮UI/无pending/旧件门后最多一次精确自有生命归一化,17软件方法通过;R2独立五轮不借入旧分母,各次归一化计数由分离复核核实。初次容量idle停止/后置旧集合断言误判等亦全部保留,不删失败、不重复信号掩盖;源码长期私有预pin。
**保全与效率**:Scene603封存及手机四件核同退役五run32→27;首停输入完成第28个run,四件独占保全后28→27;R1三新run后30。为R2先核Static Runtime596封存及五run四件再退役30→25;R2五新轮后30,未自动放宽容量。全部rename保留字节,删除0/释放0,Raw/失败/旧清单不动。14初版/16第一修订/17最终软件方法和旧两轮诊断/五次同规模基准仅E2工具证据,不充真机分母。首次/批末/30分钟检查空间,只清已完成可重建副本。
**边界**:可选回调真正缺席按产品既有not-applicable(非0),本Fixture实现回调所以缺失/N/A不算本项成功。附带Total过渡与最终不同=False,既有Total过渡UI风险另列。四启动模块/main忽略调试位置一致;整179 GUI非当前main整体重建,不改产品算法/配置/频率、不重签重装/造包。Owner暂缓公证、GPL/整GUI/旧性能/GitLab缺口不被本项解除。
私有本批1161件非自引用封存,SHA `153c4c09e21489484ee89fa92af8c89f32cf39814bee338e365c1fed615c3d7e`;后续发布收据另列。四个willFinish工具/知识/开发记录/进度窄main,GitHub/GitLab各一次,干净站点构建发布与线上核对/一次真实通知独立留证。下一仅didFinish回调独立合同,不顺带接受下一项,全66目标不缩。