Skip to content

fix(runtime): ready cache supervisor before cleanup module loading - #7736

Merged
loopx-agent merged 1 commit into
mainfrom
codex/release220-cache-worker-ready-20261030
Oct 30, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/release220-cache-worker-ready-20261030

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

  • Outcome basis: 修复缓存监督 worker 就绪前的一项可复现阻塞;保持业务排空、定位文件 fence 和原一秒缓存额度。
  • Gap: worker 在发送 ready 前先加载清理模块。仅让 worker 的该模块加载延迟 1100ms,就会越过启动额度,退回主线程终止;Node 原生退出钩子随后重新写缓存。
  • Before → after: 同样的 blocked / throws cache fixture,旧实现两项均在“没有真实缓存文件”的断言处失败;当前实现先就绪、赢得退休权后再加载清理模块,两项通过。没有增加任何额度或截止时间。
  • Intended base: main,实现基线 fc4df266252410d0c327d0eb4deb79e42e00a8ce。

Author Declaration

Written by: model_agent, gpt-6.1-sol, OpenAI.

Implemented against

Specification: docs/development/testing-and-quality.md,修订 fc4df266252410d0c327d0eb4deb79e42e00a8ce 的 Isolate the managed Effect process as well as the data:先排空已接纳操作;正常退出保留真实缓存;缓存失败由关闭缓存的 worker 复用定位文件锁与精确身份清理;worker 无法启动时回退仍尽力执行。

Criterion Disposition Path / validation
Isolate the managed Effect process as well as the data implemented 既有 retireRuntime / superviseCache;19 个 Node 案例、真实 launcher/runtime/restart 三模块
Refactor Real-Path Gate / 重构真实路径门 implemented within scope 137 个真实运行时案例通过;一个未改的 Linux 专属案例在 macOS 跳过

Self-check: 阅读既有状态竞争、正常缓存与 unavailable-worker 路径;保持原子退休权、锁、身份和缓存关闭路径。只调整 worker 清理回调的加载时机,不新建状态、provider 或进程。

Scope And Continuation

完整交付本项启动关键路径修复;主线程仍在 flush 前预加载清理模块,避免正常退出时出现晚编译写入。测试复用既有 fixture,仅在临时副本为 worker 注入加载延迟。中英文开发说明同步更新。未改公共 API、持久化格式、默认缓存启用条件或权限。

原全套失败记录显示主线程 kill、未进入故障注入 flush,但没有直接记录启动失败原因。本 PR 用独立受控反例证明并移除一个可触发同类回退的加载依赖,不声称还原原失败的全部调度原因。worker 自身无法及时启动的尽力回退保留。完整并发全套、最终同源发布资格和渠道读回继续由既有发布流程完成。

Validation

  • Tested revision: 11ebc5ae71c8669994237b65a595bc271d7c4ea8;运行状态 finished;输入 synthetic。
Check kind Result Evidence / boundary
regression_parity passed 新增两例先在未改生产实现上失败;修复后检查原始真实缓存文件、退出和定位文件,不弱化断言
integration passed Node 24.21.0 与最低版本 22.22.3 各 19/19:正常、关闭缓存、blocked/throws、worker unavailable、迟归与替换 fence
real_entrypoint / real_backend passed 精确干净源 launcher/cache、runtime integration、restart 三模块:137 passed,File/SQLite、真实 Node/socket/journal;源前后不变且清理无误
integration not_run 上述集合中 1 个原有 Linux thread-group leader 案例由平台 guard 在 macOS 跳过,原生 Linux/Windows 资格另计
static passed TypeScript typecheck、diff-scoped semantic advisory、三文件公开边界扫描(0 errors / 0 warnings)、diff hygiene
static / integration passed 标准 premerge:4 direct + 11 selected,0 failures / 0 manual holds / 0 skips;变更质量 cqr_6eb5390f1e93d5cb6e59 valid

覆盖说明:生产差异只有 worker 内的延迟加载回调及解释注释;真实集成覆盖已接纳写入先完成、退出后无迟到缓存、身份 fence 和重启。没有用本 PR 宣称最终全套或跨平台已通过。

Frontend / Visual Evidence

UI impact: none。没有渲染入口、导航或首屏变化;截图、前后视口与 craft review 不适用。CLI 和既有工作台入口不增加输入或确认。

Type of Change

  • Bug fix
  • Documentation update
  • Test update

LoopX Area

  • Control plane (runtime)
  • Host or runtime integration

Technical Direction

现有运行时退休与可选缓存边界;不声称推进 authority provider 迁移或预算性能资格。

Shared-authority RFC fixture impact

N/A:不改存储事务、路由或兼容投影;这里验证真实 File/SQLite 调用后的通用进程退休,完整发布的真实 PostgreSQL 资格保持独立要求。

Boundary Checklist

  • 无私有状态、凭证、原始日志、内部链接或本机路径。
  • 沿用原实现与测试,无重复 benchmark 工作。
  • 三文件单项修复,保留原负例和时间额度。
  • 无成对 RFC 修改;双语 RFC diff gate 已通过。
  • UI impact none。
  • 提交含 DCO Signed-off-by。

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent 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: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max.

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

动机 / Motivation

运行长程任务与发布验证的维护者,需要已完成业务的后台进程安全退出。清理模块只在 worker 中加载缓慢时,旧实现会在开始监督缓存前耗尽启动额度,退回主线程终止并重入原生缓存写盘;当前实现先确认监督就绪,再在取得退休权后加载清理模块。相同受控延迟下,原有真实服务的两项排空用例从真实缓存文件断言失败变为通过,业务日志、定位文件 fence 和原截止时间均保留。本 PR 不增加时间额度,不改变已接纳业务的排空、权限或持久化协议,也不完成整个版本发布。原全套偶发失败的全部调度原因仍未被直接记录;最终并发全套、跨平台与同源发布资格继续由现有发布工作完成。

