mirror of
https://github.com/morluto/rea.git
synced 2026-11-13 10:12:50 +00:00
feat(analysis-view): project rich captures from Evidence files and template path pairs (#5293)
Project large local Evidence captures through the authenticated file-source boundary and add guarded opt-in sibling-pair path inference. Preserve request cancellation, resource ownership and file-relative validation diagnostics. Validated relevant source and compiled CLI/MCP/environment boundaries, static/build/docs/catalog gates, and a real isolated Gitea 28.2.0 capture through CLI, default stdio MCP and HTTP replay. Current-head automated review passed; unrelated long-running platform jobs may still be pending. Co-authored-by: Edgar Arakelyan <edgar.arakelyan@scale.com> Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Co-authored-by: gensokyo-dev <gensokyo-dev@users.noreply.github.com>
This commit is contained in:
28 files changed
+1227
-66
No files matched your search
@@ -0,0 +1,64 @@
|
||||
import { writeFile } from "node:fs/promises";
|
||||
import { join } from "node:path";
|
||||
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { analysisViewCaptureEvidence } from "../../../tests/fixtures/analysisView.js";
|
||||
import { createTestTempDirectory } from "../../../tests/fixtures/temporaryDirectory.js";
|
||||
import { ArtifactResourceScope } from "../../artifacts/ArtifactResourceScope.js";
|
||||
import {
|
||||
estimateJsonValueBytes,
|
||||
readEvidenceFileSource,
|
||||
requireAuthenticationHeadroom,
|
||||
} from "./evidenceFileSource.js";
|
||||
|
||||
describe("evidence-file source", () => {
|
||||
it("estimates parsed JSON at no less than its UTF-16 text", () => {
|
||||
const text = "x".repeat(1000);
|
||||
expect(estimateJsonValueBytes(text)).toBeGreaterThanOrEqual(2000);
|
||||
expect(
|
||||
estimateJsonValueBytes({ outer: [text, { inner: text }] }),
|
||||
).toBeGreaterThan(2 * estimateJsonValueBytes(text));
|
||||
});
|
||||
|
||||
it("refuses authentication when live heap headroom cannot hold its copies", () => {
|
||||
const value = { normalized_result: "y".repeat(10_000) };
|
||||
expect(
|
||||
requireAuthenticationHeadroom(value, "/tmp/capture.json", 1024),
|
||||
).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
_tag: "AnalysisResourceConstraintError",
|
||||
resource: "memory",
|
||||
reportedLimits: {
|
||||
input_path: "/tmp/capture.json",
|
||||
available_heap_bytes: 1024,
|
||||
},
|
||||
},
|
||||
});
|
||||
expect(
|
||||
requireAuthenticationHeadroom(value, "/tmp/capture.json", 1 << 30),
|
||||
).toEqual({ ok: true, value: undefined });
|
||||
});
|
||||
|
||||
it("refuses a cancelled request before reading and reads within the caller's resource scope", async () => {
|
||||
const controller = new AbortController();
|
||||
controller.abort();
|
||||
expect(
|
||||
await readEvidenceFileSource("/nonexistent/capture.json", {
|
||||
signal: controller.signal,
|
||||
}),
|
||||
).toMatchObject({ ok: false, error: { _tag: "AnalysisCancelledError" } });
|
||||
const path = join(
|
||||
await createTestTempDirectory("rea-evidence-file-source-"),
|
||||
"capture.json",
|
||||
);
|
||||
const parent = analysisViewCaptureEvidence();
|
||||
await writeFile(path, JSON.stringify(parent));
|
||||
const resources = new ArtifactResourceScope();
|
||||
const read = await readEvidenceFileSource(path, { resources });
|
||||
await resources.close();
|
||||
if (!read.ok) throw read.error;
|
||||
expect(read.value).toEqual(JSON.parse(JSON.stringify(parent)));
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user