0.16.0: one copy of the vocabulary per graph, or the build fails
Two versions of a description layer in one dependency graph is not a warning
today, it is a silent second copy. goingson was carrying one: makeover-build
0.20.1 resolved makeover-webview 0.25.1 while src-tauri asked for 0.26.0, so
layout.css and tables.css were generated off different vocabularies from a
single build.rs run, and nothing said so. quasi-vocabulary-findings lesson 5
already named the failure and answered it with a procedure someone has to
remember.
`links` makes cargo remember instead. Only one package per graph may claim a
given links value, so a second copy is a resolver error with a message naming
both packages. The cost is that a bump here is tree-wide rather than per-repo,
the same way libsqlite3-sys makes a rusqlite bump tree-wide. That is the
intended effect.
The guard only bites between versions that both declare `links`, so it stops
skew from here forward and not skew against 0.15.0 and earlier. build.rs exists
solely because cargo requires a build script alongside `links`.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-12 01:18 UTC
# One copy of this vocabulary per dependency graph, enforced by cargo rather
6
+
# than by remembering. Two versions of a description layer in one build means
7
+
# the stylesheet and the markup can be generated off different vocabularies,
8
+
# which is exactly what goingson was doing until 2026-08-11. See build.rs.
9
+
links = "makeover-layout"
5
10
description = "The renderer-agnostic half of the make-family design system: what a thing IS, named as intents and relationships and never as values. Colour defers to makeover, spacing to makeover-geometry; what is left is composition."