What you’ll learn
Most design-system teams serve more than one product. Each repo’s dashboard
tells you how that repo is doing; the question a design-system manager gets
asked is different: which teams are on the system, and which are falling
behind? ds-bridge rollup answers it. It reads the history that each repo has
already recorded and ranks the repos side by side. It runs on your machine,
reads only what was recorded, and never writes into a repo.
- How to point the rollup at several repos, or at their CI history
- How to save the list once, with teams
- How to read the ranking and its notes
- How to share it as markdown or one HTML page
Setup
You’ll need the ds-bridge plugin and a local clone of each repo you want to
compare. Each repo needs some recorded history — run ds-bridge record in it,
or set up CI recording first
(Track design-system health over time, step 2).
# Install the plugin, if you haven't yet.
claude plugin install ds-bridge
Each step shows the slash command to use in Claude Code and the ds-bridge
CLI command it wraps. Use whichever you prefer.
Steps
-
Fetch the CI history. If a repo records in CI, its history lives on the
ds-bridge-databranch. The rollup reads that branch from your clone, so fetch it first — a branch is only as fresh as your last fetch:git -C ../web fetch origin ds-bridge-data git -C ../ios fetch origin ds-bridge-data -
Run a first rollup. Name each repo as a folder (its working copy’s history), a history file, or a folder plus a git ref after
@:ds-bridge rollup ../web@origin/ds-bridge-data ../ios@origin/ds-bridge-data ../adminYou get one row per repo, ranked by system score: the score, a trend sparkline, on-system share, drift (stale, missing and orphaned tokens), contrast, handoff readiness and how fresh the data is. Above the table sit a plain mean, a size-weighted score (repos with more measured style values count for more) and the number of stale repos.
-
Save the list, with teams. So you don’t retype the sources, list them once in
.ds-bridge/rollup.jsonin the repo you run the rollup from. Relative paths are read from that project’s folder:[ { "name": "web", "source": "../web@origin/ds-bridge-data", "team": "Web" }, { "name": "ios", "source": "../ios@origin/ds-bridge-data", "team": "Mobile" }, { "name": "admin", "source": "../admin" } ]Now a plain
ds-bridge rollup(or/ds-bridge:rollupin Claude Code) reads it, and adds a breakdown by team. -
Read the notes. A repo that can’t be read never stops the rollup — it gets a note on its row instead: no history yet, a history written before the current format (
ds-bridge history migratein that repo upgrades it), or a branch that couldn’t be read (fetch it again). A dash means a number was never recorded for that repo; it is not a zero. -
Share it. Markdown pastes into a pull request, an issue or a monthly update; HTML is one offline page you can send to anyone; JSON is for your own scripts:
ds-bridge rollup --format md ds-bridge rollup --format html --out org-rollup.html ds-bridge rollup --format json -
Drill into one repo. To see why a repo ranks where it does, render its own dashboard in the org view:
ds-bridge report ../web --view org --openThat view uses the repo’s own score weights and its working copy’s history, so its score can differ from the rollup row.
Result
sds-dashboard89on-system 97% · contrast 80% · readiness 86primer-hub76on-system 76% · contrast 94% · readiness 84m3-pulse74on-system 81% · contrast 100% · readiness 95acme-shop63on-system 76% · contrast 95% · readiness 77
You now have one ranked view of every repo that uses your design system,
built from history that each repo records on its own. Saved in
.ds-bridge/rollup.json, it is one command away every week, and the markdown
and HTML versions are ready to share.
Troubleshooting
- It says there are no sources? Pass the repos as arguments, or create
.ds-bridge/rollup.jsonas in step 3, or point at another list with--config <file>. - A repo shows old numbers? If you named it with
@origin/ds-bridge-data, fetch that branch again (step 1). If you named the folder, its working copy only has the runs recorded on that machine. - A repo has a dash for contrast or readiness? That repo never recorded
the check.
ds-bridge recordcovers contrast when the token file has colour pairs; readiness comes fromds-bridge handoffruns on Figma frames.