Skip to content

fix(desktop): automatically recover managed runtime alignment - #7980

Merged
huangruiteng merged 6 commits into
mainfrom
codex/app-runtime-convergence-20261103
Nov 3, 2026
Merged

huangruiteng merged 6 commits into
mainfrom
codex/app-runtime-convergence-20261103

Conversation

@huangruiteng

@huangruiteng huangruiteng commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

The App must automatically recover from a managed-runtime mismatch and open the workspace without requiring Reconnect. Previously, launchd could keep launching the old CLI while the App selected a newer Core; stopping the listener simply restarted the same wrong executable.

This change aligns the verified status/Chat LaunchAgents with the selected runtime, checks both real HTTP identities/readiness, and recovers temporary failures automatically. The native supervisor retries after 2, 4, 8, 16, 32, then at most 60 seconds of cooldown, with no permanent retry-count latch. Once qualification succeeds, the existing workspace handoff proceeds without a click or reload. Retry now is optional.

Author Declaration

  • Written by: model_agent — OpenAI Codex (GPT-6 family).
  • Specification: the reproduced defect and automatic-recovery acceptance above, plus existing Chat activation, runtime-selection and update-admission contracts at the base revision.
Criterion Disposition Owner / path Evidence
Actual services adopt the selected executable implemented loopx/hosts/managed_service_runtime.py; native services.rs Real launchd and Core 2.1.0 → 2.2.0, exact HTTP identity/readiness
Temporary failure recovers without user input implemented Native Maintenance::reconcile_services All four alignment error codes recover after repeated failures with a fake clock; no reconnect action between failure and success
Prevent a restart storm while remaining recoverable implemented Native service retry clock and existing Core activation No service work before cooldown; delay capped at 60 seconds; slow attempts start cooldown after completion; each attempt reuses source/Chat fencing and rollback
Preserve workspace, accounts, accepted work and update choices implemented Existing manager source, Chat ingress guard and update admission Real registry retention; pending Chat blocks mutations; source drift rejected; available/restart-required update states retained
Explain automatic recovery with optional controls implemented Boot HTML/JS/CSS and Desktop README Automatic countdown → ready with zero action calls; desktop/narrow screenshots; optional Retry now dispatches reconnect

Self-check: reviewed source ownership, quoting, Chat admission, rollback/journal recovery, timer/lock ordering, native status projection and explicit update/pin behavior. The Python adapter belongs in the existing internal loopx/hosts package; it is not a new capability, provider or decision owner. This also fixes the earlier CI top-level module-budget failure without changing the budget. retry_after_ms is an additive native Desktop display field; the retry clock and CSS waiting state remain local. Existing activation errors and receipts remain the shared contract.

Scope And Continuation

Complete implementation for the standard macOS managed pair and automatic native recovery. Every retry reselects/rechecks the runtime, validates the loaded manager route, fences accepted Chat work, and recovers an interrupted handoff before alignment. An unverifiable/custom route is observed again without being rewritten. Already matching services avoid activation entirely. The user's CLI installation, original data/account arguments and explicit runtime pin remain under their existing owners.

CLI upgrades recognize an aligned binding and retarget the same standard pair; unrelated managed services retain existing restart behavior. Private endpoints and unsupported platforms retain their original paths. Automatic recovery does not bypass an incomplete App replacement or a pending update choice.

No new native candidate has been packaged or installed. CI, maintainer review and release-artifact validation remain before release; no merge authorization is claimed. This bounded S10/S12 repair does not close broader clean-install or release qualification.

Validation

  • Tested revision: a129f6fff736ccd74f13d7f547614307adf50c32; product code and browser captures match this head. The final edit adds only a Windows skip marker for a POSIX-only fixture.
  • Run state: local checks finished; remote CI and maintainer review pending.
  • Inputs: synthetic fixtures and disposable real services. No private operating context is published.
