diff --git a/qa/probe_landing.mjs b/qa/probe_landing.mjs new file mode 100644 index 0000000..022ad0c --- /dev/null +++ b/qa/probe_landing.mjs @@ -0,0 +1,21 @@ +import { chromium } from "playwright"; +const args = ["--host-resolver-rules=MAP canvas.flow-master.ai 65.21.71.186", "--ignore-certificate-errors"]; +const b = await chromium.launch({ headless: true, args }); +const ctx = await b.newContext({ viewport: { width: 1440, height: 900 } }); +const p = await ctx.newPage(); +p.on("response", async (r) => { + if (/\/api\/v1\/auth\/dev-login|\/api\/v1\/auth\/me/.test(r.url())) { + console.log(`[${r.status()}] ${r.url().replace("https://canvas.flow-master.ai","")}`); + } +}); +await p.goto("https://canvas.flow-master.ai/", { waitUntil: "networkidle" }); +await p.waitForTimeout(800); +await p.locator(".persona-chip", { hasText: /Mariana/ }).click(); +await p.locator(".dev-login-btn").click(); +console.log("clicked dev-login, waiting for landing"); +await p.waitForSelector(".hero-actions", { timeout: 30000 }).catch((e) => console.log("hero-actions timeout:", e.message)); +await p.waitForTimeout(2000); +const chips = await p.locator(".hub-chip").allTextContents(); +console.log("chip count:", chips.length); +console.log("chips:", chips.slice(0, 12).map(s => s.trim())); +await b.close(); diff --git a/src/components/Telemetry.tsx b/src/components/Telemetry.tsx index 6fb4474..5f6f898 100644 --- a/src/components/Telemetry.tsx +++ b/src/components/Telemetry.tsx @@ -5,7 +5,7 @@ // The "ui tick" dot is a UI heartbeat labelled as such. import { useEffect, useMemo, useState } from "react"; import { useApp, scenarioById } from "../state/store"; -import { liveMeta } from "../data/scenarios"; + import { Pulse, Spark } from "./icons"; function Sparkline({ values, color, label }: { values: number[]; color: string; label: string }) { @@ -117,7 +117,7 @@ export default function Telemetry() {