Skip to content

v1.5.0: Bevy, and a benchmark across agents

Latest

Choose a tag to compare

@morganlinton morganlinton released this 30 Oct 14:16

Bevy support, a Claude Code vs Codex benchmark, and every Rust example compiled in CI. Thanks to @tmchow and @DylanCosto for their pull requests, and to @millionart for proposing Bevy support.

Bevy support

A new Bevy 0.20 reference teaches the skills which general Rust rules don't fit Bevy systems (by-value system parameters, the prelude, plain-data components, complex queries) and which ECS bugs compile cleanly but fail at runtime: two queries that can reach the same component mutably (a B0001 panic on the first frame), systems with no order between them, deferred Commands read back too early, and unwrapped single() calls. It also lists the four lint allows a Bevy crate needs. Every behavior it describes was confirmed with a test on bevy 0.20.0. Two new eval cases cover it: a review of a combat plugin with planted bugs, and a feature added to the fixed plugin.

Claude Code vs Codex, with and without the skills

All eight eval cases ran on Claude Code (Opus 5.5) and Codex CLI (default model), with and without the skills, graded blind:

Without skills With skills
Claude Code 72/85 (85%) 80/85 (94%)
Codex CLI 53/85 (62%) 76/85 (89%)

The biggest gains were in code review. It's one run per setup, and one case got worse with the skills; the benchmark page has the method, the caveats, and every graded assertion.

Every Rust example is compiled

scripts/check-examples.py compiles every Rust code block in the skills, the reference guides, and the README on every pull request, and reports a broken one at its markdown line. The agent copies these examples into real code, so now they have to build. Contributed by @tmchow in #4.

New rules and lints

  • Application code takes String or &str rather than impl Into<String>, and library code returns an iterator rather than a Vec collected only to return it. rust-review flags both. From the Google Rust Style Guide; contributed by @tmchow in #9.
  • Two more lints: missing_assert_message and exhaustive_enums (libraries only). Contributed by @tmchow in #8.
  • Framework preludes such as use bevy::prelude::* are now allowed by the no-globs rule.

Fixed

  • The skill paired get with get_unchecked as a safe API and its panicking twin, but an out-of-bounds get_unchecked is undefined behavior. It now pairs v[i] with v.get(i). Reported and fixed by @DylanCosto in #3 and #6.

Full details are in the changelog. Update a Claude Code install with claude plugin update beautiful-rust; for other agents, re-run your install command.