Check kind Result Public-safe evidence / limitation
unit passed 192 native Cargo tests; 12 opt-in tests and one separate doctest ignored. Tests cover eventual recovery for every alignment error, successive/capped cooldown, slow attempt accounting, successful reset and update admission.
unit / architecture passed 139 Python tests across runtime activation, CLI/update ownership and the top-level module budget; 4 skips include the opt-in real test, which was run separately below.
real_backend passed 18 focused tests with actual launchd and older/current Core. Inject one bootstrap failure, confirm the original pair is restored, then qualify the next attempt and preserve its original registry. Final successful alignment 5.888 s; full cold projection 0.842 s; repeated alignment causes no additional restart. This exercises provider recovery separately from the native fake-clock scheduler.
static passed Committed-head quick premerge passed (4 selected checks, zero failures), including public-boundary checks; 30 import-boundary/package-ratchet tests passed. Clippy all targets with warnings denied, Rust format, Ruff, boot JavaScript syntax, dashboard typecheck/build, staged bilingual/diff checks.
manual passed Exact boot sources with synthetic Tauri responses: automatic waiting → ready produced zero Desktop action calls. Optional Retry now dispatched reconnect. Desktop/narrow views inspected with populated recovery controls and no horizontal overflow.
real_entrypoint not_run Candidate native App package/install and non-macOS installed journey. Cargo used existing ignored bundle resources; browser fixtures and component integration do not certify a released App.

Failure history is preserved: the earlier CI module-count violation is repaired by moving the adapter under its existing host owner. A source-checkout real test rejected stale Chat assets after source changes; rebuilding the Chat bundle enabled the passing failure/recovery run. Earlier missing assets established why doctor success alone cannot qualify activation. The full cold status projection is measured separately from startup readiness; production readiness deadlines were not increased. The inherited maintainability advisory in render_canonical_todo_sections is outside this diff and its thresholds/exceptions remain unchanged.

Frontend / Visual Evidence

  • UI impact: changed. Browser previews from real boot HTML/JS/CSS with a synthetic Tauri bridge; no live/private screenshots.
  • Before: previous PR head 9f2a02580db25c9155d1a67f805a071fb38eed4e, which waited for manual recovery.
  • After: a129f6fff736ccd74f13d7f547614307adf50c32, automatic retry countdown and optional recovery controls. Desktop 1486×880; narrow 390×844. Preview was local-only.
  • Attention/craft review: the default screen shows a short recovery state and next attempt. Waiting has no active animation. Detailed cause, optional Retry now, update and diagnostic controls stay in one expandable panel. Narrow expanded content stays readable without horizontal overflow; existing layout/tokens are reused.

Before:
Before: recovery requires reconnect

After:
After: automatic recovery countdown

Narrow, optional recovery details:
Optional controls during automatic recovery

Type of Change

  • Bug fix
  • Documentation update
  • Test update

LoopX Area

  • Host or runtime integration
  • Public docs or presentation surface

Technical Direction

S10 reliability/recovery and S12 developer experience in the existing overall roadmap. This closes the manager/runtime mismatch and manual-recovery requirement within the scoped proposal, without claiming broader release acceptance.

Shared-authority RFC fixture impact

N/A: no Goal Authority provider, migration or compatibility projection changed.

Boundary Checklist

  • No private state, credentials, raw traces, internal links or local machine paths in this diff, description or attachments.
  • No duplicate benchmark work; scope follows the startup defect and automatic-recovery requirement.
  • No paired RFC changed; staged bilingual checks passed.
  • Public-safe visual evidence is included directly above.
  • Every commit carries DCO sign-off.

中文:默认自动恢复。App 对齐系统服务与所选运行时,暂时失败后自动退避重试,恢复成功后自动进入工作区。「立即重试」只是可选操作;请求保护、来源验证及失败回滚继续生效。候选原生版本尚未安装或发布。

Review repair and final source qualification

Final source: 57f7d971f933f03ae77c5ea44ef6800ada000984. The original launcher is now parsed before any signal or write: a standard label must contain the expected actual command and loopback endpoint. Interrupted journals must retain the original role and data arguments. Direct and shell-wrapper counterexamples keep queued work with zero signals and unchanged configuration, including when late readiness would fail. The CLI-entry mutation probe reproduces the prior premature stop and passes with the fix.

Current validation: 134 Python activation tests passed (4 skips), 18 CLI/module-budget tests passed, 31 managed-runtime tests passed with the opt-in real launchd path. The real CLI path separately exercised failed-bootstrap rollback, subsequent recovery, exact HTTP identity and three idempotent alignments. Native full suite: 192 passed, 12 opt-in ignored. Standard premerge passed with one inherited maintainability advisory; immutable base/head both retain the same 94-statement/61-decision Todo renderer finding. The previously failing delegation-search browser smoke passes after incorporating its main-branch repair. Earlier Windows CI permission failure remains a historical diagnostic, not a claimed fix.

