feat: compress Scene 11 storyboard beats
This commit is contained in:
@@ -289,7 +289,7 @@ separate activity after these surfaces are stable.
|
|||||||
scope the truth badge to demo scenes, move the prepared-run action to Scene
|
scope the truth badge to demo scenes, move the prepared-run action to Scene
|
||||||
10, and correct the Scene 10 graph/proof projection.
|
10, and correct the Scene 10 graph/proof projection.
|
||||||
4. **Scene 11 compression:** reduce the typed-human-boundary scene to two
|
4. **Scene 11 compression:** reduce the typed-human-boundary scene to two
|
||||||
beats: interrupt context and approval decision. Cancellation remains a
|
beats: interrupt context and approval decision. Cancellation remains a
|
||||||
decision outcome rather than a near-duplicate presentation beat.
|
decision outcome rather than a near-duplicate presentation beat.
|
||||||
Implementation plan:
|
Implementation plan:
|
||||||
[`Scene 11 decision beat compression`](superpowers/plans/2026-07-12-scene-11-decision-beat-compression.md).
|
[`Scene 11 decision beat compression`](superpowers/plans/2026-07-12-scene-11-decision-beat-compression.md).
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ describe("defense storyboard catalog", () => {
|
|||||||
expect(findBeat("run-from-deployment", "input")?.chatMode).toBe("hidden");
|
expect(findBeat("run-from-deployment", "input")?.chatMode).toBe("hidden");
|
||||||
expect(findBeat("run-from-deployment", "graph")?.chatMode).toBe("hidden");
|
expect(findBeat("run-from-deployment", "graph")?.chatMode).toBe("hidden");
|
||||||
expect(findBeat("typed-human-boundary", "approval")?.chatMode).toBe("hidden");
|
expect(findBeat("typed-human-boundary", "approval")?.chatMode).toBe("hidden");
|
||||||
expect(findBeat("typed-human-boundary", "cancel")?.chatMode).toBe("hidden");
|
|
||||||
expect(findBeat("resume-output-evidence", "resume")?.chatMode).toBe("hidden");
|
expect(findBeat("resume-output-evidence", "resume")?.chatMode).toBe("hidden");
|
||||||
expect(findBeat("resume-output-evidence", "output")?.chatMode).toBe("hidden");
|
expect(findBeat("resume-output-evidence", "output")?.chatMode).toBe("hidden");
|
||||||
expect(findBeat("resume-output-evidence", "trace")?.chatMode).toBe("hidden");
|
expect(findBeat("resume-output-evidence", "trace")?.chatMode).toBe("hidden");
|
||||||
@@ -86,12 +85,21 @@ describe("defense storyboard catalog", () => {
|
|||||||
expect(findBeat("run-from-deployment", "graph")).toBeDefined();
|
expect(findBeat("run-from-deployment", "graph")).toBeDefined();
|
||||||
expect(findBeat("typed-human-boundary", "interrupt")).toBeDefined();
|
expect(findBeat("typed-human-boundary", "interrupt")).toBeDefined();
|
||||||
expect(findBeat("typed-human-boundary", "approval")).toBeDefined();
|
expect(findBeat("typed-human-boundary", "approval")).toBeDefined();
|
||||||
expect(findBeat("typed-human-boundary", "cancel")).toBeDefined();
|
|
||||||
expect(findBeat("resume-output-evidence", "resume")).toBeDefined();
|
expect(findBeat("resume-output-evidence", "resume")).toBeDefined();
|
||||||
expect(findBeat("resume-output-evidence", "output")).toBeDefined();
|
expect(findBeat("resume-output-evidence", "output")).toBeDefined();
|
||||||
expect(findBeat("resume-output-evidence", "trace")).toBeDefined();
|
expect(findBeat("resume-output-evidence", "trace")).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("compresses Scene 11 into interrupt context and one operator decision beat", () => {
|
||||||
|
expect(findScene("typed-human-boundary")?.beats.map((beat) => beat.id)).toEqual([
|
||||||
|
"interrupt",
|
||||||
|
"approval",
|
||||||
|
]);
|
||||||
|
expect(findBeat("typed-human-boundary", "interrupt")?.caption).toMatch(/boundary|interrupt/i);
|
||||||
|
expect(findBeat("typed-human-boundary", "approval")?.caption).toMatch(/decision|resume/i);
|
||||||
|
expect(findBeat("typed-human-boundary", "cancel")).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
it("defines discussion branches across multiple scenes", () => {
|
it("defines discussion branches across multiple scenes", () => {
|
||||||
expect(discussionBranches.length).toBeGreaterThanOrEqual(5);
|
expect(discussionBranches.length).toBeGreaterThanOrEqual(5);
|
||||||
const positioningBranches = discussionBranches.filter((b) => b.parentSceneId === "positioning");
|
const positioningBranches = discussionBranches.filter((b) => b.parentSceneId === "positioning");
|
||||||
|
|||||||
@@ -199,8 +199,12 @@ export const mainScenes = defineScenes([
|
|||||||
view: "demo",
|
view: "demo",
|
||||||
beats: [
|
beats: [
|
||||||
sceneBeat("interrupt", "Interrupt payload", "Execution reaches a declared issue-review boundary.", { chatMode: "hidden", chatTheme: "light" }),
|
sceneBeat("interrupt", "Interrupt payload", "Execution reaches a declared issue-review boundary.", { chatMode: "hidden", chatTheme: "light" }),
|
||||||
sceneBeat("approval", "Approval", "The operator reviews a schema-backed resume request.", { chatMode: "hidden", chatTheme: "light" }),
|
sceneBeat(
|
||||||
sceneBeat("cancel", "Cancel path", "Replay cancellation stays honest and does not show submitted evidence.", { chatMode: "hidden", chatTheme: "light" }),
|
"approval",
|
||||||
|
"Approval",
|
||||||
|
"The operator makes a decision by choosing a submitted or revision-requested outcome for the paused run.",
|
||||||
|
{ chatMode: "hidden", chatTheme: "light" },
|
||||||
|
),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user