Weftale:一次真实主流程
用户打开外壳后,框架必须确认运行的插件与构建清单一致,才能交出可操作界面。本指南跟随一次启动校验,解释校验、宿主选择、根插件装载和失败清理之间的关系。
下面的 case 是依据源码分支整理的代表性输入与结果,不是本轮线上观测。
| 输入或状态 | 动作与结果 |
|---|---|
| 清单、入口和内置包全部核验通过 | 外壳进入 ready |
| 清单哈希与构建常量不一致 | 拒绝启动,不进入可用态 |
| 网页构建缺少信任页来源 | 拒绝,提示使用网页构建入口 |
| 异步步骤超过 60 秒 | 拒绝并逆序清理;迟到的撤销项立即执行 |
Step 1: 先显示外壳,再检查清单
外壳最先挂载,因此校验失败也能显示拒绝原因。启动读取根插件名单,检查形状、构建渠道和清单哈希,再核验 Kernel 入口字节。任一不符都进入拒绝态,不能先执行未核验的根代码再补检查。
对应实现(src/boot/main.ts),定位 bootSteps、isRpmShape、computeManifestHash、BootRefused。
Step 2: 一次选择宿主并建立信任通道
启动层统一决定使用网页还是 Tauri 宿主。Tauri 握手核对构建身份;网页构建必须提供独立信任页的来源配置。建立通道后立即登记撤销操作,再读取签名清单;不能因信任信息读取失败而带着空名单继续。
信任页的就绪握手有独立的 10 秒期限。内置安全字体在页面完成加载后开始请求,通道可先完成握手;字体全部加载且校验通过后,裁决与信任管理界面才允许批准或撤销。字体仍在等待或加载失败时,写操作保持锁定,拒绝与关闭仍可用。
对应实现(src/boot/main.ts),定位 selectHost、frame.dispose、trust.signingList;握手期限见 src/host/shared/trust-frame.ts,字体与写入锁定见 src/trust/ui/app.ts。
Step 3: 让内核核验其余根插件
启动层创建唯一 Cordis 上下文并把宿主、信任绑定和根模块引用交给 Kernel。Kernel 对其余根插件逐个核验契约与入口,再进入装载。根插件通过能力提供和注入协作,核心层不自行判断宿主。
对应实现(src/core/kernel/index.ts),定位 judge、RootModuleRef、ctx.provide。
Step 4: 装入内置包并交出控制面
根结构就绪后,内置包仍通过控制面的装载流程核验。任一内置包未加载成功都会拒绝启动;全部通过后才把控制面交给内置外壳,并报告 ready。这里的 ready 只表示启动链完成,不代表每个业务插件都做过本轮双端验收。
对应实现(src/boot/main.ts),定位 control.loadBuiltin、shell.attach、setState。
Step 5: 失败或超时撤销已建立资源
启动全程有 60 秒期限。失败或超时会逆序撤销已登记的通道和根插件;超时后才返回的异步步骤在检查点停止,之后新增的撤销项立即执行,避免留下半启动资源。
对应实现(src/boot/deadline.ts),定位 BootRun.add / live / abort、withDeadline。
检查这条解释
npm run test:node -- test/unit/boot-deadline.test.ts test/unit/rpm.test.ts启动期限和 RPM 测试可反证该模型;本轮只检查源码与测试,业务测试未执行。文档构建成功不能代替网页/Tauri 两端契约测试、编译或真机验证,因此这里不使用项目进度中的“已完成”状态。
理解这条交接后,用代码地图定位下一次修改;需要反查依据时查看源码调查与边界证据。
证据状态:除特别标注外,本页基于当前源码已确认。