Repository navigation
fix(reuse): 本地账本不再挡住投递、蒸馏与常驻宿主的事件循环 - #58
Conversation
记一笔本地复用账要加载整个 evolver-core(自托管 runner 空闲时首次约 3.3 秒,负载下十秒以上), 原先它夹在投递循环里:占着 outbox 锁让后到的报告等,堵住常驻进程的串行后台队列让蒸馏等, 而且同步执行的模块加载会占住常驻宿主与插件共用的事件循环。 - 投递只发 Hub;本地记账在 Hub 投递之后单独进行,且只在有待记条目时加载 evolver-core,加载在锁外。 - 常驻进程经 scheduler.alongside 在独立通道记账;常驻宿主的账本跑在 worker thread(同文件,随包打入, unref、不继承宿主启动参数);只活一批任务的 worker 进程仍在批末记账。 - 抢不到 outbox 锁的投递把报告留给持锁者:持锁者放锁后再看一次队列,排空期间新到的。 - npm root -g 的结果在进程内复用。 - dsh 卸载用例按既定设计校验(卸载只写入,下一次启动投递并蒸馏),删去不再使用的 elapseRetryWaits。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Sentinel 已审核此变更,未发现已核验问题,但发现需要人工确认的风险。 另有 4 个需要人工确认的风险;黄色 advisory 不阻塞合并,建议开发 agent review advisory 评论并逐条确认。 开发 agent 查询详情: 调用 MCP 工具 由 Sentinel 审核 · 目标提交 754f85272600 |
|
Sentinel 保留了 4 个尚未确认的审核候选。这些黄色条目不阻塞合并;红色 P0/P1 与其他独立硬门禁不受影响。 单一猜测、缺少变更行证据或纯 checklist 的候选会统一降为 P3。
需要完整证据时,可用行末 由 Sentinel 审核 · 目标提交 754f85272600 |
处理 #58 的 Sentinel 评审项:error 与 exit 曾共用不认线程身份的清理,旧线程迟到的 exit 会拒绝替代线程的请求并清空它的引用;等待表与清理现按线程实例隔离。补一条测试固定 "线程在写入后停止 → 记为 uncertain、不再重试、下一次由新线程服务"。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Sentinel 已审核此变更,未发现需要报告的问题。 最近一次申诉核验 ·
|
🟢 Sentinel 风险索引已清空(head
|
Keep the Kimi native monitor wiring and the ledger delivery changes from upstream PR EvoMap#58.
Summary
v1.0.6 的发布 run 在 Linux
test上偶发超时:cursor 的 Recipe、correction 两条用例,以及 opencode 的“会话删除后蒸馏”。这三条都在等后台工作,上限 10 秒,重跑后才通过。根因
修复
DRAIN只把报告发到 Hub(postPending)。本地记账(recordReports)在 Hub 投递之后单独做:先看有没有待记的账,没有就不加载;有的话,在锁外加载 evolver-core,再拿锁记账。scheduler.alongside在独立通道记账,不挡后续任务,idle()会等两条通道都完成。只活一批任务的 worker 进程仍在批末记账。lib/runtime/ledger-thread.js):workerData里的角色标识区分,所以会随静态 import 一起打进包里。unref,不拖住进程退出。execArgv: [],不继承宿主的启动参数(例如--input-type)。npm root -g的结果在进程内复用,只缓存成功的结果。Scope and cuts
environment.js的宿主:常驻的 opencode、MCP、dsh,以及短命进程的 cursor、claude-code、codex、grok 等。test/hosts/dsh/plugin.test.js的 “the plugin's unload ends the open sessions…”。test/hosts/dsh/model.test.js覆盖。不再使用的elapseRetryWaits一并删除。redaction stays linear on long adversarial input:CPU 计时。test/hosts/cursor/hooks.test.js整个文件超过 120 秒的文件级超时。Evidence
lib/runtime/ledger-thread.js。test/runtime/file-stores.test.js:持锁者最后一次看完队列后才入队的报告,即使它自己的投递因为锁被占而放弃了,也会被送出。test/app/turn-lifecycle.test.js:本地账本还在加载时,报告已经到了 Hub,下一批任务也能照常运行。test/runtime/local-ledger.test.js:打包后的插件加载一个需要 2 秒的 evolver-core 时,宿主事件循环最长停滞不到 1 秒。不走线程时停滞 2014ms。session-end.test.js:没有线程时,“会话删除后蒸馏”这条复现了 CI 上的超时;用线程后 8/8 通过。Merge Danger
可逆,没有改状态文件格式。outbox 里本地记账相关的字段(
localAt等)含义不变,旧状态可以直接沿用。本地记账会比 Hub 投递晚一点,但仍在同一批后台任务里完成。🤖 Generated with Claude Code