One name, one widget
A widget's name is its file name, which starts with a capital letter, and it names exactly one widget in a document. A project widget can't share a system widget's name; two widgets can't share a name; a capitalized tag that names no widget is not passed through as HTML. Each of these is a problem, never a silent choice.
Why
Widgets compose — a system widget renders others by name, and so does
a project's. If a project's Tabs.tsx replaced devpage's, every widget built
on Tabs would get one with different props and break in ways nobody asked
for, far from the file that caused it. A capitalized tag passed through as HTML
would render nothing and say nothing. Capital letters keep widgets apart from
HTML tags, which are lowercase, as React does.
Check
The widget set is built from the system widgets and the capitalized
files of the document's widgets folder, and a clash or an unknown capitalized
tag becomes a problem in the preview and in devpage check. A test gives a
project a Callout.tsx and finds the problem, and the system Callout still
rendered.