{
  "lane": "glm",
  "layout": {
    "title": "Focus Desk — Task Management",
    "headings": [
      "Focus Desk",
      "New task",
      "Tasks"
    ],
    "font": "ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif",
    "background": "rgb(246, 247, 251)",
    "buttons": [
      {
        "text": "Add task",
        "label": null
      }
    ],
    "stylesheetCount": 1
  },
  "results": [
    {
      "name": "01 loads empty with no runtime error",
      "pass": false,
      "error": "missing empty state",
      "ms": 1717
    },
    {
      "name": "02 create title/notes/priority/due",
      "pass": false,
      "error": "creation failed",
      "ms": 86
    },
    {
      "name": "03 whitespace title rejected",
      "pass": true,
      "ms": 88
    },
    {
      "name": "04 edit title persists",
      "pass": false,
      "error": "locator.click: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Original' }).getByTestId('task-edit')\u001b[22m\n",
      "ms": 3586
    },
    {
      "name": "05 completion toggle reversible and persisted",
      "pass": false,
      "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Toggle me' }).getByTestId('task-toggle')\u001b[22m\n",
      "ms": 3564
    },
    {
      "name": "06 deletion persists",
      "pass": false,
      "error": "locator.click: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Delete me' }).getByTestId('task-delete')\u001b[22m\n",
      "ms": 3566
    },
    {
      "name": "07 case-insensitive title search",
      "pass": false,
      "error": "title search failed",
      "ms": 174
    },
    {
      "name": "08 case-insensitive notes search",
      "pass": false,
      "error": "notes search failed",
      "ms": 165
    },
    {
      "name": "09 status filter active/completed/all",
      "pass": false,
      "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Alpha release' }).getByTestId('task-toggle')\u001b[22m\n",
      "ms": 3662
    },
    {
      "name": "10 priority filter",
      "pass": false,
      "error": "priority filter failed",
      "ms": 172
    },
    {
      "name": "11 filters and search compose",
      "pass": false,
      "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Alpha release' }).getByTestId('task-toggle')\u001b[22m\n",
      "ms": 3662
    },
    {
      "name": "12 empty search state visible",
      "pass": false,
      "error": "no empty search state",
      "ms": 172
    },
    {
      "name": "13 global counts correct",
      "pass": false,
      "error": "locator.check: Timeout 3500ms exceeded.\nCall log:\n  \u001b[2m- waiting for getByTestId('task-item').filter({ hasText: 'Alpha release' }).getByTestId('task-toggle')\u001b[22m\n",
      "ms": 3660
    },
    {
      "name": "14 multiple tasks survive reload",
      "pass": false,
      "error": "tasks lost on reload",
      "ms": 195
    },
    {
      "name": "15 invalid saved JSON recoverable",
      "pass": false,
      "error": "no task storage key",
      "ms": 77
    },
    {
      "name": "16 title and notes HTML injection prevented",
      "pass": false,
      "error": "task missing",
      "ms": 217
    },
    {
      "name": "17 desktop has no horizontal overflow",
      "pass": true,
      "ms": 221
    },
    {
      "name": "18 mobile no overflow and form usable",
      "pass": false,
      "error": "mobile form not usable",
      "ms": 730
    },
    {
      "name": "19 inputs have accessible labels",
      "pass": true,
      "ms": 4
    },
    {
      "name": "20 README includes run instructions",
      "pass": false,
      "error": "README missing",
      "ms": 0
    }
  ],
  "passed": 3,
  "total": 20,
  "pageErrors": [],
  "verifiedAt": "2026-09-14T00:25:02.595Z",
  "verdict": "fail"
}