Typed metadata envelope. Holds non-validation, non-rendering-critical
information (docs, aliases, examples, deprecation, role). Per-scalar
validation constraints live on the relevant scalar’s typed substructure,
not here.
Stable, language-independent identifier for a named type definition. Must
be unique within the enclosing super::SchemaGraph. Conventional format
is a dot-separated namespace path (e.g., "myapp.users.user"). Each SDK
provides a default derivation rule (typically based on the local language’s
type name); cross-language interop requires the same TypeId on every side,
which users can pin via the SDK’s named attribute.
Open registry of consumer-facing roles a type may carry. Unknown roles are
preserved as Role::Other so the producer’s intent is not lost when a
receiver does not understand the role.