Files
stack/packages/discord/fixtures/legacy-owner-worker.mjs
T
jason.woltjeandClaude Fable 5.1 786e379c49 feat(discord): connector pilot for the Sage seat, reviewed candidate (#1509)
Zero-dependency Discord connector under packages/discord: binding
validation, REST and gateway clients, pi engine adapter, journal with
append-only inbox, outbox, admissions and notices, and a run.lock
ownership record {pid, start, boot} whose identity is checked three ways
and whose cleanup is gated by STOP. CLI check|run|stop|unlock via
scripts/discord.sh; offline suite scripts/test-discord.sh (28 checks,
87 node tests).

Reviewed by rev-code-02 on #1509 over nine rounds; approved exact tree
4e0feb6758c0a7e4a71483912a8e0d3e3ec95aef at comment 26170. Corrections
(1) to (12) recorded in BUILD-LOG. No listener started, no token read,
no Discord write; the live pilot follows this commit per the brief.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-13 01:15:37 -05:00

27 lines
1.4 KiB
JavaScript

// Test participant: publishes an owner record and stays alive until the done
// file appears, without ever clearing the lock. By default it writes the
// round-five shape, {pid, start, at} with no boot id, as an already-running
// connector from before the upgrade would have. Optional third and fourth
// arguments override the recorded start and boot ("-" omits the field, "real"
// records the genuine value), so tests can publish corrupt identity metadata
// under a live pid. Prints "legacy-published" on stdout.
import { existsSync, mkdirSync, writeFileSync, renameSync } from "node:fs";
import { join } from "node:path";
import { processStart, bootId } from "../src/journal.mjs";
const [dir, done, startArg = "real", bootArg = "-"] = process.argv.slice(2);
const rec = { pid: process.pid, at: new Date().toISOString() };
if (startArg !== "-") rec.start = startArg === "real" ? processStart(process.pid) : startArg;
if (bootArg !== "-") rec.boot = bootArg === "real" ? bootId() : bootArg;
const lock = join(dir, "run.lock");
mkdirSync(lock, { mode: 0o700 });
const tmp = join(lock, "owner.json.tmp");
writeFileSync(tmp, JSON.stringify(rec) + "\n", { mode: 0o600 });
renameSync(tmp, join(lock, "owner.json"));
process.stdout.write("legacy-published\n");
const deadline = Date.now() + 10_000;
while (!existsSync(done)) {
if (Date.now() > deadline) process.exit(2);
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 2);
}