Four Robots, Independently
Somebody noticed that the button which opens the assistant looked different in every application, and went to compare them. What the sweep found was not a taste disagreement:
- The shared component itself defaulted to a robot emoji when an app passed no emblem — so every app that passed nothing drew a robot.
- Two apps used a robot glyph from an icon library, in a launcher and a drawer.
- One used a sparkle.
- One used a speech bubble labelled with a generic word.
- And the assistant's own application used the robot glyph twice, in her own interface.
Four independent robots, one of them the shared default, one of them in her own app.
The Cause Was Ownership, Not Coordination
Nobody chose that. It is what the question "what icon means the AI thing" returns every time it is asked, by anyone, in any icon library — a robot, a sparkle, or a speech bubble. Six independent answers converged because they were all answering the same badly-posed question.
And the question was being asked at all because the assistant's likeness had no owner. Every other shared concern in this family had one: the client layer, the publish sequence, the vocabularies. Her face did not, so each app answered locally, and the local answer is whatever the convention returns.
The owner's ruling was blunt and it was about her rather than about the code: she is not a bot, and no robot of any kind stands in for her — not in a launcher, a header, an empty state, or a document.
The Fix Was a Default, Not a Rule
The answer was not a style guide. She already has a face — the assistant's own icon — so it was downscaled, inlined into the shared component as a data URL, and made the default emblem. An app that passes nothing now gets her.
Two implementation details, both deliberate. Inlined rather than referenced, because the deploy mechanism is text-only and because a launcher that fails to load an image while the assistant is offline would be worse than no launcher. And the default is her, not a placeholder — that is what makes this hold.
Enforcement is the default, not vigilance. A rule requires every future author to know it and remember it at the moment they pick an icon; the failure mode is omission, which is the most common thing that happens. A default requires nothing, and drift now requires somebody to actively override — which is rare and visible in a diff. The rule was also carved into the template new apps are born from, so a new sibling arrives already correct rather than being corrected later.
The division of ownership is worth stating exactly, because it is not "the shared layer owns everything": the shared layer owns what she looks like; each app owns where the launcher sits and how it is toned, and may pass its own emblem for its own identity in a header. What no app may do is put a machine in her place.