+
+
Durable cards for areas of work that involve you. Pin the ones you always want to see.
+ ${active.length === 0
+ ? `
+
No briefs yet
+
Cards appear here once the Briefing Analyst picks up recent work. Pinned cards never expire.
+
`
+ : visibleSections.map((section) => section.cards.length === 0 ? "" : `
+
+
+ ${section.label}
+ ${section.cards.length}
+
+
+
+ ${section.cards.map((card) => renderToStaticMarkup( {}} />)).join("")}
+
+
+ `).join("")}
+
+
+ `;
+}
+
+describe.skipIf(!ENABLED)("Briefs screenshots", () => {
+ let browser: import("playwright").Browser | null = null;
+
+ async function getBrowser() {
+ if (browser) return browser;
+ const playwright = await import("playwright");
+ browser = await playwright.chromium.launch({ headless: true });
+ return browser;
+ }
+
+ afterAll(async () => {
+ if (browser) await browser.close();
+ });
+
+ it("captures desktop, mobile, and empty-state Briefing snapshots", async () => {
+ await fs.mkdir(outDir, { recursive: true });
+ const cards = gallery();
+
+ const desktopHtml = staticPage({ cards, viewportWidth: desktopWidth });
+ const mobileHtml = staticPage({ cards, viewportWidth: mobileWidth });
+ const emptyHtml = staticPage({ cards: [], viewportWidth: desktopWidth });
+
+ const desktopFile = path.join(outDir, "_briefing-desktop.html");
+ const mobileFile = path.join(outDir, "_briefing-mobile.html");
+ const emptyFile = path.join(outDir, "_briefing-empty.html");
+ await fs.writeFile(desktopFile, desktopHtml);
+ await fs.writeFile(mobileFile, mobileHtml);
+ await fs.writeFile(emptyFile, emptyHtml);
+
+ const browser = await getBrowser();
+
+ await snap(browser, desktopFile, { width: desktopWidth, height: 900 }, path.join(outDir, "briefing-desktop.png"));
+ await snap(browser, mobileFile, { width: mobileWidth, height: 844 }, path.join(outDir, "briefing-mobile.png"));
+ await snap(browser, emptyFile, { width: desktopWidth, height: 700 }, path.join(outDir, "briefing-empty.png"));
+
+ for (const name of ["briefing-desktop.png", "briefing-mobile.png", "briefing-empty.png"]) {
+ const stats = await fs.stat(path.join(outDir, name));
+ expect(stats.size).toBeGreaterThan(1024);
+ }
+ }, 60_000);
+});
+
+async function snap(browser: import("playwright").Browser, htmlPath: string, viewport: { width: number; height: number }, out: string): Promise