mirror of
https://github.com/morluto/rea.git
synced 2026-11-09 00:07:18 +00:00
* feat(native): retain LLDB source coordinates and verify Pascal call entries Preserve partial line-table attribution for native locations and historical evidence compatibility. Verify owned Free Pascal call entries through CLI/MCP. Refs #2382, #2372, #2397 Co-Authored-By: Codex <noreply@openai.com> * docs: namespace native specifications by domain and feature Use stable descriptive paths instead of numeric prefixes to avoid parallel contribution collisions. Co-Authored-By: Codex <noreply@openai.com> * fix(native): bound Pascal verification and compare caller coordinates Address review findings at their producing boundaries and preserve directly affected consumers. Source inspection and git diff --check completed. Tests and automated checks were not run at the user’s explicit request. * fix(native): bound compiler shutdown and source-coordinate fixtures * docs: clarify historical native source verification * fix(native): preserve source attribution and compiler ownership * docs(native): qualify retained source attribution * fix(ci): clean up native Pascal verifier processes * test(native): type the Pascal verifier helper import after merging main Main now typechecks this boundary test, which imports the untyped canonical-temporary-directory helper and reads an unknown catch value. Add the helper's declaration file and narrow the caught error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(native): verify partial source attribution caveat * fix(native): retain verifier compiler cleanup ownership * fix(native): forward verifier cancellation and measure path bytes CLI and MCP artifact runs observe the verifier abort signal, and a failed Pascal verifier test stops the compiler group before deleting its directory. Repeated source locations grow by measured UTF-8 JSON bytes; workflow tokens, CPU and peak memory stay unmeasured. --------- Co-authored-by: Matheus Breguêz <matbrgz@gmail.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com>
67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
import { EventEmitter } from "node:events";
|
|
import { access, mkdtemp, rm } from "node:fs/promises";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { PassThrough } from "node:stream";
|
|
import { expect, it } from "vitest";
|
|
import { createPackageVerifierCommands } from "../../../scripts/lib/verify-package-commands.mjs";
|
|
import { OwnedMcpStdioTransport } from "../../../src/process/OwnedMcpStdioTransport.js";
|
|
|
|
it("retains the workspace until an owned protocol cleanup can be retried", async () => {
|
|
const path = await mkdtemp(join(tmpdir(), "rea-verifier-transport-"));
|
|
const process = Object.assign(new EventEmitter(), {
|
|
pid: 1,
|
|
stdout: new PassThrough(),
|
|
stderr: new PassThrough(),
|
|
stdin: new PassThrough(),
|
|
exitCode: null,
|
|
signalCode: null,
|
|
kill: () => true,
|
|
});
|
|
let refuse = true;
|
|
const transport = new OwnedMcpStdioTransport(
|
|
{ command: "fixture", arguments: [] },
|
|
{
|
|
provider: "fixture",
|
|
label: "Fixture",
|
|
maxFrameBytes: 1024,
|
|
maxOperationBytes: 4096,
|
|
},
|
|
async ({ runId }) => ({
|
|
process,
|
|
ownership: { runId, leaderPid: 1, processGroupId: 1 },
|
|
cleanup: async () => {
|
|
if (refuse)
|
|
return { cleaned: false, reason: "injected cleanup failure" };
|
|
process.emit("close", 0, null);
|
|
process.stdout.end();
|
|
process.stderr.end();
|
|
process.stdin.end();
|
|
return { cleaned: true, signaled: false };
|
|
},
|
|
}),
|
|
);
|
|
const commands = await createPackageVerifierCommands({
|
|
workspace: {
|
|
path,
|
|
close: () => rm(path, { recursive: true, force: true }),
|
|
},
|
|
});
|
|
commands.adopt(transport, "protocol child");
|
|
try {
|
|
await transport.start();
|
|
// The group can still contain work after the leader's exit.
|
|
process.emit("exit", 0, null);
|
|
await expect(commands.close()).rejects.toMatchObject({
|
|
path,
|
|
cleanupOwner: commands,
|
|
});
|
|
await expect(access(path)).resolves.toBeUndefined();
|
|
refuse = false;
|
|
await commands.close();
|
|
await expect(access(path)).rejects.toMatchObject({ code: "ENOENT" });
|
|
} finally {
|
|
await rm(path, { recursive: true, force: true });
|
|
}
|
|
});
|