问题在“监督开始之前”:清理模块不是发送 ready 的前提,却占用了原一秒启动额度。业务操作已经完成也不能保证主线程退出时不再写缓存,因此只检查进程退出、提高超时或删除缓存断言都不足以解决这个反例。

改动思路 / Approach

复用同一 cache-disabled worker 和同一锁/身份清理 owner,只移除 ready 前不必要的模块加载,不增加进程、状态或时间额度。当前 PR 交付清理模块加载不再触发监督启动回退这一独立修复;完整发布资格仍在既有发布任务中。

原服务 close handler 仍先等待已接纳操作完成。主线程仍先预加载清理模块;缓存关闭时直接清理,正常 flush 完成时先持久化缓存。失败或阻塞时,原子状态只允许 worker 取得退休权,再由它加载原清理函数、获取同一锁、核对 token/pid/fingerprint 后清理并终止自己的进程。worker 确实无法启动时仍走原尽力回退;没有增加退出时限保证。

输入 基线 当前 head
原有正常、关闭缓存、故障、不可启动、迟归及替换 fence 案例 同一测试 fixture 的17个原用例通过 同17个通过
worker 清理模块延迟1100ms,flush阻塞或抛错 新增两例在真实缓存文件断言失败 两例通过,仍用原1000ms额度
原始真实服务 journal 排空两例,同样加载延迟 原断言失败,之前的日志/定位文件/退出检查已通过 两例全部通过,原断言和截止时间未改

具体改动 / Changes

精确 head 11ebc5ae71c8669994237b65a595bc271d7c4ea8,基线 fc4df266252410d0c327d0eb4deb79e42e00a8ce;完整差异为三文件46新增/8删除,只有一个生产回调改变。

关键代码讲解

  1. superviseCache:59:把清理加载移入延迟执行的回调;message handler 仍先于 ready 安装,CAS 仍先于清理,故不会以发送 ready 代替实际退休权。
  2. retireRuntime:75:原正常/关闭缓存/启动失败路径保留,主线程仍在 flush 前加载 helpers,防止正常退出时晚编译重建缓存。
  3. locatorRetirement:26:原 mutation lock 与精确身份校验不变;失败 worker 和正常主线程复用它,不能删除替换服务器的 locator。

测试沿用既有 fixture,仅在临时三模块副本为 worker 注入1100ms加载等待,保留真实 Node 缓存/退出/定位文件断言。中英文说明同步披露加载顺序,同时保留排空、额度、fallback及等待范围。

规范依据 docs/development/testing-and-quality.md,spec_revision fc4df266252410d0c327d0eb4deb79e42e00a8ce。Isolate the managed Effect process as well as the data:implemented,排空、正常缓存、关闭缓存监督和精确 fence 均有原用例;Refactor Real-Path Gate / 重构真实路径门:implemented,同一不可变 fixture 对照基线生产三模块与精确 head,再用原始真实服务入口补充受控反例。基线是明确的生产模块快照,不能表述成完整基线仓库全套通过。

语义与 CI 对齐

复用原有局部原子状态、接口和 fence,只有 worker 内加载顺序这一有意差异;没有新增共享 vocabulary、权限或持久化协议。语义 advisory 未发现支持的新增 carrier,该静态结果不代替上述执行对照。遵守当前契约,未获取、轮询或等待 GitHub CI。

对主干的风险 / Risks

最需防止的是缩短 ready 路径后破坏正常缓存、提前放弃业务或删掉替换 locator。相同19案例对照保留全部17项原行为;两项新增反例在基线失败、当前通过。原始 socket/journal 排空两例也使用相同观察器和1100ms worker延迟,只有缓存生产模块按基线/head替换,之前的业务断言未变。任何worker启动都能成功不是本PR的保证;锁/存储等待也没有被纳入一秒额度。

PASS:Node24.21.0与最低22.22.3各19项;精确干净源的真实launcher/runtime/restart三模块137项;TypeScript typecheck、三文件公开扫描0errors/0warnings、语义advisory及diff检查;标准premerge4direct+11selected通过且0holds,cqr_6eb5390f1e93d5cb6e59有效。三模块中另有一个未改的Linux thread-group leader用例在macOS按原guard跳过,不能计入跨平台通过。

历史全套的缓存失败记录只显示主线程kill与未进入故障flush,没有直接记录具体启动失败原因;本次受控反例证明并修复一个具体加载依赖,不倒写原记录为已归因通过。完整最终并发全套、PostgreSQL发布资格和正式安装/渠道仍待。回滚仅需恢复原模块、测试和说明,无数据迁移。

我的整体评价 / Verdict

APPROVE,justified_increment。long_horizon=preserved:已接纳操作先完成、同一身份与锁退休;user_experience=preserved:没有新增用户准备或确认。修改仅涉及后台退休、测试和开发说明,没有渲染入口或整页布局变化,首屏截图不适用。本 PR 未证明原生 Linux/Windows、完整安装升级、外部模型或正式发布渠道。 复用同一 cache-disabled worker 和同一锁/身份清理 owner,只移除 ready 前不必要的模块加载,不增加进程、状态或时间额度。当前 PR 交付清理模块加载不再触发监督启动回退这一独立修复;完整发布资格仍在既有发布任务中。

English verdict: APPROVE this exact bounded runtime fix; delayed cleanup loading no longer forces premature main-thread fallback, and final release qualification remains separate.

@loopx-agent
loopx-agent merged commit a2b0c6c into main Oct 30, 2026
8 of 9 checks passed
@loopx-agent
loopx-agent deleted the codex/release220-cache-worker-ready-20261030 branch October 30, 2026 07:43
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.

1 participant