The visual sources are byte-identical to the previously captured automatic-recovery revision; those synthetic-bridge screenshots remain applicable. Local build and installation qualification are tracked separately from these source and isolated-manager results.

Packaged macOS readback

The exact reviewed native App and Core were also installed and exercised together. Native startup automatically moved the previously managed pair to the reviewed runtime, verified both real HTTP identities and opened the existing workspace without Reconnect. A normal quit/reopen retained both service PIDs and launch counts; the workspace was visible after 4.4 seconds in this single warm observation (not a cold-start percentile). The earlier synthetic first-screen captures remain the public visual evidence; installed workspace content is not published.

The first local candidate used a version lower than an already prepared channel update and was superseded during startup. That run was rejected by actual bundle/source readback. The final local build was ordered after that channel version and its exact source identity remained stable across reopening; no update-security or readiness check was disabled.

Signed-off-by: huangruiteng <huangrt01@163.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
…vergence-20261103

Signed-off-by: huangruiteng <huangrt01@163.com>
Signed-off-by: huangruiteng <huangrt01@163.com>
@huangruiteng huangruiteng changed the title fix(desktop): align managed runtimes to stop startup restart loops fix(desktop): automatically recover managed runtime alignment Nov 3, 2026

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; reasoning_effort=max; declaration_source=runtime_reported

动机 / Motivation

打开桌面 App、需要所选本地运行时真正接管受管服务的人。旧 LaunchAgent 重启仍使用旧执行文件,变为核验目标、重载服务并读取实际 HTTP 身份,失败后自动退避恢复。独立隔离 launchd/真实 HTTP 的切换、失败回滚及三次不重启读回通过;自定义 status 标签的反例仍在来源校验前被停止。不认证完整签名 App 发布、真实用户安装采用或所有平台升级;未触碰本机标准服务、终端 CLI 或真实工作区。标准标签与 loaded arguments 相等并不证明原服务类型/来源;status 标签可运行另一 Chat,只有 .chat 标签的 store 被加锁。

改动思路 / Approach

复用原生 supervisor、Core activation 和既有 Chat ingress fence;macOS launcher/plist IO 留在现有 hosts adapter。新的重试钟是进程内状态,持久 journal 用于原服务回滚。先对齐loaded manager,再核验两个真实HTTP身份,比单纯终止旧listener更接近实际修复;自动退避2/4/8/16/32/60秒由尝试完成后开始计时,可选Retry now通过原生supervisor续接。现有更新选择与显式pin仍是独立边界。

具体改动 / Changes

完整审阅12文件 +1097/-24,按前置 Desktop现有恢复合同 的 Updates And Recovery 判断。spec_ref:apps/desktop/loopx-control-plane/README.md,spec_revision:4f8014980938f864d254f40d7f3ffaa61949b9b7。该合同要求由原管理器确定数据路由、保护已有Chat工作,并在来源/任务未知时保留服务。原生RFC的完整私有进程边界与已安装App验收保持另行资格;当前实现的shared/private分支按真实生产入口检查,不以源码单测认证发布。

四个Python模块133 passed/4 skipped;其中opt-in真实launchd单项另独立执行1 passed。仅使用独立label/账号目录/registry/端口,原Core与当前Core均版本2.2.0但source identity不同;故意让第二个bootstrap失败后原pair恢复,下次成功,两HTTP身份与目标一致,原registry保留,三次重复对齐不重启。未操作机器标准服务或安装软件。

实际boot源码的1440/390视图显示自动恢复倒计时、静态等待、可选44px重试和原更新控件,横向溢出0;合成Tauri bridge核验reconnect动作及ready显示。此UI测试不证明真实原生服务已采用。真实backend切换证据单独来自上述隔离launchd路径。

对主干的风险 / Risks

[P1] 在首次bootout前验证原服务类型和实际工作保护范围。 loopx/hosts/managed_service_runtime.py:262 当前仅把Label与文件名、loaded arguments相等当成原服务资格;_endpoint只核host/port,随后按.chat后缀选择受保护store。独立反例把已加载com.loopx.status配置为另一明确root/端口的Chat,其中保留queued Turn;原.chatroot空闲。production alignment仍对该status发出bootout、改写并bootstrap,未检查其真实Chat store。当前反例用mock manager和就绪回调、真实隔离Chat store,证明的是信号发生在来源类型核验之前,没有中断真实用户任务。

