claude-code - 💡(How to fix) Fix Whoever signed off on auto-naming the load-bearing identifier of a document with random adjective+verb+surname owes the world an apology [2 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#48129Fetched 2026-04-15 06:32:20
View on GitHub
Comments
2
Participants
2
Timeline
4
Reactions
0
Author
Timeline (top)
commented ×2labeled ×2

Error Message

Derive the slug from the plan's title (or explicit slug: field). Refuse to create a plan without one. If the caller wants fun codenames they can add them as a codename: field separately — don't promote them to the primary identifier. And regardless of naming scheme: never silently overwrite an existing plan under a colliding key. Refuse with an error; require explicit disambiguation.

Root Cause

Worse than annoying: the random-word namespace is finite. With enough plans (and users hit "enough" in the low hundreds), the generator produces the same codename twice for two unrelated plans. Because the plan store keys on the slug, the second plan overwrites the first. There is no collision detection, no suffixing, no refusal. One plan's work — potentially hours of design and decomposition — silently replaces another's, and the user has no way to even know it happened until they go looking for the old one and find something unrelated under its name.

RAW_BUFFERClick to expand / collapse

What's happening

Claude Code's plan-creation path auto-generates slugs for new plans using a random <adjective>-<verbing>-<noun> template. Examples from one user's archive of 140 plans produced by this tool:

  • replicated-conjuring-wilkes.md (actual content: "Extract MetalRendererProtocol")
  • binary-juggling-hejlsberg.md
  • fuzzy-honking-lark.md
  • goofy-juggling-fox.md
  • bubbly-petting-stardust.md
  • cozy-wandering-teacup.md
  • wild-cuddling-dream.md
  • vectorized-petting-lamport.md
  • nested-plotting-steele.md
  • effervescent-dazzling-frost.md

Out of 140 plans generated by this mechanism, 137 had codenames and only 3 had semantic names.

Why this is wrong

The plan slug is the load-bearing identifier of the document — it's what gets referenced in commit messages, chats, prior-conversation searches, cross-plan links, and graph node URIs. A codename like fuzzy-honking-lark carries zero information about what the plan contains. To find a plan you have to open and read the file, every time. Multiply by hundreds of plans and the identifier is worse than useless: it actively obstructs retrieval.

This is also the single behavior your CLAUDE.md system instructions most forcefully prohibit: fabrication of values the model doesn't actually know. The plan's title — sitting inside the file as # Plan: Fix OwnsInt/object() Aspect Routing — is a perfectly good source of a real slug (fix-ownsint-object-aspect-routing). The tool ignores it and fabricates a random one instead.

Serious bug: slug collisions silently overwrite plans

Worse than annoying: the random-word namespace is finite. With enough plans (and users hit "enough" in the low hundreds), the generator produces the same codename twice for two unrelated plans. Because the plan store keys on the slug, the second plan overwrites the first. There is no collision detection, no suffixing, no refusal. One plan's work — potentially hours of design and decomposition — silently replaces another's, and the user has no way to even know it happened until they go looking for the old one and find something unrelated under its name.

This is pure data loss caused by a design that fabricates primary keys from a tiny bag of random words. It is not acceptable behavior for any system of record.

Impact

  • Plans are unfindable by name. Every lookup requires content scan.
  • Cross-references between plans, chats, and commits rot instantly — nobody remembers that fuzzy-honking-lark means the BRDF work.
  • Archaeological audit of "what did we plan and did we do it?" becomes a manual reading exercise across hundreds of randomly-named files.
  • It trains users to not trust the slug, which trains them to not use slugs at all.
  • Silent data loss via slug collision (see above).

Suggested fix

Derive the slug from the plan's title (or explicit slug: field). Refuse to create a plan without one. If the caller wants fun codenames they can add them as a codename: field separately — don't promote them to the primary identifier. And regardless of naming scheme: never silently overwrite an existing plan under a colliding key. Refuse with an error; require explicit disambiguation.

Evidence

Archive directory with all 140 examples available on request. This report came out of a cleanup session where the user had to manually inspect each filename to understand what work it described.

extent analysis

TL;DR

Derive the plan slug from the plan's title or an explicit slug: field to prevent silent data loss and improve plan discoverability.

Guidance

  • Derive the slug from the plan title, as suggested, to ensure it carries meaningful information about the plan's content.
  • Introduce a codename: field for users who want to add fun codenames, keeping them separate from the primary identifier.
  • Implement collision detection to prevent silent overwriting of existing plans, instead refusing with an error and requiring explicit disambiguation.
  • Consider adding a validation step to ensure that every plan has a unique and meaningful slug before creation.
  • Review the current plan store's keying mechanism to ensure it can handle the new slug generation approach.

Example

No code snippet is provided as the issue does not include specific implementation details, but an example of how a plan might be defined with a derived slug could be:

# Plan: Fix OwnsInt/object() Aspect Routing
slug: fix-ownsint-object-aspect-routing
codename: fuzzy-honking-lark

Notes

The suggested fix assumes that the plan title or slug: field will always be unique. Additional handling may be necessary for cases where multiple plans have the same title or slug.

Recommendation

Apply the workaround by deriving the slug from the plan's title or an explicit slug: field, as this directly addresses the issue of silent data loss and improves plan discoverability.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING