{
  "scenario": "SQLite readers return after a transient directory denial",
  "failsOnBase": true,
  "passesOnHead": true,
  "couldNotRun": null,
  "baseSha": "1c01db02b3d2e7c06bdcdb6d648bddb2146ff36f",
  "headSha": "c9dcd47e49fca1e7cbac980a4e3c0f27079d668b",
  "verdict": "Proven: the scenario fails on base `1c01db02b3` and passes on head `c9dcd47e49`.",
  "steps": {
    "base": [
      {
        "step": "app.open <pairing link>",
        "status": "passed"
      },
      {
        "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/",
        "status": "passed"
      },
      {
        "step": "app.open /e418fc41-f227-48e7-91df-80ad46e1da97/mcp:42a62088-df13-4b18-abbd-126d6741dc45",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot baseline",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot fault",
        "status": "passed"
      },
      {
        "step": "locator.fill getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "locator.press getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot recovery",
        "status": "passed"
      }
    ],
    "head": [
      {
        "step": "app.open <pairing link>",
        "status": "passed"
      },
      {
        "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/",
        "status": "passed"
      },
      {
        "step": "app.open /fe992164-aadd-4b09-a114-20eeb01b73a1/mcp:154cf68e-0dda-4342-8b89-89edf4b2c800",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot baseline",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot fault",
        "status": "passed"
      },
      {
        "step": "locator.fill getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "locator.press getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot recovery",
        "status": "passed"
      }
    ]
  },
  "captures": [
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e9af7099283ad18/001-baseline.png",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba2e1cafc34a5db1/002-fault.png",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/382ced97d814c188/003-recovery.png",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/86a079a91c27ff8a/004-failure.png",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/326f528b00620509/001-baseline.png",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f0b4fce7974ebb9/002-fault.png",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/773ea9f9bb59df4a/003-recovery.png"
  ],
  "videos": [
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0e76776dce68cb78/video.webm",
    "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3bcdea23c95ca3d6/video.webm"
  ],
  "markdown": "### Scenario: SQLite readers return after a transient directory denial\n\n**Proven: the scenario fails on base `1c01db02b3` and passes on head `c9dcd47e49`.**\n\n|  | Base `1c01db02b3` | Head `c9dcd47e49` |\n| --- | --- | --- |\n| Result | \u274c failed<br>ASSERTION_FAILED: expected 0 to be greater than 0 | \u2705 passed |\n| baseline | ![Base 1c01db02b3: baseline](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e9af7099283ad18/001-baseline.png) | ![Head c9dcd47e49: baseline](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/326f528b00620509/001-baseline.png) |\n| fault | ![Base 1c01db02b3: fault](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba2e1cafc34a5db1/002-fault.png) | ![Head c9dcd47e49: fault](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f0b4fce7974ebb9/002-fault.png) |\n| recovery | ![Base 1c01db02b3: recovery](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/382ced97d814c188/003-recovery.png) | ![Head c9dcd47e49: recovery](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/773ea9f9bb59df4a/003-recovery.png) |\n| failure | ![Base 1c01db02b3: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/86a079a91c27ff8a/004-failure.png) |  |\n",
  "base": {
    "sha": "1c01db02b3d2e7c06bdcdb6d648bddb2146ff36f",
    "status": "failed",
    "title": "SQLite readers return after a transient directory denial",
    "message": "ASSERTION_FAILED: expected 0 to be greater than 0",
    "steps": [
      {
        "step": "app.open <pairing link>",
        "status": "passed"
      },
      {
        "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/",
        "status": "passed"
      },
      {
        "step": "app.open /e418fc41-f227-48e7-91df-80ad46e1da97/mcp:42a62088-df13-4b18-abbd-126d6741dc45",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot baseline",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot fault",
        "status": "passed"
      },
      {
        "step": "locator.fill getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "locator.press getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot recovery",
        "status": "passed"
      }
    ],
    "captures": [
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e9af7099283ad18/001-baseline.png",
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ba2e1cafc34a5db1/002-fault.png",
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/382ced97d814c188/003-recovery.png",
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/86a079a91c27ff8a/004-failure.png"
    ],
    "videos": [
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0e76776dce68cb78/video.webm"
    ]
  },
  "head": {
    "sha": "c9dcd47e49fca1e7cbac980a4e3c0f27079d668b",
    "status": "passed",
    "title": "SQLite readers return after a transient directory denial",
    "steps": [
      {
        "step": "app.open <pairing link>",
        "status": "passed"
      },
      {
        "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/",
        "status": "passed"
      },
      {
        "step": "app.open /fe992164-aadd-4b09-a114-20eeb01b73a1/mcp:154cf68e-0dda-4342-8b89-89edf4b2c800",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot baseline",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot fault",
        "status": "passed"
      },
      {
        "step": "locator.fill getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "locator.press getByRole(\"textbox\")",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "browser.reload ",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByText(\"Syncing messages...\") \u2192 hidden",
        "status": "passed"
      },
      {
        "step": "locator.waitFor getByRole(\"textbox\") \u2192 visible",
        "status": "passed"
      },
      {
        "step": "browser.evaluate ",
        "status": "passed"
      },
      {
        "step": "app.screenshot recovery",
        "status": "passed"
      }
    ],
    "captures": [
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/326f528b00620509/001-baseline.png",
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f0b4fce7974ebb9/002-fault.png",
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/773ea9f9bb59df4a/003-recovery.png"
    ],
    "videos": [
      "https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3bcdea23c95ca3d6/video.webm"
    ]
  },
  "summaryRecovery": "Rebuilt with the runner exported readSide and buildProof helpers from the completed, unchanged base and head reports after the parent command received SIGTERM."
}