基线的native listener owner会校验预期serve-status/chat命令及端口,再允许终止;新增alignment前置路径绕过这一步。即使最后真实HTTP核验失败并回滚,首次中断已经发生。请在信号/写入前确认每项原launcher的受支持命令、来源与端点,对自定义或类型不匹配路线无效果拒绝;任何真实Chat都必须沿原store保护。在独立fixture中保留queued Turn并断言0 bootout/0写入,另覆盖晚期就绪失败后的同一边界。

当前source premerge通过19项选中检查及direct/public-boundary检查,保留既有维护性advisory。首次Cargo缺少runtime bundle,按已有精确源码打包流程修复后再测;完整native结果189P/3F/12ignored:首个私有端点仍被占用,两个后续mutex poison。串行21项supervisor与2项alignment重查通过,不把这个并发不稳定性改写为已修复;原并发条件的稳定恢复仍有证据缺口,需要独立判别,当前未做immutable-base native配对。新cooldown/slow-attempt/update-gate分支在完整run中通过。

wait_for_ci=false:CI未查询、轮询或等待。当前来源覆盖反例与native不稳定性来自本地验证;remote CI未知不产生额外门。新journal/binding只属于macOS适配器恢复,不授予Goal/Agent执行权限;名称没有扩大生命周期,自动shared启动的默认变化已披露。

我的整体评价 / Verdict

REQUEST_CHANGES。标准pair的实际切换、回滚、重试和页面反馈有价值,当前仍需补齐自定义来源的无效果拒绝与实际Chat工作保护;不能从标准label推断实际服务角色。独立HTTP读回是合适的局部整理,修复不需要并行安装器或另一套状态owner。当前切片是原服务对齐及恢复;自定义来源的无效果拒绝仍未满足,不能把标准服务的成功推广到所有相同标签。未执行合并、升级、dismiss或resolve。

已检查当前源码的默认、展开、窄屏与失败恢复整页;合成数据和模拟边界已明确。不认证完整签名 App 发布、真实用户安装采用或所有平台升级;未触碰本机标准服务、终端 CLI 或真实工作区。

English verdict: REQUEST_CHANGES a129f6f. The standard managed pair switches and recovers in isolated real tests, but automatic alignment can stop a custom Chat route before validating its role or fencing its actual store. Retain the unresolved native concurrency failure; CI was not consulted.

…vergence-20261103

Signed-off-by: huangruiteng <huangrt01@163.com>
Signed-off-by: huangruiteng <huangrt01@163.com>

@huangruiteng huangruiteng left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=GPT-6; provider=OpenAI; declaration_source=self_reported

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机 / Motivation

使用桌面 App 打开现有工作区、由系统管理本地服务的用户。旧运行时反复被系统重新拉起,App 无法完成连接;现在先核验原服务并对齐运行时,暂时失败后自动退避重试。真实隔离 CLI、launchd 和 HTTP 验证了失败回滚、随后恢复、原工作区保留以及重复核验不重启服务。不认证所有平台升级、模型任务完成率或长期冷启动分位数;本机安装采用在合并后单独读回。

改动思路 / Approach

复用既有原生 supervisor 和 Core activation/Chat fence;平台启动器操作留在 hosts 适配器,避免把 macOS IO 变成第二个控制面决策 owner。当前切片交付标准受管服务的对齐、回滚、自动恢复和启动反馈;自定义来源无效果拒绝,私有端点继续沿既有 owner。单纯增加超时或重启 PID 无法改变 launchd 记住的可执行文件;因此对齐原管理器是必要修复。新增本地回滚记录只保存这次切换的原始与候选配置,恢复仍沿原 Chat store 加锁。原生重试从每次操作结束后计时,2/4/8/16/32/60 秒退避,没有永久次数锁。已有意图和权限后无需新增确认,立即重试只是可选操作。

具体改动 / Changes

全量审阅 base ac74f90c4778381b6fcedd5d76059522591c3f42 到 head 57f7d971f933f03ae77c5ea44ef6800ada000984 的 12 文件改动。spec_ref:apps/desktop/loopx-control-plane/README.md;spec_revision:ac74f90c4778381b6fcedd5d76059522591c3f42。按原有 Updates And Recovery 与 Runtime Selection 合同核对所选运行时、原服务来源、既有 Chat 工作保护及恢复读回,并单独复核 a129f6 到当前 head 的修复。

