用途与实际影响
这项功能怎样使用
为什么需要它
直接覆盖运行中的文件会让旧版本和恢复位置说不清,也可能中断电脑任务。旧设计把准备新版本、采用和底层切换分开。
举个实际例子
我问“能不能先检查一下状态,再把 Remote 恢复起来?”当前答案仍是不可以:状态检查、打开、更新和回滚全在冻结范围。页面只能从发布材料和源码还原旧设计;真正恢复必须另开一个明确项目重新验收,不能从这里顺手试一次。
最后我会得到什么
得到历史版本和回滚依据的说明,以及现行接管方案为什么停止;当前不能据此恢复运行。
正常时
历史代码证明曾有版本检查和回退设计;这不是当前已安装或可运行的证明。
发现问题时
旧 Windows 接管仍缺可重复恢复验收,所以不能用“再试一次”代替修复。
入口不可用或证据不足时
当前控制入口冻结且不可用,只能阅读获准的历史材料;恢复须由本人另行明确启动独立项目并重新验收。
从哪里开始
当前入口冻结且不可用,不能执行 Status、Open、Close、安装、更新或回滚;要恢复必须由用户另行明确启动独立项目。
需要准备什么
- 想了解的历史安装或回滚版本;当前不能执行
从开始到拿到结果
- 1
先承认当前不能操作
这里只读解释旧版本怎样准备和采用;检查状态或重装都不在当前范围。
- 2
分清旧版本的几个结果
新文件登记、电脑选择采用和实际进程切换是不同事实,不能用一个回执代替全部。
- 3
恢复要另起项目
本人明确启动后才重新定方案,并做 Windows 生命周期和真实手机端到端验收。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
当前控制入口不可用且冻结;安装、更新与回滚只保留历史设计和测试证据,不是待做一次在线检查的可用入口关键规则与设计选择
当前冻结优先于下列历史设计;不执行首次安装、依赖构建、登记、Status/Open、排空、回滚或底层交接来试探能否恢复。
历史安装从已构建文件计算内容身份,不直接绑定 Git 工作树。
历史 Register -NoStart 语义是安装并选择候选、不打开 Remote 或重启 Desktop;它仍有写入效果,当前不可执行。
current(当前状态) 表示 selected(已选择待采用)运行代,不等同于当前进程已经运行该代;previous 保留精确回滚祖先。
只有 Broker(代理服务)/Sidecar(认证侧车服务) compatibility id 相同、owner 身份不变且 unknown(未验证) connection 为零时,才允许 Web/Sidecar(认证侧车服务) 滚动更新。
历史协议把 Broker(代理服务)、app-server(任务协议服务) 或兼容 id 变化与普通更新分离;今天不能以‘显式 Open’替代重新立项和新验收。
本页的 v0.1.5/测试证据不证明任何当前机器已安装、当前在线或无人值守接管已经验收。
本模块用到的名词
- content-addressed runtime(内容寻址运行代)
- 目录 id 由运行文件和兼容身份的规范清单计算;任一受管字节变化都会得到新代。
- selected vs active(已选择与正在运行)
- current(当前状态) 指针表示下一次允许采用的版本;Supervisor 当前持有的 Sidecar(认证侧车服务) 可能仍是上一代。
- atomic pointer(原子指针)
- 临时写入后用文件替换一次提交,并回读哈希,避免 current(当前状态)/previous 半写状态。
- maintenance drain(维护排空)
- 先停止接纳新活动,等已接纳写入和派发完成,再允许切换进程。
- explicit handoff(显式交接)
- 历史协议将底层 owner 变化单列,不能借兼容更新自动发生;当前冻结下连显式 Open 也不能调用,恢复另行立项。
专业定义
保留内容寻址运行代、登记/采用分离、兼容排空和精确旧代回退的历史实现;当前禁止安装、Status/Open、更新和回滚,不能照旧教程运行。
解决什么
解决可变源码被直接执行、更新覆盖回滚祖先、活动任务阻塞发布、短切换重复写入、新 Sidecar(认证侧车服务) 失败后无恢复,以及把公网层修复扩大成底层 owner 重启。
当前怎样实现
- Get-CodexLocalRemoteRuntimeVersionPlan 枚举 package.json、Broker(代理服务)/Sidecar/Web dist 与 Windows 脚本,记录逐文件 Size/SHA-256、源码 commit 和 dirty 状态。
- VersionId 是 runtime-content/v1 规范 JSON 的 SHA-256,身份同时包含 BrokerSidecarCompatibilityId;文件先复制到 .installing 临时目录,完整验证后再移动为 RuntimeVersions/<versionId>。
- runtime-current.json 原子记录 CurrentVersionId/Root/ManifestSha256 与 Previous 对;读取时重新验证目录名、全部文件、manifest(清单) 哈希和任务绑定。
- managed-config.json 保存实际 Sidecar(认证侧车服务)、Broker(代理服务)、upstream(上游分支) 端口、BasePath 和任务名,Status、Open、回滚与卸载不猜默认值。
- Supervisor 在显式租约内捕获 selected runtime(运行环境)、Broker(代理服务)/upstream(上游分支) PID 与创建时间、Desktop root、runtime(运行环境) invocation 和 compatibility id,漂移即停止更新。
- 旧 Sidecar(认证侧车服务) 的维护入口只接受受保护 bearer capability 与 32 位十六进制 update id;排空拒绝新 mutation(写动作)和下一轮派发,等待已接纳活动归零。
- 浏览器把 method、API path 和 body 形成逻辑 intent(意图),将同一幂等键保存在内存与可用的 session storage 中,在有界网络/503 恢复窗口复用。
- 新 Sidecar(认证侧车服务) 启动或握手失败后,事务再次核对旧运行代与 owner invariant(不变量),再启动并验证精确旧 Sidecar(认证侧车服务);owner 漂移时不会冒险补偿。
- Rollback-CodexLocalRemoteRuntime.ps1 验证 previous manifest(清单) 后重新登记旧代为下一次采用,返回 RunningInstanceChanged=false;它不终止当前 Desktop。
执行流程
- 1
以下是已保留源码所定义的历史流程,用于理解曾经做成的能力,不是当前操作步骤;运行时冻结期间不执行、不探测,也不因旧测试或截图解除冻结。
- 2
先读冻结边界与 failure-postmortem-2026-08-03.md:历史存在真实成功,但 Windows 接管没有达到可重复恢复标准;本页不以再试一次 Open 开始。
- 3
历史准备阶段包含依赖构建、密码设置和允许项目登记;当前只读取对应文档、package metadata(包元数据)和测试定义,不构建或修改安装态。
- 4
历史注册器从构建文件计算内容身份,将完整文件与 manifest(清单) 放入不可变目录,再原子记录 current(当前状态)/previous;Register -NoStart 并非无副作用的读取命令。
- 5
历史 dispatcher 区分 Status、显式 Open 与 Close;这些名字仅用于解释源码职责,冻结期间全部不调用,也不存在 Status 通过后就能 Open 的当前旅程。
- 6
历史兼容更新先验证 owner/compatibility,旧 Sidecar(认证侧车服务) 排空已接纳写入,再以绑定 update id 的回执控制一次短切换;这些是设计条件,不是现在要运行的步骤。
- 7
源码中的浏览器复用原幂等键,新 Sidecar(认证侧车服务) 握手失败则在 owner 不变时恢复精确旧代;这部分保留为可复用设计,不说明当次实际补偿已发生。
- 8
历史回滚脚本验证 previous manifest(清单) 后改变下一次采用指针,并返回 RunningInstanceChanged=false;当前不执行脚本或读取已安装指针。
- 9
若用户未来明确启动独立恢复项目,先重新决定实现,再按隔离 Windows 生命周期矩阵与新端到端证据判断是否可恢复;静态审阅到此结束。
边界
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- 登记、回滚指针和实际进程切换是三个证据层,任何一个都不能冒充另一个。
- v0.1.5 之前已运行的 Supervisor 不会凭磁盘更新获得 drain 协议;首次采用仍遵守原安全边界。
- 兼容滚动更新允许活动 Codex turn 继续,但不允许 unknown(未验证) connection、Broker(代理服务)/upstream/Desktop owner 漂移。
- 排空后的公网 listener 有短暂同端口间隙;浏览器恢复有界,超时会明确离线。
- 回滚旧 Sidecar(认证侧车服务) 也必须复核 owner;无法安全恢复时报告失败,不重启 Broker(代理服务) 或 Desktop 掩盖问题。
- 当前 Windows 接管方案明确冻结、不可用;缺少可重复无人值守验收是停止旧路线的原因,不是本页获准探测或重启的任务。
失败与恢复
- 当前入口冻结
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- 排空超时或 update id/回执不匹配
- 旧 Sidecar(认证侧车服务) 回到 serving 或保持运行,不执行停止。
- 浏览器在短切换时连接失败
- 同一逻辑 mutation 在有界窗口复用同一幂等键;仍未恢复时给出明确离线结果。
- 新 Sidecar(认证侧车服务) 启动或握手失败
- 停止候选,复核旧代与 owner 后恢复并验证精确旧 Sidecar(认证侧车服务)。
- selected runtime(运行环境)、Broker(代理服务)、upstream(上游分支) 或 Desktop root 漂移
- 更新失败关闭;不跨 owner 猜测补偿。
- 历史候选的 Broker(代理服务)/app-server(任务协议服务) 或 compatibility id 改变
- 源码不允许 Sidecar-only 路线;当前冻结期间不执行任何交接,未来恢复需独立项目与新验收。
- previous manifest(清单) 或指针校验失败
- 拒绝回滚,不覆盖 current(当前状态),也不触碰当前运行进程。
真实入口
docs/failure-postmortem-2026-08-03.md真实成功、接管不可重复、停止旧路线与未来独立恢复的证据边界;优先于旧安装步骤。
docs/quickstart.md保留首次安装、Status/Open/Close、更新和回滚的历史设计;只能只读审阅,不能照此启动冻结组件。
docs/release-notes-v0.1.5.md定义活动任务期间的 Sidecar(认证侧车服务) drain、同一幂等键续接、失败恢复和底层 handoff 边界。
scripts/windows/CodexLocalRemote.Windows.psm1实现内容寻址运行代、manifest(清单)/current/previous 验证、原子指针和 Sidecar(认证侧车服务) 更新补偿事务。
apps/sidecar/src/maintenance.ts实现受保护 drain、活动租约、update id 绑定、超时恢复 serving。
apps/web/src/api.ts在短暂 Sidecar(认证侧车服务) 恢复窗口为同一逻辑写入保留幂等键并有界重试。
如何验证
- runtime-version-package、runtime-registration-pending 与 runtime-promotion 测试覆盖内容身份、不可变安装、current(当前状态)/previous、待采用阻断和精确回读。
- sidecar-runtime-update 测试覆盖活动 turn 更新、排空失败不停止、兼容门、owner 漂移、新 Sidecar(认证侧车服务) 失败恢复旧代及补偿失败边界。
- maintenance 与 api-idempotency 测试覆盖 drain 超时恢复、同 update id 复用、跨 Sidecar(认证侧车服务) 重启的同一幂等键和有界离线终态。
- v0.1.5 的发布说明把上述路径列为正式能力;当前 main 最新 CI run 仍为 failure,不能把旧 release 结果升级为 current(当前状态) main PASS。
- 当前冻结边界禁止 Status、Register、Open、Close、Rollback、Sidecar(认证侧车服务) drain 与 Broker(代理服务)/app-server(任务协议服务) handoff;本次仅静态审阅,没有调用运行组件,结论是不可用而非仅未测在线。
与其他模块的关系
它依赖共享架构区分可滚动的 Web/Sidecar(认证侧车服务) 与必须显式交接的 Broker(代理服务)/app-server(任务协议服务);安全模块保护维护 capability 与幂等写入,版本与证据模块约束 release、current(当前状态) main、安装态和当前在线结论。
