{
  "timestamp": "2026-05-15T13:59:08.439Z",
  "duration": "2.8s",
  "total": 17,
  "passed": 17,
  "failed": 0,
  "results": [
    {
      "name": "Migration file exists with display_states + slideshow cols + speed check",
      "status": "pass"
    },
    {
      "name": "migrate.js registry entry present + idempotent",
      "status": "pass"
    },
    {
      "name": "schema.ts: cafeDisplayStates table + slideshow cols on cafeTenantConfig",
      "status": "pass"
    },
    {
      "name": "display_states DAO: get/upsert/delete shape",
      "status": "pass"
    },
    {
      "name": "display_branding DAO: slideshow fields + validation",
      "status": "pass"
    },
    {
      "name": "middleware bypasses /api/display/* (matches /display/ pattern)",
      "status": "pass"
    },
    {
      "name": "API route file present at /api/display/[sessionId]/state with POST + GET",
      "status": "pass"
    },
    {
      "name": "DisplayModeDialog component present with both mode CTAs",
      "status": "pass"
    },
    {
      "name": "3 toolbar callsites wired to DisplayModeDialog (no direct window.open of the display URL)",
      "status": "pass"
    },
    {
      "name": "register-shell publishes server state in addition to BroadcastChannel",
      "status": "pass"
    },
    {
      "name": "display-client polls /api/display/.../state alongside BroadcastChannel",
      "status": "pass"
    },
    {
      "name": "display page passes displaySecret to client",
      "status": "pass"
    },
    {
      "name": "display-client renders Slideshow when enabled + has images",
      "status": "pass"
    },
    {
      "name": "Settings form has slideshow card + toggle + speed pills + image list",
      "status": "pass"
    },
    {
      "name": "closeShiftAction deletes the display_state row",
      "status": "pass"
    },
    {
      "name": "Schema probe: cafe.display_states table + FK + slideshow cols + speed check",
      "status": "pass"
    },
    {
      "name": "DAO probe: upsert/get/delete round-trip + validateBranding accepts/rejects",
      "status": "pass"
    }
  ]
}