_endpoint 现在先解析原 launcher 的实际命令位置和 loopback 端点;serve-status 作为选项值不能伪装成命令,其他可执行文件或错误角色也不能通过。_recover_alignment 对原始和候选的服务角色与数据参数使用同一约束。新 _launcher 复用 literal 解析,避免 retarget 与验证分别理解启动命令。正常接管仍先持有 Chat ingress fence,再 journal、bootout、写入、bootstrap,最后读取两个真实 HTTP 身份。

Maintenance::reconcile_services_with_clock 保留 busy、安装不完整、可用更新和必须重启等边界,暂时失败后自动继续,成功重置退避。managed_runtime_alignment_result 拒绝错误身份、未就绪回执和非零退出。已有 CLI 激活行为在不可变主干基线上 116 passed/3 skipped,在当前 head 的对应测试中继续通过;新增参数及其他服务更新路径亦有覆盖。

PASS:134 Python 激活测试/4 skipped,18 CLI/模块预算测试,31 项含真实 launchd 的测试。另通过实际 CLI 入口执行真实旧 Core 2.1.0 到当前 Core 的切换,注入第二次 bootstrap 失败后原 pair 恢复,下一次成功;原 registry 保留,三次重复调用不重启。CLI 反例恢复旧 _endpoint 后得到 4 次 manager 操作且配置被改写,独立无效果断言失败;固定 head 返回来源未验证、零操作、原 queued Turn 保留。完整 native 两次均 192 passed/12 opt-in ignored。标准 premerge 通过,包含风险场景和公开边界检查;已有维护性告警在 base/head 均为相同的 94 statements/61 decisions,未放宽预算。

对主干的风险 / Risks

没有剩余阻塞性代码发现。原 P1 的错误角色/来源在首次信号前被拒绝;direct/shell、选项值伪装、已有 queued 请求和后续 readiness 不可用均覆盖。不可解析或被编辑的自定义配置保留原状,由其配置 owner 修复后自动重试。该拒绝不能宣称自定义来源也已完成接管。

保留历史负面结果:先前评审的 private status endpoint occupied 与两个 mutex poison,在不可变主干的同一并发 native 全套命令中再次复现(186 passed/3 failed/12 ignored);当前两次全套通过。此 PR 不改 private 端口分配和该 fixture,故不声称修复其碰撞根因,也不把旧失败改写为通过。当前改变的是共享受管服务,已有无关端点拒绝与真实 manager 切换证据分别核验。之前 Windows CI 的 PermissionError 也保留为历史未归因诊断;新的 CI 仍由合并就绪门单独判断。包构建最初暴露了 Python 版本、旧前端 revision 和缺失 Tauri CLI 的本地准备问题,按已有依赖及精确 revision 流程修复,没有降低打包校验。

我的整体评价 / Verdict

APPROVE 57f7d971f933f03ae77c5ea44ef6800ada000984。本次补齐原服务类型验证,修复可通过真实入口复现的误停条件,并保留自动恢复这一用户结果。复用既有原生 supervisor 和 Core activation/Chat fence;平台启动器操作留在 hosts 适配器,避免把 macOS IO 变成第二个控制面决策 owner。当前切片交付标准受管服务的对齐、回滚、自动恢复和启动反馈;自定义来源无效果拒绝,私有端点继续沿既有 owner。

已重新检查桌面默认恢复画面和窄屏展开画面:状态与倒计时居中,恢复控件按需展开,失败原因和可选重试保持可见。截图使用合成 Tauri bridge,不能证明原生安装或真实用户工作区;真实后端证据另由隔离 launchd 路径提供。截图对应 a129f6,三个 static 源文件在当前 head 字节一致,已重新查看实际图像。界面没有让用户承担必须执行的重新配置或确认步骤;跨平台安装和本机升级仍与代码评审分开读回。自合并与升级已有当前用户授权,但仍须等当前 head 的合并就绪结果。

English verdict: APPROVE 57f7d97. Original service role checks now precede every handoff effect; the CLI counterexample is rejected without changes and real launchd rollback/recovery passes. Preserve inherited private-endpoint concurrency and historical CI diagnostics; merge and installation require their separate readbacks.

