Skip to main content

max / makeover-webview

0.28.0: one copy of the renderer per graph, or the build fails This crate decides what a class is called. Two versions in one graph means the stylesheet a build script generates and the markup the runtime emits can disagree about that and still compile, which is exactly what goingson was doing until 2026-08-11: layout.css off 0.25.1 and tables.css off 0.26.0, from one build.rs run. Both sort-caret defects fixed that day came out of the same class of divergence, found by audit rather than by a build. `links` makes it a resolver error instead. build.rs exists solely because cargo requires a build script alongside `links`. makeover-layout 0.16.0 and makeover-touch 0.9.0 come with it, since the guard is only worth having when every crate that carries the vocabulary moves together.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-12 01:18 UTC
Commit: fc9b695ca9718a48b8bbad8897d6d33dc46c4404
Parent: 1751c23
2 files changed, +24 insertions, -3 deletions
M Cargo.toml +8 -3
@@ -1,7 +1,12 @@
1 1 [package]
2 2 name = "makeover-webview"
3 - version = "0.27.0"
3 + version = "0.28.0"
4 4 edition = "2024"
5 + # One copy of this renderer per dependency graph, enforced by cargo rather than
6 + # by remembering. Two versions means the generated stylesheet and the emitted
7 + # markup can disagree about what a class is called and still compile, which is
8 + # the defect this crate exists to make impossible. See build.rs.
9 + links = "makeover-webview"
5 10 description = "The webview renderer for makeover-layout. Emits CSS, and is the one renderer that needs no palette: var() is the late binding, so resolution stays with the browser."
6 11 license = "MIT"
7 12 repository = "https://makenot.work/git/max/makeover-webview"
@@ -12,7 +17,7 @@
12 17 # patch satisfy the requirement and still fail to compile. That happened once
13 18 # with `form::radio_html` calling `FieldKind::Radio`, and makeover-build is where
14 19 # it surfaced, one release later.
15 - makeover-layout = "0.15.0"
20 + makeover-layout = "0.16.0"
16 21 # The capability axis. `makeover-touch` decides whether a hover rule should be
17 22 # gated at all; `makeover-geometry` spells the gate as a media condition. Both
18 23 # answers are owned elsewhere and neither is re-derived here.
@@ -22,7 +27,7 @@
22 27 # satisfies "0.8" and keeps a second makeover-geometry in the graph next to the
23 28 # 0.7 this crate asks for. `Density` is nominally distinct across the two and
24 29 # the build fails on a type that reads as identical.
25 - makeover-touch = "0.8.2"
30 + makeover-touch = "0.9.0"
26 31 makeover-geometry = "0.7"
27 32
28 33 [lints.rust]
A build.rs +16
@@ -1,0 +1,16 @@
1 + //! Nothing is built here. The file exists because `links` in Cargo.toml
2 + //! requires it, and `links` is what makes two copies of this renderer in one
3 + //! dependency graph a resolver error rather than a silent second copy.
4 + //!
5 + //! This crate decides class names. Two versions in one build means the
6 + //! stylesheet a build script generates and the markup the runtime emits can
7 + //! come off different vocabularies and still compile, which is what goingson
8 + //! was doing until 2026-08-11: layout.css written by 0.25.1 and tables.css by
9 + //! 0.26.0, from one build.rs run.
10 + //!
11 + //! The guard only bites between versions that both declare `links`, so it
12 + //! stops future skew rather than skew against anything published before 0.28.0.
13 +
14 + fn main() {
15 + println!("cargo::rerun-if-changed=build.rs");
16 + }