Skip to content
ThorbisInterface Guidelines (opens in a new tab)

Keeping one system

How the strongest systems stop their docs, tokens, and platforms from contradicting each other. All research.

Keeping one system: owners, guards, and exceptions

A design system rarely breaks in one bad screen. It breaks when two pages state the same fact and one of them changes. The useful systems treat documentation as data: one owner per fact, every restatement checked against it, and every exception written down where it happens. The guards on this page run in contradiction-guard.test.mjs on every build.

  • One owner per fact. Every number, color, and rule has exactly one file that defines it. Every other page links to it or quotes it. A second definition is not a backup; it is the next contradiction. AG-015 already says this. The rest of this page is how we prove it.
  • A restated number is a test. When prose repeats a token, a table row, or a size, a check parses the claim and compares it with the owner. The Surfaces block, the light table, the type table, control heights, radii, and platform target sizes in DESIGN.md are all compared with src/styles.css and the Native contract on every build.
  • Every way into a theme is the same theme. Light chosen in Settings and light inherited from the system must paint the same tokens. They drifted: the field, the raised panel, and the panel rim differed by path. A guard now compares the two blocks token by token.
  • Cite by id, and every id must exist. D, AG, and HIG rules are cited by number across skills, pages, and data. A citation that points at a rule nobody defines is a broken promise. The build fails on any id its owner does not define.
  • An exception is written where it happens. Weights stay 400 and 500. A drawing of host chrome, such as an iOS large title or a controller glyph, may keep the host weight with a type-scale-exception note on the same line. No note, no exception. Silent exceptions become the next default.
  • Debt only goes down. Where a rule cannot land in one change, record a baseline and let checks fail on anything above it. Never raise a baseline to make a check pass. AG-005.
  • Print the rule from the data. The logo page and logo Markdown read one file. The constitution mirror is checked byte for byte. A page generated from the owner cannot disagree with it. A page copied from the owner always will, eventually.
  • Tokens carry their meaning and their retirement. The Design Tokens Format Module 2025.10 gives every token a type, a description, aliases, and a deprecated flag. Exporting our tokens in that shape would let native apps, Figma, and decks read the same values and the same reasons instead of copying hex. Proposed, not adopted.
  • Words are linted like code. Prose linters such as Vale run substitution rules (Ticket becomes Job, Submit becomes the verb, 7am becomes 7 a.m.) and existence rules on every document. The Words table in DESIGN.md is already that list. Proposed, not adopted.
  • A newer rule supersedes; it never sits beside. Decision records carry a status: proposed, accepted, superseded by. When a rule changes, the old wording is marked superseded and linked, not left to compete. Normative words stay few and literal: MUST, SHOULD, MAY.
  • Name what no check reads. A guard only checks what it parses. Geometry described in sentences, motion described in words, and images are still read by a person. Each guarded owner says which sections a reviewer must still read by eye.

Sources: Design Tokens Format Module 2025.10, A design system drift guard, Automating design systems, Mozilla use-design-tokens, PostHog on Vale, Datadog on Vale, RFC 2119, and Design decision log.

Applied bookmark research

Reviewed 2026-09-06. These examples reinforce the existing owners; they do not introduce another visual style or claim the product behavior is implemented. Read the 26-source review and access limits.

Make the task easier, not the screen busier

A feature can look complete while the dispatcher still has to reconstruct context or wait for unrelated content.

Start from one person, interruption, and completed task. Keep the current job and its next action usable while optional evidence arrives. Treat the real constraint as part of the brief, not something polished away afterward.

Thorbis example. For assigning a tech, show the job, relevant availability, and the consequence of the assignment. Do not make the dispatcher traverse a marketing-style sequence or a new shell to finish a routine task.

Verify. Walk through the task with representative long and missing records. Check that the essential action remains understandable when optional content is slow or unavailable. Record the result rather than claiming a performance improvement without measurement.

Do not import. No additional shell, feature hero, framework migration, or new dependency. Keep the approved surface role.

Open the product skill · Evidence: Design Engineer Principles; How we think about design; Component Architecture for React Server Components

Preserve the place as the collection grows

Large customer, property, and inspiration collections become expensive to navigate when every inspection loses the current place.

Treat filters, selected records, scroll, and Back behavior as part of the task. Loading a child or optional panel should not reset the whole collection. A saved reference includes enough context to be useful when revisited.

Thorbis example. Open a property from a filtered customer list and return to the same filter and position. On the inspiration wall, reserve the media footprint and retain source credit even when the preview is unavailable.

Verify. Try refresh, Back and Forward, a direct record link, an empty result, a failed preview, and a long collection. Check that late data does not overwrite a draft or move the action under the pointer.

Do not import. No unbounded eager media, private information in shareable URLs, or a local-only storage promise borrowed from Copper.

Open the ecosystem skill · Evidence: 7 Principles of Rich Web Applications; Component Architecture for React Server Components; Philosophy; Copper

Loading search…

Loading search. You can close this message and keep reading.