Agreed, and the migration arrived there more by accident than design. Its final pull request added a test that fails if a twelfth search box ever appears, which is the codebase saying no in about the only way it reliably can.
What surprised me is how much of the work the cheap half did. One paragraph in CLAUDE.md, sitting next to nine hundred lines of exactly the code it forbids, flipped 32 of 32 runs from hand-rolling to reuse. Nearest-thing retrieval lost to a written rule, which is not what I expected going in.
Where your point bites is the half the rule could not reach. Reaching for the component is not the same as calling it correctly: with the rule alone, 28.6% of calls invented a prop that does not exist, and with only the filename visible, 82.1%. So making the shared thing cheapest to use has to include making its interface reachable, or the model writes a confident call to an API it has never seen.
Adam Lewis
Product Engineer/Architect navigating the AI revolution
Reuse is where it gets harder. Showing the model the component isn't the same as getting it to reach for that component instead of writing a twelfth. Retrieval tends to surface whatever is nearest, and nearest is usually the copy in the file already open. Making the shared one the cheapest thing to use is what fixes this. The codebase should say no when a second version appears. The next duplicate only stays out if something is there to stop it.