Docs Guides
Contributingstable
How a component enters Print Desk, earns stable, and leaves it: a lightweight RFC, one whole landing, the automated reviewer, and graduation by the status field.
The lightweight RFC
A proposal is a draft DSDS entity, nothing more. Before any code, write the entity with status draft: the scenarios it serves, evidence the need repeats in at least three real places, what existing components it composes, and what it must never be confused with. A draft entity is cheap to write and cheap to reject, and if it graduates, the RFC already is the documentation.
One whole landing
A component lands on all four surfaces in one change: the component code, its semantic CSS section, the DSDS entity, and the registry story in the styleguide, with contrast contracts for any pairing the component introduces. Partial landings do not merge. The Figma library is generated from the same tokens afterward, never maintained as a fifth surface by hand.
The automated reviewer
npm run verify is the first reviewer on every change and it does not negotiate: the token build, every contrast contract in both themes, DSDS schema validation over every entity, and the changelog version gate. Storybook runs axe at error level on every story on top. A red gate is a finished review with a rejection; fix the change, not the gate.
Graduation
The status field in each entity is the lifecycle: draft means proposed, experimental means shipped and allowed to change, stable means the component has full docs, a rendered styleguide page, and real usage in the workspace. Deprecated is a stage, not a deletion: it must name its replacement and migration path, and it lands together with its changelog entry.
Human review, recorded
Design review happens in the browser on rendered output. A veto never dies in a comment thread: it is recorded as a guideline in the entity it applies to, in the decisions log, and, when it changes shipped behavior, as a changelog entry. The next contributor, human or agent, inherits the ruling instead of rediscovering it.
Guidelines
- mustA new component lands with all four surfaces in one change: code, semantic CSS, DSDS entity, and registry story.
- mustA new foreground and background pairing adds its contrast contract in the same change that introduces it.
- must-notRaw hex, px, or ms values in src; every value binds a generated token variable.
- mustA deprecation names its replacement and migration path, and lands together with its changelog entry.
- mustEvery review veto is recorded as a guideline in the entity it applies to and in the decisions log.