{
  "contract": "reshot/product-journey-integrity-benchmark/v1",
  "generatedAt": "2026-08-24T03:50:16.996Z",
  "license": "CC-BY-4.0 for the dataset; target applications retain their stated licenses.",
  "methodVersion": "1.0.0",
  "runtime": {
    "playwright": "1.57.0",
    "browser": "chromium",
    "platform": "darwin-arm64",
    "node": "v22.23.1"
  },
  "sample": {
    "type": "three public TodoMVC framework implementations",
    "selection": "React, Vue, and JavaScript ES6 implementations from the current public TodoMVC examples index.",
    "limitation": "This controlled v1 sample tests one client-side outcome across implementations of the same application; it is not representative of SaaS complexity."
  },
  "rubric": {
    "outcome": "Create one named item and observe both the item and active-count consequence.",
    "state": "Declare and reset browser context dimensions for every repetition; disclose unavailable server-state reconstruction.",
    "visual": "Compare exact PNG SHA-256 across three identical declared contexts.",
    "accessibility": "Check the named primary textbox, level-one heading, and exposed checkbox; explicitly not conformance.",
    "evidence": "Retain status, assertions, checks, screenshot/DOM hashes, timestamps, and errors for every repetition."
  },
  "targets": [
    {
      "id": "todomvc-react",
      "framework": "React",
      "url": "https://todomvc.com/examples/react/dist/",
      "source": "https://github.com/tastejs/todomvc/tree/master/examples/react",
      "license": "MIT",
      "licenseUrl": "https://github.com/tastejs/todomvc/blob/master/license.md",
      "declaredJourney": {
        "outcome": "Create the todo “Verify release truth” and observe one active item.",
        "state": {
          "newBrowserContextPerRepetition": true,
          "viewport": "1200x748",
          "locale": "en-US",
          "colorScheme": "light",
          "reducedMotion": "reduce",
          "deviceScaleFactor": 1
        }
      },
      "observations": [
        {
          "repetition": 1,
          "startedAt": "2026-08-24T03:48:15.569Z",
          "completedAt": "2026-08-24T03:48:52.771Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": false,
              "observed": 0
            }
          ],
          "screenshot": null,
          "screenshotSha256": null,
          "domSha256": null,
          "error": "locator.fill: Timeout 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for getByRole('textbox', { name: 'What needs to be done?' })\u001b[22m\n"
        },
        {
          "repetition": 2,
          "startedAt": "2026-08-24T03:48:52.838Z",
          "completedAt": "2026-08-24T03:49:26.325Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": false,
              "observed": 0
            }
          ],
          "screenshot": null,
          "screenshotSha256": null,
          "domSha256": null,
          "error": "locator.fill: Timeout 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for getByRole('textbox', { name: 'What needs to be done?' })\u001b[22m\n"
        },
        {
          "repetition": 3,
          "startedAt": "2026-08-24T03:49:26.459Z",
          "completedAt": "2026-08-24T03:50:00.776Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": false,
              "observed": 0
            }
          ],
          "screenshot": null,
          "screenshotSha256": null,
          "domSha256": null,
          "error": "locator.fill: Timeout 30000ms exceeded.\nCall log:\n\u001b[2m  - waiting for getByRole('textbox', { name: 'What needs to be done?' })\u001b[22m\n"
        }
      ],
      "dimensions": {
        "outcome": {
          "status": "observed-failure",
          "passedRepetitions": 0,
          "totalRepetitions": 3
        },
        "state": {
          "status": "browser-state-controlled",
          "limitation": "The benchmark controls browser state but does not reconstruct server identity, account, or product fixtures."
        },
        "visual": {
          "status": "varied-or-missing",
          "exactHashCount": 0,
          "totalRepetitions": 3
        },
        "accessibility": {
          "status": "sampled-checks-fail",
          "scope": "Named primary textbox, level-one heading, and exposed todo checkbox only; not a conformance audit."
        },
        "evidence": {
          "status": "incomplete",
          "artifactsPerRepetition": [
            "HTTP status",
            "outcome assertions",
            "accessibility checks",
            "screenshot SHA-256",
            "DOM SHA-256",
            "timestamps",
            "error"
          ]
        }
      },
      "domDeterminism": {
        "exactWithinRun": false,
        "uniqueHashes": 0
      }
    },
    {
      "id": "todomvc-vue",
      "framework": "Vue",
      "url": "https://todomvc.com/examples/vue/dist/",
      "source": "https://github.com/tastejs/todomvc/tree/master/examples/vue",
      "license": "MIT",
      "licenseUrl": "https://github.com/tastejs/todomvc/blob/master/license.md",
      "declaredJourney": {
        "outcome": "Create the todo “Verify release truth” and observe one active item.",
        "state": {
          "newBrowserContextPerRepetition": true,
          "viewport": "1200x748",
          "locale": "en-US",
          "colorScheme": "light",
          "reducedMotion": "reduce",
          "deviceScaleFactor": 1
        }
      },
      "observations": [
        {
          "repetition": 1,
          "startedAt": "2026-08-24T03:50:00.835Z",
          "completedAt": "2026-08-24T03:50:02.777Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            },
            {
              "id": "created-item-visible",
              "passed": true,
              "observed": 1
            },
            {
              "id": "active-count-one",
              "passed": true,
              "observed": 1
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": true,
              "observed": 1
            },
            {
              "id": "named-level-one-heading",
              "passed": true,
              "observed": 1
            },
            {
              "id": "todo-checkbox-exposed",
              "passed": true,
              "observed": 2
            }
          ],
          "screenshot": "https://reshot.dev/research/product-journey-integrity-benchmark-v1/todomvc-vue-1.png",
          "screenshotSha256": "59036a9c853f41a4daf1c95fea9c7be54494eabab8a3bda87eaf352249e48604",
          "domSha256": "8bd0c55e45a31225224c3a6d4ddafdccea3299a5b46783018fd673a8a8fe65bc",
          "error": null
        },
        {
          "repetition": 2,
          "startedAt": "2026-08-24T03:50:02.826Z",
          "completedAt": "2026-08-24T03:50:04.343Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            },
            {
              "id": "created-item-visible",
              "passed": true,
              "observed": 1
            },
            {
              "id": "active-count-one",
              "passed": true,
              "observed": 1
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": true,
              "observed": 1
            },
            {
              "id": "named-level-one-heading",
              "passed": true,
              "observed": 1
            },
            {
              "id": "todo-checkbox-exposed",
              "passed": true,
              "observed": 2
            }
          ],
          "screenshot": "https://reshot.dev/research/product-journey-integrity-benchmark-v1/todomvc-vue-2.png",
          "screenshotSha256": "59036a9c853f41a4daf1c95fea9c7be54494eabab8a3bda87eaf352249e48604",
          "domSha256": "8bd0c55e45a31225224c3a6d4ddafdccea3299a5b46783018fd673a8a8fe65bc",
          "error": null
        },
        {
          "repetition": 3,
          "startedAt": "2026-08-24T03:50:04.390Z",
          "completedAt": "2026-08-24T03:50:06.010Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            },
            {
              "id": "created-item-visible",
              "passed": true,
              "observed": 1
            },
            {
              "id": "active-count-one",
              "passed": true,
              "observed": 1
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": true,
              "observed": 1
            },
            {
              "id": "named-level-one-heading",
              "passed": true,
              "observed": 1
            },
            {
              "id": "todo-checkbox-exposed",
              "passed": true,
              "observed": 2
            }
          ],
          "screenshot": "https://reshot.dev/research/product-journey-integrity-benchmark-v1/todomvc-vue-3.png",
          "screenshotSha256": "59036a9c853f41a4daf1c95fea9c7be54494eabab8a3bda87eaf352249e48604",
          "domSha256": "8bd0c55e45a31225224c3a6d4ddafdccea3299a5b46783018fd673a8a8fe65bc",
          "error": null
        }
      ],
      "dimensions": {
        "outcome": {
          "status": "observed-pass",
          "passedRepetitions": 3,
          "totalRepetitions": 3
        },
        "state": {
          "status": "browser-state-controlled",
          "limitation": "The benchmark controls browser state but does not reconstruct server identity, account, or product fixtures."
        },
        "visual": {
          "status": "exact-within-run",
          "exactHashCount": 3,
          "totalRepetitions": 3
        },
        "accessibility": {
          "status": "sampled-checks-pass",
          "scope": "Named primary textbox, level-one heading, and exposed todo checkbox only; not a conformance audit."
        },
        "evidence": {
          "status": "complete-for-method",
          "artifactsPerRepetition": [
            "HTTP status",
            "outcome assertions",
            "accessibility checks",
            "screenshot SHA-256",
            "DOM SHA-256",
            "timestamps",
            "error"
          ]
        }
      },
      "domDeterminism": {
        "exactWithinRun": true,
        "uniqueHashes": 1
      }
    },
    {
      "id": "todomvc-javascript-es6",
      "framework": "JavaScript ES6",
      "url": "https://todomvc.com/examples/javascript-es6/dist/",
      "source": "https://github.com/tastejs/todomvc/tree/master/examples/javascript-es6",
      "license": "MIT",
      "licenseUrl": "https://github.com/tastejs/todomvc/blob/master/license.md",
      "declaredJourney": {
        "outcome": "Create the todo “Verify release truth” and observe one active item.",
        "state": {
          "newBrowserContextPerRepetition": true,
          "viewport": "1200x748",
          "locale": "en-US",
          "colorScheme": "light",
          "reducedMotion": "reduce",
          "deviceScaleFactor": 1
        }
      },
      "observations": [
        {
          "repetition": 1,
          "startedAt": "2026-08-24T03:50:06.063Z",
          "completedAt": "2026-08-24T03:50:07.886Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            },
            {
              "id": "created-item-visible",
              "passed": true,
              "observed": 1
            },
            {
              "id": "active-count-one",
              "passed": true,
              "observed": 1
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": true,
              "observed": 1
            },
            {
              "id": "named-level-one-heading",
              "passed": true,
              "observed": 1
            },
            {
              "id": "todo-checkbox-exposed",
              "passed": true,
              "observed": 2
            }
          ],
          "screenshot": "https://reshot.dev/research/product-journey-integrity-benchmark-v1/todomvc-javascript-es6-1.png",
          "screenshotSha256": "c9bb764c5d3cd00ac9e65f25f697e0134ffa87a6e3e7343e46cc66a898fce46d",
          "domSha256": "ed3d70576e6fc5eb41d14f1824b1b45d5c1ad8c96b481cf6a7ca6c5632b98dba",
          "error": null
        },
        {
          "repetition": 2,
          "startedAt": "2026-08-24T03:50:07.933Z",
          "completedAt": "2026-08-24T03:50:09.329Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            },
            {
              "id": "created-item-visible",
              "passed": true,
              "observed": 1
            },
            {
              "id": "active-count-one",
              "passed": true,
              "observed": 1
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": true,
              "observed": 1
            },
            {
              "id": "named-level-one-heading",
              "passed": true,
              "observed": 1
            },
            {
              "id": "todo-checkbox-exposed",
              "passed": true,
              "observed": 2
            }
          ],
          "screenshot": "https://reshot.dev/research/product-journey-integrity-benchmark-v1/todomvc-javascript-es6-2.png",
          "screenshotSha256": "c9bb764c5d3cd00ac9e65f25f697e0134ffa87a6e3e7343e46cc66a898fce46d",
          "domSha256": "ed3d70576e6fc5eb41d14f1824b1b45d5c1ad8c96b481cf6a7ca6c5632b98dba",
          "error": null
        },
        {
          "repetition": 3,
          "startedAt": "2026-08-24T03:50:09.376Z",
          "completedAt": "2026-08-24T03:50:16.977Z",
          "responseStatus": 200,
          "assertions": [
            {
              "id": "http-200",
              "passed": true,
              "observed": 200
            },
            {
              "id": "created-item-visible",
              "passed": true,
              "observed": 1
            },
            {
              "id": "active-count-one",
              "passed": true,
              "observed": 1
            }
          ],
          "accessibility": [
            {
              "id": "named-primary-textbox",
              "passed": true,
              "observed": 1
            },
            {
              "id": "named-level-one-heading",
              "passed": true,
              "observed": 1
            },
            {
              "id": "todo-checkbox-exposed",
              "passed": true,
              "observed": 2
            }
          ],
          "screenshot": "https://reshot.dev/research/product-journey-integrity-benchmark-v1/todomvc-javascript-es6-3.png",
          "screenshotSha256": "c9bb764c5d3cd00ac9e65f25f697e0134ffa87a6e3e7343e46cc66a898fce46d",
          "domSha256": "ed3d70576e6fc5eb41d14f1824b1b45d5c1ad8c96b481cf6a7ca6c5632b98dba",
          "error": null
        }
      ],
      "dimensions": {
        "outcome": {
          "status": "observed-pass",
          "passedRepetitions": 3,
          "totalRepetitions": 3
        },
        "state": {
          "status": "browser-state-controlled",
          "limitation": "The benchmark controls browser state but does not reconstruct server identity, account, or product fixtures."
        },
        "visual": {
          "status": "exact-within-run",
          "exactHashCount": 3,
          "totalRepetitions": 3
        },
        "accessibility": {
          "status": "sampled-checks-pass",
          "scope": "Named primary textbox, level-one heading, and exposed todo checkbox only; not a conformance audit."
        },
        "evidence": {
          "status": "complete-for-method",
          "artifactsPerRepetition": [
            "HTTP status",
            "outcome assertions",
            "accessibility checks",
            "screenshot SHA-256",
            "DOM SHA-256",
            "timestamps",
            "error"
          ]
        }
      },
      "domDeterminism": {
        "exactWithinRun": true,
        "uniqueHashes": 1
      }
    }
  ],
  "limitations": [
    "The benchmark does not rank frameworks, vendors, or products.",
    "All targets implement the same TodoMVC specification and share a public host, reducing sample diversity.",
    "Only browser-local state is controlled; authenticated, server, dependency, clock, and side-effect reconstruction are not tested.",
    "Accessibility checks cover three observable semantics and do not establish WCAG conformance.",
    "Exact visual/DOM repeatability is measured only inside one run, machine, browser build, and network period.",
    "Public hosted demos can change after collection; source and observation timestamps are retained."
  ]
}
