# Claude and Codex web portal benchmark: methodology and limits Scoring date: August 10, 2026. This appendix supports two Maestro Brief articles: - *Fable vs Opus vs Sonnet: Which Claude Model Built the Best Web Portal?* - *Claude vs Codex on the Same Web Portal: Passing Tests Was Not the Whole Story* ## Assignment Each agent received the same specification for a small Django customer-request portal. The requested behavior included login, per-user visibility, staff assignment and status changes, search, filters, sorting, pagination, activity history, 100 repeatable seed records, and a usable 390-pixel layout. The frozen specification and acceptance suite were created before the Claude ZIP files were independently scored. The agents did not receive the frozen 23-test suite while building. ## Runs We evaluated two runs each from Claude Fable 5, Claude Opus 5, Claude Sonnet 5, Codex Sol, Codex Terra, and Codex Luna. The six Claude builds ran concurrently on one machine. The Claude ZIP files were then scored sequentially under Python 3.12 and Django 5.2.12. The six Codex builds had previously run serially. Their original method and receipts remain available in the Codex benchmark appendix. ## Scoring Objective acceptance results come from the same frozen 23-test suite for all 12 repositories. Manual quality review used a rubric frozen before detailed Claude code inspection. It covered: - Functional correctness - Security and authorization - Maintainability and Django conventions - Test quality - Mobile usability - Deployment cleanliness Cost, elapsed time, and token use did not change the quality score. ## Important limits - Claude's builds ran concurrently. Their reported elapsed time is directional, not a controlled latency ranking. - Codex ran serially. Claude and Codex elapsed time must not be compared as if the harnesses matched. - Claude reported aggregate agent tokens for five clean runs. Codex reported fresh input, cached input, and output. Those totals are not equivalent. - Fable run 1 does not have a clean per-run token receipt because its parent session included setup and orchestration work. - We do not calculate an API-equivalent Claude cost from the aggregate token totals. - Manual handoff scores are disclosed judgment, not a mechanical benchmark. - This was one greenfield Django task. It did not test a legacy codebase, difficult migration, deep frontend, production database, or formal security review. ## Raw-result note Opus run 1 scored 22/23 in the frozen suite because its own repository-hygiene test contains the literal word `TODO` while searching for unfinished markers. The portal behavior passed. The published raw score remains 22/23. The Sonnet misses were product behavior. Sonnet run 1 lost assignment and status activity entries. Sonnet run 2 omitted the administrator from seeded request ownership. The Codex delivery-hygiene observation is distinct from authorization. Every scored Codex repository shipped a seeded SQLite database and development settings, but all 12 builds enforced the tested ownership and staff boundaries on the server. ## Reproducibility links - [Frozen specification](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/specification.md) - [Frozen acceptance suite](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/acceptance-tests.py) - [Original Codex methodology](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/methodology.md) - [Original Codex result data](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/results.json)