{
  "version": "riddle-proof.profile-result.v1",
  "profile_name": "riddle-site-v441-riddle-proof-profile-mode-contract",
  "runner": "riddle",
  "status": "passed",
  "baseline_policy": "invariant_only",
  "route": {
    "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
    "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
    "expected_path": "/docs/riddle-proof/",
    "matched": true,
    "http_status": 200
  },
  "artifacts": {
    "screenshots": [
      "riddle-site-v441-riddle-proof-profile-mode-contract-desktop",
      "riddle-site-v441-riddle-proof-profile-mode-contract-phone",
      "riddle-site-v441-riddle-proof-profile-mode-contract-ipad-mini",
      "riddle-site-v441-riddle-proof-profile-mode-contract-ipad"
    ],
    "console": "console.json",
    "proof_json": "proof.json",
    "dom_summary": "dom-summary.json"
  },
  "checks": [
    {
      "type": "route_loaded",
      "label": "route_loaded",
      "status": "passed",
      "evidence": {
        "expected_path": "/docs/riddle-proof/",
        "observed_paths": [
          "/s/ps_706bc1c8/docs/riddle-proof/",
          "/s/ps_706bc1c8/docs/riddle-proof/",
          "/s/ps_706bc1c8/docs/riddle-proof/",
          "/s/ps_706bc1c8/docs/riddle-proof/"
        ],
        "http_statuses": [
          200,
          200,
          200,
          200
        ]
      }
    },
    {
      "type": "selector_visible",
      "label": "selector_visible",
      "status": "passed",
      "evidence": {
        "selector": "main.docs-content",
        "visible_counts": [
          1,
          1,
          1,
          1
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "Profile Text Semantics",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "Profile Mode",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "network_mocks",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "repeat_responses",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "delay_ms",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "request_body_contains",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "setup_actions",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "frame_text_visible",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "text_visible",
      "label": "text_visible",
      "status": "passed",
      "evidence": {
        "text": "frame_url_equals",
        "matches": [
          true,
          true,
          true,
          true
        ]
      }
    },
    {
      "type": "http_status",
      "label": "riddle proof markdown profile mode contract",
      "status": "passed",
      "evidence": {
        "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 12000,
        "allowed_content_types": [
          "text/markdown",
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
            "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/markdown",
            "content_length": 19384,
            "bytes": 19384,
            "body_contains": {
              "## Profile Mode": true,
              "`network_mocks`": true,
              "`repeat_responses`": true,
              "`delay_ms`": true,
              "`request_body_contains`": true,
              "`setup_actions`": true,
              "`frame_text_visible`": true,
              "`frame_url_equals`": true
            },
            "body_contains_missing": [],
            "body_not_contains": null,
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "# Riddle Proof\n\nEvidence-backed workflows for agent-authored browser changes.\n\nPlain text for agents: https://riddledc.com/docs/riddle-proof/markdown.md\n\n## What It Is\n\nRiddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria.\n\nBuild output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates.\n\nThe contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence.\n\nShort version: bring your agent; Riddle brings the proof.\n\n## When To Use It\n\nUse Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layo",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "no_horizontal_overflow",
      "label": "no_horizontal_overflow",
      "status": "passed",
      "evidence": {
        "max_overflow_px": 1,
        "overflow_px": [
          0,
          0,
          0,
          0
        ],
        "bounds_overflow_px": [
          0,
          0,
          0,
          0
        ],
        "overflow_offender_counts": [
          0,
          0,
          0,
          0
        ],
        "viewports": [
          "desktop",
          "phone",
          "ipad-mini",
          "ipad"
        ]
      }
    },
    {
      "type": "no_fatal_console_errors",
      "label": "no_fatal_console_errors",
      "status": "passed",
      "evidence": {
        "console_fatal_count": 0,
        "page_error_count": 0,
        "total_console_fatal_count": 0,
        "total_page_error_count": 0,
        "allowed_console_fatal_count": 0,
        "explicitly_allowed_console_fatal_count": 0,
        "allowed_expected_network_mock_console_count": 0,
        "allowed_expected_network_mock_console_events": [],
        "allowed_page_error_count": 0,
        "allowed_console_texts": [],
        "allowed_console_patterns": [],
        "allowed_page_error_texts": [],
        "allowed_page_error_patterns": []
      }
    }
  ],
  "summary": "riddle-site-v441-riddle-proof-profile-mode-contract passed 14 check(s) across 4 viewport(s) (desktop, phone, ipad-mini, ipad).",
  "captured_at": "2026-05-16T22:58:35.737Z",
  "evidence": {
    "version": "riddle-proof.profile-evidence.v1",
    "profile_name": "riddle-site-v441-riddle-proof-profile-mode-contract",
    "target_url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
    "baseline_policy": "invariant_only",
    "captured_at": "2026-05-16T22:58:35.737Z",
    "viewports": [
      {
        "name": "desktop",
        "width": 1280,
        "height": 900,
        "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
        "route": {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        "title": "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "body_text_length": 19135,
        "body_text_sample": "Skip to main content Riddle Docs Proof MCP Pricing Blog Playground Sign Up Log In RIDDLE PROOF What It Is When To Use It Proof Loop Agent Change To Proof What Proof Changes Example Bundle Preview Choice Proof Packets Live URL Proof Try A Live Proof Result Shape App Contracts Audio And Rich Apps Authenticated Proof Fast Vs Full Proof Profile Text Semantics Profile Mode Gotchas Packages RELATED Preview Modes API Docs Evidence Over Summaries Example Proof Bundle Try the Playground Riddle Proof Evidence-backed workflows for agent-authored browser changes. Plain text for agents: /docs/riddle-proof/markdown.md What It Is Riddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria. Build output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates. The contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence. Short version: bring your agent; Riddle brings the proof. When To Use It Use Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layout, or an integration boundary. UI changes Routes, forms, responsive layouts, canvas, and visual state. Preview deploys Asset paths, routing, environment variables, and production-like serving. Rich browser apps Audio, animation, WebGL, generated media, and user gestures. Agent shipping PRs where a human should see evidence instead of trusting a summary. Do not use proof as a replacement for focused code tests. The practical stack is: unit tests for logic, build checks for packaging, Riddle Proof for the browser behavior the user will actually touch. Proof Loop 1 State Criteria assertions -> 2 Run App preview -> 3 Act Like User script -> 4 Capture artifacts -> 5 Judge ship gate A useful proof run starts with explicit criteria: the route loads, a control changes state without resetting playback, a screenshot contains the expected panel, or an audio render stays below a clipping threshold. The agent then runs the app, performs the user flow through Riddle, saves artifacts, and reports a compact result that can be read by a human, GitHub comment, Discord bot, CLI wrapper, or another integration. From Agent Change To Proof Bundle Riddle Proof is the evidence layer between an agent saying \"I changed the app\" and a human deciding whether the change is ready. The agent should not only summarize the diff. It should show the route it tested, the preview it used, the exact proof criteria, the artifacts it captured, and the last runtime phase if anything got stuck. 1 Change agent edits code -> 2 Preview static/server/build -> 3 Proof browser script -> 4 Bundle verdict + artifacts { \"version\": \"riddle-proof.agent-change.v1\", \"status\": \"complete\", \"phase\": \"complete\", \"phase_updated_at\": \"2026-04-20T17:20:00.000Z\", \"phase_details\": { \"outputs\": 5 }, \"preview\": { \"mode\": \"server-preview\", \"url\": \"https://preview.riddledc.com/s/sp_1234abcd/\", \"route\": \"/checkout\" }, \"proof\": { \"ok\": true, \"script\": \"checkout-submit-smoke\", \"assertions\": [ \"checkout page loads\", \"submit button stays enabled\", \"success message appears\", \"no console errors\" ] }, \"result\": { \"ok\": true, \"checks\": { \"heading\": \"Checkout\", \"successMessage\": \"Order received\" } }, \"artifacts\": [ { \"name\": \"checkout-before.png\", \"content_type\": \"image/png\" }, { \"name\": \"checkout-after.png\", \"content_type\": \"image/png\" }, { \"name\": \"console.json\", \"content_type\": \"application/json\" }, { \"name\": \"network.har\", \"content_type\": \"application/json\" } ], \"script_error\": null } A proof bundle is not a guarantee that the whole product is correct. It is reviewable evidence that the selected browser-facing behavior was exercised in a real preview and passed the stated criteria. What Proof Changes Proof changes the agent loop from \"I made the edit\" to \"I exercised the edited behavior and saved evidence.\" Fewer blind handoffs The proof bundle carries the URL, criteria, screenshots, console summary, and verdict into review. Better failure location Phase metadata shows whether a job failed while building, waiting for readiness, running browser proof, or collecting artifacts. Real-device layout pressure Viewport checks catch missing CSS, horizontal overflow, low contrast, and mobile clipping before a human sees the page. Unexpected coverage A proof run pays rent when it catches the bug you meant to check and the nearby regressions you did not know to ask about yet. Reusable judgment A human, GitHub check, Discord bot, or another agent can read the same compact proof object without scrolling terminal history. The strongest proof runs are boring and concrete: name the behavior, open the preview, perform the action, capture artifacts, and fail loudly when the evidence does not match the claim. Example Proof Bundle Riddle uses the same workflow on its own docs. The readable example is at /examples/riddle-proof, and the raw agent-facing JSON is at /examples/riddle-proof/docs-live-proof-bundle.json. That bundle records a live URL proof against this docs page, the preview docs, the docs index, and the launch blog post. It includes the verdict, route checks, screenshot artifacts, console summary, HAR artifact, duration, and caveat. { \"version\": \"riddle-proof.example-bundle.v1\", \"status\": \"completed\", \"phase\": \"complete\", \"target\": { \"mode\": \"live-url\", \"url\": \"https://riddledc.com/docs/riddle-proof\" }, \"contract\": { \"summary\": \"Bring your agent; Riddle brings the proof.\", \"terms\": [ \"Riddle Proof turns browser flows into proof receipts\", \"The proof loop is agent-agnostic\", \"The bundle is agent-proof evidence for review\" ] }, \"proof\": { \"ok\": true, \"assertions\": [ \"Riddle Proof docs load\", \"Proof receipts are explained\", \"Bring your agent; Riddle brings the proof.\", \"Preview docs explain preview modes\", \"Browser console is clean\" ] }, \"artifacts\": [ { \"name\": \"riddle-proof-docs.png\", \"role\": \"primary_screenshot\" }, { \"name\": \"console.json\", \"role\": \"console_summary\" }, { \"name\": \"network.har\", \"role\": \"network_trace\" } ], \"script_error\": null } Use the structure, not the exact checklist A checkout flow, canvas app, docs page, or audio tool will need different assertions. The stable part is the handoff: target, criteria, verdict, artifacts, phase, and caveat. Preview Choice Preview choice is part of the proof contract. Use the mode that matches the artifact you need to prove. For static exports, build locally and proof the exported directory with static preview. For server apps, use server preview. For Dockerfile-based apps, use build preview. See Preview Modes for the full decision table. Prefer a production-shaped preview for merge proof. It catches problems such as base paths, hashed assets, SPA routing, MIME types, missing static files, and server startup issues. Use a faster local or dev preview while iterating, then run the production-shaped preview before merge. Bring your deploy host Riddle Proof does not replace AWS Amplify, Vercel, Netlify, GitHub Pages, or a custom deploy pipeline. It sits after those systems: wait for a preview or live URL, run browser proof, and return evidence. This site uses AWS Amplify for production deploys and Riddle Proof for post-deploy browser verification. Good proof targets Exercise the exact route, selector, user gesture, and state transition that motivated the change. Save screenshots and JSON artifacts at the end, not only at page load. Proof Packets A proof packet is the durable record of what happened. It should be small enough to read quickly and specific enough to debug without rerunning the job. { \"version\": \"riddle-proof.capture-diagnostic.v1\", \"ok\": true, \"tool\": ",
        "scroll_width": 1280,
        "client_width": 1280,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          "main.docs-content": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {},
        "text_sequences": {},
        "text_matches": {
          "text:Profile Text Semantics": true,
          "text:Profile Mode": true,
          "text:network_mocks": true,
          "text:repeat_responses": true,
          "text:delay_ms": true,
          "text:request_body_contains": true,
          "text:setup_actions": true,
          "text:frame_text_visible": true,
          "text:frame_url_equals": true
        },
        "http_statuses": {
          "GET https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 12000,
            "allowed_content_types": [
              "text/markdown",
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
            "content_type": "text/markdown",
            "content_length": 19384,
            "status_text": "OK",
            "bytes": 19384,
            "body_sample": "# Riddle Proof\n\nEvidence-backed workflows for agent-authored browser changes.\n\nPlain text for agents: https://riddledc.com/docs/riddle-proof/markdown.md\n\n## What It Is\n\nRiddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria.\n\nBuild output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates.\n\nThe contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence.\n\nShort version: bring your agent; Riddle brings the proof.\n\n## When To Use It\n\nUse Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layo",
            "body_contains": {
              "## Profile Mode": true,
              "`network_mocks`": true,
              "`repeat_responses`": true,
              "`delay_ms`": true,
              "`request_body_contains`": true,
              "`setup_actions`": true,
              "`frame_text_visible`": true,
              "`frame_url_equals`": true
            }
          }
        },
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v441-riddle-proof-profile-mode-contract-desktop"
      },
      {
        "name": "phone",
        "width": 390,
        "height": 844,
        "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
        "route": {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        "title": "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "body_text_length": 19062,
        "body_text_sample": "Skip to main content Riddle RIDDLE PROOF What It Is When To Use It Proof Loop Agent Change To Proof What Proof Changes Example Bundle Preview Choice Proof Packets Live URL Proof Try A Live Proof Result Shape App Contracts Audio And Rich Apps Authenticated Proof Fast Vs Full Proof Profile Text Semantics Profile Mode Gotchas Packages RELATED Preview Modes API Docs Evidence Over Summaries Example Proof Bundle Riddle Proof Evidence-backed workflows for agent-authored browser changes. Plain text for agents: /docs/riddle-proof/markdown.md What It Is Riddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria. Build output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates. The contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence. Short version: bring your agent; Riddle brings the proof. When To Use It Use Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layout, or an integration boundary. UI changes Routes, forms, responsive layouts, canvas, and visual state. Preview deploys Asset paths, routing, environment variables, and production-like serving. Rich browser apps Audio, animation, WebGL, generated media, and user gestures. Agent shipping PRs where a human should see evidence instead of trusting a summary. Do not use proof as a replacement for focused code tests. The practical stack is: unit tests for logic, build checks for packaging, Riddle Proof for the browser behavior the user will actually touch. Proof Loop 1 State Criteria assertions -> 2 Run App preview -> 3 Act Like User script -> 4 Capture artifacts -> 5 Judge ship gate A useful proof run starts with explicit criteria: the route loads, a control changes state without resetting playback, a screenshot contains the expected panel, or an audio render stays below a clipping threshold. The agent then runs the app, performs the user flow through Riddle, saves artifacts, and reports a compact result that can be read by a human, GitHub comment, Discord bot, CLI wrapper, or another integration. From Agent Change To Proof Bundle Riddle Proof is the evidence layer between an agent saying \"I changed the app\" and a human deciding whether the change is ready. The agent should not only summarize the diff. It should show the route it tested, the preview it used, the exact proof criteria, the artifacts it captured, and the last runtime phase if anything got stuck. 1 Change agent edits code -> 2 Preview static/server/build -> 3 Proof browser script -> 4 Bundle verdict + artifacts { \"version\": \"riddle-proof.agent-change.v1\", \"status\": \"complete\", \"phase\": \"complete\", \"phase_updated_at\": \"2026-04-20T17:20:00.000Z\", \"phase_details\": { \"outputs\": 5 }, \"preview\": { \"mode\": \"server-preview\", \"url\": \"https://preview.riddledc.com/s/sp_1234abcd/\", \"route\": \"/checkout\" }, \"proof\": { \"ok\": true, \"script\": \"checkout-submit-smoke\", \"assertions\": [ \"checkout page loads\", \"submit button stays enabled\", \"success message appears\", \"no console errors\" ] }, \"result\": { \"ok\": true, \"checks\": { \"heading\": \"Checkout\", \"successMessage\": \"Order received\" } }, \"artifacts\": [ { \"name\": \"checkout-before.png\", \"content_type\": \"image/png\" }, { \"name\": \"checkout-after.png\", \"content_type\": \"image/png\" }, { \"name\": \"console.json\", \"content_type\": \"application/json\" }, { \"name\": \"network.har\", \"content_type\": \"application/json\" } ], \"script_error\": null } A proof bundle is not a guarantee that the whole product is correct. It is reviewable evidence that the selected browser-facing behavior was exercised in a real preview and passed the stated criteria. What Proof Changes Proof changes the agent loop from \"I made the edit\" to \"I exercised the edited behavior and saved evidence.\" Fewer blind handoffs The proof bundle carries the URL, criteria, screenshots, console summary, and verdict into review. Better failure location Phase metadata shows whether a job failed while building, waiting for readiness, running browser proof, or collecting artifacts. Real-device layout pressure Viewport checks catch missing CSS, horizontal overflow, low contrast, and mobile clipping before a human sees the page. Unexpected coverage A proof run pays rent when it catches the bug you meant to check and the nearby regressions you did not know to ask about yet. Reusable judgment A human, GitHub check, Discord bot, or another agent can read the same compact proof object without scrolling terminal history. The strongest proof runs are boring and concrete: name the behavior, open the preview, perform the action, capture artifacts, and fail loudly when the evidence does not match the claim. Example Proof Bundle Riddle uses the same workflow on its own docs. The readable example is at /examples/riddle-proof, and the raw agent-facing JSON is at /examples/riddle-proof/docs-live-proof-bundle.json. That bundle records a live URL proof against this docs page, the preview docs, the docs index, and the launch blog post. It includes the verdict, route checks, screenshot artifacts, console summary, HAR artifact, duration, and caveat. { \"version\": \"riddle-proof.example-bundle.v1\", \"status\": \"completed\", \"phase\": \"complete\", \"target\": { \"mode\": \"live-url\", \"url\": \"https://riddledc.com/docs/riddle-proof\" }, \"contract\": { \"summary\": \"Bring your agent; Riddle brings the proof.\", \"terms\": [ \"Riddle Proof turns browser flows into proof receipts\", \"The proof loop is agent-agnostic\", \"The bundle is agent-proof evidence for review\" ] }, \"proof\": { \"ok\": true, \"assertions\": [ \"Riddle Proof docs load\", \"Proof receipts are explained\", \"Bring your agent; Riddle brings the proof.\", \"Preview docs explain preview modes\", \"Browser console is clean\" ] }, \"artifacts\": [ { \"name\": \"riddle-proof-docs.png\", \"role\": \"primary_screenshot\" }, { \"name\": \"console.json\", \"role\": \"console_summary\" }, { \"name\": \"network.har\", \"role\": \"network_trace\" } ], \"script_error\": null } Use the structure, not the exact checklist A checkout flow, canvas app, docs page, or audio tool will need different assertions. The stable part is the handoff: target, criteria, verdict, artifacts, phase, and caveat. Preview Choice Preview choice is part of the proof contract. Use the mode that matches the artifact you need to prove. For static exports, build locally and proof the exported directory with static preview. For server apps, use server preview. For Dockerfile-based apps, use build preview. See Preview Modes for the full decision table. Prefer a production-shaped preview for merge proof. It catches problems such as base paths, hashed assets, SPA routing, MIME types, missing static files, and server startup issues. Use a faster local or dev preview while iterating, then run the production-shaped preview before merge. Bring your deploy host Riddle Proof does not replace AWS Amplify, Vercel, Netlify, GitHub Pages, or a custom deploy pipeline. It sits after those systems: wait for a preview or live URL, run browser proof, and return evidence. This site uses AWS Amplify for production deploys and Riddle Proof for post-deploy browser verification. Good proof targets Exercise the exact route, selector, user gesture, and state transition that motivated the change. Save screenshots and JSON artifacts at the end, not only at page load. Proof Packets A proof packet is the durable record of what happened. It should be small enough to read quickly and specific enough to debug without rerunning the job. { \"version\": \"riddle-proof.capture-diagnostic.v1\", \"ok\": true, \"tool\": \"server-preview\", \"target\": \"https://preview.example.com/app\", \"timestamp",
        "scroll_width": 390,
        "client_width": 390,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          "main.docs-content": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {},
        "text_sequences": {},
        "text_matches": {
          "text:Profile Text Semantics": true,
          "text:Profile Mode": true,
          "text:network_mocks": true,
          "text:repeat_responses": true,
          "text:delay_ms": true,
          "text:request_body_contains": true,
          "text:setup_actions": true,
          "text:frame_text_visible": true,
          "text:frame_url_equals": true
        },
        "http_statuses": {},
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v441-riddle-proof-profile-mode-contract-phone"
      },
      {
        "name": "ipad-mini",
        "width": 768,
        "height": 1024,
        "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
        "route": {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        "title": "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "body_text_length": 19062,
        "body_text_sample": "Skip to main content Riddle RIDDLE PROOF What It Is When To Use It Proof Loop Agent Change To Proof What Proof Changes Example Bundle Preview Choice Proof Packets Live URL Proof Try A Live Proof Result Shape App Contracts Audio And Rich Apps Authenticated Proof Fast Vs Full Proof Profile Text Semantics Profile Mode Gotchas Packages RELATED Preview Modes API Docs Evidence Over Summaries Example Proof Bundle Riddle Proof Evidence-backed workflows for agent-authored browser changes. Plain text for agents: /docs/riddle-proof/markdown.md What It Is Riddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria. Build output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates. The contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence. Short version: bring your agent; Riddle brings the proof. When To Use It Use Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layout, or an integration boundary. UI changes Routes, forms, responsive layouts, canvas, and visual state. Preview deploys Asset paths, routing, environment variables, and production-like serving. Rich browser apps Audio, animation, WebGL, generated media, and user gestures. Agent shipping PRs where a human should see evidence instead of trusting a summary. Do not use proof as a replacement for focused code tests. The practical stack is: unit tests for logic, build checks for packaging, Riddle Proof for the browser behavior the user will actually touch. Proof Loop 1 State Criteria assertions -> 2 Run App preview -> 3 Act Like User script -> 4 Capture artifacts -> 5 Judge ship gate A useful proof run starts with explicit criteria: the route loads, a control changes state without resetting playback, a screenshot contains the expected panel, or an audio render stays below a clipping threshold. The agent then runs the app, performs the user flow through Riddle, saves artifacts, and reports a compact result that can be read by a human, GitHub comment, Discord bot, CLI wrapper, or another integration. From Agent Change To Proof Bundle Riddle Proof is the evidence layer between an agent saying \"I changed the app\" and a human deciding whether the change is ready. The agent should not only summarize the diff. It should show the route it tested, the preview it used, the exact proof criteria, the artifacts it captured, and the last runtime phase if anything got stuck. 1 Change agent edits code -> 2 Preview static/server/build -> 3 Proof browser script -> 4 Bundle verdict + artifacts { \"version\": \"riddle-proof.agent-change.v1\", \"status\": \"complete\", \"phase\": \"complete\", \"phase_updated_at\": \"2026-04-20T17:20:00.000Z\", \"phase_details\": { \"outputs\": 5 }, \"preview\": { \"mode\": \"server-preview\", \"url\": \"https://preview.riddledc.com/s/sp_1234abcd/\", \"route\": \"/checkout\" }, \"proof\": { \"ok\": true, \"script\": \"checkout-submit-smoke\", \"assertions\": [ \"checkout page loads\", \"submit button stays enabled\", \"success message appears\", \"no console errors\" ] }, \"result\": { \"ok\": true, \"checks\": { \"heading\": \"Checkout\", \"successMessage\": \"Order received\" } }, \"artifacts\": [ { \"name\": \"checkout-before.png\", \"content_type\": \"image/png\" }, { \"name\": \"checkout-after.png\", \"content_type\": \"image/png\" }, { \"name\": \"console.json\", \"content_type\": \"application/json\" }, { \"name\": \"network.har\", \"content_type\": \"application/json\" } ], \"script_error\": null } A proof bundle is not a guarantee that the whole product is correct. It is reviewable evidence that the selected browser-facing behavior was exercised in a real preview and passed the stated criteria. What Proof Changes Proof changes the agent loop from \"I made the edit\" to \"I exercised the edited behavior and saved evidence.\" Fewer blind handoffs The proof bundle carries the URL, criteria, screenshots, console summary, and verdict into review. Better failure location Phase metadata shows whether a job failed while building, waiting for readiness, running browser proof, or collecting artifacts. Real-device layout pressure Viewport checks catch missing CSS, horizontal overflow, low contrast, and mobile clipping before a human sees the page. Unexpected coverage A proof run pays rent when it catches the bug you meant to check and the nearby regressions you did not know to ask about yet. Reusable judgment A human, GitHub check, Discord bot, or another agent can read the same compact proof object without scrolling terminal history. The strongest proof runs are boring and concrete: name the behavior, open the preview, perform the action, capture artifacts, and fail loudly when the evidence does not match the claim. Example Proof Bundle Riddle uses the same workflow on its own docs. The readable example is at /examples/riddle-proof, and the raw agent-facing JSON is at /examples/riddle-proof/docs-live-proof-bundle.json. That bundle records a live URL proof against this docs page, the preview docs, the docs index, and the launch blog post. It includes the verdict, route checks, screenshot artifacts, console summary, HAR artifact, duration, and caveat. { \"version\": \"riddle-proof.example-bundle.v1\", \"status\": \"completed\", \"phase\": \"complete\", \"target\": { \"mode\": \"live-url\", \"url\": \"https://riddledc.com/docs/riddle-proof\" }, \"contract\": { \"summary\": \"Bring your agent; Riddle brings the proof.\", \"terms\": [ \"Riddle Proof turns browser flows into proof receipts\", \"The proof loop is agent-agnostic\", \"The bundle is agent-proof evidence for review\" ] }, \"proof\": { \"ok\": true, \"assertions\": [ \"Riddle Proof docs load\", \"Proof receipts are explained\", \"Bring your agent; Riddle brings the proof.\", \"Preview docs explain preview modes\", \"Browser console is clean\" ] }, \"artifacts\": [ { \"name\": \"riddle-proof-docs.png\", \"role\": \"primary_screenshot\" }, { \"name\": \"console.json\", \"role\": \"console_summary\" }, { \"name\": \"network.har\", \"role\": \"network_trace\" } ], \"script_error\": null } Use the structure, not the exact checklist A checkout flow, canvas app, docs page, or audio tool will need different assertions. The stable part is the handoff: target, criteria, verdict, artifacts, phase, and caveat. Preview Choice Preview choice is part of the proof contract. Use the mode that matches the artifact you need to prove. For static exports, build locally and proof the exported directory with static preview. For server apps, use server preview. For Dockerfile-based apps, use build preview. See Preview Modes for the full decision table. Prefer a production-shaped preview for merge proof. It catches problems such as base paths, hashed assets, SPA routing, MIME types, missing static files, and server startup issues. Use a faster local or dev preview while iterating, then run the production-shaped preview before merge. Bring your deploy host Riddle Proof does not replace AWS Amplify, Vercel, Netlify, GitHub Pages, or a custom deploy pipeline. It sits after those systems: wait for a preview or live URL, run browser proof, and return evidence. This site uses AWS Amplify for production deploys and Riddle Proof for post-deploy browser verification. Good proof targets Exercise the exact route, selector, user gesture, and state transition that motivated the change. Save screenshots and JSON artifacts at the end, not only at page load. Proof Packets A proof packet is the durable record of what happened. It should be small enough to read quickly and specific enough to debug without rerunning the job. { \"version\": \"riddle-proof.capture-diagnostic.v1\", \"ok\": true, \"tool\": \"server-preview\", \"target\": \"https://preview.example.com/app\", \"timestamp",
        "scroll_width": 768,
        "client_width": 768,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          "main.docs-content": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {},
        "text_sequences": {},
        "text_matches": {
          "text:Profile Text Semantics": true,
          "text:Profile Mode": true,
          "text:network_mocks": true,
          "text:repeat_responses": true,
          "text:delay_ms": true,
          "text:request_body_contains": true,
          "text:setup_actions": true,
          "text:frame_text_visible": true,
          "text:frame_url_equals": true
        },
        "http_statuses": {},
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v441-riddle-proof-profile-mode-contract-ipad-mini"
      },
      {
        "name": "ipad",
        "width": 820,
        "height": 1180,
        "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
        "route": {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        "title": "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "body_text_length": 19081,
        "body_text_sample": "Skip to main content Riddle RIDDLE PROOF What It Is When To Use It Proof Loop Agent Change To Proof What Proof Changes Example Bundle Preview Choice Proof Packets Live URL Proof Try A Live Proof Result Shape App Contracts Audio And Rich Apps Authenticated Proof Fast Vs Full Proof Profile Text Semantics Profile Mode Gotchas Packages RELATED Preview Modes API Docs Evidence Over Summaries Example Proof Bundle Try the Playground Riddle Proof Evidence-backed workflows for agent-authored browser changes. Plain text for agents: /docs/riddle-proof/markdown.md What It Is Riddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria. Build output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates. The contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence. Short version: bring your agent; Riddle brings the proof. When To Use It Use Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layout, or an integration boundary. UI changes Routes, forms, responsive layouts, canvas, and visual state. Preview deploys Asset paths, routing, environment variables, and production-like serving. Rich browser apps Audio, animation, WebGL, generated media, and user gestures. Agent shipping PRs where a human should see evidence instead of trusting a summary. Do not use proof as a replacement for focused code tests. The practical stack is: unit tests for logic, build checks for packaging, Riddle Proof for the browser behavior the user will actually touch. Proof Loop 1 State Criteria assertions -> 2 Run App preview -> 3 Act Like User script -> 4 Capture artifacts -> 5 Judge ship gate A useful proof run starts with explicit criteria: the route loads, a control changes state without resetting playback, a screenshot contains the expected panel, or an audio render stays below a clipping threshold. The agent then runs the app, performs the user flow through Riddle, saves artifacts, and reports a compact result that can be read by a human, GitHub comment, Discord bot, CLI wrapper, or another integration. From Agent Change To Proof Bundle Riddle Proof is the evidence layer between an agent saying \"I changed the app\" and a human deciding whether the change is ready. The agent should not only summarize the diff. It should show the route it tested, the preview it used, the exact proof criteria, the artifacts it captured, and the last runtime phase if anything got stuck. 1 Change agent edits code -> 2 Preview static/server/build -> 3 Proof browser script -> 4 Bundle verdict + artifacts { \"version\": \"riddle-proof.agent-change.v1\", \"status\": \"complete\", \"phase\": \"complete\", \"phase_updated_at\": \"2026-04-20T17:20:00.000Z\", \"phase_details\": { \"outputs\": 5 }, \"preview\": { \"mode\": \"server-preview\", \"url\": \"https://preview.riddledc.com/s/sp_1234abcd/\", \"route\": \"/checkout\" }, \"proof\": { \"ok\": true, \"script\": \"checkout-submit-smoke\", \"assertions\": [ \"checkout page loads\", \"submit button stays enabled\", \"success message appears\", \"no console errors\" ] }, \"result\": { \"ok\": true, \"checks\": { \"heading\": \"Checkout\", \"successMessage\": \"Order received\" } }, \"artifacts\": [ { \"name\": \"checkout-before.png\", \"content_type\": \"image/png\" }, { \"name\": \"checkout-after.png\", \"content_type\": \"image/png\" }, { \"name\": \"console.json\", \"content_type\": \"application/json\" }, { \"name\": \"network.har\", \"content_type\": \"application/json\" } ], \"script_error\": null } A proof bundle is not a guarantee that the whole product is correct. It is reviewable evidence that the selected browser-facing behavior was exercised in a real preview and passed the stated criteria. What Proof Changes Proof changes the agent loop from \"I made the edit\" to \"I exercised the edited behavior and saved evidence.\" Fewer blind handoffs The proof bundle carries the URL, criteria, screenshots, console summary, and verdict into review. Better failure location Phase metadata shows whether a job failed while building, waiting for readiness, running browser proof, or collecting artifacts. Real-device layout pressure Viewport checks catch missing CSS, horizontal overflow, low contrast, and mobile clipping before a human sees the page. Unexpected coverage A proof run pays rent when it catches the bug you meant to check and the nearby regressions you did not know to ask about yet. Reusable judgment A human, GitHub check, Discord bot, or another agent can read the same compact proof object without scrolling terminal history. The strongest proof runs are boring and concrete: name the behavior, open the preview, perform the action, capture artifacts, and fail loudly when the evidence does not match the claim. Example Proof Bundle Riddle uses the same workflow on its own docs. The readable example is at /examples/riddle-proof, and the raw agent-facing JSON is at /examples/riddle-proof/docs-live-proof-bundle.json. That bundle records a live URL proof against this docs page, the preview docs, the docs index, and the launch blog post. It includes the verdict, route checks, screenshot artifacts, console summary, HAR artifact, duration, and caveat. { \"version\": \"riddle-proof.example-bundle.v1\", \"status\": \"completed\", \"phase\": \"complete\", \"target\": { \"mode\": \"live-url\", \"url\": \"https://riddledc.com/docs/riddle-proof\" }, \"contract\": { \"summary\": \"Bring your agent; Riddle brings the proof.\", \"terms\": [ \"Riddle Proof turns browser flows into proof receipts\", \"The proof loop is agent-agnostic\", \"The bundle is agent-proof evidence for review\" ] }, \"proof\": { \"ok\": true, \"assertions\": [ \"Riddle Proof docs load\", \"Proof receipts are explained\", \"Bring your agent; Riddle brings the proof.\", \"Preview docs explain preview modes\", \"Browser console is clean\" ] }, \"artifacts\": [ { \"name\": \"riddle-proof-docs.png\", \"role\": \"primary_screenshot\" }, { \"name\": \"console.json\", \"role\": \"console_summary\" }, { \"name\": \"network.har\", \"role\": \"network_trace\" } ], \"script_error\": null } Use the structure, not the exact checklist A checkout flow, canvas app, docs page, or audio tool will need different assertions. The stable part is the handoff: target, criteria, verdict, artifacts, phase, and caveat. Preview Choice Preview choice is part of the proof contract. Use the mode that matches the artifact you need to prove. For static exports, build locally and proof the exported directory with static preview. For server apps, use server preview. For Dockerfile-based apps, use build preview. See Preview Modes for the full decision table. Prefer a production-shaped preview for merge proof. It catches problems such as base paths, hashed assets, SPA routing, MIME types, missing static files, and server startup issues. Use a faster local or dev preview while iterating, then run the production-shaped preview before merge. Bring your deploy host Riddle Proof does not replace AWS Amplify, Vercel, Netlify, GitHub Pages, or a custom deploy pipeline. It sits after those systems: wait for a preview or live URL, run browser proof, and return evidence. This site uses AWS Amplify for production deploys and Riddle Proof for post-deploy browser verification. Good proof targets Exercise the exact route, selector, user gesture, and state transition that motivated the change. Save screenshots and JSON artifacts at the end, not only at page load. Proof Packets A proof packet is the durable record of what happened. It should be small enough to read quickly and specific enough to debug without rerunning the job. { \"version\": \"riddle-proof.capture-diagnostic.v1\", \"ok\": true, \"tool\": \"server-preview\", \"target\": \"https://preview.example.c",
        "scroll_width": 820,
        "client_width": 820,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {
          "main.docs-content": {
            "count": 1,
            "visible_count": 1
          }
        },
        "frames": {},
        "text_sequences": {},
        "text_matches": {
          "text:Profile Text Semantics": true,
          "text:Profile Mode": true,
          "text:network_mocks": true,
          "text:repeat_responses": true,
          "text:delay_ms": true,
          "text:request_body_contains": true,
          "text:setup_actions": true,
          "text:frame_text_visible": true,
          "text:frame_url_equals": true
        },
        "http_statuses": {},
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v441-riddle-proof-profile-mode-contract-ipad"
      }
    ],
    "console": {
      "events": [],
      "fatal_count": 0
    },
    "page_errors": [],
    "dialogs": [],
    "network_mocks": [],
    "dom_summary": {
      "expected_viewport_count": 4,
      "viewport_count": 4,
      "partial": false,
      "routes": [
        {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/",
          "observed": "/s/ps_706bc1c8/docs/riddle-proof/",
          "expected_path": "/docs/riddle-proof/",
          "matched": true,
          "http_status": 200
        }
      ],
      "titles": [
        "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "Riddle Proof - Evidence-Backed Agent Workflows | Riddle",
        "Riddle Proof - Evidence-Backed Agent Workflows | Riddle"
      ],
      "overflow_px": [
        0,
        0,
        0,
        0
      ],
      "bounds_overflow_px": [
        0,
        0,
        0,
        0
      ],
      "overflow_offender_counts": [
        0,
        0,
        0,
        0
      ],
      "frames": [
        {
          "viewport": "desktop",
          "selectors": []
        },
        {
          "viewport": "phone",
          "selectors": []
        },
        {
          "viewport": "ipad-mini",
          "selectors": []
        },
        {
          "viewport": "ipad",
          "selectors": []
        }
      ],
      "http_status": [
        {
          "viewport": "desktop",
          "requests": [
            {
              "key": "GET https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
              "url": "https://preview.riddledc.com/s/ps_706bc1c8/docs/riddle-proof/markdown.md",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            }
          ]
        }
      ],
      "link_status": [],
      "route_inventory": [],
      "network_mock_count": 0,
      "network_mock_hit_count": 0,
      "dialog_count": 0,
      "dialog_accept_count": 0,
      "dialog_dismiss_count": 0
    }
  }
}