feat: define defense storyboard catalog

This commit is contained in:
lda
2026-07-04 16:35:07 +07:00 Verified
parent 51491ed265
commit c6018c4a86
2 changed files with 374 additions and 0 deletions
@@ -0,0 +1,59 @@
import { describe, expect, it } from "vitest";
import {
defaultMainLocation,
discussionBranches,
findBeat,
findScene,
mainScenes,
} from "./storyboard.js";
describe("defense storyboard catalog", () => {
it("defines twelve ordered main scenes with unique scene and beat ids", () => {
expect(mainScenes).toHaveLength(12);
expect(mainScenes.map((scene) => scene.id)).toEqual([
"thesis",
"problem",
"positioning",
"planner-runtime",
"lifecycle",
"architecture",
"authoring",
"agent-handoff",
"workflow-demo",
"interrupt-evidence",
"evaluation",
"conclusion",
]);
for (const scene of mainScenes) {
expect(scene.beats.length).toBeGreaterThan(0);
expect(new Set(scene.beats.map((beat) => beat.id)).size).toBe(scene.beats.length);
expect(scene.claimClass.length).toBeGreaterThan(0);
expect(scene.evidencePointer.length).toBeGreaterThan(0);
}
});
it("uses act-level stage themes and independent chat composition", () => {
expect(mainScenes.slice(0, 3).every((scene) => scene.stageTheme === "paper")).toBe(true);
expect(mainScenes.slice(3, 10).every((scene) => scene.stageTheme === "night")).toBe(true);
expect(mainScenes.slice(10).every((scene) => scene.stageTheme === "paper")).toBe(true);
expect(findBeat("agent-handoff", "request")?.chatMode).toBe("full");
expect(findBeat("workflow-demo", "graph")?.chatMode).toBe("rail");
expect(findBeat("interrupt-evidence", "trace")?.chatMode).toBe("dock");
});
it("defines the five positioning discussion branches", () => {
expect(discussionBranches.map((branch) => branch.id)).toEqual([
"direct-orchestration",
"generated-scripts",
"hosted-automation",
"durable-agent-graphs",
"mcp-agent-scale",
]);
expect(discussionBranches.every((branch) => branch.parentSceneId === "positioning")).toBe(true);
});
it("exposes a valid default location", () => {
expect(defaultMainLocation).toEqual({ kind: "main", sceneId: "thesis", beatId: "title" });
expect(findScene(defaultMainLocation.sceneId)?.number).toBe(1);
});
});