114 lines
4.0 KiB
JavaScript
114 lines
4.0 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { readFile } from "node:fs/promises";
|
|
import test, { after, before } from "node:test";
|
|
import { createServer } from "vite";
|
|
|
|
let server;
|
|
let fetchE46EReadyStack;
|
|
|
|
before(async () => {
|
|
server = await createServer({
|
|
server: { middlewareMode: true },
|
|
appType: "custom",
|
|
logLevel: "silent",
|
|
});
|
|
({ fetchE46EReadyStack } = await server.ssrLoadModule(
|
|
"/src/core/laboratory/e46eReadyStack.ts",
|
|
));
|
|
});
|
|
|
|
after(async () => {
|
|
await server?.close();
|
|
});
|
|
|
|
test("E46E admits a stock full-replay result and its immutable video", async () => {
|
|
const resultId = `e46e-ready-stack-${"a".repeat(64)}`;
|
|
const identity = "b".repeat(64);
|
|
const fetcher = async () => new Response(JSON.stringify({
|
|
schema_version: "missioncore.e46e-ready-stack-catalog/v1",
|
|
items: [{
|
|
schema_version: "missioncore.e46e-ready-stack-view/v1",
|
|
result_id: resultId,
|
|
created_at_utc: "2026-08-04T09:00:00Z",
|
|
source_session_id: "20260720T065719Z_viewer_live",
|
|
camera_source_id: "sensor.camera.right",
|
|
metrics: {
|
|
frame_count: 4489,
|
|
route_duration_seconds: 448.623,
|
|
detection_observation_count: 12000,
|
|
track_observation_count: 12500,
|
|
detection_box_clipped_count: 0,
|
|
track_box_clipped_count: 488,
|
|
unique_track_count: 700,
|
|
mean_tracked_objects_per_frame: 2.784,
|
|
zero_detection_frame_count: 100,
|
|
zero_track_frame_count: 40,
|
|
tracker_recovered_frame_count: 80,
|
|
full_layer_blackout_event_count: 3,
|
|
route_id_gap_event_count: 20,
|
|
short_track_count: 100,
|
|
short_track_fraction: 0.142857,
|
|
track_class_switch_count: 2,
|
|
},
|
|
acceptance: {
|
|
full_route_accounted: true,
|
|
stock_detector_tracker_executed: true,
|
|
visual_overlay_available: true,
|
|
independent_truth_available: false,
|
|
navigation_or_safety_accepted: false,
|
|
},
|
|
decision: {
|
|
ready_stack_baseline_available: true,
|
|
custom_temporal_logic_used: false,
|
|
next_action: "compare A/B",
|
|
},
|
|
method: {
|
|
schema_version: "missioncore.laboratory-method/v1",
|
|
completeness: "complete",
|
|
execution_class: "hybrid",
|
|
pipeline_id: "e46e-ready-stack/v1",
|
|
components: [{
|
|
kind: "model",
|
|
name: "TrafficCamNet Transformer Lite",
|
|
version: "deployable_resnet50_v2.0",
|
|
role: "traffic detector",
|
|
identity_sha256: identity,
|
|
}],
|
|
},
|
|
limitations: ["not independent truth"],
|
|
video: {
|
|
url: `${resultId}/overlay.mp4`,
|
|
media_type: "video/mp4",
|
|
byte_length: 123456,
|
|
sha256: identity,
|
|
width: 800,
|
|
height: 600,
|
|
},
|
|
ground_truth: false,
|
|
}],
|
|
}), { status: 200, headers: { "Content-Type": "application/json" } });
|
|
|
|
const result = await fetchE46EReadyStack({ fetcher });
|
|
assert.equal(result.resultId, resultId);
|
|
assert.equal(result.metrics.frameCount, 4489);
|
|
assert.equal(result.metrics.trackerRecoveredFrameCount, 80);
|
|
assert.equal(result.metrics.trackBoxClippedCount, 488);
|
|
assert.equal(result.decision.customTemporalLogicUsed, false);
|
|
assert.equal(result.method.components[0].identitySha256, identity);
|
|
assert.equal(result.video.sha256, identity);
|
|
assert.doesNotMatch(JSON.stringify(result), /Users|D:\\|runtime\/experiments/);
|
|
});
|
|
|
|
test("E46E uses the fixed LAB anatomy and reusable evidence viewer", async () => {
|
|
const [resultView, visual] = await Promise.all([
|
|
readFile(new URL("../src/workspaces/laboratory/E46EReadyStackResult.tsx", import.meta.url), "utf8"),
|
|
readFile(new URL("../src/workspaces/laboratory/E46EReadyStackVisual.tsx", import.meta.url), "utf8"),
|
|
]);
|
|
assert.match(resultView, /LaboratorySummary/);
|
|
assert.match(resultView, /LaboratoryEvidence/);
|
|
assert.match(resultView, /LaboratoryResultSummary/);
|
|
assert.match(visual, /LaboratoryEvidenceViewer/);
|
|
assert.match(visual, /<video/);
|
|
assert.match(visual, /controls/);
|
|
});
|