feat(FN-4218): complete Step 1 — define experiment session types

Fusion-Task-Id: FN-4218
Fusion-Task-Lineage: 0b50d7f4-5001-4eb6-9633-7b24b00097fd
This commit is contained in:
Fusion
2026-05-13 23:38:32 -07:00
committed by gsxdsm
parent 91da03d3b4
commit d8be2b176a
2 changed files with 261 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
import { describe, expect, it } from "vitest";
import {
EXPERIMENT_METRIC_DIRECTIONS,
EXPERIMENT_RECORD_TYPES,
EXPERIMENT_RUN_OUTCOMES,
EXPERIMENT_SESSION_STATUSES,
isConfigRecord,
isFinalizeRecord,
isHookRecord,
isRunRecord,
type ExperimentSessionRecord,
} from "../experiment-session-types.js";
describe("experiment-session-types", () => {
it("defines constants with expected members and order", () => {
expect(EXPERIMENT_SESSION_STATUSES).toEqual(["active", "finalizing", "finalized", "archived"]);
expect(EXPERIMENT_METRIC_DIRECTIONS).toEqual(["maximize", "minimize"]);
expect(EXPERIMENT_RECORD_TYPES).toEqual(["config", "run", "hook", "finalize"]);
expect(EXPERIMENT_RUN_OUTCOMES).toEqual(["keep", "discard", "checks_failed", "errored", "pending"]);
});
it("narrowing helpers identify record payload types", () => {
const records: ExperimentSessionRecord[] = [
{
id: "EXPR-1",
sessionId: "EXP-1",
segment: 1,
seq: 1,
type: "config",
payload: { metric: { name: "throughput", direction: "maximize" } },
createdAt: new Date().toISOString(),
},
{
id: "EXPR-2",
sessionId: "EXP-1",
segment: 1,
seq: 2,
type: "run",
payload: { primaryMetric: 123, secondaryMetrics: [], status: "keep" },
createdAt: new Date().toISOString(),
},
{
id: "EXPR-3",
sessionId: "EXP-1",
segment: 1,
seq: 3,
type: "hook",
payload: { hook: "before", exitCode: 0 },
createdAt: new Date().toISOString(),
},
{
id: "EXPR-4",
sessionId: "EXP-1",
segment: 1,
seq: 4,
type: "finalize",
payload: { keptRunIds: ["EXPR-2"], discardedRunIds: [] },
createdAt: new Date().toISOString(),
},
];
const [config, run, hook, finalize] = records;
expect(isConfigRecord(config)).toBe(true);
expect(isRunRecord(config)).toBe(false);
expect(isRunRecord(run)).toBe(true);
expect(run.payload.primaryMetric).toBe(123);
expect(isHookRecord(hook)).toBe(true);
expect(hook.payload.hook).toBe("before");
expect(isFinalizeRecord(finalize)).toBe(true);
expect(finalize.payload.keptRunIds).toEqual(["EXPR-2"]);
});
});