源码更新完成的归属

阶段接缝 {#phase-seam}

命令进程负责准入、更新锁和输出生命周期、更新前清点、全 profile 快照、网关暂停、Git 选择/stash/restore 以及语法/HEAD 守卫,还有 ZIP 下载/staging/脏树复检/release 嫁接/交换。它在交换代码之前导入完成传输。一旦选定最终树(含上游合并),Git、已是最新的重试和 ZIP 都从该树向 update_completion.py 发送一个带版本号的 JSON 请求。命令进程中不逐出或重载任何已缓存的应用模块。

请求携带规范的源码/home、桌面产品选择、交互和网关模式、更新前版本、活跃与兄弟快照标识、序列化的运行时计划、打开的回执标识/数据以及已暂停窗口的 token。它装的是数据,绝不装可调用对象或 pickle。stdin 保持继承,用于交互式配置提示;网关模式保留其非交互行为。子进程输出保持可见,并由父进程的更新输出流镜像。

新代码归属方 {#new-code-owner}

一个仅标准库入口用可用的 Python 以 -I -S 启动,因此不初始化旧的 site-packages 或可执行 .pth 文件。一个私有字节码缓存前缀在任何新 checkout import 之前圈定陈旧缓存文件。其显式 import 路径指向新 checkout。它调用新 PM 接口准备记录的依赖并集,然后以新激活环境启动所选 Python。该解释器也在禁用 site 初始化的情况下启动,随后运行时归属方在任何应用 import 之前租用并激活其所选世代。只有该解释器 import 应用完成代码。同一回执/关联标识跨越这一准备边界(含 PM 结果)。所选 Python 的完成负责启动器发布、构建器、缓存失效、全 profile 配置/状态/skill 维护、进程扫描、机群重启、Windows 恢复、dashboard 去重和验证。

既有的按种类重启和中止恢复算法保留;即使没有混世代 import,瞬时的监督进程/子进程失败也是真实的。只有 purge/reload 变通方案和独立的重试/ZIP 尾部组合消失。网关退出状态在重启可能终止更新器 cgroup 之前写入,并在后续失败时降级。验证发布最终回执。

父进程生命周期与失败 {#parent-lifecycle-and-failures}

父进程等待并传播子进程精确的非零结果(信号映射为 shell 风格的 128+signal)。子进程不能仅靠退出零就成功:必须有带匹配回执标识的终态响应。响应返回被改动的 Windows token,使父进程注册的紧急恢复不重复已完成的工作。正常的父进程完成不做任何维护。

父进程在子进程终态被确认前保留其原回执;子进程输出缺失/失败时,它仍可供既有的命令边界失败终结器使用。即使应用 import 不可用,stdlib bootstrap 也返回关联的 PM 失败数据,并在每个进程边界归一化负信号退出。POSIX 完成拥有一个新的会话/进程组;取消在释放锁之前杀死该组(Windows 用保留的子进程的 taskkill /T 树)。父进程在启动完成进程之前记录待处理的机群义务,包括准备无法开始时。当子进程无法执行或被杀时,父进程的紧急 Windows 恢复仍是最后手段的生命周期义务。失败的子进程绝不清除待处理的机群义务。维护开始后不做自动代码回滚(SQLite 快照仍是文件丢失恢复,不是回滚)。

历史表面 {#historical-surface}

从完整可达的已发布更新器历史冻结的所有名字保持可解析。历史依赖钩子保留仅标准库的接管桥:旧父进程等待、携带回执/恢复状态,且绝不恢复已退役的安装器。新近退役的准备和模块重载钩子被显式标记为不完整,以非零停止并要求再次运行 hermes update;它们不能伪造缺失的完成请求。当前 Git/已是最新/ZIP 调用方只使用规范完成传输,不用历史接管入口。未冻结的、仅分支的重试组合被删除,而非 shim。ACP 便捷发布使用启动器归属方的 expose_cli;历史 ACP 入口只是适配器,绝不是第二个写入者。冻结集绝不裁剪或替换为仅标签覆盖。新的当前路径 import 与该历史取并集。

验证 {#verification}

只使用隔离 home、一次性 Git 仓库和假的依赖/构建/服务适配器。演练一个带缓存不兼容模块的旧进程,跨越真实 Git 切换到新代码、所选 Python 执行、回执标识和快照传递、非零/突然的子进程退出、锁释放和 Windows token 返回。既有的聚焦测试覆盖脏 ZIP 检查/嫁接、快照、机群对账、监督进程时序和历史 import。原生服务重启和 Windows/macOS 验收仍是独立的必需流水线;本实现的测试运行不触碰任何运行中的用户服务或用户状态。