RunHaiku 4.5repeat 1
Orchestrator-workers on HTTP 301 vs 308
claude-haiku-4-5-20251001__orchestrator-workers__research-http-redirects__r1
Score
0.917
- Cost
- $0.192
- + $0.051 judging
- Latency
- 1m 14s
- setup 0.0s, grading 4.7s
- Turns
- 39
- Tool calls
- 34
- Subagents
- 2
- Tokens in / out
- 350k / 11k
- 284,710 read from cache
Did the design run?
- Run completed: heldharness.run-completedThe environment was built, the architecture returned and grading finished, none of them throwing.
- No API failures: heldharness.apiNo model call failed at the API.
- Every call ended: heldharness.calls-endedEvery call ended with a result, or was stopped by the run's own limits.
- No harness tool denied: heldharness.harness-toolsThe sandbox guard never denied a harness tool, nor a tool the session itself offered.
- Tool servers connected: heldharness.mcp-connectedEvery tool server the harness gave a call was connected when the session started.
- No foreign tool servers: heldharness.mcp-hermeticNo call loaded a tool server the harness did not give it.
- Builtin tools: heldharness.builtin-toolsA check recorded with the run.
- Structured replies arrived: heldharness.structured-outputEvery call that asked for structured output and ran to the end got it.
- No silent fallbacks: heldharness.not-degradedNo phase fell back on a default (an empty plan, a default winner) instead of its output.
- Judge answered: heldharness.judgeAt least one grading call returned a usable verdict.
- The task was decomposed: heldorchestrator-workers.decompositionThe orchestrator’s reply was read through its schema and held at least one subtask.
- The fan-out happened: heldorchestrator-workers.fan-outEvery subtask got a worker, every worker ran, and the recorded subagent count matches.
- The synthesis wrote the answer: heldorchestrator-workers.synthesisThe final answer came from the synthesis call, not from a worker’s report standing in for it.
- Each call was shown the right tools: heldorchestrator-workers.toolsThe orchestrator and the synthesis were shown no tools and every worker the task’s full toolset.
Phases
Drawn from the phase records: timing and cost per call, no tool calls or messages.
| Phase | Duration | Cost | Turns | Tools | Model |
|---|---|---|---|---|---|
| Decompose | 8.1s | $0.0069 | 2 | 0 | claude-haiku-4-5-20251001 |
| Worker 1: research-301 | 49.5s | $0.084 | 16 | 15 | claude-haiku-4-5-20251001 |
| Worker 2: research-308 | 41.7s | $0.085 | 20 | 19 | claude-haiku-4-5-20251001 |
| Synthesize | 16.8s | $0.017 | 1 | 0 | claude-haiku-4-5-20251001 |
The call-by-call replay is not published for this run. Traces are large, so the repository keeps 9 of this run set’s 900 and leaves the rest out; the score, phases and final answer on this page come from the committed run record.
Runs you can replay
- A gate that blocked the right moveGated-execute · Haiku 4.5
- Three proposals beat one agentPropose-select · Haiku 4.5
- A verifier that earned its keepPlan-execute-verify · Sonnet 5.5
- A revision that did not helpPlan-execute-verify · Haiku 4.5
- The control, missing a stepSingle · Haiku 4.5
Record this cell yourself: npm run bench -- run --strategies orchestrator-workers --tasks research-http-redirects --models claude-haiku-4-5-20251001 --repeats 1
Score breakdown
- passStates that 301 is "Moved Permanently" and 308 is "Permanent Redirect", and that both indicate the target resource has been assigned a new permanent URI.1.00weight 0.17
met, backed by verified evidence E1, E2. “Both HTTP 301 (Moved Permanently) and HTTP 308 (Permanent Redirect) indicate that a resource has been permanently relocated to a new URI.”
- passStates that a client following a 308 must not change the request method: a POST is repeated as a POST, with its body.1.00weight 0.25
met, backed by verified evidence E4, E5. “If the original request was POST, the client must resend it as POST with the same body intact.”
- passStates that when following a 301 a user agent MAY change the request method from POST to GET (for historical reasons), which is the behaviour 308 exists to rule out.1.00weight 0.25
met, backed by verified evidence E3, E4. “For historical reasons, user agents may change the request method from POST to GET when following a 301 redirect.”
- passStates that both 301 and 308 responses are heuristically cacheable, i.e. a cache may reuse them by default unless the method definition or explicit cache controls say otherwise.1.00weight 0.17
met, backed by verified evidence E6, E7. “Both status codes are **heuristically cacheable** by default.”
- partialStates that both codes are currently specified in RFC 9110 (HTTP Semantics), and that 308 was originally defined in RFC 7538, which RFC 9110 obsoletes.0.50weight 0.17
partial, backed by verified evidence E8, E10. “RFC 9110 (HTTP Semantics), Section 15.4.9 (current standard)”
Penalties
No penalties were applied.
Scorer metadata
- corpus
- {"version":2,"snapshot":"2026-10-01","hash":"25fbed79c4f7f9e1b850436e0e4872f8e25dd80142f3177231c456f21817b817","documents":8}
- opened documents
- ["rfc9110","rfc7538","mdn-status-301","mdn-status-308","rfc7231","rfc9111","mdn-redirections"]
- opened by role
- {"primary":["rfc9110"],"superseded":["rfc7538","rfc7231"],"secondary":["mdn-status-301","mdn-status-308","rfc9111","mdn-redirections"]}
- displayed share
- {"rfc7538":1,"mdn-status-308":1,"rfc9110":0.052,"mdn-status-301":1,"rfc7231":0.0447,"mdn-redirections":0.6857,"rfc9111":0.213,"mdn-status-307":0.1538}
- cited count
- 3
- verified count
- 3
- hallucinated count
- 0
- citation integrity
- 1
- hallucinated urls
- []
- evidence block
- true
- evidence block repaired
- false
- evidence count
- 10
- verified quote count
- 9
- verified quote rate
- 0.9 (90%)
- evidence
- [{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"301 status code indicates that the target resource has been assigned a new permanent URI","quote":"The 301 (Moved Permanently) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc7538.html","claim":"308 status code indicates that the target resource has been assigned a new permanent URI","quote":"The 308 (Permanent Redirect) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.","verified":true,"document":"rfc7538"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"User agents may change the request method from POST to GET for a 301 redirect for historical reasons","quote":"For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request.","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc7538.html","claim":"308 does not allow changing the request method from POST to GET","quote":"This status code is similar to 301 (Moved Permanently) ([RFC7231], Section 6.4.2), except that it does not allow changing the request method from POST to GET.","verified":true,"document":"rfc7538"},{"url":"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/308","claim":"Request method and body will not be modified by the client in a 308 redirected request","quote":"The request method and the body will not be modified by the client in the redirected request.","verified":true,"document":"mdn-status-308"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"A 301 response is heuristically cacheable","quote":"A 301 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"A 308 response is heuristically cacheable","quote":"A 308 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"301 is specified in RFC 9110 Section 15.4.2","quote":"15.4.2. 301 Moved Permanently","verified":true,"document":"rfc9110"},{"url":"https://www.rfc-editor.org/rfc/rfc7538.html","claim":"308 is specified in RFC 7538","quote":"Internet Engineering Task Force (IETF) Request for Comments: 7538 ... The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) ... This document specifies the additional Hypertext Transfer Protocol (HTTP) status code 308 (Permanent Redirect).","verified":false,"document":"rfc7538","failure":"the quote does not occur in the page"},{"url":"https://www.rfc-editor.org/rfc/rfc9110.html","claim":"308 is specified in RFC 9110 Section 15.4.9","quote":"15.4.9. 308 Permanent Redirect","verified":true,"document":"rfc9110"}]
- judge unverified quotes
- 0
- judge verdicts
- [{"names":{"status":"met","support":["E1","E2"]},"method-preserved-308":{"status":"met","support":["E4","E5"]},"method-change-301":{"status":"met","support":["E3","E4"]},"cacheable":{"status":"met","support":["E6","E7"]},"specifications":{"status":"partial","support":["E8","E9","E10"]}},{"names":{"status":"met","support":["E1","E2"]},"method-preserved-308":{"status":"met","support":["E4","E5"]},"method-change-301":{"status":"met","support":["E3","E4"]},"cacheable":{"status":"met","support":["E6","E7"]},"specifications":{"status":"partial","support":["E8","E9","E10"]}},{"names":{"status":"met","support":["E1","E2"]},"method-preserved-308":{"status":"met","support":["E4","E5"]},"method-change-301":{"status":"met","support":["E3","E4"]},"cacheable":{"status":"met","support":["E6","E7"]},"specifications":{"status":"partial","support":["E8","E9","E10"]}}]
- judge failures
- 0
- grounded weight share
- 1
Final answer
HTTP Status Codes 301 vs 308: Complete Comparison
What Each Status Code Means
Both HTTP 301 (Moved Permanently) and HTTP 308 (Permanent Redirect) indicate that a resource has been permanently relocated to a new URI. They signal to clients that future requests should use the new location provided in the Location header.
Request Method and Body Handling: The Critical Difference
The most important distinction between these two codes lies in how they handle the original request method and body:
301 Moved Permanently: For historical reasons, user agents may change the request method from POST to GET when following a 301 redirect. This means if you send a POST request that receives a 301 response, the client may resend the request as GET to the new location, and the request body would not be included.
308 Permanent Redirect: This status code was created specifically to address the limitations of 301. When a client receives a 308 response, it must NOT change the request method. If the original request was POST, the client must resend it as POST with the same body intact. This preserves the semantics of the original request.
Cacheability
Both status codes are heuristically cacheable by default. This means they can be cached without explicit freshness information, unless the method definition or explicit cache controls indicate otherwise. Both codes allow a cache to store and reuse the response, though cache behavior remains subject to other cache control directives.
Current Specifications
301 Moved Permanently is specified in:
- RFC 9110 (HTTP Semantics), Section 15.4.2 (current standard)
- RFC 7231 (HTTP/1.1 Semantics and Content), Section 6.4.2 (prior standard)
308 Permanent Redirect is specified in:
- RFC 7538 (The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)), which was published in April 2015 to fill a gap in redirect handling
- RFC 9110 (HTTP Semantics), Section 15.4.9 (current standard)
Summary
In practical terms: use 308 when you want to preserve the HTTP method and request body for permanent redirects (especially for POST requests), while 301 is the traditional permanent redirect that may change POST to GET. For modern applications that need method preservation, 308 is the better choice.
{
"evidence": [
{
"claim": "301 status code indicates that the target resource has been assigned a new permanent URI",
"quote": "The 301 (Moved Permanently) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.",
"url": "https://www.rfc-editor.org/rfc/rfc9110.html"
},
{
"claim": "308 status code indicates that the target resource has been assigned a new permanent URI",
"quote": "The 308 (Permanent Redirect) status code indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.",
"url": "https://www.rfc-editor.org/rfc/rfc7538.html"
},
{
"claim": "User agents may change the request method from POST to GET for a 301 redirect for historical reasons",
"quote": "For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request.",
"url": "https://www.rfc-editor.org/rfc/rfc9110.html"
},
{
"claim": "308 does not allow changing the request method from POST to GET",
"quote": "This status code is similar to 301 (Moved Permanently) ([RFC7231], Section 6.4.2), except that it does not allow changing the request method from POST to GET.",
"url": "https://www.rfc-editor.org/rfc/rfc7538.html"
},
{
"claim": "Request method and body will not be modified by the client in a 308 redirected request",
"quote": "The request method and the body will not be modified by the client in the redirected request.",
"url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/308"
},
{
"claim": "A 301 response is heuristically cacheable",
"quote": "A 301 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).",
"url": "https://www.rfc-editor.org/rfc/rfc9110.html"
},
{
"claim": "A 308 response is heuristically cacheable",
"quote": "A 308 response is heuristically cacheable; i.e., unless otherwise indicated by the method definition or explicit cache controls (see Section 4.2.2 of [CACHING]).",
"url": "https://www.rfc-editor.org/rfc/rfc9110.html"
},
{
"claim": "301 is specified in RFC 9110 Section 15.4.2",
"quote": "15.4.2. 301 Moved Permanently",
"url": "https://www.rfc-editor.org/rfc/rfc9110.html"
},
{
"claim": "308 is specified in RFC 7538",
"quote": "Internet Engineering Task Force (IETF) Request for Comments: 7538 ... The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) ... This document specifies the additional Hypertext Transfer Protocol (HTTP) status code 308 (Permanent Redirect).",
"url": "https://www.rfc-editor.org/rfc/rfc7538.html"
},
{
"claim": "308 is specified in RFC 9110 Section 15.4.9",
"quote": "15.4.9. 308 Permanent Redirect",
"url": "https://www.rfc-editor.org/rfc/rfc9110.html"
}
]
}Provenance of the numbers on this page
- run set
- scaffold-or-scale-v1
- models
- Haiku 4.5, Sonnet 5.5, Opus 5.5
- effort
- high
- repeats
- 2
- fixtures
- replay
- runs
- 900 / 900
- strategy cost
- $354.44
- judge cost
- $9.19
- wall clock
- 9h 48m
- git
- fce5807b2d
Cost excludes judge calls, which are tracked separately so a scoring model never flatters or penalises an architecture. Every figure on this site is read from results/ at build time.