Row 92, round 2. Darkwing built it. A role session runs in a bwrap sandbox that sees only its own workspace, a private /proc, /dev and IPC namespace, and the variables ENV_ALLOW passes. The launcher checks the session credential before a Claude launch, records a runner killed from the host as killed rather than failed, and the bus unit template carries the credential file (decision 119). The harness gate and the cli, seat and harness READMEs say what the sandbox does and does not hide. Candidate manifest 8bf4141cbe69fc7bed188555bcc88dcab0b1ea2149912cb6f970ba8c2629dd97 (13 paths), baseac37cd17, packet agents/darkwing/work/queue-92/r2/. Approvals: Dewey 27978, Filbert 27984 (round 1: Dewey 27942, Filbert asked for changes in 27951). Sage's gate rerun 22:27:37Z-22:30:35Z on1b7f3781plus the patch, manifest 13/13: seat 33, cli 120, harness 65, bus 108, webui 86, control-board 124, and every scripts/test-*.sh exited 0 (test-release 4, Docker cases skipped at a dead socket). Live at the next bus restart and the next role session launch (decision 109). Installing the new unit and restarting is Mos's call. Co-Authored-By: Claude Opus 5.5 <[email protected]>
26 lines
1.0 KiB
JavaScript
26 lines
1.0 KiB
JavaScript
// A bus host with its launcher in a process of its own, so a test can kill
|
|
// it hard. It launches the PM, prints the launch result as one JSON line and
|
|
// runs until it is killed. argv: the adapter to use for both harnesses, then
|
|
// the files the sandbox shows the session read-only (the fake adapter).
|
|
|
|
import { bootConfig, loadSystem } from "../../src/config.mjs";
|
|
import { startHost } from "../../src/host.mjs";
|
|
import { createLauncher } from "../../src/launcher.mjs";
|
|
|
|
const [adapter, ...readOnly] = process.argv.slice(2);
|
|
const system = loadSystem({ env: process.env });
|
|
const boot = bootConfig({ system, businessId: "acme", env: process.env });
|
|
const host = await startHost({ boot, business: "acme", log: () => {} });
|
|
const launcher = createLauncher({
|
|
host,
|
|
system,
|
|
env: process.env,
|
|
adapters: { pi: adapter, "claude-code": adapter },
|
|
sessionDefaults: { pollInterval: 100 },
|
|
versions: { pi: "0.85.1", claude: null },
|
|
readOnly,
|
|
log: () => {},
|
|
});
|
|
await launcher.listen();
|
|
process.stdout.write(`${JSON.stringify(await launcher.launchPm())}\n`);
|