fix: address review findings for defense compositor

- S1: Remove global html/body overflow:hidden; scope to .presentation-route
- S2+P1: Add CSS selectors for data-stage-theme, data-chat-theme, data-chat-mode
- S3: Add distinct visual treatments per SceneView type (positioning, boundary, lifecycle, architecture, authoring, evaluation)
- S4+P2: Move discussion index to reducer state; Escape closes all overlays; remove miswired button
- P3: Add 8 missing Q&A discussion branches across lifecycle, authoring, architecture, evaluation, workflow-demo
- P4: Force replay now restores replay evidence
- P5: Add scene progress display and scene reset to presenter controls
- P6: Fix default dock mode to use composition.chatMode
- P7: Wrap decodeURIComponent in try-catch for malformed hashes
This commit is contained in:
lda
2026-07-04 17:31:52 +07:00 Verified
parent d80a4650eb
commit 43c7105575
11 changed files with 523 additions and 31 deletions
@@ -41,15 +41,21 @@ describe("defense storyboard catalog", () => {
expect(findBeat("interrupt-evidence", "trace")?.chatMode).toBe("dock");
});
it("defines the five positioning discussion branches", () => {
expect(discussionBranches.map((branch) => branch.id)).toEqual([
it("defines discussion branches across multiple scenes", () => {
expect(discussionBranches.length).toBeGreaterThanOrEqual(5);
const positioningBranches = discussionBranches.filter((b) => b.parentSceneId === "positioning");
expect(positioningBranches.map((b) => b.id)).toEqual([
"direct-orchestration",
"generated-scripts",
"hosted-automation",
"durable-agent-graphs",
"mcp-agent-scale",
]);
expect(discussionBranches.every((branch) => branch.parentSceneId === "positioning")).toBe(true);
for (const branch of discussionBranches) {
expect(branch.title.length).toBeGreaterThan(0);
expect(branch.summary.length).toBeGreaterThan(0);
expect(branch.evidencePointer.length).toBeGreaterThan(0);
}
});
it("exposes a valid default location", () => {