* fix(cli): preserve caller paths in format inspections * fix(cli): retain caller path on partial evidence * test(cli): preserve caller path in adapter parity checks * test(rust): account for retained caller path * fix(wasm): compare shared cli and mcp evidence
70 lines
2.6 KiB
TypeScript
70 lines
2.6 KiB
TypeScript
import { writeFile } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { expect } from "vitest";
|
|
|
|
import { readEvidenceBundle } from "../../src/application/EvidenceBundleFiles.js";
|
|
import { parseEvidence } from "../../src/domain/evidence.js";
|
|
import { elfNoteFixture } from "../../src/native/elf/ElfNotes.fixture.js";
|
|
import { connectLocalToolsMcp } from "../fixtures/localToolsMcp.js";
|
|
import { safetensorsFixture } from "../fixtures/model/model.js";
|
|
import { createTestTempDirectory } from "../fixtures/temporaryDirectory.js";
|
|
import { cliTest } from "../support/cli/cliFixture.js";
|
|
|
|
cliTest(
|
|
"retains format-specific CLI selections in complete and published Evidence",
|
|
async ({ cli }) => {
|
|
const root = await createTestTempDirectory("rea-format-caller-path-");
|
|
const model = join(root, "model.safetensors");
|
|
const elf = join(root, "image.elf");
|
|
await writeFile(model, safetensorsFixture().bytes);
|
|
await writeFile(elf, elfNoteFixture({ ownership: "program" }));
|
|
for (const [command, selection] of [
|
|
["inspect-model-artifact", "./model.safetensors"],
|
|
["inspect-elf-notes", "./image.elf"],
|
|
["inspect-byte-entropy", "./image.elf"],
|
|
] as const) {
|
|
const result = await cli.run({
|
|
arguments: [command, selection, "--json"],
|
|
cwd: root,
|
|
});
|
|
expect(result.exitCode, result.stderr).toBe(0);
|
|
const evidence = parseEvidence(result.json);
|
|
expect(evidence.caller_input_path).toBe(selection);
|
|
expect(evidence.parameters).toMatchObject({
|
|
path: join(root, selection.slice(2)),
|
|
});
|
|
}
|
|
const summary = await cli.run({
|
|
arguments: [
|
|
"inspect-model-artifact",
|
|
"./model.safetensors",
|
|
"--detail",
|
|
"summary",
|
|
"--evidence_output",
|
|
"./model-evidence.json",
|
|
"--json",
|
|
],
|
|
cwd: root,
|
|
});
|
|
expect(summary.exitCode, summary.stderr).toBe(0);
|
|
expect(
|
|
parseEvidence((summary.json as { summary: unknown }).summary)
|
|
.caller_input_path,
|
|
).toBe("./model.safetensors");
|
|
const bundle = await readEvidenceBundle(join(root, "model-evidence.json"));
|
|
if (!bundle.ok) throw bundle.error;
|
|
expect(
|
|
bundle.value.records.find(
|
|
(record) => record.operation === "inspect_model_artifact",
|
|
)?.caller_input_path,
|
|
).toBe("./model.safetensors");
|
|
|
|
const { call } = await connectLocalToolsMcp();
|
|
const mcp = await call("inspect_model_artifact", { path: model });
|
|
expect(mcp.isError).not.toBe(true);
|
|
expect(parseEvidence(mcp.structuredContent)).not.toHaveProperty(
|
|
"caller_input_path",
|
|
);
|
|
},
|
|
);
|