feat: tie demo graph to run proof

This commit is contained in:
lda
2026-07-09 03:29:44 +07:00 Verified
parent 9910d3f91f
commit 15c909e5cd
2 changed files with 20 additions and 1 deletions
@@ -78,7 +78,7 @@ describe("DemoWorkflowScene", () => {
renderBeat("graph"); renderBeat("graph");
expect(screen.getByLabelText("workflow.runs.start execution receipt")).toBeInTheDocument(); expect(screen.getByLabelText("workflow.runs.start execution receipt")).toBeInTheDocument();
expect(screen.getByText("run_recorded_lda_report")).toBeInTheDocument(); expect(screen.getAllByText("run_recorded_lda_report").length).toBeGreaterThanOrEqual(1);
expect(screen.getByLabelText("workflow graph")).toBeInTheDocument(); expect(screen.getByLabelText("workflow graph")).toBeInTheDocument();
}); });
@@ -132,6 +132,16 @@ describe("DemoWorkflowScene", () => {
expect(screen.getByLabelText("workflow.runs.trace operation")).toBeInTheDocument(); expect(screen.getByLabelText("workflow.runs.trace operation")).toBeInTheDocument();
}); });
it("passes run proof into graph-heavy beats", () => {
const { unmount } = renderBeat("graph");
expect(screen.getByLabelText("workflow graph proof")).toHaveTextContent("run_recorded_lda_report");
expect(screen.getByLabelText("workflow graph proof")).toHaveTextContent("5 workflow nodes");
unmount();
renderBeat("approval", "interrupt-evidence");
expect(screen.getByLabelText("workflow graph proof")).toHaveTextContent("JSON-RPC evidence");
});
it("shows the continuity rail across Scene 9 operation, graph, and interrupt beats", () => { it("shows the continuity rail across Scene 9 operation, graph, and interrupt beats", () => {
const { unmount } = renderBeat("operation"); const { unmount } = renderBeat("operation");
expect(screen.getByLabelText("demo continuity")).toHaveTextContent("workflow.runs.start"); expect(screen.getByLabelText("demo continuity")).toHaveTextContent("workflow.runs.start");
@@ -60,6 +60,14 @@ export const DemoWorkflowScene = ({
const execution = graphExecutionForBeat(beat.id); const execution = graphExecutionForBeat(beat.id);
const layout = layoutForBeat(beat.id); const layout = layoutForBeat(beat.id);
// Presentation-only proof labels keep the graph tied to the recorded run
// without changing the canonical replay event payload.
const runProof = {
runId: runStart?.resultingIds.runId ?? null,
traceLabel: "5 workflow nodes",
evidenceLabel: "JSON-RPC evidence",
};
const lens = demoBeatLensForBeat(beat.id); const lens = demoBeatLensForBeat(beat.id);
const currentOperation = currentEvent ? projectOperationPresentation(currentEvent) : null; const currentOperation = currentEvent ? projectOperationPresentation(currentEvent) : null;
const showOutcomePanel = beat.id === "approval" || beat.id === "resume" || beat.id === "output" || beat.id === "trace"; const showOutcomePanel = beat.id === "approval" || beat.id === "resume" || beat.id === "output" || beat.id === "trace";
@@ -104,6 +112,7 @@ export const DemoWorkflowScene = ({
execution={execution} execution={execution}
selectedNodeId={selectedNodeId} selectedNodeId={selectedNodeId}
selectNode={selectNode} selectNode={selectNode}
proof={runProof}
/> />
{contractMode && contract && ( {contractMode && contract && (
<InterruptContractPreview <InterruptContractPreview