mirror of
https://github.com/morluto/rea.git
synced 2026-11-13 10:12:50 +00:00
* refactor(admission): own inspector, web, and CLI state per host Replace the process-global inspector, web-bundle, guidance, and JavaScript counters with objects a host passes in, so independent instances do not share admission or cleanup. * fix(admission): keep worker and file cleanup on the host Web-bundle and JavaScript workers retry only their host registry, and each Inspector admission authorizes and closes its own file scope. Browser providers can share one web-bundle admission. * test(inspector): gate one admission's file cleanup The isolation test delayed the first ArtifactResourceScope.retryCleanup call, so a second call on a shared ElectronFileScope still finished. Hold first.files.retryCleanup until the other admission's close finishes, then release and join before restoring the method. --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
28 lines
776 B
TypeScript
28 lines
776 B
TypeScript
import { expect, it } from "vitest";
|
|
|
|
import {
|
|
OwnedWorkerRuntime,
|
|
WorkerCleanupRegistry,
|
|
} from "./OwnedWorkerRuntime.js";
|
|
|
|
it("retries one host's retained runtime without failing another host", async () => {
|
|
const first = new WorkerCleanupRegistry();
|
|
const second = new WorkerCleanupRegistry();
|
|
let fail = true;
|
|
const stuck = new OwnedWorkerRuntime({
|
|
rootPrefix: "rea-worker-host-",
|
|
cleanupRegistry: first,
|
|
retryCleanup: async () => {
|
|
if (fail) throw new Error("host still owns its worker");
|
|
},
|
|
});
|
|
stuck.retainForCleanup();
|
|
try {
|
|
await expect(second.retry()).resolves.toBeUndefined();
|
|
await expect(first.retry()).rejects.toThrow("host still owns its worker");
|
|
} finally {
|
|
fail = false;
|
|
await stuck.close();
|
|
}
|
|
});
|