Claude Code, conventions, and automatic choices

Background

This site runs on Roda, a lightweight Ruby web framework. It was rebuilt recently using Claude Code, Anthropic’s agentic CLI tool, which has direct access to the filesystem, can run shell commands, make commits, and interact with external tools, all within the same session.

The feature

After the initial rebuild I asked Claude to add the email subscribe component to the bottom of individual blog posts. It already existed on the posts index page. A small change: extract it into a shared partial and include it in both templates.

The mistake and the fix

Claude named the partial _subscribe.erb, then tested the result. The server threw a file-not-found error. Claude read the log, which was unambiguous: Roda was looking for subscribe.erb, not _subscribe.erb. Claude renamed the file and the error was resolved, without any input from me. A minor mistake, and quite human like.

The convention

In Rails, partials are prefixed with an underscore by convention. Roda has no such convention. The render plugin documentation shows through example that render(:bar) maps directly to bar.erb. I asked Claude whether ingesting that documentation upfront would have prevented the mistake, which it said it would have. The full Roda rdoc is around 20 to 30 pages, and Roda is less represented in training data than Rails or Sinatra.

The explanation

I asked Claude what the source of the failure was. Claude said the Rails partial convention had been reinforced so often in training data that it did not surface as a decision requiring justification. It was applied automatically, not because the convention seemed right, but because it did not feel like a choice at all.

In that sense, it is not entirely unlike muscle memory: a pattern so well-practiced that it bypasses conscious evaluation and executes on its own.