feat(worker): IO Worker 分道(WK-1)

io worker 进程内按任务声明的 lane 分文件 / 网络 / 维护三条道,各自并发(缺省 2/4/1)、
各自排队;维护道在文件道或网络道有排队/运行时让路(连续 10 分钟放行一个),调度器内联的
清理/回填/保留期裁剪也走维护道。并发在 设置 → 自动化 → 高级 热生效,env 覆盖;旧
WORKER_CONCURRENCY 映射到网络道。运行状态页按道显示运行中/并发/排队。归属表写进
docs/runbook/dev.md,ci 与注册表逐项核对。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 00:24:21 +08:00
1 parent 68f53390f6
commit da33cad81d
38 files changed
+1240 -105

No files matched your search

+9 -1
View File
@@ -176,7 +176,15 @@ describe("关键合同行为", () => {
const patch = C.GlobalSettingsUpdate.parse({ automation: { enabled: false }, pi: { contextBudget: 64_000 } });
expect(patch).toEqual({ automation: { enabled: false }, pi: { contextBudget: 64_000 } });
const merged = C.mergeSettings(C.DEFAULT_SETTINGS, patch);
expect(merged.automation).toEqual({ enabled: false, readOnlyReconcile: false });
expect(merged.automation).toEqual({
enabled: false,
readOnlyReconcile: false,
workerLanes: C.DEFAULT_WORKER_LANES,
});
// 分道并发部分更新:只改一道,其余保留
const lanes = C.mergeSettings(merged, C.GlobalSettingsUpdate.parse({ automation: { workerLanes: { file: 3 } } }));
expect(lanes.automation.workerLanes).toEqual({ file: 3, network: 4, maintenance: 1 });
expect(C.GlobalSettings.safeParse(lanes).success).toBe(true);
expect(merged.pi).toEqual({ ...C.DEFAULT_SETTINGS.pi, contextBudget: 64_000 });
expect(C.GlobalSettings.safeParse(merged).success).toBe(true);
});