diff --git a/tests/runner-e2e/README.md b/tests/runner-e2e/README.md index fae07875693..83123c6e8a2 100644 --- a/tests/runner-e2e/README.md +++ b/tests/runner-e2e/README.md @@ -3082,3 +3082,8 @@ not from retained conversations or private artifacts. The renderer requires a new output directory and makes it private; it does not publish the preview or modify existing campaign files. Normal campaign rendering and retained result cards continue to use the existing bundle command. + +The shared report navigation links the dated, immutable catalog snapshot. +Deploying this generator does not rewrite existing published history HTML. +Activating the link on an existing page requires a separately reviewed, +conditional navigation-only update. The metadata command publishes nothing. diff --git a/tests/runner-e2e/catalog-overview.test.ts b/tests/runner-e2e/catalog-overview.test.ts index d7938836ded..3baeb9206ec 100644 --- a/tests/runner-e2e/catalog-overview.test.ts +++ b/tests/runner-e2e/catalog-overview.test.ts @@ -100,6 +100,18 @@ describe("display-only catalog overview", () => { await expect(regenerateCatalogOverview({metadataFile:metadata,outputDirectory:path.join(dir,'big-out')})).rejects.toThrow('bounded'); } finally { await rm(dir,{recursive:true,force:true}); } }); + it("links the dated immutable snapshot from real campaign and metadata navigation", () => { + const data=fixture(); + const ordinary=renderRunnerE2EDashboard({title:"Campaign",generatedAt:data.asOf,expected:[],catalog:[],entries:[]}); + for (const html of [ordinary,page(data)]) { + const dom=new JSDOM(html),link=dom.window.document.querySelector('[data-nav-catalog]')!; + expect(link.textContent).toContain('Chat catalog · Oct 29'); + expect(link.href).toBe('https://d1p6rlowie26tp.cloudfront.net/runner-e2e/campaigns/chat-catalog-overview-20261029-175400z/'); + expect(dom.window.getComputedStyle(link).display).not.toBe('none'); + expect(dom.window.document.querySelectorAll('[data-nav-catalog]')).toHaveLength(1); + dom.window.close(); + } + }); it("keeps the normal campaign branch and its missing-result behavior", () => { const normal=renderRunnerE2EDashboard({title:'Existing campaign',generatedAt:'2026-10-29T17:54:00Z',expected:[],catalog:[],entries:[]}); expect(normal).toContain('aria-label="Campaign summary"'); diff --git a/tests/runner-e2e/report-navigation.ts b/tests/runner-e2e/report-navigation.ts index ea1cf5daa0e..7a53b620d7f 100644 --- a/tests/runner-e2e/report-navigation.ts +++ b/tests/runner-e2e/report-navigation.ts @@ -37,6 +37,7 @@ export function renderReportShell(input: { ${paperclipReportLogo}Evaluations
${!campaign && presets.length ? `` : ""}${tree}