{
  "file": "F30-openai-gateway.md",
  "bullet": "Run limit on a continued conversation (`F30.chat-reuse-run-limit-429`), known bug.",
  "ids": [
    "F30.chat-reuse-run-limit-429"
  ],
  "line": 675,
  "script": "trap 'control-agent-server api DELETE \"<redacted:session-cookie>/$HOLD2\" >/dev/null || true; control-agent-server restart --reset-config >/dev/null || true' EXIT\ncontrol-agent-server restart --config-json '{\"max_concurrent_runs\": 1}'\nHANG2=$(control-agent-server fixture llm-stub --name qa-f30-hang2 --step hang:300 --print-path)\nHOLD2=$(control-agent-server conversation start --tools none --no-autotitle --prompt QA_F30_HOLD_2 --print-id \\\n  --llm-json \"{\\\"model\\\": \\\"openai/qa-stub\\\", \\\"base_url\\\": \\\"$HANG2/v1\\\", \\\"api_key\\\": \\\"qa-f30-stub\\\", \\\"num_retries\\\": 0}\")\ncontrol-agent-server conversation wait \"$HOLD2\" --until running --timeout 30\ncontrol-agent-server sink read --name qa-f30-hang2 --expect-min 1\nREUSE='{\"model\": \"openhands_deepseek-flash\", \"messages\": [{\"role\": \"user\", \"content\": \"QA_F30_429_REUSE: reply with one short word and use no tools.\"}]}'\ncontrol-agent-server api GET \"<redacted:session-cookie>/$CID/events/search\" --query source=user --query body=QA_F30_SECOND \\\n  --check items len-eq 1 --quiet\ncontrol-agent-server api GET \"<redacted:session-cookie>/$CID/events/search\" --query source=user --query body=QA_F30_429_REUSE \\\n  --check items len-eq 0 --quiet\ncontrol-agent-server api POST /v1/chat/completions --auth bearer --header \"X-OpenHands-ServerConversation-ID: $CID\" --json \"$REUSE\" \\\n  --expect 429 --check-header x-openhands-serverconversation-id missing --expect-max-ms 10000 --save F30.chat-reuse-run-limit-429/first-try\ncontrol-agent-server api POST /v1/chat/completions --auth bearer --header \"X-OpenHands-ServerConversation-ID: $CID\" --json \"$REUSE\" \\\n  --expect 429 --expect-max-ms 10000 --save F30.chat-reuse-run-limit-429/retry\ncontrol-agent-server api GET \"<redacted:session-cookie>/$HOLD2\" --check execution_status eq running --quiet\ncontrol-agent-server api GET \"<redacted:session-cookie>/$CID/events/search\" --query source=user --query body=QA_F30_429_REUSE \\\n  --check items len-eq 0 --save F30.chat-reuse-run-limit-429/user-messages  # bug\n",
  "exit_code": 1,
  "elapsed_ms": 57188,
  "failed_line": 18,
  "failed_command": "control-agent-server api GET \"<redacted:session-cookie>/$CID/events/search\" --query source=user --query body=QA_F30_429_REUSE --check items len-eq 0 --save F30.chat-reuse-run-limit-429/user-messages",
  "stdout": "{\n  \"ok\": true,\n  \"run\": \"/workspace/verification-artifacts/runs/20261013-032720-3de9-map-f30\",\n  \"url\": \"http://127.0.0.1:35973\",\n  \"rotated_key\": false,\n  \"hard\": false,\n  \"rotated_secret_key\": false,\n  \"ready_ms\": 8329,\n  \"ready_path\": \"/ready\"\n}\n{\n  \"id\": \"e2022562-1d17-488a-96cc-b465c54c86f3\",\n  \"ok\": true,\n  \"status\": \"running\",\n  \"transitions\": [\n    \"running\"\n  ],\n  \"waited_ms\": 162\n}\n{\n  \"ok\": true,\n  \"requests\": 1,\n  \"paths\": {\n    \"/v1/chat/completions\": 1\n  },\n  \"last\": [\n    \"{\\\"at\\\": \\\"2026-10-13T03:30:39Z\\\", \\\"method\\\": \\\"POST\\\", \\\"path\\\": \\\"/v1/chat/completions\\\", \\\"call\\\": 0, \\\"step\\\": {\\\"hang\\\": 300.0}, \\\"body\\\": {\\\"messages\\\": [{\\\"content\\\": [{\\\"type\\\": \\\"text\\\", \\\"text\\\": \\\"<SOUL>\\\\nYou are OpenHands agent, a helpful AI assistant that can interact with a computer to solve tasks.\\\\n</SOUL>\\\\n\\\\n<ROLE>\\\\n* Your primary role is to assist users by executing commands, modifying code, and solving techni\\u2026\"\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"<redacted:session-cookie>/285a7caa-aa8f-42df-b11b-76a3d395cbfa/events/search\",\n    \"query\": [\n      [\n        \"source\",\n        \"user\"\n      ],\n      [\n        \"body\",\n        \"QA_F30_SECOND\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"419\",\n      \"content-type\": \"application/json\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 119,\n  \"checks\": [\n    {\n      \"check\": \"items len-eq 1\",\n      \"ok\": true,\n      \"actual\": \"[{\\\"id\\\": \\\"c371ae53-47ad-4b8a-bf44-d0699bcebdd6\\\", \\\"timestamp\\\": \\\"2026-10-13T03:27:38.095771\\\", \\\"source\\\": \\\"user\\\", \\\"parent_id\\\": \\\"1224b2fa-a3f2-42aa-a304-e0f00527e34f\\\", \\\"llm_message\\\": {\\\"role\\\": \\\"user\\\", \\\"conte\\u2026\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"<redacted:session-cookie>/285a7caa-aa8f-42df-b11b-76a3d395cbfa/events/search\",\n    \"query\": [\n      [\n        \"source\",\n        \"user\"\n      ],\n      [\n        \"body\",\n        \"QA_F30_429_REUSE\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"32\",\n      \"content-type\": \"application/json\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 200,\n  \"checks\": [\n    {\n      \"check\": \"items len-eq 0\",\n      \"ok\": true,\n      \"actual\": \"[]\"\n    }\n  ]\n}\n{\n  \"ok\": true,\n  \"status\": 429,\n  \"request\": {\n    \"method\": \"POST\",\n    \"path\": \"/v1/chat/completions\",\n    \"query\": [],\n    \"auth\": \"bearer\",\n    \"body\": {\n      \"model\": \"openhands_deepseek-flash\",\n      \"messages\": [\n        {\n          \"role\": \"user\",\n          \"content\": \"QA_F30_429_REUSE: reply with one short word and use no tools.\"\n        }\n      ]\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 429,\n    \"headers\": {\n      \"content-length\": \"173\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": \"Message saved, but the conversation run limit was reached. Retry POST <redacted:session-cookie>/285a7caa-aa8f-42df-b11b-76a3d395cbfa/run without resending the message.\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 634,\n  \"checks\": [\n    {\n      \"check\": \"header x-openhands-serverconversation-id missing\",\n      \"ok\": true,\n      \"actual\": \"null\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-032720-3de9-map-f30/evidence/F30.chat-reuse-run-limit-429/first-try.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 429,\n  \"request\": {\n    \"method\": \"POST\",\n    \"path\": \"/v1/chat/completions\",\n    \"query\": [],\n    \"auth\": \"bearer\",\n    \"body\": {\n      \"model\": \"openhands_deepseek-flash\",\n      \"messages\": [\n        {\n          \"role\": \"user\",\n          \"content\": \"QA_F30_429_REUSE: reply with one short word and use no tools.\"\n        }\n      ]\n    },\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 429,\n    \"headers\": {\n      \"content-length\": \"173\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"detail\": \"Message saved, but the conversation run limit was reached. Retry POST <redacted:session-cookie>/285a7caa-aa8f-42df-b11b-76a3d395cbfa/run without resending the message.\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 137,\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-032720-3de9-map-f30/evidence/F30.chat-reuse-run-limit-429/retry.json\"\n}\n{\n  \"ok\": true,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"<redacted:session-cookie>/e2022562-1d17-488a-96cc-b465c54c86f3\",\n    \"query\": [],\n    \"auth\": \"header\",\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"5720\",\n      \"content-type\": \"application/json\"\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 231,\n  \"checks\": [\n    {\n      \"check\": \"execution_status eq running\",\n      \"ok\": true,\n      \"actual\": \"running\"\n    }\n  ]\n}\n{\n  \"ok\": false,\n  \"status\": 200,\n  \"request\": {\n    \"method\": \"GET\",\n    \"path\": \"<redacted:session-cookie>/285a7caa-aa8f-42df-b11b-76a3d395cbfa/events/search\",\n    \"query\": [\n      [\n        \"source\",\n        \"user\"\n      ],\n      [\n        \"body\",\n        \"QA_F30_429_REUSE\"\n      ]\n    ],\n    \"auth\": \"header\",\n    \"body\": null,\n    \"files\": []\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"content-length\": \"813\",\n      \"content-type\": \"application/json\"\n    },\n    \"body\": {\n      \"items\": [\n        {\n          \"id\": \"583674dc-e8fc-4dd5-a12e-91c4dd17c0dd\",\n          \"timestamp\": \"2026-10-13T03:30:42.519111\",\n          \"source\": \"user\",\n          \"parent_id\": \"7722eb20-ab6c-42b2-ab3b-61a7b22986de\",\n          \"llm_message\": {\n            \"role\": \"user\",\n            \"content\": [\n              {\n                \"cache_prompt\": false,\n                \"type\": \"text\",\n                \"text\": \"QA_F30_429_REUSE: reply with one short word and use no tools.\"\n              }\n            ],\n            \"thinking_blocks\": []\n          },\n          \"activated_skills\": [],\n          \"extended_content\": [],\n          \"kind\": \"MessageEvent\"\n        },\n        {\n          \"id\": \"f3ee1fa8-9079-4ab1-9a89-edf1ef6166ef\",\n          \"timestamp\": \"2026-10-13T03:30:42.991668\",\n          \"source\": \"user\",\n          \"parent_id\": \"583674dc-e8fc-4dd5-a12e-91c4dd17c0dd\",\n          \"llm_message\": {\n            \"role\": \"user\",\n            \"content\": [\n              {\n                \"cache_prompt\": false,\n                \"type\": \"text\",\n                \"text\": \"QA_F30_429_REUSE: reply with one short word and use no tools.\"\n              }\n            ],\n            \"thinking_blocks\": []\n          },\n          \"activated_skills\": [],\n          \"extended_content\": [],\n          \"kind\": \"MessageEvent\"\n        }\n      ],\n      \"next_page_id\": null\n    },\n    \"truncated\": false\n  },\n  \"elapsed_ms\": 85,\n  \"checks\": [\n    {\n      \"check\": \"items len-eq 0\",\n      \"ok\": false,\n      \"actual\": \"[{\\\"id\\\": \\\"583674dc-e8fc-4dd5-a12e-91c4dd17c0dd\\\", \\\"timestamp\\\": \\\"2026-10-13T03:30:42.519111\\\", \\\"source\\\": \\\"user\\\", \\\"parent_id\\\": \\\"7722eb20-ab6c-42b2-ab3b-61a7b22986de\\\", \\\"llm_message\\\": {\\\"role\\\": \\\"user\\\", \\\"conte\\u2026\"\n    }\n  ],\n  \"saved\": \"/workspace/verification-artifacts/runs/20261013-032720-3de9-map-f30/evidence/F30.chat-reuse-run-limit-429/user-messages.json\",\n  \"hint\": \"failed check: items len-eq 0\"\n}\n",
  "stderr": ""
}
