docs: complete presentation chat timeline bridge

This commit is contained in:
lda
2026-07-09 06:23:57 +07:00 Verified
parent 0f667061cb
commit d3b37a812f
3 changed files with 18 additions and 5 deletions
+5 -4
View File
@@ -120,10 +120,11 @@ Implementation order:
approval UI instead of raw `{ "type": "object" }` as the primary product
proof. Implementation:
[`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
can start the live/replay demo and submit/cancel the schema approval through
the existing `useDemoTimeline` execution path. Active implementation plan:
[`presentation chat timeline bridge`](superpowers/plans/2026-07-09-presentation-chat-timeline-bridge.md).
16. Completed: presentation chat now drives the prepared workflow timeline.
The chat run action, schema approval submit/cancel, graph, evidence, and
live/replay execution all share `useDemoTimeline`; AI SDK remains a later
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
product graph, final scene visuals, evidence assets, and rehearsal timing.
18. Add a static slide/appendix shell only after presentation mode is clear.
@@ -36,7 +36,7 @@ afterEach(() => {
});
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");
render(<PresentationRoute />);
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(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();
});
});