fix(update): fail closed on unreadable TUI identity

This commit is contained in:
Dallin Romney
2026-08-20 20:27:03 -07:00
parent b1141cc510
commit 6046f32835
2 changed files with 22 additions and 1 deletions
+16
View File
@@ -134,6 +134,22 @@ describe("local TUI processes", () => {
).resolves.toEqual({ stopped: [], failed: [101] });
});
it("fails closed when a live process identity can no longer be read", async () => {
const controller = { kill: vi.fn(() => true) };
let reads = 0;
await expect(
terminateLocalTuiProcesses({
processes: [{ pid: 101, command: "openclaw-tui", startTime: "start" }],
controller,
graceMs: 0,
killGraceMs: 0,
readStartTime: () => (++reads === 1 ? "start" : undefined),
}),
).resolves.toEqual({ stopped: [], failed: [101] });
expect(controller.kill).not.toHaveBeenCalledWith(101, "SIGKILL");
});
it("refuses shared update mutation when a matched client survives", async () => {
const processes = [{ pid: 101, command: "openclaw --profile work tui" }];
+6 -1
View File
@@ -182,7 +182,12 @@ export async function terminateLocalTuiProcesses(params: {
stopped.push(proc.pid);
continue;
}
if (!proc.startTime || readStartTime(proc.pid) !== proc.startTime) {
const currentStartTime = readStartTime(proc.pid);
if (!currentStartTime) {
failed.push(proc.pid);
continue;
}
if (currentStartTime !== proc.startTime) {
stopped.push(proc.pid);
continue;
}