docs: complete presentation chat timeline bridge
This commit is contained in:
@@ -120,10 +120,11 @@ Implementation order:
|
|||||||
approval UI instead of raw `{ "type": "object" }` as the primary product
|
approval UI instead of raw `{ "type": "object" }` as the primary product
|
||||||
proof. Implementation:
|
proof. Implementation:
|
||||||
[`schema approval surface`](historical/superpowers/plans/2026-07-09-schema-approval-surface.md).
|
[`schema approval surface`](historical/superpowers/plans/2026-07-09-schema-approval-surface.md).
|
||||||
16. Next: bridge presentation chat to the prepared workflow timeline so chat
|
16. Completed: presentation chat now drives the prepared workflow timeline.
|
||||||
can start the live/replay demo and submit/cancel the schema approval through
|
The chat run action, schema approval submit/cancel, graph, evidence, and
|
||||||
the existing `useDemoTimeline` execution path. Active implementation plan:
|
live/replay execution all share `useDemoTimeline`; AI SDK remains a later
|
||||||
[`presentation chat timeline bridge`](superpowers/plans/2026-07-09-presentation-chat-timeline-bridge.md).
|
driver for the same seam. Implementation:
|
||||||
|
[`presentation chat timeline bridge`](historical/superpowers/plans/2026-07-09-presentation-chat-timeline-bridge.md).
|
||||||
17. Future: implement Guided Run Beat Gates, presenter companion, Scene 10
|
17. Future: implement Guided Run Beat Gates, presenter companion, Scene 10
|
||||||
product graph, final scene visuals, evidence assets, and rehearsal timing.
|
product graph, final scene visuals, evidence assets, and rehearsal timing.
|
||||||
18. Add a static slide/appendix shell only after presentation mode is clear.
|
18. Add a static slide/appendix shell only after presentation mode is clear.
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ afterEach(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("PresentationRoute", () => {
|
describe("PresentationRoute", () => {
|
||||||
it("renders the presentation stage entry point", async () => {
|
it("renders the presentation stage entry point", { timeout: 15000 }, async () => {
|
||||||
const { PresentationRoute } = await import("./PresentationRoute.js");
|
const { PresentationRoute } = await import("./PresentationRoute.js");
|
||||||
render(<PresentationRoute />);
|
render(<PresentationRoute />);
|
||||||
expect(screen.getByRole("main", { name: /lda.chat presentation/i })).toBeInTheDocument();
|
expect(screen.getByRole("main", { name: /lda.chat presentation/i })).toBeInTheDocument();
|
||||||
@@ -172,4 +172,16 @@ describe("PresentationRoute", () => {
|
|||||||
expect(await screen.findByRole("heading", { name: /Interrupt, Resume, Evidence/i })).toBeInTheDocument();
|
expect(await screen.findByRole("heading", { name: /Interrupt, Resume, Evidence/i })).toBeInTheDocument();
|
||||||
expect(screen.getByLabelText("demo workflow stage")).toHaveAttribute("data-demo-layout", "approval");
|
expect(screen.getByLabelText("demo workflow stage")).toHaveAttribute("data-demo-layout", "approval");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("chat run action advances the replay timeline when no live server is configured", async () => {
|
||||||
|
setReplayMode();
|
||||||
|
window.location.hash = "#scene/workflow-demo/operation";
|
||||||
|
const user = userEvent.setup();
|
||||||
|
const { PresentationRoute } = await import("./PresentationRoute.js");
|
||||||
|
render(<PresentationRoute />);
|
||||||
|
|
||||||
|
const runButton = await screen.findByRole("button", { name: /run replay walkthrough/i });
|
||||||
|
await user.click(runButton);
|
||||||
|
expect(await screen.findByLabelText("workflow.runs.start operation")).toBeInTheDocument();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user