@huangruiteng
huangruiteng dismissed loopx-agent’s stale review November 3, 2026 11:10

Resolved at 57f7d97 under the requested self-repair/self-merge. Original literal launcher command, role and loopback endpoint are verified before any write or signal; interrupted journals retain role and data arguments. Real queued-Chat counterexamples (direct/shell, option-value spoof, foreign executable, late-readiness failure) assert zero effects. The actual CLI mutation reproduces the prior stop; fixed CLI refuses unchanged. Real CLI/launchd failure rollback and next-attempt recovery pass. The historical native private-endpoint collision and mutex poisoning were independently reproduced on immutable base ac74f90 and retained as an inherited diagnostic; the unchanged private path is not claimed fixed. Two current full native runs pass. Full exact-head COMMENTED approval and checked readback: review 5751103912. Discussion and historical failures are retained; CI remains a separate merge-readiness gate.

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; reasoning_effort=max; declaration_source=runtime_reported

动机 / Motivation

打开桌面 App、需要所选运行时真正接管已有本地服务的人。 旧 LaunchAgent 重启仍启动旧执行文件;现在先核验原服务角色与路由,受保护地切换到目标运行时,失败回滚并自动退避恢复。 目标是让已有工作区恢复可用,同时保留数据、账号和已接受请求。这个新 head 还修复了上轮指出的错误服务角色可能先被停止的问题,独立旧反例已在本轮重新执行。完整签名 App、已安装 native WebView、跨平台升级及持续稳定性尚未资格化;本次是源码与隔离 macOS 服务切片。

独立 queued Chat 自定义来源和计划后 PID 改变均在停止/写入前被拒绝;真实隔离 launchd/HTTP 切换、失败回滚后恢复、三次不重启读回通过。 未安装或升级软件,未操作本机标准服务或用户真实工作区;不认证 Windows/签名发布或长期稳定性。

改动思路 / Approach

复用原生 Maintenance/ServiceSet 和 Core activation/Chat ingress fence;macOS plist/launchd/HTTP IO 留在 hosts adapter,进程内重试钟与持久回滚 journal 各有现有消费者。 原生启动只在普通共享 macOS 服务路径做对齐;显式私有端点仍走原路径。Core 先检查 literal launcher、全局参数后的真实命令位置、loopback端点及 loaded arguments,再持原 Chat ingress fence,在首个信号或文件变更前复核 loaded PID。切换后必须读取两个 HTTP 身份;启动失败回滚原配置,中断使用同一路由的私有 journal 恢复。

当前可独立交付的是 macOS 受管服务对齐、无效果拒绝和自动恢复,不是完整 App 发布或首次常驻安装。 单纯 kickstart 原 LaunchAgent 无法换 executable;此处复用 activation owner 比在 App 内复制数据保护更合适。新重试状态只属于当前原生进程,退避为2/4/8/16/32/60秒并从失败操作结束后计时;检查更新与待重启阶段保留原门,手动重试只是可选入口。

具体改动 / Changes

完整 57f7d971f933f03ae77c5ea44ef6800ada000984,实际 merge base ac74f90c4778381b6fcedd5d76059522591c3f42,12文件 +1182/-24;作者正文仍引用旧 a129 验证,本轮结果均绑定当前57f,未继承旧 verdict。规范依据 apps/desktop/loopx-control-plane/README.md,spec_revision=ac74f90c4778381b6fcedd5d76059522591c3f42。Runtime Model 和 Coexistence With loopx dashboard 均 implemented:原服务角色/端点/身份、已有请求、原 registry/root/账号、借用归属和显式私有模式保持。

关键代码讲解

  • _endpoint / _align_managed_runtime 校验真实 serve-status / chat 位置;标签、选项值或同容器存在另一个服务不能替代覆盖依据。首个停止/写入之前复核 loaded tuple,随后持原 Chat guard。
  • _recover_alignment 校验 journal 的原/候选角色和数据参数,保持当前文件仍为记录的两个版本之一,才恢复原服务。
  • ServiceSet::start / align_managed_runtime 在共享路径复用 Core 显式 activation,并要求成功退出、精确 identity 和 readiness_verified=true;private 路径跳过。
  • reconcile_services_with_clock 约束自动退避并保留 update gates;serviceRecoveryPending 让等待静态、倒计时明确,恢复详情默认收起。

