Governance lives as records in your repository
Loom keeps governance as files in a loom/ folder in your own repository: owners, rules, exceptions, proposals, patterns, deprecations, layer versions and rituals. Loom reads them, checks work against them and writes to them only through changes your team reviews. If you stop using Loom, the records stay with you. Working
This is what those records look like for Loom Base, our own open-source system:
Governance as data: Loom Base
Status: proposed| Area | Scope | Owner | Agents may |
|---|---|---|---|
| foundations | tokens/** | base-core | suggest |
| components | contracts/*.contract.json | base-core | suggest |
| ai-patterns | contracts/ai-*.contract.json and 5 more | base-core | suggest |
| templates | templates/** | base-core | suggest |
- Contribution flow
- request → triage → draft → review → release
- Decisions a request can end in
- accept, accept-with-conditions, gather-evidence, keep-local, decline
- What counts as a major version
- remove or rename a component, prop, part, token or event
- change a default
- change a role, accessible-name source or keyboard behaviour
- Layers and locks
- locked, extendable, overridable, default. Build fails when a layer breaks a lock or drops a declared contrast pair below WCAG 2.2 AA.
packages/base/governance.json when this page is built. The file says its own status: proposed, not yet reviewed by the owner, and the area owner is a placeholder.On our copy of Story Atelier, adding these records (an owner per component, templates, a proposal schema, changesets, decision records, a deprecation timeline and a two-layer model) moved Governance from 49 to 100. Working That work was done on our copy and scored with Loom's own open rubric, and the founder has not yet accepted the records.
In our reading of 14 public design systems in October 2026, none published its governance as machine-readable records. They describe governance in prose. Loom makes it data that people, tools and agents can all read.
Governance records live in your repository
Diagram- your-product/
- src/
- components/
- tokens/
- loom/
- governance.json
- rules/
- exceptions/
- proposals/
- patterns/
- deprecations/
- rituals/
- Loom readsthe
loom/folder and the code next to it - Loom proposesevery change as a pull request
- Your team mergesLoom never writes to the branch directly
Every rule has an owner and a reason
A rule is a versioned record: an owner, a rationale, a severity, a scope and how it is checked. Changing a rule follows the same flow as code: propose, review, accept, release.
Decisions are records too, with their reason. A real one from Loom Base:
packages/base/decisions/0003-component-tokens-required.md
Status Decided by the owner, 25 Oct 2026
Decision Component tokens are required.
Why Agents need precise, machine-readable mappings per component.
Consequence Base generates the component tier from each contract's tokens
block (about 1,300 tokens). Components read only their own
component tokens; each aliases a semantic token.
By default, raw colours, raw spacing and rebuilt components are warnings. The owner of an area can promote a rule to an error for that area. Accessibility rules are always errors: no record and no setting can turn them into warnings. Working
Exceptions that end on their own
Sometimes a team must break a rule. An exception records the rule, the scope, the reason, who asked, who granted it and an expiry date, at most 90 days later. While it is active, the finding is shown as information. When it expires, the finding comes back on its own and the exception is flagged for renewal or closure. Only the accessibility owner can grant an exception to an accessibility rule. Working
# loom/exceptions/checkout-banner.yaml (sample record, in the format Loom checks)
rule: no-raw-colour
scope: Checkout banner
reason: Campaign artwork, ends with the campaign
requested_by: Growth team
granted_by: Foundations owner
expires: 2026-11-08 # at most 90 days after it was granted
Patterns are written so they can be checked
A pattern is a record: the problem it solves, the components it uses, rules on what to do and what to avoid, content guidance, accessibility notes and a working example. Agents build from it, and Loom checks a composition against it. A regional or product layer can extend a pattern within its lock level, for example adding phone sign-in to the core sign-in pattern. Working
A component is promoted only when three conditions are met
A component built for one product lives in that product's layer. It moves to a shared layer when three things are true: it meets the definition of ready, an owner is named at the new layer, and design, engineering and accessibility have signed off. Loom shows each condition as met or missing, with its evidence. Working
Every request waits in one queue, with a due date
Every item waiting for a decision shows its due date and the working days left. The default service level is three working days; your organisation sets its own. Working days skip your organisation's holidays. When an owner is away, or a service level is about to be missed, the item goes to the owner's named delegate. Working
Health is measured, and "not measured" is said plainly
The system owner's first view shows four groups: adoption (how much of the interface comes from the system), drift (differences between code, Figma and contracts), flow (proposal lead time, service levels met, open exceptions) and quality (accessibility, readiness and test coverage). Anything Loom cannot measure says "not measured". It is never estimated. Working
A system, seen as cloth
Concept · sample data| Web app | iOS | Android | Marketing | Admin | |
|---|---|---|---|---|---|
| Actions | |||||
| Forms | |||||
| Navigation | |||||
| Feedback | |||||
| Overlays | |||||
| Data display | |||||
| AI patterns |
- Tightly woven 90+
- Holding together 75+
- Taking shape 60+
- Loose threads under 60
Navigation · Marketing · Loose threads
Tabs are re-implemented on three screens, each with its own spacing and focus style.
- The fix
- Swap the three local copies for the system Tabs; the visual result stays the same.
- Who decides
- Navigation owner
Seven loose threads
- Navigation · Marketing: Tabs are re-implemented on three screens, each with its own spacing and focus style.
- Overlays · iOS: LegacyModal is still used seven times, a year after it was deprecated.
- Data display · Admin: 23 raw colour values bypass the tokens in tables and charts.
- AI patterns · Android: Generated answers are not labelled as AI on two surfaces.
- Forms · Android: Select differs between code and the design library: different height and error text.
- Feedback · iOS: Toast stays for 2 seconds; its contract says 5 seconds for messages with an action.
- Overlays · Android: Dialog does not return focus to the button that opened it.
Breaking changes are decided by evidence
Loom compares two versions of a contract and decides the version change. Removed or renamed properties, changed defaults and removed states or keyboard behaviour are major. Additions are minor. A visual change above 0.5% of a key screen also counts as breaking. Working
What does not work yet: release automation, changelogs and scheduled major releases. Concept
Large organisations run a system of systems
Larger organisations run layers: a global brand, regions, digital brands and products. Each layer has its own owner and its own version, and declares which versions of its parent it works with. Loom checks every layer against its parent and shows which layers a parent release would leave behind. Working
Every rule says how far it can bend at lower layers:
- Locked: no lower layer may change it. For example, accessibility minimums and consent notices.
- Extendable: lower layers may add, but not change what exists.
- Overridable: lower layers may replace it, with a recorded reason.
- Default: a starting point that lower layers are expected to tune.
What may a product team change? Stand in a layer and see.
Each rule is set at one layer and says how far it bends below it. Pick the layer you stand in, hover a rule to see where it comes from, and try a change. The organisation and its rules are sample data; layers are in design.
| Rule | Set by | Level |
|---|---|---|
| Text contrast of at least 4.5:1 | Global brand | Locked |
| Logo clear space | Global brand | Locked |
| Consent and privacy notices | Region: Europe | Locked |
| Colour palette | Global brand | Extendable |
| Spacing scale | Global brand | Overridable |
| Voice and tone | Digital brand: consumer | Extendable |
| Button corner radius | Digital brand: consumer | Default |
What does not work yet: resolving tokens per brand layer with the source of each value shown.
Deprecation is announced, dated and migrated
A deprecated item is announced with a replacement and a removal date. The audit reports every remaining use until it reaches zero. Partial What does not work yet: Loom opening migration pull requests in consumer products.
When design and code disagree, an owner decides
Neither wins by default. Your repository and Figma show what exists. Loom flags the difference from the accepted contract, and an owner decides: accept the change or revert it. The Figma drift report works today on a synthetic library; the accept-or-revert flow is a concept. Concept
The control area shows the whole system in one place
The system page shows the whole system in one place: health, the five tiers, who governs what, rules, exceptions, the review queue, versions, usage, deprecations and patterns. Partial What does not work yet: the inbox actions and parts of the dashboard run on labelled sample data.
In the management space, people with the right role change severities, grant exceptions, assign owners and set service levels and autonomy. Every edit becomes a draft. An accepted draft becomes a pull request that the owner merges. Loom never merges. Partial What does not work yet: it has been tested against simulated git hosts, not a client repository, and roles are declared, not yet verified by sign-in.
Rituals, such as a weekly triage, are part of your organisation's own setup. Loom drafts each agenda from the queue and the health measures, and prepares a calendar invite and a Slack or Teams message. Partial What does not work yet: posting to a real Slack or Teams workspace. Notifications in Slack and Teams are planned. Concept
Governance is not paperwork around the real work. It is how a team decides once and stops deciding the same thing again.
Questions
Is this heavy for a small team? No. A team of three or fewer gets no standing meetings by default. Every change follows the same four steps.
Do contributors need evidence before they propose? No. Any team can propose. Loom attaches its own evidence, such as local rebuilds found by the audit; evidence is never required.
Who approves exceptions? The area owner by default. A rule can name its own approver. Accessibility exceptions always need the accessibility owner.
Can Loom lock us in? No. Governance lives in your repository as plain files.