What binds whoever changes the kit: the shape of an API, how a primitive arrives and leaves, and what holds the system together.
A primitive without a page does not exist, and a page without a primitive is a lie. Adding a component and adding its page is ONE change, not two — the repository's checks refuse either half on its own.
And the version. A change to a component without moving the version on its page does not pass: releases stand on those versions, so a version that does not move is a release that never ships.
A kit component is recognised by what it allows and what it does not. These four rules hold for every one of them, so you do not have to ask again at each.
className is layout, never look. Width, spacing, placement in a grid — nothing that changes colour, radius, weight or inner padding. A component whose whole point is to look the same everywhere does not take it at all; every component page says which it is, above the properties table.ref. Focusing a field, scrolling a row into view, setting indeterminate — all through the API. Reaching inside with querySelector ties the screen to the component's insides, which are free to be renamed.IngotProvider dictionary and are English without it.The kit is installed from a tag, so its callers do not sit in this repository. Removing a component without notice therefore means somebody's build stops on a Monday morning with nothing to read. Leaving has three steps; growing up has two conditions.
A component moves from beta to stable on evidence, not on age: two consumers have to use it (the doc web does not count — it demonstrates everything) and it must go two releases without a major bump. Marking something stable because it looks finished is the fastest way to a system that may not fix its own mistakes.
By that criterion 36 of the 55 primitives are in beta today and stay there: the kit does not yet have two consumers outside this repository. Once it does, the list gets another pass — and there will be something to decide on.