PASS:146 Python /4跳过,另有真实隔离 launchd 单项1通过。实际前端构建、Chat bundle 和当前源码 runtime archive 均通过;准备完成后的完整 native 套件当前192通过/0失败、基线189通过/0失败,两端12个opt-in及1个签名测试忽略。真实旧源→当前源身份切换2.619秒,冷 status .897秒;故障 bootstrap 回滚后恢复,原 registry 保留,连续三次对齐不换 PID。计时来自合成隔离运行,不是冷启动/p95承诺。

对主干的风险 / Risks

上轮 P1 的独立反例现在通过:把 status 配成另一个 root/端口的 queued Chat,当前返回 service_runtime_route_unverified,manager_calls=[],文件逐字节不变且 Turn仍queued。另一个独立反例在初步规划后改 loaded PID,也在 journal/信号前无效果拒绝。12组 direct/shell、命令位置/选项值/foreign executable 组合、busy Chat、损坏或中断 journal、bootstrap/HTTP失败回滚及CLI binding/no-binding路径均有本轮覆盖。原普通启动改为自动对齐是有意默认行为变化;不能称作 default-off。显式 private、旧未绑定升级与借用服务归属仍由原 owner 处理。

标准 source premerge 的 direct、10 catalog、8 risk、公开边界均通过,保留原 maintainability ratchet advisory。该catalog没有完整覆盖Rust与renderer,因此单独运行上述真实源码native/build及浏览器检查。上轮 a129 的189P/3F历史结果保持为失败,不声称根因已修复;当前完整并发条件与基线本次均通过,当前无复现的不稳定性,未据历史失败额外要求无关修复。跨平台、签名与真实安装仍有明确未验边界。

发布前已完整读取新增作者 review5751103912及当前PR正文:旧5750831653现为DISMISSED,这是另一执行方的结果,本轮没有dismiss或resolve。作者另报告在同一主干复现旧private端点碰撞,并报告当前head两次native通过及本机打包安装读回;这些保留为作者来源,本轮自身的基线189/当前192均通过,安装没有独立复验,不据此扩大本轮安装或长期稳定性结论。

语义与 CI 对齐

新增 binding/handoff schema 限定 macOS adapter,重试钟限定native进程;它们不创建Agent生命周期、任务执行或新的权限。机器执行的是身份、数据路线和Chat保护,恢复文案不能替代这些门。CI 未查询、未轮询、未等待,按 wait_for_ci=false 留为UNVERIFIED、非必需证据;本轮实际验证决定review,不因未知CI阻止approve。

独立重跑同一 maintainability ratchet,两端均 FAIL:render_canonical_todo_sections 的既有 oversized finding、完整输出及源 blob 相同,magnitude_regressions=0;没有新增本次模块债务。

我的整体评价 / Verdict

实际源码启动页已在宽屏和390×844检查默认、展开、重试及合成就绪;真实隔离后端另行验证。

当前完整 head 无阻塞发现,结论 APPROVE。long_horizon=preserved:保护原工作与数据,不推断长期收益;user_experience=improved:可自动恢复并清楚显示等待。实际源码页面在1200×888宽屏和390×844检查默认与展开,静态等待、完整倒计时、44px可选重试和更新入口可读,窄屏无横向溢出;合成状态变为ready后显示就绪。不认证已安装 App、native WebView 或完整签名安装旅程;浏览器 Tauri bridge 为合成。 未安装或升级软件,未操作本机标准服务或用户真实工作区;不认证 Windows/签名发布或长期稳定性。 repository-experience建议用于区分首个有用恢复结果和安装资格;整个切片比例可接受,无需扩大语言迁移或拆出新的控制面owner。旧head的CHANGES_REQUESTED保留为历史,approval closeout、当前merge readiness及合并授权仍独立,本轮不dismiss、不resolve、不merge。

English verdict: APPROVE for this exact head. The previous role-fencing counterexample is fixed and independently rechecked; real isolated recovery and current native suites pass. CI was not consulted; installed App and cross-platform release qualification remain unverified.

@huangruiteng
huangruiteng merged commit 60ef413 into main Nov 3, 2026
39 of 49 checks passed
@huangruiteng
huangruiteng deleted the codex/app-runtime-convergence-20261103 branch November 3, 2026 12:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants