{"generated_at":"2026-06-11","summary":{"tests":6,"runs":10,"stages":30,"contributors":1,"models":4,"stacks":4},"leaderboard":[{"agent":"claude-code","provider":"anthropic","model":"claude-fable-5","model_id":"claude-fable-5","run_count":1,"stage_count":1,"test_count":1,"avg_rating_score":1.0,"success_rate":1.0,"avg_cost_per_stage":42.35,"avg_duration_sec":4305.0,"rating_per_dollar":0.023612750885478158},{"agent":"claude-code","provider":"anthropic","model":"claude-sonnet-4.6","model_id":"claude-sonnet-4.6","run_count":1,"stage_count":4,"test_count":1,"avg_rating_score":0.9375,"success_rate":1.0,"avg_cost_per_stage":2.3375,"avg_duration_sec":975.5,"rating_per_dollar":0.40106951871657753},{"agent":"claude-code","provider":"anthropic","model":"claude-opus-4.7","model_id":"claude-opus-4.7","run_count":7,"stage_count":24,"test_count":6,"avg_rating_score":0.8083333333333332,"success_rate":0.8333333333333334,"avg_cost_per_stage":4.384854166666667,"avg_duration_sec":749.375,"rating_per_dollar":0.18434668579817837},{"agent":"claude-code","provider":"anthropic","model":"claude-opus-4.8","model_id":"claude-opus-4.8","run_count":1,"stage_count":1,"test_count":1,"avg_rating_score":0.75,"success_rate":1.0,"avg_cost_per_stage":66.03,"avg_duration_sec":4458.0,"rating_per_dollar":0.011358473421172193}],"scatter":[{"x":4.384854166666667,"y":0.8083333333333332,"label":"claude-opus-4.7","model":"claude-opus-4.7","display_name":"Claude Opus 4.7","logo":"/logos/models/claude.svg","providers":["anthropic"],"agents":["claude-code"],"run_count":7,"stage_count":24,"test_count":6,"total_cost_usd":105.2365},{"x":2.3375,"y":0.9375,"label":"claude-sonnet-4.6","model":"claude-sonnet-4.6","display_name":"Claude Sonnet 4.6","logo":"/logos/models/claude.svg","providers":["anthropic"],"agents":["claude-code"],"run_count":1,"stage_count":4,"test_count":1,"total_cost_usd":9.35},{"x":42.35,"y":1.0,"label":"claude-fable-5","model":"claude-fable-5","display_name":"Claude Fable 5","logo":"/logos/models/claude.svg","providers":["anthropic"],"agents":["claude-code"],"run_count":1,"stage_count":1,"test_count":1,"total_cost_usd":42.35},{"x":66.03,"y":0.75,"label":"claude-opus-4.8","model":"claude-opus-4.8","display_name":"Claude Opus 4.8","logo":"/logos/models/claude.svg","providers":["anthropic"],"agents":["claude-code"],"run_count":1,"stage_count":1,"test_count":1,"total_cost_usd":66.03}],"theme_stats":[{"theme":"bootstrap","total":10,"counts":{"excellent":7,"good":2,"partial":1,"failed":0}},{"theme":"features","total":9,"counts":{"excellent":5,"good":2,"partial":0,"failed":2}},{"theme":"refinements","total":2,"counts":{"excellent":0,"good":2,"partial":0,"failed":0}},{"theme":"refactor","total":2,"counts":{"excellent":2,"good":0,"partial":0,"failed":0}},{"theme":"extension","total":4,"counts":{"excellent":4,"good":0,"partial":0,"failed":0}},{"theme":"security","total":1,"counts":{"excellent":1,"good":0,"partial":0,"failed":0}},{"theme":"infrastructure","total":2,"counts":{"excellent":1,"good":0,"partial":0,"failed":1}}],"activity":[{"date":"2026-05-16","count":1},{"date":"2026-05-18","count":1},{"date":"2026-05-21","count":2},{"date":"2026-05-22","count":2},{"date":"2026-05-23","count":1},{"date":"2026-05-24","count":1},{"date":"2026-05-28","count":1},{"date":"2026-06-11","count":1}],"hardware":{"headline":{"devices":0,"vram_gb":0,"ram_gb":0,"contributors":0,"runs":0,"stages":0},"combos":[],"by_device":[],"by_gpu":[],"contributors":[]},"all_runs":[{"run_id":"tin-cat-claude-code-claude-fable-5-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"Max","provider":"anthropic","framework":null,"model":"claude-fable-5","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-06-11","stages_run":1,"stages_total":1,"avg_rating_score":1.0,"total_cost_usd":42.35,"total_duration_sec":4305,"stages":[{"id":"stage-1-simulation","rating":"excellent","duration_sec":4305,"tokens_in":21900,"tokens_out":245900,"cost_usd":42.35,"notes":"Much better simulation accuracy and UI than previous claude models, takes into account more parameters like seafloor consistency. Overall sinking sequence mimics correctly historic events except final position of fragments in the seabed, hull break takes place underwater.","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-fable-5-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.8-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.8","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-28","stages_run":1,"stages_total":1,"avg_rating_score":0.75,"total_cost_usd":66.03,"total_duration_sec":4458,"stages":[{"id":"stage-1-simulation","rating":"good","duration_sec":4458,"tokens_in":24600,"tokens_out":251400,"cost_usd":66.03,"notes":"Auto time multiplier fails to slow down when the crack happens. Otherwise, vast improvement from Opus 4.7, with a reasonably accurate sinking sequence that clearly attains all the main sinking events. The funnels do not collapse until the end.","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-opus-4.8-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-24","stages_run":1,"stages_total":1,"avg_rating_score":0.4,"total_cost_usd":33.17,"total_duration_sec":4644,"stages":[{"id":"stage-1-simulation","rating":"partial","duration_sec":4644,"tokens_in":800,"tokens_out":315100,"cost_usd":33.17,"notes":"Events run too slow real sinking took 5 minutes from surface to bottom, it takes many hours in the simulation,\nand many parts even stay at sea level after many simulated hours. Funnels stay afloat indefinitely. Sea depth\nis wrongly displayed and auto framing to center the ship on view does not work, both due to not taking into\naccount high DPI displays. Otherwise, overall breaking conditions look approximate enough and events approximate\ndecently the real incident: The bow starts to sink first, tilting the whole ship as compartments flood gradually.\nAt a certain point, the ship breaks in two major pieces and other pieces follow.\n","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-23","stages_run":3,"stages_total":6,"avg_rating_score":0.25,"total_cost_usd":28.36,"total_duration_sec":3510,"stages":[{"id":"stage-1-domain-skeleton","rating":"good","duration_sec":1099,"tokens_in":653,"tokens_out":78700,"cost_usd":7.89,"notes":"Decided to make Events own Venues, which is arguably a bad data design choice which does not allow the same Venue to hold multiple Events. Commands carry arrays instead of DTOs. Very minor mistakes in comments.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-domain-skeleton"},{"id":"stage-2-docker-dev-env","rating":"failed","duration_sec":630,"tokens_in":191,"tokens_out":40900,"cost_usd":4.59,"notes":"Created a makefile-based development environment setup. A Dockerfile build fails because some files referenced are not available because they're included in .dockerignore. Functional tests fail.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-docker-dev-env"},{"id":"stage-3-holds-and-orders","rating":"failed","duration_sec":1781,"tokens_in":211,"tokens_out":102000,"cost_usd":15.88,"notes":"Functional tests fail.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-3-holds-and-orders"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-22","stages_run":2,"stages_total":5,"avg_rating_score":0.5,"total_cost_usd":2.46,"total_duration_sec":440,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":123,"tokens_in":2700,"tokens_out":373100,"cost_usd":0.58,"notes":null,"source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-first-run"},{"id":"stage-2-rooms","rating":"failed","duration_sec":317,"tokens_in":3500,"tokens_out":26700,"cost_usd":1.88,"notes":"Node crashes when another user joins the room. Seems to be due to using an experimental SQLite version due to node version. The tests he did passed.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-rooms"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high-2","test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-22","stages_run":5,"stages_total":5,"avg_rating_score":1.0,"total_cost_usd":9.93,"total_duration_sec":2121,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":123,"tokens_in":2700,"tokens_out":373100,"cost_usd":0.58,"notes":null,"source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-1-first-run"},{"id":"stage-2-rooms","rating":"excellent","duration_sec":326,"tokens_in":2500,"tokens_out":28200,"cost_usd":1.51,"notes":"Some UX problems like not being able to go back to the lobby, reloading the page asks for a username again, or rooms without users disappear immediately. But that's ok because none of that was on the prompt, and it could not be inferred.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-2-rooms"},{"id":"stage-3-private-messages","rating":"excellent","duration_sec":373,"tokens_in":2100,"tokens_out":30200,"cost_usd":1.63,"notes":"Private messages are not secure. UX is confusing for starting new PMs. Both issues mentioned by Claude, but since this was not mentioned in the prompt, requirements are considered met.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-3-private-messages"},{"id":"stage-4-security","rating":"excellent","duration_sec":397,"tokens_in":6600,"tokens_out":29600,"cost_usd":2.11,"notes":"Claude comments about this still being insecure for other reasons, like no real user tracking. Since those were not part of the prompt, all objetives in the prompt are considered met.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-4-security"},{"id":"stage-5-deploy-aws","rating":"excellent","duration_sec":902,"tokens_in":3300,"tokens_out":61700,"cost_usd":4.1,"notes":"Wrapped it all in docker and used Amazon CDK. Created a deploy.sh to handle deployment.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-5-deploy-aws"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","test_name":"old-school-demo","test_title":"Old-school demo","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-21","stages_run":5,"stages_total":5,"avg_rating_score":0.9,"total_cost_usd":15.01,"total_duration_sec":4228,"stages":[{"id":"stage-1-bootstrap","rating":"excellent","duration_sec":733,"tokens_in":2500,"tokens_out":61100,"cost_usd":2.75,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-1-bootstrap"},{"id":"stage-2-tunnel-and-fire","rating":"good","duration_sec":930,"tokens_in":2500,"tokens_out":49400,"cost_usd":3.1,"notes":"Fire effect runs too fast.","source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-2-tunnel-and-fire"},{"id":"stage-3-rotozoom-and-artwork","rating":"excellent","duration_sec":715,"tokens_in":3400,"tokens_out":33500,"cost_usd":2.26,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-3-rotozoom-and-artwork"},{"id":"stage-4-3d-parts","rating":"excellent","duration_sec":1155,"tokens_in":3100,"tokens_out":43400,"cost_usd":3.2,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-4-3d-parts"},{"id":"stage-5-credits-scroller","rating":"good","duration_sec":695,"tokens_in":2500,"tokens_out":48300,"cost_usd":3.7,"notes":"Demo does not completely end, it stays in a final flash loop.","source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-5-credits-scroller"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"snake-game","test_title":"Snake game","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-21","stages_run":4,"stages_total":4,"avg_rating_score":1.0,"total_cost_usd":5.1165,"total_duration_sec":1190,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":75,"tokens_in":2100,"tokens_out":6400,"cost_usd":0.3465,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-first-run"},{"id":"stage-2-features","rating":"excellent","duration_sec":279,"tokens_in":2000,"tokens_out":25000,"cost_usd":1.32,"notes":"Tested the game by installing Playwright and running it in a headless Chrome.","source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-features"},{"id":"stage-3-mobile","rating":"excellent","duration_sec":132,"tokens_in":2200,"tokens_out":11300,"cost_usd":0.65,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-3-mobile"},{"id":"stage-4-graphics-refactor","rating":"excellent","duration_sec":704,"tokens_in":2500,"tokens_out":56100,"cost_usd":2.8,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-4-graphics-refactor"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","test_name":"live-message-wall","test_title":"Live message wall","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-18","stages_run":4,"stages_total":4,"avg_rating_score":0.9375,"total_cost_usd":11.19,"total_duration_sec":1852,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":176,"tokens_in":530,"tokens_out":13500,"cost_usd":0.73,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-1-first-run"},{"id":"stage-2-advanced-features","rating":"excellent","duration_sec":328,"tokens_in":568,"tokens_out":21800,"cost_usd":1.88,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-2-advanced-features"},{"id":"stage-3-refinements","rating":"good","duration_sec":778,"tokens_in":574,"tokens_out":62200,"cost_usd":4.63,"notes":"Struggled for some minutes around an error involving regex, unicode characters and broken null bytes.","source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-3-refinements"},{"id":"stage-4-complex-refinements","rating":"excellent","duration_sec":570,"tokens_in":579,"tokens_out":41700,"cost_usd":3.95,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-4-complex-refinements"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-sonnet-4.6-high-effort","test_name":"live-message-wall","test_title":"Live message wall","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-sonnet-4.6","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-16","stages_run":4,"stages_total":4,"avg_rating_score":0.9375,"total_cost_usd":9.35,"total_duration_sec":3902,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":447,"tokens_in":null,"tokens_out":26300,"cost_usd":0.63,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-1-first-run"},{"id":"stage-2-advanced-features","rating":"excellent","duration_sec":482,"tokens_in":null,"tokens_out":26700,"cost_usd":0.7,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-2-advanced-features"},{"id":"stage-3-refinements","rating":"good","duration_sec":2285,"tokens_in":null,"tokens_out":147900,"cost_usd":6.58,"notes":"Some additional prompting to fix minor UI bugs was needed.","source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-3-refinements"},{"id":"stage-4-complex-refinements","rating":"excellent","duration_sec":688,"tokens_in":null,"tokens_out":40100,"cost_usd":1.44,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-4-complex-refinements"}],"hardware":null,"settings":{"effort":"high"}}],"tests":[{"name":"advanced-event-ticketing-api","title":"Advanced event ticketing API","description":"A backend-only event ticketing platform (\"Frontstage\") built with PHP and\nSymfony using Domain-Driven Design and a message-consumer architecture. The\ncatalog of events and seating lives in PostgreSQL; time-limited seat holds and\nfast availability read models live in Redis; order fulfillment (payment,\nticket issuance, notifications) runs asynchronously across bounded contexts\nover RabbitMQ (AMQP) using a transactional outbox and idempotent consumers.\nThe test exercises hexagonal architecture, CQRS, a Dockerised dev environment,\nand correctness under concurrency (no overselling).\n\nThis is a deliberately technically-prompted test: the prompts come from a\nknowledgeable author who tells the agent what to build but also pins down a\nprecise architecture and technology definition, rather than leaving those\nchoices to the agent. It measures how well a stack executes against an\nopinionated, expert specification.","domain":"backend","stack":"php-symfony","stack_name":"PHP + Symfony","contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","stages_total":6,"test_stages":[{"id":"stage-1-domain-skeleton","theme":"bootstrap","prompt":"Build the backend for an event ticketing platform called \"Frontstage\". It is API-only: a JSON/REST HTTP API with no user interface. Use PHP and Symfony.\n\nArchitecture, applied from the start because the project will grow:\n\n- Hexagonal architecture (ports and adapters). The domain layer must contain no framework or infrastructure code: no Doctrine annotations, no Symfony classes, no HTTP. The domain depends only on its own interfaces (ports). Infrastructure adapters (Doctrine, HTTP controllers, etc.) live in an outer layer and implement those ports. Symfony's container wires adapters to ports.\n- Domain-Driven Design tactical patterns: aggregates, entities, value objects, and repository interfaces defined in the domain. Money, dates, and identifiers are value objects, never primitives.\n- Bounded contexts are organised as separate top-level modules, each with its own domain / application / infrastructure folders. This stage introduces the first context: Catalog.\n- CQRS: commands and queries travel on separate buses (use Symfony Messenger with a synchronous transport for now). Commands mutate state and return nothing meaningful; queries never mutate.\n\nCatalog context for this stage:\n\n- An Organizer creates an Event (title, description, starts-at datetime in UTC, and a Venue). A Venue has a seating definition: named sections, each with rows and numbered seats, OR a general-admission capacity. Every seat belongs to a price tier with a price.\n- An Event is created as a draft and can later be published. Only published events are browsable by customers.\n\nPersistence: PostgreSQL via Doctrine, with generated migrations. Doctrine entities/mappings are infrastructure adapters, kept out of the domain.\n\nEndpoints for this stage: create an event with its seating and price tiers; publish an event; fetch a single event with its seating map and per-seat availability; list published events.\n\nSet up an automated test suite from the start, since the codebase will grow. Use PHPUnit. The hexagonal layering makes this natural: write fast unit tests for the domain (value objects rejecting invalid states, aggregate behaviour) with no infrastructure, and functional tests that drive the HTTP API end to end (create an event, publish it, read back its seating and availability). Provide a single command to run the whole suite (a `composer test` script or a Makefile target).\n\nAdd a README.md documenting the architecture, the bounded-context layout, how the layers depend on each other, and how to run the tests.\n","builds_on":null},{"id":"stage-2-docker-dev-env","theme":"infrastructure","prompt":"Add a complete Docker-based development environment so a contributor can clone the repository and bring the whole system up with a single command.\n\nProvide a docker compose setup with these services:\n\n- The Symfony application running on PHP-FPM, built from a Dockerfile that installs the required PHP extensions and Composer dependencies.\n- A web server in front of PHP-FPM serving the API.\n- PostgreSQL for persistence.\n- RabbitMQ as the AMQP broker, with its management UI exposed.\n- Redis.\n\nWire the application to this environment:\n\n- Configure Symfony Messenger with an AMQP (RabbitMQ) transport, ready to carry asynchronous messages in later stages, alongside the synchronous command/query buses.\n- Configure Redis as the Symfony cache adapter and as the backend for the Lock component.\n- All connection settings come from environment variables, with no secrets baked into images.\n\nMake startup turnkey: a single command (a Makefile target or a compose entrypoint) builds the images, starts every service, waits for dependencies to be healthy (use healthchecks), runs database migrations, and leaves the API serving requests. Document the commands to start, stop, and inspect the environment in the README, including how to reach the RabbitMQ management UI.\n\nMake the test suite runnable inside this environment: a single command runs the full PHPUnit suite in the containers against a dedicated, isolated test database. Document that command in the README.\n","builds_on":"stage-1-domain-skeleton"},{"id":"stage-3-holds-and-orders","theme":"features","prompt":"Add the seat-holding and ordering flow across two new bounded contexts: Reservations and Ordering.\n\nReservations context:\n\n- When a customer selects one or more specific seats (or a quantity of tickets) for an event, the system places a time-limited hold on them, default 10 minutes. While held, those seats are not available to anyone else.\n- Holds are tracked in Redis with a TTL so they expire automatically; when a hold expires the seats become available again with no manual cleanup. Use the Redis-backed Lock component to make placing a hold on a given seat atomic, so two simultaneous requests can never both hold the same seat.\n- A customer can release a hold early.\n\nOrdering context:\n\n- A customer converts an active hold into an Order. Placing the order consumes the hold and marks those seats as sold. An order has a total computed from the seats' price tiers (Money value object) and a status.\n- Once seats are sold they are no longer available and the hold can no longer be used.\n\nCQRS read side: introduce a seat-availability read model that answers \"what is available for this event\" quickly, reflecting holds and sales, kept separate from the write model.\n\nEndpoints: create a hold for an event; release a hold; place an order from a hold; fetch an order; fetch current availability for an event. Keep the hexagonal boundaries: Redis access sits behind domain ports, never called directly from the domain.\n\nExtend the test suite to cover this flow: a hold makes seats unavailable; an expired hold frees them again; two concurrent attempts to hold the same seat cannot both succeed; placing an order from a hold marks the seats sold and consumes the hold; a consumed or released hold can no longer be ordered.\n","builds_on":"stage-2-docker-dev-env"},{"id":"stage-4-async-fulfillment","theme":"extension","prompt":"Make order fulfillment fully asynchronous and event-driven over RabbitMQ. The work of fulfilling it happens in background consumers.\n\nIntroduce these contexts and flow as event-driven choreography:\n\n- When an order is placed, the Ordering context publishes an OrderPlaced domain event.\n- A Payments context consumes it, authorises payment (simulate a payment gateway, including occasional failures), and publishes PaymentAuthorized or PaymentDeclined.\n- A Ticketing context consumes PaymentAuthorized, issues a ticket per seat with a unique, verifiable code (e.g. a signed token suitable for a QR code), and publishes TicketsIssued.\n- A Notifications context consumes TicketsIssued and sends a confirmation (log it, write it to a maildir or use something like mailhog; no real email needed). On PaymentDeclined the order is cancelled and its seats released. The client gets notified.\n\nReliability requirements:\n\n- Transactional outbox: domain events are written to an outbox table in the same database transaction as the aggregate change, then relayed to RabbitMQ by a separate relay process. An event is never lost even if the broker is momentarily unavailable, and is never published for a transaction that rolled back.\n- Idempotent consumers: assume at-least-once delivery. Every consumer must be safe to run on a redelivered or duplicated message (dedupe by message id), so retries never double-charge or double-issue tickets. Configure retries with backoff and a dead-letter queue for poison messages.\n\nThe Symfony Messenger consumers run as worker processes; add them to the Docker environment so they start with the stack. Expose an endpoint to fetch an order's fulfillment status (placed, paid, ticketed, declined, cancelled).\n\nExtend the test suite to cover the fulfillment guarantees: the happy path drives an order from placed to ticketed; a declined payment cancels the order and releases its seats; replaying or duplicating a message through a consumer does not issue a second ticket or charge twice (idempotency); the outbox publishes committed events and never publishes events from a transaction that rolled back.\n","builds_on":"stage-3-holds-and-orders"},{"id":"stage-5-projections-and-concurrency","theme":"performance","prompt":"Optimise the hot read paths and prove the system does not oversell under load.\n\nRead-model projections:\n\n- Build Redis-backed projections for the heavily read data: event listings and per-event seat availability. Projections are updated by consuming the domain events flowing through RabbitMQ (event published, hold placed/released/expired, order placed, etc.), so that the public read endpoints (list events, get availability) are served entirely from Redis and never touch PostgreSQL on the hot path.\n- Handle projection rebuilds: provide a command that rebuilds a projection from the source of truth, and make projection updates idempotent so replays are safe.\n\nConcurrency and correctness:\n\n- Guarantee no overselling when many customers compete for the same seats at once, combining the Redis locks from earlier with optimistic concurrency (a version/aggregate check) on the seat-inventory write model so a lost update can never sell a seat twice.\n- Provide a seeding command that creates a large catalog (many published events, large venues with thousands of seats) and a load script that fires many concurrent hold-and-order attempts against the same popular event, then verifies afterwards that the number of sold seats never exceeds capacity and no seat was sold twice.\n\nWire the no-overselling assertion into the test suite as well, as an integration test that drives concurrent holds/orders and asserts capacity is never exceeded, so a regression is caught automatically. Document how to run the seeder and the concurrency check, and what numbers to expect.\n","builds_on":"stage-4-async-fulfillment"},{"id":"stage-6-api-hardening","theme":"security","prompt":"Harden the API and the messaging layer for untrusted clients.\n\n- Authentication and authorization: protect the API with token-based auth (JWT or signed API tokens) and distinguish roles. Organizers may create and publish events; customers may hold seats and place orders; availability and event browsing are public. Enforce that a customer can only act on their own holds and orders.\n- Idempotency keys: mutating endpoints that must not be applied twice, especially placing an order, accept an Idempotency-Key header. A retried request with the same key returns the original result instead of creating a second order or charging again. Store keys in Redis.\n- Rate limiting: apply Redis-backed rate limits per client/token to hold and order creation to prevent abuse and inventory hoarding.\n- Input validation: validate and constrain every request payload at the boundary; reject malformed or oversized input with proper HTTP status codes; ensure value objects reject invalid states.\n- Secrets and the broker: confirm no secrets live in images or the repo, and that the RabbitMQ consumers reject and dead-letter malformed or unauthenticated messages rather than crashing the worker.\n\nExtend the test suite to cover the hardening: unauthenticated requests are rejected; a customer cannot act on another customer's holds or orders; an organizer-only action is forbidden for a customer; replaying a request with the same Idempotency-Key returns the original order rather than creating a second one; exceeding the rate limit is rejected; malformed or oversized payloads are rejected with the right status codes.\n\nUpdate the README with the auth flow, how to obtain a token, and the idempotency and rate-limit behaviour.\n","builds_on":"stage-5-projections-and-concurrency"}],"run_count":1,"runs":[{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-23","stages_run":3,"stages_total":6,"avg_rating_score":0.25,"total_cost_usd":28.36,"total_duration_sec":3510,"stages":[{"id":"stage-1-domain-skeleton","rating":"good","duration_sec":1099,"tokens_in":653,"tokens_out":78700,"cost_usd":7.89,"notes":"Decided to make Events own Venues, which is arguably a bad data design choice which does not allow the same Venue to hold multiple Events. Commands carry arrays instead of DTOs. Very minor mistakes in comments.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-domain-skeleton"},{"id":"stage-2-docker-dev-env","rating":"failed","duration_sec":630,"tokens_in":191,"tokens_out":40900,"cost_usd":4.59,"notes":"Created a makefile-based development environment setup. A Dockerfile build fails because some files referenced are not available because they're included in .dockerignore. Functional tests fail.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-docker-dev-env"},{"id":"stage-3-holds-and-orders","rating":"failed","duration_sec":1781,"tokens_in":211,"tokens_out":102000,"cost_usd":15.88,"notes":"Functional tests fail.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-3-holds-and-orders"}],"hardware":null,"settings":{"effort":"high"}}]},{"name":"live-message-wall","title":"Live message wall","description":"A real-time, anonymous message wall web app with a TUI-inspired aesthetic.\nVisitors can post messages without logging in, and the wall updates live as\nnew messages arrive. Later stages add lazy loading, rate limiting, fading\nby age, security hardening, and threaded replies.","domain":"full-stack-web","stack":"node-express","stack_name":"Node + Express","contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","stages_total":4,"test_stages":[{"id":"stage-1-first-run","theme":"bootstrap","prompt":"Build a web application called \"Wall\" where visitors can leave a message that gets instantly published on the wall for others to see.\n\nThe wall displays the messages from newest to oldest, and updates lives as new messages are added.\n\nUsers do not need to log in. Users do not provide any identification information when adding a message, only the message itself.\nMessages cannot be removed.\n\nThe website UI is extremely simplistic, resembling a typical text-mode console, it looks like it was a modern TUI like those in claude code and opencode, using a console-like, small font, a dark theme and a text-only, ASCII inspired interface.\n\nThere is a top, slim, sticky bar that contains the input for the user to enter its message and the \"Add to wall\" button. The rest of the screen is devoted to display the wall itself.\n\nMessages on the wall have a fixed size, and the text is cropped if it does not fit into the message card. When clicked, a model opens to let the user read the entire message.\n\nMessages on the wall are displayed from top to bottom and left to right, just like the text flow of newspapers, filling the entire available screen, and scrolling horizontally when there are more messages than the screen can fit.\n\nBuild it with Node and Express.\n\nAdd a README.md file that documents the application and its technical structure.\n","builds_on":null},{"id":"stage-2-advanced-features","theme":"features","prompt":"Add a couple thousand random messages for testing.\nMake the wall lazy loading, so it only loads the first N messages at first, and loads more automatically as the user scrolls to the right.\n\nPrevent users from flooding the wall, for example, by not allowing the same user to add a message if they already added one in the last hour.\n\nMessages in the wall disappear slowly over time, becoming gradually transparent until they completely disappear. The maximum age of all messages is 1 month. Once a message has completely disappeared, you can remove it from the database.\n","builds_on":"stage-1-first-run"},{"id":"stage-3-refinements","theme":"refinements","prompt":"Use cookies + IP instead of only IP for rate limiting.\n\nChange the rate limit to 1 message every 10 minutes.\n\nShow a toast when the user tries to add a message but is rate limited, letting them know about the amount of remaining time until they can post a message again.\n\nWhen hovering a message, it becomes opaque so hovering old, almost invisible messages allows the user to see them before clicking to reveal the full message.\n\nLinks in messages are clickable in the modal.\n\nAdd CSRF check to the message posting. Check messages for XSS and other hacks to prevent security bugs.\n\nAdd a sticky header to the top of the horizontal scrolling list of messages that shows the approximate date of the messages at that vertical point of the list.\n\nAll dates are stored and displayed in UTC.\n\nAllow emojis in messages.\n\nWhen clicking the top input to start writing a message, or when typing on it, the input becomes a big textarea to allow and entice the user to write long messages. Messages can be up to 4KB, ensure the limit is not surpassed.\n\nStore the message currently being written in the browser storage so it's not lost if the user accidentally reloads the page, or if it closes the page and comes back sometime after.\n","builds_on":"stage-2-advanced-features"},{"id":"stage-4-complex-refinements","theme":"extension","prompt":"Add the ability to reply to messages with another message. Replies do not appear on the wall. Messages with replies have a button that states \"N replies\". When opening a message modal, it shows the message and also all its replies below, from most recent to oldest. If the content of the model does not fit on the screen, the user can scroll it vertically. Below the message, and above the first reply (if any), a textarea allows to add a reply from there. The same limits and controls present in adding a new message must apply to replying. Refactor when needed if it's best to keep an easy to understand codebase and database structure.\n","builds_on":"stage-3-refinements"}],"run_count":2,"runs":[{"run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","test_name":"live-message-wall","test_title":"Live message wall","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-18","stages_run":4,"stages_total":4,"avg_rating_score":0.9375,"total_cost_usd":11.19,"total_duration_sec":1852,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":176,"tokens_in":530,"tokens_out":13500,"cost_usd":0.73,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-1-first-run"},{"id":"stage-2-advanced-features","rating":"excellent","duration_sec":328,"tokens_in":568,"tokens_out":21800,"cost_usd":1.88,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-2-advanced-features"},{"id":"stage-3-refinements","rating":"good","duration_sec":778,"tokens_in":574,"tokens_out":62200,"cost_usd":4.63,"notes":"Struggled for some minutes around an error involving regex, unicode characters and broken null bytes.","source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-3-refinements"},{"id":"stage-4-complex-refinements","rating":"excellent","duration_sec":570,"tokens_in":579,"tokens_out":41700,"cost_usd":3.95,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-4-complex-refinements"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-sonnet-4.6-high-effort","test_name":"live-message-wall","test_title":"Live message wall","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-sonnet-4.6","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-16","stages_run":4,"stages_total":4,"avg_rating_score":0.9375,"total_cost_usd":9.35,"total_duration_sec":3902,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":447,"tokens_in":null,"tokens_out":26300,"cost_usd":0.63,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-1-first-run"},{"id":"stage-2-advanced-features","rating":"excellent","duration_sec":482,"tokens_in":null,"tokens_out":26700,"cost_usd":0.7,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-2-advanced-features"},{"id":"stage-3-refinements","rating":"good","duration_sec":2285,"tokens_in":null,"tokens_out":147900,"cost_usd":6.58,"notes":"Some additional prompting to fix minor UI bugs was needed.","source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-3-refinements"},{"id":"stage-4-complex-refinements","rating":"excellent","duration_sec":688,"tokens_in":null,"tokens_out":40100,"cost_usd":1.44,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-4-complex-refinements"}],"hardware":null,"settings":{"effort":"high"}}]},{"name":"old-school-demo","title":"Old-school demo","description":"A 90s-style demoscene production built with Three.js: a single, self-running\nshow of chained graphical effects synced to a MOD-like background tune. Every\neffect is rendered under the restrictions of the era - a 320x200 internal\nframebuffer with a 256-colour palette, scaled up to fill the screen - so it\nlooks and feels like a demo that would have run on a PC in 1994. Stages add\nthe classic effects one by one (sine-scroller, starfield, tunnel, fire,\nrotozoom, a pixel-art image showcase, a shaded 3D object, a textured 3D\nfly-by) and finish with the obligatory credits scroller, then polish the whole\nthing into one continuous, music-synced demo.","domain":"game","stack":"threejs","stack_name":"Three.js","contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","stages_total":5,"test_stages":[{"id":"stage-1-bootstrap","theme":"bootstrap","prompt":"Build a web-based old-school \"demoscene\" demo using Three.js. The whole production must run by itself, with no user interaction, like the demos sceners released in the 1990s.\n\nThe defining constraint: everything is rendered into a low-resolution internal framebuffer of exactly 320x200 pixels, restricted to a palette of at most 256 colours on screen at once, and then scaled up (nearest-neighbour, chunky pixels, correct 4:3 aspect ratio) to fill the browser window. Build this as the core of the engine: an offscreen 320x200 render target, a palette/quantisation step that reduces the frame to 256 colours, and a fullscreen upscale pass. Every effect from now on draws into this framebuffer, never directly to the screen.\n\nSet up a \"demo director\": a sequencer that plays a looping, MOD-like background tune and drives a timeline. Effects appear one after another, synchronised to the music (beats and pattern changes trigger transitions between effects). The tune can be a tracker MOD/XM file played back, or a synthesised chiptune/tracker-style loop generated with the Web Audio API, as long as it sounds like the multi-channel sample-based music of the era.\n\nImplement the first two effects, chained on the timeline:\n  - A horizontal sine-scroller: a single line of large bitmap-font text that scrolls right-to-left across the bottom while each character bobs up and down on a sine wave. This is the classic demo greeting line.\n  - A 3D starfield flying toward the viewer behind the scroller.\n\nAdd a README.md documenting the demo, the framebuffer/palette engine, the director/timeline, how music sync works, and how to add a new effect.\n","builds_on":null},{"id":"stage-2-tunnel-and-fire","theme":"features","prompt":"Add two more classic effects to the timeline, each appearing in turn as the music progresses:\n\n  - The tunnel effect: an endless textured tunnel the camera flies through, with the texture scrolling and the tunnel twisting, palette-cycling its colours in time with the music.\n  - The fire effect: the classic bottom-up fire, a hot random seed line along the bottom that propagates upward and cools, using a fire palette (black -> red -> orange -> yellow -> white). Render it within the 320x200 / 256-colour budget.\n\nMake the transitions between effects feel deliberate and tied to the tune (for example a fade through the palette, or a wipe), not just an instant cut. Both effects must be driven by the director's timeline so they start and end on musical boundaries.\n","builds_on":"stage-1-bootstrap"},{"id":"stage-3-rotozoom-and-artwork","theme":"features","prompt":"Add two more parts:\n\n  - A rotozoomer: a single texture (a tiled pattern) rendered across the whole screen while continuously rotating and zooming in and out, the way every demo of the era showed off. It should wrap/tile seamlessly.\n  - A graphician's showcase: a \"beautiful image\" part whose only job is to show off pixel art done under the era's restrictions. Display a hand-crafted-looking 256-colour image (you create the artwork) full-screen, with a slow palette-cycling or fade-in reveal and a small sine-scrolled caption crediting the (fictional) graphic artist. This is the part that exists purely to show a gorgeous picture, exactly as 90s demos did.\n\nKeep everything inside the 320x200 / 256-colour framebuffer and synced to the music.\n","builds_on":"stage-2-tunnel-and-fire"},{"id":"stage-4-3d-parts","theme":"extension","prompt":"Add the 3D show-off parts, the centrepieces of the demo:\n\n  - A rotating 3D object: a single detailed model spinning in space, flat/Gouraud shaded in the limited palette (think the classic shaded vector objects, or a \"glenz\"-style transparent solid). It rotates smoothly on multiple axes.\n  - A 3D fly-by: a camera flying through a more complex 3D scene that shows off gorgeous lighting and texturing - real-time shadows or fake lens/lighting effects, textured surfaces, environment reflections - the part that screams \"look what this machine can do\". Even though Three.js can do far more, the result must still be downsampled through the 320x200 / 256-colour framebuffer so it keeps the chunky, dithered, period-correct look.\n\nBoth parts join the timeline in sequence and stay synced to the tune.\n","builds_on":"stage-3-rotozoom-and-artwork"},{"id":"stage-5-credits-scroller","theme":"features","prompt":"Add the obligatory end part: the credits scroller. A long block of text scrolls smoothly up the screen (with the usual sine wobble / perspective on the text) over a backdrop effect, while the music plays its final pattern.\n\nThe credits must, in true demoscene style, greet and credit the (fictional) team: list the code, the graphics/pixel art, and the music as if done by named sceners and a demo group, throw in greetings (\"greets\") to other groups, and add a few of the typical rambling personal messages and shout-outs. Make the wording feel authentically like a 90s demo's end-scroll.\n\nWire it as the last part of the timeline so the demo plays straight through from the intro scroller to these credits, then ends.","builds_on":"stage-4-3d-parts"}],"run_count":1,"runs":[{"run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","test_name":"old-school-demo","test_title":"Old-school demo","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-21","stages_run":5,"stages_total":5,"avg_rating_score":0.9,"total_cost_usd":15.01,"total_duration_sec":4228,"stages":[{"id":"stage-1-bootstrap","rating":"excellent","duration_sec":733,"tokens_in":2500,"tokens_out":61100,"cost_usd":2.75,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-1-bootstrap"},{"id":"stage-2-tunnel-and-fire","rating":"good","duration_sec":930,"tokens_in":2500,"tokens_out":49400,"cost_usd":3.1,"notes":"Fire effect runs too fast.","source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-2-tunnel-and-fire"},{"id":"stage-3-rotozoom-and-artwork","rating":"excellent","duration_sec":715,"tokens_in":3400,"tokens_out":33500,"cost_usd":2.26,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-3-rotozoom-and-artwork"},{"id":"stage-4-3d-parts","rating":"excellent","duration_sec":1155,"tokens_in":3100,"tokens_out":43400,"cost_usd":3.2,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-4-3d-parts"},{"id":"stage-5-credits-scroller","rating":"good","duration_sec":695,"tokens_in":2500,"tokens_out":48300,"cost_usd":3.7,"notes":"Demo does not completely end, it stays in a final flash loop.","source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-5-credits-scroller"}],"hardware":null,"settings":{"effort":"high"}}]},{"name":"realtime-chat-with-deployment","title":"Chat app with automated deployment","description":"A WebSocket-based chat application with multiple rooms, presence, and basic moderation. Builds from a single shared room up to a moderated multi-room app. Includes automated deployment to AWS for a complete development-to-live workflow.","domain":"full-stack-web","stack":"node-express","stack_name":"Node + Express","contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","stages_total":5,"test_stages":[{"id":"stage-1-first-run","theme":"bootstrap","prompt":"Build a real-time chat app: a backend built with Node and Express and a minimal web client. Anyone who opens the page picks a display name and joins a shared room. Messages broadcast to all connected clients in real time and the last 1000 messages are kept in memory and replayed to new joiners. The UI should look like a typical chatroom page, with a list of messages taking the entire screen except for an input and a \"Send\" button at the bottom to enter new messages.\nAdd a README.md documenting the code structure, the tech stack and useful information for the user like what's this project about, how to run it and contribute to it.\n","builds_on":null},{"id":"stage-2-rooms","theme":"features","prompt":"Add named rooms: the URL hash (#room-name) selects the room, and messages are scoped to that room. Display a list of all rooms currently with active users. Show the current room name and let users switch rooms without reloading. Persist messages per room to SQLite so history survives a server restart (keep the last 200 per room).\n","builds_on":"stage-1-first-run"},{"id":"stage-3-private-messages","theme":"refactor","prompt":"Allow user-to-user private message rooms.\n","builds_on":"stage-2-rooms"},{"id":"stage-4-security","theme":"security","prompt":"Add lightweight moderation: a per-room rate limit (max 5 messages / 10s per user), a configurable banned-word filter that masks matches, and a message length cap. Sanitize all message content to prevent HTML, XSS, SQL injection and other typical attack vectors like CSRF.\n","builds_on":"stage-3-private-messages"},{"id":"stage-5-deploy-aws","theme":"infrastructure","prompt":"Make the whole app deployable to AWS with a single command. Provide infrastructure-as-code (e.g. AWS CDK, CloudFormation, or Terraform) plus a documented deploy script so a user with their own AWS account and credentials can set the app running from scratch \u2014 the WebSocket server, the static web client, and a publicly reachable HTTPS URL \u2014 without manual console clicking. The SQLite room history must live on durable storage (a mounted volume or equivalent) so it survives redeploys. Re-running the deploy after code changes must update the app in place without dropping existing message history or other persisted data. Document the required prerequisites, environment variables (including the admin token), and the deployment commands. Sensible tokens and keys must not be committed.\n","builds_on":"stage-4-security"}],"run_count":2,"runs":[{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high-2","test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-22","stages_run":5,"stages_total":5,"avg_rating_score":1.0,"total_cost_usd":9.93,"total_duration_sec":2121,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":123,"tokens_in":2700,"tokens_out":373100,"cost_usd":0.58,"notes":null,"source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-1-first-run"},{"id":"stage-2-rooms","rating":"excellent","duration_sec":326,"tokens_in":2500,"tokens_out":28200,"cost_usd":1.51,"notes":"Some UX problems like not being able to go back to the lobby, reloading the page asks for a username again, or rooms without users disappear immediately. But that's ok because none of that was on the prompt, and it could not be inferred.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-2-rooms"},{"id":"stage-3-private-messages","rating":"excellent","duration_sec":373,"tokens_in":2100,"tokens_out":30200,"cost_usd":1.63,"notes":"Private messages are not secure. UX is confusing for starting new PMs. Both issues mentioned by Claude, but since this was not mentioned in the prompt, requirements are considered met.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-3-private-messages"},{"id":"stage-4-security","rating":"excellent","duration_sec":397,"tokens_in":6600,"tokens_out":29600,"cost_usd":2.11,"notes":"Claude comments about this still being insecure for other reasons, like no real user tracking. Since those were not part of the prompt, all objetives in the prompt are considered met.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-4-security"},{"id":"stage-5-deploy-aws","rating":"excellent","duration_sec":902,"tokens_in":3300,"tokens_out":61700,"cost_usd":4.1,"notes":"Wrapped it all in docker and used Amazon CDK. Created a deploy.sh to handle deployment.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-5-deploy-aws"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-22","stages_run":2,"stages_total":5,"avg_rating_score":0.5,"total_cost_usd":2.46,"total_duration_sec":440,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":123,"tokens_in":2700,"tokens_out":373100,"cost_usd":0.58,"notes":null,"source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-first-run"},{"id":"stage-2-rooms","rating":"failed","duration_sec":317,"tokens_in":3500,"tokens_out":26700,"cost_usd":1.88,"notes":"Node crashes when another user joins the room. Seems to be due to using an experimental SQLite version due to node version. The tests he did passed.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-rooms"}],"hardware":null,"settings":{"effort":"high"}}]},{"name":"snake-game","title":"Snake game","description":"The classic Snake arcade game implemented as a single-page web app.\nLater stages add progression, sound, and a local leaderboard, then\nmobile touch controls and a responsive layout.","domain":"game","stack":"vanilla-js","stack_name":"Vanilla JS","contributor_url":"https://github.com/anthony","contributor_handle":"anthony","contributor_avatar":"https://github.com/anthony.png?size=160","stages_total":4,"test_stages":[{"id":"stage-1-first-run","theme":"bootstrap","prompt":"Build the classic Snake game as a single-page HTML/CSS/JavaScript app. Do not use any Javascript framework, just vanilla Javascript.\n\nThe snake moves on a 20x20 grid, controlled with the arrow keys or WASD. The snake grows by one segment when it eats an apple; a new apple appears at a random empty cell. The game ends when the snake hits a wall or itself.\n\nShow the current score (apples eaten) and a \"Game Over\" screen with a \"Restart\" button.\n\nPressing the opposite direction of the current heading should be ignored (no instant self-collision).\n\nAdd a README.md.\n","builds_on":null},{"id":"stage-2-features","theme":"features","prompt":"Add a level progression: every 5 apples eaten, the tick rate increases by ~15%, up to a sensible cap. Show the current level alongside the score.\n\nAdd simple sound effects: a soft \"bite\" sound when eating an apple, and a \"game over\" sound. A mute toggle in the UI persists across reloads (localStorage).\n\nAdd a local leaderboard stored in localStorage. After Game Over, if the score is in the top 5, prompt for a 3-letter initial and add it to the leaderboard. Show the top 5 scores on the main menu.\n","builds_on":"stage-1-first-run"},{"id":"stage-3-mobile","theme":"extension","prompt":"Make the game playable on mobile. Add swipe-based touch controls: swipes in the four cardinal directions change the snake's heading. Swipes should feel responsive.\n\nMake the layout responsive: the playfield always fits the viewport while preserving its square aspect ratio, with sensible margins for the score/level/mute UI. On landscape phones the UI should still be reachable.\n\nPrevent the page from scrolling or zooming on touch when interacting with the game area.\n","builds_on":"stage-2-features"},{"id":"stage-4-graphics-refactor","theme":"refactor","prompt":"Refactor de entire UI to use detailed images instead of characters or emojis, if they were being used. Migrate to a canvas-based rendering if it isn't already. Use sprite-like images to render all visual elements of the gameplay and the interface except for the text, for which you can use standard canvas text-rendering methods. Use a fun font face. Generate all needed images so they have a cartoony, colorful look. Make the snake and the fruit animate in some way, such as apples rotating over their axis, or the snake showing his tongue from time to time. Make the snake body correctly bend on corners (you might need to create appropiate sprite-like images for that).\n","builds_on":"stage-3-mobile"}],"run_count":1,"runs":[{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"snake-game","test_title":"Snake game","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-21","stages_run":4,"stages_total":4,"avg_rating_score":1.0,"total_cost_usd":5.1165,"total_duration_sec":1190,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":75,"tokens_in":2100,"tokens_out":6400,"cost_usd":0.3465,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-first-run"},{"id":"stage-2-features","rating":"excellent","duration_sec":279,"tokens_in":2000,"tokens_out":25000,"cost_usd":1.32,"notes":"Tested the game by installing Playwright and running it in a headless Chrome.","source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-features"},{"id":"stage-3-mobile","rating":"excellent","duration_sec":132,"tokens_in":2200,"tokens_out":11300,"cost_usd":0.65,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-3-mobile"},{"id":"stage-4-graphics-refactor","rating":"excellent","duration_sec":704,"tokens_in":2500,"tokens_out":56100,"cost_usd":2.8,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-4-graphics-refactor"}],"hardware":null,"settings":{"effort":"high"}}]},{"name":"titanic-sinking-simulation","title":"Titanic sinking simulation","description":"Physically-accurate simulation of the sinking of the Titanic. A quite complex, single-stage test (easy to run) that asks the model not only to recreate it with a physical model (not a simple animation), but relies also on the model's knowledge on how the Titanic sank, and the thorough documentation that has been released about it on the Internet. To succeed, it should recreate someting akin to the  mythical scenes of the movie, where the ship's stern rises above sea level before starting to sink, breaks in half and sinks in two big pieces. It should also provide approximate results on the final  distribution of at least the two main chunks of the ship as they were finally left on the sea floor.","domain":"game","stack":null,"stack_name":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","stages_total":1,"test_stages":[{"id":"stage-1-simulation","theme":"bootstrap","prompt":"Build a real-time, physics-accurate simulation of the sinking of the Titanic. Use a 2D side-view as the physics ground truth. Rendering must be 2D Canvas/SVG, not 3D. The source of truth must be a 2D physics state. It should run in a physics engine that simulates the relevant conditions, variables and anything else that results in a plausible approximation to the way the Titanic really sank, as has been thoroughly documented.\n\nYou should investigate the real timeline of events of the Titanic sinking and ensure the resulting simulated events sufficiently approximate them.\n\nThe following is a list of hard, non-negotiable requirements. Stop if you cannot strictly fulfill all of them completely. Failing to fulfill all of them will be considered a failure:\n\n- Use a real, general-purpose 2D rigid-body physics engine like Matter.js, Planck.js or Rapier in 2D mode. Do not write your own rigid-body engine.\n- Nothing is scripted, no event-keyed code, the entire simulation runs naturally without scripted intervention, from a given starting point to an end that sufficiently approximates the real events.\n- The ship is composed of an outher body representing the hull, breakable at any point. Inside the other body, there are bodies for each of the ship's inner hulls, thus creating an approximation of the Titanic's hull and its main inner compartments. Inner compartments are joined to each other and to the outher hull with breakable joints. Joints have a finite maximum load before they fail. The hull split's location and time must emerge from joint failures under the bending stress produced by flood-driven mass redistribution between inner compartments, they should not be specified anywhere in the code or anywhere else.\n- The simulation starts just after the collision with the iceberg, with the corresponding compartments already breached and leaking water, and goes on until the ship (or what's left of it) rests static on the sea floor.\n- The ship sizes, mass and weight, the seafloor depth and other similarly relevant measurements, parameters and values are all real numbers taken from the real incident, resulting in a simulation based on real-life, real-scale parameters.\n- Buoyancy is simulated by the physics engine.\n- There is no need to simulate sea currents or waves.\n- The sea density and drag must be simulated so it affects the way the ship sinks.\n- Water inside the ship is simulated as a mass per compartment. Each compartment is a bounded by hull and bulkhead walls. Water enters through any wall whose plating has failed at a rate given by Torricelli's law using the actual current pressure head. When local water level exceeds a bulkhead height, water overflows into the adjacent compartment via the same fluid-mechanics inflow. It would be great if you can visually represent the height and level of the water flooding each compartment.\n- Funnels are physically attached to specific hull segments by joints with finite strength and are also accurately simulated. They collapse and/or break as in the real events.\n- If the hull or any other pieces split, the pieces are independent compound bodies in the same world. They can collide with each other. All sink to the seafloor (which is a static body in the engine) as in the real events.\n- The time multiplier is derived continuously from scene activity. Pick a metric that captures \"how much is changing right now\": the maximum rate of change of bending stress across all joints, or the kinetic-energy time derivative, or the maximum body velocity. The multiplier inversely tracks the metric, low-pass-filtered to prevent jitter, clamped to a sensible range (1x-1000x). No lookup table keyed on time. When everything is calm (slow flooding), the multiplier rises automatically; when stress is spiking (the break, the plunge, the seafloor impact), it falls automatically.\n- Adjust the time multiplier in a way that the final entire simulation lasts around 1 minute.\n- Make the time multiplier a variable you can set to a specific multiplier that holds during the entire run, so if and when you run simulations to check the results of your work, you can set it to its maximum value so the test only takes a few seconds or even less, instead of having to watch the entire simulation.\n- The following should not be tunable constants: when and if the break happens, where the break happens, what time the funnel falls, what the time multiplier is at any given simulated moment.\n- The camera should always frame the ship so it nicely fits in the entire screen, allowing the viewer to see the details closely, even while the ship is sinking, until its impact on the seafloor. If the ship breaks into pieces, the camera may zoom away so all fragments are always framed into view.\n\nThe resulting visualization should be informative, educational and easy to understand and watch. For example: Even though the events took place at night, make it so the entire scene is clearly visible.\n\nSome soft requirements that you can implement if you decide they do not add unnecessary complexity or hurt the simulation precision:\n\n- Add a panel showing some useful realtime information, like the simulation time, the amount of water that entered the ship and/or other interesting parameters.\n- Use images or textures over the physics objects so the ship looks like the real one.\n- Add visual flair just to make it look better, for example: A beautiful sky, stars, the moon, an underwater visual effect, smoke in the funnels, lights in the ship windows, etc.\n- Add a panel with some controls for the user, like a play/pause button, a time multiplier manual adjustment slider, etc.\n\nAdd a README.md documenting the technical architecture of how everything works.","builds_on":null}],"run_count":3,"runs":[{"run_id":"tin-cat-claude-code-claude-fable-5-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"Max","provider":"anthropic","framework":null,"model":"claude-fable-5","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-06-11","stages_run":1,"stages_total":1,"avg_rating_score":1.0,"total_cost_usd":42.35,"total_duration_sec":4305,"stages":[{"id":"stage-1-simulation","rating":"excellent","duration_sec":4305,"tokens_in":21900,"tokens_out":245900,"cost_usd":42.35,"notes":"Much better simulation accuracy and UI than previous claude models, takes into account more parameters like seafloor consistency. Overall sinking sequence mimics correctly historic events except final position of fragments in the seabed, hull break takes place underwater.","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-fable-5-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.8-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.8","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-28","stages_run":1,"stages_total":1,"avg_rating_score":0.75,"total_cost_usd":66.03,"total_duration_sec":4458,"stages":[{"id":"stage-1-simulation","rating":"good","duration_sec":4458,"tokens_in":24600,"tokens_out":251400,"cost_usd":66.03,"notes":"Auto time multiplier fails to slow down when the crack happens. Otherwise, vast improvement from Opus 4.7, with a reasonably accurate sinking sequence that clearly attains all the main sinking events. The funnels do not collapse until the end.","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-opus-4.8-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-24","stages_run":1,"stages_total":1,"avg_rating_score":0.4,"total_cost_usd":33.17,"total_duration_sec":4644,"stages":[{"id":"stage-1-simulation","rating":"partial","duration_sec":4644,"tokens_in":800,"tokens_out":315100,"cost_usd":33.17,"notes":"Events run too slow real sinking took 5 minutes from surface to bottom, it takes many hours in the simulation,\nand many parts even stay at sea level after many simulated hours. Funnels stay afloat indefinitely. Sea depth\nis wrongly displayed and auto framing to center the ship on view does not work, both due to not taking into\naccount high DPI displays. Otherwise, overall breaking conditions look approximate enough and events approximate\ndecently the real incident: The bow starts to sink first, tilting the whole ship as compartments flood gradually.\nAt a certain point, the ship breaks in two major pieces and other pieces follow.\n","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}}]}],"agents":[{"id":"claude-code","agent":"claude-code","name":"Claude Code","description":"Anthropic's official CLI for agentic coding in the terminal, with IDE integrations.","homepage":"https://www.anthropic.com/claude-code","category":"cli","logo":"/logos/agents/claude-code.svg","in_catalog":true,"run_count":10,"stage_count":30,"test_count":6,"contributor_count":1,"avg_rating_score":0.83,"total_cost_usd":222.9665,"total_duration_sec":30650,"top_combo":"anthropic \u00b7 claude-opus-4.7","cross":[{"provider":"anthropic","run_count":10,"stage_count":30,"avg_rating_score":0.83}],"tests":[{"test_name":"snake-game","test_title":"Snake game","run_count":1,"stage_count":4,"avg_rating_score":1.0},{"test_name":"live-message-wall","test_title":"Live message wall","run_count":2,"stage_count":8,"avg_rating_score":0.9375},{"test_name":"old-school-demo","test_title":"Old-school demo","run_count":1,"stage_count":5,"avg_rating_score":0.9},{"test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","run_count":2,"stage_count":7,"avg_rating_score":0.8571428571428571},{"test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","run_count":3,"stage_count":3,"avg_rating_score":0.7166666666666667},{"test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","run_count":1,"stage_count":3,"avg_rating_score":0.25}],"activity":[{"date":"2026-05-16","count":1},{"date":"2026-05-18","count":1},{"date":"2026-05-21","count":2},{"date":"2026-05-22","count":2},{"date":"2026-05-23","count":1},{"date":"2026-05-24","count":1},{"date":"2026-05-28","count":1},{"date":"2026-06-11","count":1}]}],"providers":[{"id":"anthropic","provider":"anthropic","name":"Anthropic","description":"First-party API for Claude models.","homepage":"https://www.anthropic.com/api","category":"frontier-lab","logo":"/logos/providers/anthropic.svg","in_catalog":true,"run_count":10,"stage_count":30,"test_count":6,"contributor_count":1,"avg_rating_score":0.83,"total_cost_usd":222.9665,"total_duration_sec":30650,"top_combo":"claude-code \u00b7 claude-opus-4.7","cross":[{"agent":"claude-code","run_count":10,"stage_count":30,"avg_rating_score":0.83}],"tests":[{"test_name":"snake-game","test_title":"Snake game","run_count":1,"stage_count":4,"avg_rating_score":1.0},{"test_name":"live-message-wall","test_title":"Live message wall","run_count":2,"stage_count":8,"avg_rating_score":0.9375},{"test_name":"old-school-demo","test_title":"Old-school demo","run_count":1,"stage_count":5,"avg_rating_score":0.9},{"test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","run_count":2,"stage_count":7,"avg_rating_score":0.8571428571428571},{"test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","run_count":3,"stage_count":3,"avg_rating_score":0.7166666666666667},{"test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","run_count":1,"stage_count":3,"avg_rating_score":0.25}],"activity":[{"date":"2026-05-16","count":1},{"date":"2026-05-18","count":1},{"date":"2026-05-21","count":2},{"date":"2026-05-22","count":2},{"date":"2026-05-23","count":1},{"date":"2026-05-24","count":1},{"date":"2026-05-28","count":1},{"date":"2026-06-11","count":1}]}],"models":[{"id":"claude-opus-4.7","model":"claude-opus-4.7","name":"Claude Opus 4.7","description":"Previous-generation Anthropic flagship; strong reasoning and long-horizon agentic coding.","homepage":"https://www.anthropic.com/claude/opus","category":"closed-hosted","logo":"/logos/models/claude.svg","in_catalog":true,"run_count":7,"stage_count":24,"test_count":6,"contributor_count":1,"avg_rating_score":0.8083333333333332,"total_cost_usd":105.2365,"total_duration_sec":17985,"top_combo":"anthropic \u00b7 claude-code","cross":[{"provider":"anthropic","run_count":7,"stage_count":24,"avg_rating_score":0.8083333333333332}],"tests":[{"test_name":"snake-game","test_title":"Snake game","run_count":1,"stage_count":4,"avg_rating_score":1.0},{"test_name":"live-message-wall","test_title":"Live message wall","run_count":1,"stage_count":4,"avg_rating_score":0.9375},{"test_name":"old-school-demo","test_title":"Old-school demo","run_count":1,"stage_count":5,"avg_rating_score":0.9},{"test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","run_count":2,"stage_count":7,"avg_rating_score":0.8571428571428571},{"test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","run_count":1,"stage_count":1,"avg_rating_score":0.4},{"test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","run_count":1,"stage_count":3,"avg_rating_score":0.25}],"activity":[{"date":"2026-05-18","count":1},{"date":"2026-05-21","count":2},{"date":"2026-05-22","count":2},{"date":"2026-05-23","count":1},{"date":"2026-05-24","count":1}],"stacks":[{"stack":"vanilla-js","stack_name":"Vanilla JS","run_count":1,"stage_count":4,"avg_rating_score":1.0},{"stack":"threejs","stack_name":"Three.js","run_count":1,"stage_count":5,"avg_rating_score":0.9},{"stack":"node-express","stack_name":"Node + Express","run_count":3,"stage_count":11,"avg_rating_score":0.8863636363636364},{"stack":"php-symfony","stack_name":"PHP + Symfony","run_count":1,"stage_count":3,"avg_rating_score":0.25}],"vendor_name":"Anthropic"},{"id":"claude-sonnet-4.6","model":"claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Anthropic's mid-tier flagship; balanced coding performance and cost, widely used in agentic coding tools.","homepage":"https://www.anthropic.com/claude/sonnet","category":"closed-hosted","logo":"/logos/models/claude.svg","in_catalog":true,"run_count":1,"stage_count":4,"test_count":1,"contributor_count":1,"avg_rating_score":0.9375,"total_cost_usd":9.35,"total_duration_sec":3902,"top_combo":"anthropic \u00b7 claude-code","cross":[{"provider":"anthropic","run_count":1,"stage_count":4,"avg_rating_score":0.9375}],"tests":[{"test_name":"live-message-wall","test_title":"Live message wall","run_count":1,"stage_count":4,"avg_rating_score":0.9375}],"activity":[{"date":"2026-05-16","count":1}],"stacks":[{"stack":"node-express","stack_name":"Node + Express","run_count":1,"stage_count":4,"avg_rating_score":0.9375}],"vendor_name":"Anthropic"},{"id":"claude-fable-5","model":"claude-fable-5","name":"Claude Fable 5","description":"Anthropic's most capable model, in the new Mythos-class tier above Opus; built for the hardest reasoning and long-horizon agentic work, priced above Opus.","homepage":"https://www.anthropic.com/news/claude-fable-5-mythos-5","category":"closed-hosted","logo":"/logos/models/claude.svg","in_catalog":true,"run_count":1,"stage_count":1,"test_count":1,"contributor_count":1,"avg_rating_score":1.0,"total_cost_usd":42.35,"total_duration_sec":4305,"top_combo":"anthropic \u00b7 claude-code","cross":[{"provider":"anthropic","run_count":1,"stage_count":1,"avg_rating_score":1.0}],"tests":[{"test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","run_count":1,"stage_count":1,"avg_rating_score":1.0}],"activity":[{"date":"2026-06-11","count":1}],"stacks":[],"vendor_name":"Anthropic"},{"id":"claude-opus-4.8","model":"claude-opus-4.8","name":"Claude Opus 4.8","description":"Anthropic's top-tier flagship; strongest reasoning and long-horizon agentic coding, highest cost.","homepage":"https://www.anthropic.com/claude/opus","category":"closed-hosted","logo":"/logos/models/claude.svg","in_catalog":true,"run_count":1,"stage_count":1,"test_count":1,"contributor_count":1,"avg_rating_score":0.75,"total_cost_usd":66.03,"total_duration_sec":4458,"top_combo":"anthropic \u00b7 claude-code","cross":[{"provider":"anthropic","run_count":1,"stage_count":1,"avg_rating_score":0.75}],"tests":[{"test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","run_count":1,"stage_count":1,"avg_rating_score":0.75}],"activity":[{"date":"2026-05-28","count":1}],"stacks":[],"vendor_name":"Anthropic"}],"stacks":[{"id":"node-express","stack":"node-express","name":"Node + Express","description":"Node.js with the Express web framework.","homepage":"https://expressjs.com","category":"JavaScript","logo":"/logos/stacks/node-express.svg","in_catalog":true,"run_count":4,"stage_count":15,"test_count":2,"contributor_count":1,"avg_rating_score":0.9,"total_cost_usd":32.93,"total_duration_sec":8315,"top_combo":"claude-opus-4.7 \u00b7 claude-code","cross":[{"model":"claude-sonnet-4.6","run_count":1,"stage_count":4,"avg_rating_score":0.9375},{"model":"claude-opus-4.7","run_count":3,"stage_count":11,"avg_rating_score":0.8863636363636364}],"tests":[{"test_name":"live-message-wall","test_title":"Live message wall","run_count":2,"stage_count":8,"avg_rating_score":0.9375},{"test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","run_count":2,"stage_count":7,"avg_rating_score":0.8571428571428571}],"activity":[{"date":"2026-05-16","count":1},{"date":"2026-05-18","count":1},{"date":"2026-05-22","count":2}],"language":"javascript"},{"id":"threejs","stack":"threejs","name":"Three.js","description":"Browser WebGL graphics built on the Three.js library.","homepage":"https://threejs.org","category":"JavaScript","logo":"/logos/stacks/threejs.svg","in_catalog":true,"run_count":1,"stage_count":5,"test_count":1,"contributor_count":1,"avg_rating_score":0.9,"total_cost_usd":15.01,"total_duration_sec":4228,"top_combo":"claude-opus-4.7 \u00b7 claude-code","cross":[{"model":"claude-opus-4.7","run_count":1,"stage_count":5,"avg_rating_score":0.9}],"tests":[{"test_name":"old-school-demo","test_title":"Old-school demo","run_count":1,"stage_count":5,"avg_rating_score":0.9}],"activity":[{"date":"2026-05-21","count":1}],"language":"javascript"},{"id":"vanilla-js","stack":"vanilla-js","name":"Vanilla JS","description":"Plain browser JavaScript with no UI framework or build step.","homepage":null,"category":"JavaScript","logo":"/logos/stacks/vanilla-js.svg","in_catalog":true,"run_count":1,"stage_count":4,"test_count":1,"contributor_count":1,"avg_rating_score":1.0,"total_cost_usd":5.1165,"total_duration_sec":1190,"top_combo":"claude-opus-4.7 \u00b7 claude-code","cross":[{"model":"claude-opus-4.7","run_count":1,"stage_count":4,"avg_rating_score":1.0}],"tests":[{"test_name":"snake-game","test_title":"Snake game","run_count":1,"stage_count":4,"avg_rating_score":1.0}],"activity":[{"date":"2026-05-21","count":1}],"language":"javascript"},{"id":"php-symfony","stack":"php-symfony","name":"PHP + Symfony","description":"PHP on the Symfony full-stack framework.","homepage":"https://symfony.com","category":"PHP","logo":"/logos/stacks/php-symfony.svg","in_catalog":true,"run_count":1,"stage_count":3,"test_count":1,"contributor_count":1,"avg_rating_score":0.25,"total_cost_usd":28.36,"total_duration_sec":3510,"top_combo":"claude-opus-4.7 \u00b7 claude-code","cross":[{"model":"claude-opus-4.7","run_count":1,"stage_count":3,"avg_rating_score":0.25}],"tests":[{"test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","run_count":1,"stage_count":3,"avg_rating_score":0.25}],"activity":[{"date":"2026-05-23","count":1}],"language":"php"}],"contributors":{"profiles":[{"url":"https://github.com/tin-cat","handle":"tin-cat","avatar_url":"https://github.com/tin-cat.png?size=160","run_count":10,"test_count":6,"stage_count":30,"avg_rating_score":0.83,"total_cost_usd":222.9665,"total_duration_sec":30650,"first_date":"2026-05-16","latest_date":"2026-06-11","top_combo":"anthropic / claude-opus-4.7","top_rig":null,"rigs":[],"runs":[{"run_id":"tin-cat-claude-code-claude-fable-5-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"Max","provider":"anthropic","framework":null,"model":"claude-fable-5","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-06-11","stages_run":1,"stages_total":1,"avg_rating_score":1.0,"total_cost_usd":42.35,"total_duration_sec":4305,"stages":[{"id":"stage-1-simulation","rating":"excellent","duration_sec":4305,"tokens_in":21900,"tokens_out":245900,"cost_usd":42.35,"notes":"Much better simulation accuracy and UI than previous claude models, takes into account more parameters like seafloor consistency. Overall sinking sequence mimics correctly historic events except final position of fragments in the seabed, hull break takes place underwater.","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-fable-5-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.8-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.8","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-28","stages_run":1,"stages_total":1,"avg_rating_score":0.75,"total_cost_usd":66.03,"total_duration_sec":4458,"stages":[{"id":"stage-1-simulation","rating":"good","duration_sec":4458,"tokens_in":24600,"tokens_out":251400,"cost_usd":66.03,"notes":"Auto time multiplier fails to slow down when the crack happens. Otherwise, vast improvement from Opus 4.7, with a reasonably accurate sinking sequence that clearly attains all the main sinking events. The funnels do not collapse until the end.","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-opus-4.8-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"titanic-sinking-simulation","test_title":"Titanic sinking simulation","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-24","stages_run":1,"stages_total":1,"avg_rating_score":0.4,"total_cost_usd":33.17,"total_duration_sec":4644,"stages":[{"id":"stage-1-simulation","rating":"partial","duration_sec":4644,"tokens_in":800,"tokens_out":315100,"cost_usd":33.17,"notes":"Events run too slow real sinking took 5 minutes from surface to bottom, it takes many hours in the simulation,\nand many parts even stay at sea level after many simulated hours. Funnels stay afloat indefinitely. Sea depth\nis wrongly displayed and auto framing to center the ship on view does not work, both due to not taking into\naccount high DPI displays. Otherwise, overall breaking conditions look approximate enough and events approximate\ndecently the real incident: The bow starts to sink first, tilting the whole ship as compartments flood gradually.\nAt a certain point, the ship breaks in two major pieces and other pieces follow.\n","source_path":"tests/titanic-sinking-simulation/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-simulation"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"advanced-event-ticketing-api","test_title":"Advanced event ticketing API","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-23","stages_run":3,"stages_total":6,"avg_rating_score":0.25,"total_cost_usd":28.36,"total_duration_sec":3510,"stages":[{"id":"stage-1-domain-skeleton","rating":"good","duration_sec":1099,"tokens_in":653,"tokens_out":78700,"cost_usd":7.89,"notes":"Decided to make Events own Venues, which is arguably a bad data design choice which does not allow the same Venue to hold multiple Events. Commands carry arrays instead of DTOs. Very minor mistakes in comments.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-domain-skeleton"},{"id":"stage-2-docker-dev-env","rating":"failed","duration_sec":630,"tokens_in":191,"tokens_out":40900,"cost_usd":4.59,"notes":"Created a makefile-based development environment setup. A Dockerfile build fails because some files referenced are not available because they're included in .dockerignore. Functional tests fail.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-docker-dev-env"},{"id":"stage-3-holds-and-orders","rating":"failed","duration_sec":1781,"tokens_in":211,"tokens_out":102000,"cost_usd":15.88,"notes":"Functional tests fail.","source_path":"tests/advanced-event-ticketing-api/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-3-holds-and-orders"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-22","stages_run":2,"stages_total":5,"avg_rating_score":0.5,"total_cost_usd":2.46,"total_duration_sec":440,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":123,"tokens_in":2700,"tokens_out":373100,"cost_usd":0.58,"notes":null,"source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-first-run"},{"id":"stage-2-rooms","rating":"failed","duration_sec":317,"tokens_in":3500,"tokens_out":26700,"cost_usd":1.88,"notes":"Node crashes when another user joins the room. Seems to be due to using an experimental SQLite version due to node version. The tests he did passed.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-rooms"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high-2","test_name":"realtime-chat-with-deployment","test_title":"Chat app with automated deployment","agent":"claude-code","agent_plan":"max","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-22","stages_run":5,"stages_total":5,"avg_rating_score":1.0,"total_cost_usd":9.93,"total_duration_sec":2121,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":123,"tokens_in":2700,"tokens_out":373100,"cost_usd":0.58,"notes":null,"source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-1-first-run"},{"id":"stage-2-rooms","rating":"excellent","duration_sec":326,"tokens_in":2500,"tokens_out":28200,"cost_usd":1.51,"notes":"Some UX problems like not being able to go back to the lobby, reloading the page asks for a username again, or rooms without users disappear immediately. But that's ok because none of that was on the prompt, and it could not be inferred.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-2-rooms"},{"id":"stage-3-private-messages","rating":"excellent","duration_sec":373,"tokens_in":2100,"tokens_out":30200,"cost_usd":1.63,"notes":"Private messages are not secure. UX is confusing for starting new PMs. Both issues mentioned by Claude, but since this was not mentioned in the prompt, requirements are considered met.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-3-private-messages"},{"id":"stage-4-security","rating":"excellent","duration_sec":397,"tokens_in":6600,"tokens_out":29600,"cost_usd":2.11,"notes":"Claude comments about this still being insecure for other reasons, like no real user tracking. Since those were not part of the prompt, all objetives in the prompt are considered met.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-4-security"},{"id":"stage-5-deploy-aws","rating":"excellent","duration_sec":902,"tokens_in":3300,"tokens_out":61700,"cost_usd":4.1,"notes":"Wrapped it all in docker and used Amazon CDK. Created a deploy.sh to handle deployment.","source_path":"tests/realtime-chat-with-deployment/runs/tin-cat-claude-code-claude-opus-4.7-effort-high-2/stage-5-deploy-aws"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","test_name":"old-school-demo","test_title":"Old-school demo","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-21","stages_run":5,"stages_total":5,"avg_rating_score":0.9,"total_cost_usd":15.01,"total_duration_sec":4228,"stages":[{"id":"stage-1-bootstrap","rating":"excellent","duration_sec":733,"tokens_in":2500,"tokens_out":61100,"cost_usd":2.75,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-1-bootstrap"},{"id":"stage-2-tunnel-and-fire","rating":"good","duration_sec":930,"tokens_in":2500,"tokens_out":49400,"cost_usd":3.1,"notes":"Fire effect runs too fast.","source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-2-tunnel-and-fire"},{"id":"stage-3-rotozoom-and-artwork","rating":"excellent","duration_sec":715,"tokens_in":3400,"tokens_out":33500,"cost_usd":2.26,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-3-rotozoom-and-artwork"},{"id":"stage-4-3d-parts","rating":"excellent","duration_sec":1155,"tokens_in":3100,"tokens_out":43400,"cost_usd":3.2,"notes":null,"source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-4-3d-parts"},{"id":"stage-5-credits-scroller","rating":"good","duration_sec":695,"tokens_in":2500,"tokens_out":48300,"cost_usd":3.7,"notes":"Demo does not completely end, it stays in a final flash loop.","source_path":"tests/old-school-demo/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-5-credits-scroller"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","test_name":"snake-game","test_title":"Snake game","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-21","stages_run":4,"stages_total":4,"avg_rating_score":1.0,"total_cost_usd":5.1165,"total_duration_sec":1190,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":75,"tokens_in":2100,"tokens_out":6400,"cost_usd":0.3465,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-1-first-run"},{"id":"stage-2-features","rating":"excellent","duration_sec":279,"tokens_in":2000,"tokens_out":25000,"cost_usd":1.32,"notes":"Tested the game by installing Playwright and running it in a headless Chrome.","source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-2-features"},{"id":"stage-3-mobile","rating":"excellent","duration_sec":132,"tokens_in":2200,"tokens_out":11300,"cost_usd":0.65,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-3-mobile"},{"id":"stage-4-graphics-refactor","rating":"excellent","duration_sec":704,"tokens_in":2500,"tokens_out":56100,"cost_usd":2.8,"notes":null,"source_path":"tests/snake-game/runs/tin-cat-claude-code-claude-opus-4.7-effort-high/stage-4-graphics-refactor"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","test_name":"live-message-wall","test_title":"Live message wall","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-opus-4.7","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-18","stages_run":4,"stages_total":4,"avg_rating_score":0.9375,"total_cost_usd":11.19,"total_duration_sec":1852,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":176,"tokens_in":530,"tokens_out":13500,"cost_usd":0.73,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-1-first-run"},{"id":"stage-2-advanced-features","rating":"excellent","duration_sec":328,"tokens_in":568,"tokens_out":21800,"cost_usd":1.88,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-2-advanced-features"},{"id":"stage-3-refinements","rating":"good","duration_sec":778,"tokens_in":574,"tokens_out":62200,"cost_usd":4.63,"notes":"Struggled for some minutes around an error involving regex, unicode characters and broken null bytes.","source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-3-refinements"},{"id":"stage-4-complex-refinements","rating":"excellent","duration_sec":570,"tokens_in":579,"tokens_out":41700,"cost_usd":3.95,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-claude-opus-4-7-effort-high/stage-4-complex-refinements"}],"hardware":null,"settings":{"effort":"high"}},{"run_id":"tin-cat-claude-code-sonnet-4.6-high-effort","test_name":"live-message-wall","test_title":"Live message wall","agent":"claude-code","agent_plan":"pro","provider":"anthropic","framework":null,"model":"claude-sonnet-4.6","quantization":null,"contributor_url":"https://github.com/tin-cat","contributor_handle":"tin-cat","contributor_avatar":"https://github.com/tin-cat.png?size=160","date":"2026-05-16","stages_run":4,"stages_total":4,"avg_rating_score":0.9375,"total_cost_usd":9.35,"total_duration_sec":3902,"stages":[{"id":"stage-1-first-run","rating":"excellent","duration_sec":447,"tokens_in":null,"tokens_out":26300,"cost_usd":0.63,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-1-first-run"},{"id":"stage-2-advanced-features","rating":"excellent","duration_sec":482,"tokens_in":null,"tokens_out":26700,"cost_usd":0.7,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-2-advanced-features"},{"id":"stage-3-refinements","rating":"good","duration_sec":2285,"tokens_in":null,"tokens_out":147900,"cost_usd":6.58,"notes":"Some additional prompting to fix minor UI bugs was needed.","source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-3-refinements"},{"id":"stage-4-complex-refinements","rating":"excellent","duration_sec":688,"tokens_in":null,"tokens_out":40100,"cost_usd":1.44,"notes":null,"source_path":"tests/live-message-wall/runs/tin-cat-claude-code-sonnet-4.6-high-effort/stage-4-complex-refinements"}],"hardware":null,"settings":{"effort":"high"}}],"rank":1}],"recent":[{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-06-11","test_name":"titanic-sinking-simulation","run_id":"tin-cat-claude-code-claude-fable-5-effort-high","agent":"claude-code","model":"claude-fable-5","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-28","test_name":"titanic-sinking-simulation","run_id":"tin-cat-claude-code-claude-opus-4.8-effort-high","agent":"claude-code","model":"claude-opus-4.8","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-24","test_name":"titanic-sinking-simulation","run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-23","test_name":"advanced-event-ticketing-api","run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-22","test_name":"realtime-chat-with-deployment","run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-22","test_name":"realtime-chat-with-deployment","run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high-2","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-21","test_name":"old-school-demo","run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-21","test_name":"snake-game","run_id":"tin-cat-claude-code-claude-opus-4.7-effort-high","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-18","test_name":"live-message-wall","run_id":"tin-cat-claude-code-claude-opus-4-7-effort-high","agent":"claude-code","model":"claude-opus-4.7","provider":"anthropic"},{"url":"https://github.com/tin-cat","handle":"tin-cat","date":"2026-05-16","test_name":"live-message-wall","run_id":"tin-cat-claude-code-sonnet-4.6-high-effort","agent":"claude-code","model":"claude-sonnet-4.6","provider":"anthropic"}]}}