{"cases":[{"expected_outcome":"succeeded","home":"linked-good.html","id":"linked-good","purpose":"A named link opens documentation with the required read operation.","selector":"a[href=\"/docs.html\"]","target":"docs.html"},{"expected_outcome":"failed","home":"linked-placeholder.html","id":"linked-placeholder","purpose":"A named documentation link returns HTTP 200 but has no usable operation.","selector":"a[href=\"/placeholder.html\"]","target":"placeholder.html"},{"expected_outcome":"succeeded","home":"button-good.html","id":"button-good","purpose":"A named native button opens working documentation; there is no source anchor.","selector":"button","target":"docs.html"},{"expected_outcome":"failed","home":"no-docs.html","id":"no-docs","purpose":"No documentation link or control exists.","selector":null,"target":null}],"limits":"These purpose-built controls test a task proxy, not the truth of the narrower link check or the accuracy of the full score. They are not a random or independent site sample.","model_version":27,"runs":[{"case_id":"linked-good","classification":"true_pass","completed_at":"2026-09-30T19:51:44.474417+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":2346,"expected_outcome":"succeeded","id":"control-linked-good-1","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"The required GET operation and response format are present.","outcome":"succeeded","source_verified":true,"started_at":"2026-09-30T19:51:42.128110+00:00","static_check":{"explanation":"The page links to 1 API or documentation target(s).","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":true,"revision":1,"source_html_sha256":"a1bbaf8caedfa1c6ed94a6a19501abcc82336746d8b07ec659f1283e7d2279ac","status":"pass"},"steps":[{"action":"Open the owned fixture","duration_ms":1151,"path":"linked-good.html","title":"Owned API control"},{"action":"Follow the named documentation control","duration_ms":783,"path":"docs.html","title":"Widget API documentation"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"linked-placeholder","classification":"false_pass","completed_at":"2026-09-30T19:51:47.105270+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":2252,"expected_outcome":"failed","id":"control-linked-placeholder-1","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"The page is readable, but the required operation and response format are absent.","outcome":"failed","source_verified":true,"started_at":"2026-09-30T19:51:44.852932+00:00","static_check":{"explanation":"The page links to 1 API or documentation target(s).","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":true,"revision":1,"source_html_sha256":"38280166e756fbbc0afe0bc14d2900a7300744b9460cd91575e2bb9b00c38d31","status":"pass"},"steps":[{"action":"Open the owned fixture","duration_ms":1094,"path":"linked-placeholder.html","title":"Owned API control"},{"action":"Follow the named documentation control","duration_ms":748,"path":"placeholder.html","title":"Documentation notice"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"button-good","classification":"false_failure","completed_at":"2026-09-30T19:51:49.701899+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":2220,"expected_outcome":"succeeded","id":"control-button-good-1","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"The required GET operation and response format are present.","outcome":"succeeded","source_verified":true,"started_at":"2026-09-30T19:51:47.481831+00:00","static_check":{"explanation":"The page mentions an API, but no API documentation link was classified.","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":false,"revision":1,"source_html_sha256":"24dc8a603369923275b221257e3a2ffde015361da7150e859d1fd57a66606f21","status":"warning"},"steps":[{"action":"Open the owned fixture","duration_ms":1124,"path":"button-good.html","title":"Owned API control"},{"action":"Follow the named documentation control","duration_ms":684,"path":"docs.html","title":"Widget API documentation"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"no-docs","classification":"true_failure","completed_at":"2026-09-30T19:51:51.701341+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":1611,"expected_outcome":"failed","id":"control-no-docs-1","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"No documentation link or control is available.","outcome":"failed","source_verified":true,"started_at":"2026-09-30T19:51:50.090682+00:00","static_check":{"explanation":"The page mentions an API, but no API documentation link was classified.","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":false,"revision":1,"source_html_sha256":"2bc308e5f4586caa212f6e9143a14ffad050cf43486f1a0e7f51154b2af10ee1","status":"warning"},"steps":[{"action":"Open the owned fixture","duration_ms":1000,"path":"no-docs.html","title":"Owned API control"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"linked-good","classification":"true_pass","completed_at":"2026-09-30T19:51:54.299540+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":2224,"expected_outcome":"succeeded","id":"control-linked-good-2","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"The required GET operation and response format are present.","outcome":"succeeded","source_verified":true,"started_at":"2026-09-30T19:51:52.076078+00:00","static_check":{"explanation":"The page links to 1 API or documentation target(s).","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":true,"revision":1,"source_html_sha256":"a1bbaf8caedfa1c6ed94a6a19501abcc82336746d8b07ec659f1283e7d2279ac","status":"pass"},"steps":[{"action":"Open the owned fixture","duration_ms":985,"path":"linked-good.html","title":"Owned API control"},{"action":"Follow the named documentation control","duration_ms":831,"path":"docs.html","title":"Widget API documentation"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"linked-placeholder","classification":"false_pass","completed_at":"2026-09-30T19:51:56.948211+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":2242,"expected_outcome":"failed","id":"control-linked-placeholder-2","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"The page is readable, but the required operation and response format are absent.","outcome":"failed","source_verified":true,"started_at":"2026-09-30T19:51:54.706506+00:00","static_check":{"explanation":"The page links to 1 API or documentation target(s).","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":true,"revision":1,"source_html_sha256":"38280166e756fbbc0afe0bc14d2900a7300744b9460cd91575e2bb9b00c38d31","status":"pass"},"steps":[{"action":"Open the owned fixture","duration_ms":1104,"path":"linked-placeholder.html","title":"Owned API control"},{"action":"Follow the named documentation control","duration_ms":725,"path":"placeholder.html","title":"Documentation notice"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"button-good","classification":"false_failure","completed_at":"2026-09-30T19:51:59.457903+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":2127,"expected_outcome":"succeeded","id":"control-button-good-2","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"The required GET operation and response format are present.","outcome":"succeeded","source_verified":true,"started_at":"2026-09-30T19:51:57.330560+00:00","static_check":{"explanation":"The page mentions an API, but no API documentation link was classified.","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":false,"revision":1,"source_html_sha256":"24dc8a603369923275b221257e3a2ffde015361da7150e859d1fd57a66606f21","status":"warning"},"steps":[{"action":"Open the owned fixture","duration_ms":976,"path":"button-good.html","title":"Owned API control"},{"action":"Follow the named documentation control","duration_ms":739,"path":"docs.html","title":"Widget API documentation"}],"task":"Find documentation for GET /api/v1/widgets and its response format."},{"case_id":"no-docs","classification":"true_failure","completed_at":"2026-09-30T19:52:01.464251+00:00","cost_note":"Total task cost is not measured. The local browser runner makes no paid model or browser API call. Codex planning and hosting are outside this measure.","cost_usd":null,"duration_ms":1624,"expected_outcome":"failed","id":"control-no-docs-2","metered_api_cost":{"amount_micros":0,"currency":"USD","paid_api_calls":0,"scope":"task_runner_paid_apis","source":"local_browser_no_paid_api","state":"measured"},"observed":"No documentation link or control is available.","outcome":"failed","source_verified":true,"started_at":"2026-09-30T19:51:59.840684+00:00","static_check":{"explanation":"The page mentions an API, but no API documentation link was classified.","id":"public-api-docs","model_digest":"78ade5ff95d9f02776d11acd10092027f74211f18a59cbb6a3d2f7272effb058","model_version":27,"predicts_task_success":false,"revision":1,"source_html_sha256":"2bc308e5f4586caa212f6e9143a14ffad050cf43486f1a0e7f51154b2af10ee1","status":"warning"},"steps":[{"action":"Open the owned fixture","duration_ms":1003,"path":"no-docs.html","title":"Owned API control"}],"task":"Find documentation for GET /api/v1/widgets and its response format."}],"schema_version":"readiness-control-task-validation/v1","scope":"Four owned local fixture pages; one fixed read-only task, repeated twice per case.","sources":{"button-good.html":"<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><title>Owned API control</title></head>\n<body><main><h1>Owned API control</h1><p>This local page is a read-only task control. Find documentation for the widget API. The expected result is a public GET operation and its response format.</p><button type=\"button\" onclick=\"location.href='/docs.html'\">API documentation</button></main></body></html>\n","docs.html":"<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><title>Widget API documentation</title></head>\n<body><main><h1>Widget API documentation</h1><h2>Read widgets</h2><p>Send <code>GET /api/v1/widgets</code>. A successful response uses status 200 and content type <code>application/json</code>. This fixture does not offer a live API or a write action.</p></main></body></html>\n","linked-good.html":"<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><title>Owned API control</title></head>\n<body><main><h1>Owned API control</h1><p>This local page is a read-only task control. Find documentation for the widget API. The expected result is a public GET operation and its response format.</p><nav aria-label=\"Developer resources\"><a href=\"/docs.html\">API documentation</a></nav></main></body></html>\n","linked-placeholder.html":"<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><title>Owned API control</title></head>\n<body><main><h1>Owned API control</h1><p>This local page is a read-only task control. Find documentation for the widget API. The expected result is a public GET operation and its response format.</p><nav aria-label=\"Developer resources\"><a href=\"/placeholder.html\">API documentation</a></nav></main></body></html>\n","no-docs.html":"<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><title>Owned API control</title></head>\n<body><main><h1>Owned API control</h1><p>This local page is a read-only task control. Find documentation for the widget API. The expected result is a public GET operation and its response format.</p><p>No public documentation is available.</p></main></body></html>\n","placeholder.html":"<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\"><title>Documentation notice</title></head>\n<body><main><h1>Documentation notice</h1><p>This page returns HTTP 200. The API documentation is not available. No operation, endpoint, or response format is given.</p></main></body></html>\n"},"summary":{"case_count":4,"counts":{"false_failure":2,"false_pass":2,"true_failure":2,"true_pass":2},"run_count":8},"task_proxy":"Predict documentation task success only when public-api-docs is pass.","weight_review":"Keep model 27 unchanged. A source link can exist without usable documentation, and a native button can work without a source anchor. A link check must not be presented as a task-success guarantee. This small control set does not justify new score weights."}