diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index a3da5de6b..570d9a684 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -190,6 +190,9 @@ describe("App, authenticated", () => { }, ], visible_posts: [{ post_id: "post-1", post_title: "Public post" }], + code_revision_sha: "abcdef0123456789deadbeefcafebabe", + configuration_sha256: + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", status_history: [ { status_ordinal: 1, @@ -1386,6 +1389,13 @@ describe("App, authenticated", () => { expect(await screen.findByRole("heading", { name: "Lineage reconstruction · Succeeded · Demo Corp" })).toBeInTheDocument(); expect(screen.getByText(/Cutoff 2026-01-12/)).toBeInTheDocument(); expect(screen.getByText(/Requested 2026-01-12/)).toBeInTheDocument(); + const digests = screen.getByLabelText("Analysis run reproducibility digests"); + expect(digests).toHaveTextContent("Code abcdef012345"); + expect(digests).toHaveTextContent("Config 0123456789ab"); + expect(digests).not.toHaveTextContent("abcdef0123456789deadbeefcafebabe"); + expect(digests).not.toHaveTextContent( + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + ); const history = screen.getByRole("list", { name: "Analysis run status history" }); expect(history).toHaveTextContent("Pending 2026-01-12 12:31"); expect(history).toHaveTextContent("Running 2026-01-12 12:32"); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f866bb302..3952de96c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1431,6 +1431,19 @@ function AnalysisRunsPanel({ {" · "} Requested {selected.requested_at.slice(0, 10)}
+ {(selected.code_revision_sha || selected.configuration_sha256) && ( ++ {selected.code_revision_sha + ? `Code ${selected.code_revision_sha.slice(0, 12)}` + : ""} + {selected.code_revision_sha && selected.configuration_sha256 + ? " · " + : ""} + {selected.configuration_sha256 + ? `Config ${selected.configuration_sha256.slice(0, 12)}` + : ""} +
+ )}