Compare your system with public code

A ratio needs context. Compare your measured tokenization with pinned public sources:

ds-loop report .
ds-loop dashboard . --against products

The report and dashboard choose products when they find application commands or private production consumers of workspace packages. A package with exports and no private: true selects systems when no product application was identified. Documentation, examples and playgrounds are excluded from those application signals. Without enough evidence, products is the fallback. This is an inference from manifests and supported imports, not proof of the repository's audience. Use --against products|systems to correct it. Dashboard refreshes retain your override.

ds-loop context . lists the structural facts with their source paths. The consulting report also includes them under “Where you are now.” Missing or unreadable manifests and unavailable workspace analysis say not checked.

Each tokenization dimension shows your ratio, the observed minimum and maximum, the median, and below range, in range or above range. Boundaries are inclusive. These are observations, not grades or recommendations. The contributor count and named sources appear alongside each dimension. Ratios use reference-only values divided by literal, reference and mixed values together. They do not establish reference resolution, visual quality or runtime behaviour.

A reference dimension requires 100 classified occurrences: literal + reference + mixed values, excluding ambiguous and excluded values. Its recorded occurrences is this exact denominator, not the number of distinct values or the total inventory. Below that floor, ratios[dimension] is null, meaning not measured, and contributes to no range. A genuine zero with sufficient occurrences remains a measurement.

A range requires three contributing repositories. With fewer, both report and dashboard say too few reference repos to state a range, show the contributor count, and omit the range and median. A missing team measurement still says not checked. Once there are enough contributors, the configuration hashes must match, and any adapter used by both sources must have the same version. An adapter used by only one source means that source has a different format; it does not prevent comparison. A different shared adapter version, a different configuration hash or an unparseable adapter string says not comparable — instrument differs and suppresses the comparison numbers. Mismatched rows are never silently removed to manufacture a comparable range. Scorecard comparisons of the same source still require the entire adapter set to match.

Both floors live in src/config/benchmark.ts and are UNCALIBRATED. The occurrence floor screens out small incidental stylesheets; at 100 occurrences one observation moves a ratio by at most one percentage point. Three repositories are a minimal starting corpus, not an industry distribution. Neither rule proves coverage of a repository's main styling format. These eligibility settings do not change the audit instrument or its configuration hash.

Current reference coverage

Every pinned row was re-measured on 2026-09-30 with scripts/benchmark.mjs, configuration hash 5b0a0820. Nine repositories are eligible references:

Set Repository
systems Radix Themes, Radix Primitives, Mantine, Primer React
products Supabase, Appsmith, Refine, Excalidraw, PostHog

Contributing repositories per dimension (a range needs three):

Dimension systems products
color 4 4
spacing 4 5
typography 3 3
radius 2 2
shadow 1 0
z-index 1 1
duration 0 1

With a matching configuration and shared adapter versions, color, spacing and typography produce ranges in both sets when the team dimension is measured.

Four pinned repositories stay in unmeasurable, each with the reason the script recorded:

Repository Reason
chakra-ui/chakra-ui CSS-in-JS, which no adapter reads
FlowiseAI/Flowise MUI CSS-in-JS, which no adapter reads
langflow-ai/langflow CSS-in-JS dependencies; no dimension reaches 100 classified occurrences
shadcn-ui/ui Styles in .html and .astro, which no adapter reads; no dimension reaches 100 classified occurrences

pendingMeasurements is empty.

benchmarks/reference.json schema 2 separates eligible references, unmeasurable sources, pendingMeasurements and unpinned candidates. Newly measured rows store all seven benchmark ratios and denominators, total extracted values, public URL, SHA, licence, scan path, date, adapters, configuration hash and coverage. Legacy palette ratios are not benchmark dimensions and are omitted from new records; their zero-denominator placeholders must not become comparison data. No source code is vendored, and the packaged engine reads this file from disk without network access.

Reproduce or extend the corpus

Run these from a development checkout with Node 22.6 or newer and Git installed:

npm run benchmark
npm run benchmark -- --verify
npm run benchmark -- --verify --repo=radix-ui/themes

The default run fetches each reference, excluded source and pending measurement at its pinned SHA into an OS temporary directory, audits its recorded scope with DEFAULT_CONFIG, updates the measurements, then removes the checkout. It never installs dependencies or runs upstream build scripts. --verify measures one pinned reference and fails on changed ratios, denominators, total extracted values, adapters or configuration; it does not rewrite the data. --repo=owner/name selects a specific row.

When reviewing a new candidate, verify that its scanned code is permissively licensed and that its scope represents the intended product or system, then pin and measure it:

npm run benchmark -- --pin --repo=excalidraw/excalidraw

--pin resolves HEAD only for candidates without a SHA. Subsequent runs use that pin. The script checks the recorded licence file for its licence notice and requires at least one tokenization dimension with 100 classified occurrences before promoting a candidate. A refusal names likely unread formats, using coverage and CSS-in-JS dependency evidence. The existing pure-palette rejection remains. Ordinary refreshes move sources with no eligible dimensions into unmeasurable, retaining their coverage and exclusion reason. This basic check does not replace reviewing mixed-licence subtrees. Stop and revise or reject unsuitable candidates.

For an existing local clone, --cache=/absolute/path/to/clone fetches its pinned Git object into a fresh temporary checkout. It does not audit uncommitted files or mutate the cached clone. This makes offline verification possible when the object is already available. --data=/absolute/path/to/reference.json selects an alternate manifest, useful for checking that deliberately changed ratios fail verification without modifying the shipped data.