Claude Opus 5.5 (effort default (no --effort flag) · thinking on) on Fix 14 WCAG issues in a static HTML page without losing content
AClaude Opus 5.5default · thinking on · Claude Code 2.1.299 (headless -p) · cloud · 2026-10-16 · by @bobsiopener
- Estimated cost
- $0.25
- Wall time
- 1m
- Human step-ins
- 0
- Outcome
- Pass
Compare with other models on this task →
Summary
Exact prompt (this run)
# Task: fix accessibility issues in a static page `index.html` is a public library events page that fails a WCAG 2.2 AA review. Fix it in place (HTML only; you may adjust the inline CSS). Keep all existing visible text content, all links (same hrefs) and the form fields (same `name`s), and keep the page working without JavaScript where possible. Address at least: document language, landmarks (header/nav/main), skip link, image alternatives (informative vs decorative: the divider is decorative, the logo and storytime photo are not), heading hierarchy, ambiguous link text, data table semantics, form labels and grouping, the fake button, iframe title, positive tabindex, focusable content hidden from assistive tech, and the low-contrast `.muted` text (#999 on white). Write `A11Y_NOTES.md` listing each fix (one line each). No network.
Static checks: lang, landmarks, skip link, decorative vs informative alt, heading order, link text, th/scope, labels, real button, iframe title, tabindex, aria-hidden focusables, contrast ≥4.5:1, content preserved. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).
Success criteria: 1. html has lang starting with 'en'. 2. header, nav and main elements present. 3. First link is a skip link pointing to an existing id. 4. Logo and storytime images have alt text longer than 3 characters; the divider image has alt="". 5. Exactly one h1, first heading is h1, no heading level skips. 6. No link text 'click here'/'here'/'read more'/'more'. 7. At least 3 th cells with scope (or a thead). 8. Every input/select has a label (for/id, wrapping label, aria-label or aria-labelledby). 9. No onclick on non-button elements, and a real submit button exists. 10. Every iframe has a non-empty title. 11. No positive tabindex. 12. No focusable element inside aria-hidden="true". 13. .muted text colour has contrast >= 4.5:1 on white. 14. Original key text, all original hrefs, the form action and the 4 field names are preserved. 15. A11Y_NOTES.md has at least 10 list lines. (A table caption is reported but not required.)
Setup notes: Use Case Scout batch 4 case d06-a11y-static-html (offline fixture). Prepared with batch4/prepare.sh; hidden key/tests kept outside the agent's work dir. Prompt = TASK.md verbatim. Scored with the scout's scorer: `python score.py WORKDIR`. Tools: Read/Write/Edit/Glob/Grep/Bash, web disabled. Single run, no retries. Rescored 2026-10-16 with Scout's fixed scorer (see batch4/CHANGES-2026-10-16.md). The original score was 16/17 checks (fail), and the model's output is unchanged. Claude Code's own reported cost for claude-opus-5.5: $0.24757. Score: 17/17 checks. Cost is an ESTIMATE: measured tokens x pricing.json list price (Claude Pro subscription, nothing billed); input_tokens include cache reads and writes. Single run.
Estimated cost List-price estimate; not actually billed.
Metrics
- Estimated cost
- $0.25
- Wall time
- 1m
- Human step-ins
- 0
- Turns
- 7
| Model | Input tok | Output tok | Cost |
|---|---|---|---|
| AClaude Opus 5.5anthropic/claude-opus-5.5effort default (no --effort flag) · thinking on | 152,635 | 5,595 | $0.25 |
Reproduce this run
- Use the exact prompt shown above for this run (the use case page has the shared prompt).
- Same setup: Claude Opus 5.5 (anthropic/claude-opus-5.5, effort default (no --effort flag) · thinking on) via
Claude Code 2.1.299 (headless -p), cloud. - It counts as a success only if it meets every success criterion: 1. html has lang starting with 'en'. 2. header, nav and main elements present. 3. First link is a skip link pointing to an existing id. 4. Logo and storytime images have alt text longer than 3 characters; the divider image has alt="". 5. Exactly one h1, first heading is h1, no heading level skips. 6. No link text 'click here'/'here'/'read more'/'more'. 7. At least 3 th cells with scope (or a thead). 8. Every input/select has a label (for/id, wrapping label, aria-label or aria-labelledby). 9. No onclick on non-button elements, and a real submit button exists. 10. Every iframe has a non-empty title. 11. No positive tabindex. 12. No focusable element inside aria-hidden="true". 13. .muted text colour has contrast >= 4.5:1 on white. 14. Original key text, all original hrefs, the form action and the 4 field names are preserved. 15. A11Y_NOTES.md has at least 10 list lines. (A table caption is reported but not required.)
- Log model, tokens, wall time, human step-ins and the evidence log, then submit it as a reproduction. A different model? Submit a head-to-head rerun.
How runs are scored: Methodology.
Was this useful?
Automated checks
Trust 80% comes from these checks (how Trust % works).
- Run date is not in the future : passed
- Model is in the dated pricing table : passed
- Cost recomputed from tokens matches : passed
- Cached tokens are consistent : passed
- Output throughput is plausible : passed
- Autonomy matches step-ins : passed
- Step-ins do not exceed turns : passed
- Retries agree with first-try result : passed
- Evidence log SHA-256 matches : passed
- Evidence log is substantial : passed
Evidence log
[
{
"duration_api_ms": 59653,
"stop_reason": "end_turn",
"session_id": "[REDACTED]",
"total_cost_usd": 0.2475696,
"usage": {
"input_tokens": 14,
"cache_creation_input_tokens": 13473,
"cache_read_input_tokens": 139148,
"output_tokens": 5595,
"output_tokens_details": {
"thinking_tokens": 982
},
"server_tool_use": {
"web_search_requests": 0,
"web_fetch_requests": 0
},
"service_tier": "standard",
"cache_creation": {
"ephemeral_1h_input_tokens": 13473,
"ephemeral_5m_input_tokens": 0
},
"inference_geo": "global",
"iterations": [
{
"input_tokens": 2,
"output_tokens": 714,
"cache_read_input_tokens": 25198,
"cache_creation_input_tokens": 421,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 421
},
"type": "message"
}
],
"speed": "standard",
"fallback_credit": null
},
"modelUsage": {
"claude-opus-5-5": {
"inputTokens": 14,
"outputTokens": 5595,
"cacheReadInputTokens": 139148,
"cacheCreationInputTokens": 13473,
"webSearchRequests": 0,
"costUSD": 0.2475696,
"contextWindow": 1000000,
"maxOutputTokens": 128000,
"thinkingTokens": 982,
"canonicalModel": "claude-opus-5-5",
"provider": "firstParty",
"costBasis": "list"
}
},
"permission_denials": [],
"terminal_reason": "completed",
"fast_mode_state": "off",
"fast_mode_disabled_reason": "sdk_opt_in_required",
"subagent_stats": {
"spawned": 0,
"requested": {
"background": 0,
"foreground": 0,
"unset": 0
},
"started_in_background": 0,
"max_depth": 0,
"spawned_by_subagents": 0,
"completed": 0,
"failed": 0,
"killed": {
"parent": 0,
"user": 0,
"system": 0
},
"refused": {
"depth_limit": 0,
"concurrency_limit": 0,
"budget": 0
},
"by_type": {}
},
"safety_stops": 0,
"is_error": false,
"num_turns": 7,
"subtype": "success",
"api_error_status": null,
"result": "I've fixed `index.html` in place and listed each fix, one per line, in `A11Y_NOTES.md`. A script check showed the tags nest correctly and all original hrefs and field `name`s are still there. I haven't tested it with a browser or screen reader.\n\n- **Language and structure:** added `lang=\"en\"`. The page now has `<header>`, `<nav>`, `<main>` and `<footer>` landmarks, plus a \"Skip to main content\" link that only appears when it gets keyboard focus.\n- **Images:** the logo and storytime photo have alt text. The storytime alt text is my guess at what the photo shows, so check it against the real image. The divider has `alt=\"\"` so screen readers skip it.\n- **Headings:** the two `h3` headings are now `h2`, so no level is skipped.\n- **\"Click here\" links:** they look the same, but each has hidden text for screen readers that says where it goes.\n- **Table:** it now has header cells for columns and rows and a hidden caption.\n- **Form:** every field has a label (the event dropdown's is hidden), and the fields are grouped into two sets with hidden titles. The fake `div` button is now a real submit button, so the form works with the keyboard and without JavaScript.\n- **Map:** the iframe has a title.\n- **Last two links:**\n - **Accessibility statement:** I removed `tabindex=\"3\"` so keyboard focus follows the page order.\n - **Old site:** I removed the `aria-hidden` that hid it from screen readers.\n- **Contrast:** `.muted` went from #999 (2.8:1) to #595959 (7.0:1). The green button also failed at 3.0:1, so I darkened it to #1a7f4b (5.0:1).\n\nBeyond what you listed, I added a visible focus outline, `autocomplete` on name and email, and a viewport meta tag. I also marked Events as the current page in the nav and hid the `|` separators from screen readers; they still show on screen.\n\nAll the visible text is unchanged. The new text (captions, legends and link descriptions) is visually hidden, except the skip link, which shows when it gets keyboard focus.",
"ttft_ms": 2910,
"type": "result",
"duration_ms": 60141,
"uuid": "[REDACTED]",
"ttft_stream_ms": 1517,
"time_to_request_ms": 213,
"first_content_frame_ms": 1517,
"queued_turn_count": 0,
"result_index": 0
}
]