Skip to main content

max / makenotwork

Link the time axis: makeover-build 0.52.0 writes static/timing.css The durations makeover-timing names by intent, generated the same way the spacing layer is and linked beside it. Nothing here states a number: a hand-written duration in a stylesheet is the drift that crate exists to end. Fingerprinted read-only with the other generated sheets, so a bump of makeover-timing busts `?v=` without build.rs watching a file it writes.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-26 15:46 UTC
Signed with PGP, not checked
Commit: bd44f102414c769d4bc19b2f141d2493dddf2f10
Parent: 34adcf7
5 files changed, +52 insertions, -26 deletions
M .gitignore +1
@@ -15,6 +15,7 @@
15 15 server/static/quasi-download.js
16 16 server/static/quasi-fill.js
17 17 server/static/geometry.css
18 + server/static/timing.css
18 19 server/static/layout.css
19 20 server/static/embed-geometry.css
20 21 server/static/typography.css
M server/Cargo.lock +32 -22
@@ -2875,7 +2875,7 @@
2875 2875 checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
2876 2876 dependencies = [
2877 2877 "libc",
2878 - "windows-sys 0.59.0",
2878 + "windows-sys 0.61.2",
2879 2879 ]
2880 2880
2881 2881 [[package]]
@@ -3660,7 +3660,7 @@
3660 3660 checksum = "1a791e6620676a875f362f3156ed213e73ca099a09bf992c18812abe65cc37b1"
3661 3661 dependencies = [
3662 3662 "bstr",
3663 - "hashbrown 0.15.5",
3663 + "hashbrown 0.17.1",
3664 3664 ]
3665 3665
3666 3666 [[package]]
@@ -4811,7 +4811,7 @@
4811 4811 source = "registry+https://github.com/rust-lang/crates.io-index"
4812 4812 checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd"
4813 4813 dependencies = [
4814 - "windows-sys 0.59.0",
4814 + "windows-sys 0.61.2",
4815 4815 ]
4816 4816
4817 4817 [[package]]
@@ -5390,12 +5390,13 @@
5390 5390
5391 5391 [[package]]
5392 5392 name = "makeover-build"
5393 - version = "0.51.0"
5393 + version = "0.52.0"
5394 5394 source = "registry+https://github.com/rust-lang/crates.io-index"
5395 - checksum = "1fdd63f552182f0c39a0416a4420ecfb66c89e4a11531878b4a832d6ebc6aad7"
5395 + checksum = "7b10f15fe8101177872c65b4bf2dc521a98975a42cee7b1ddfb2646fdcbfaaa9"
5396 5396 dependencies = [
5397 5397 "makeover",
5398 5398 "makeover-geometry",
5399 + "makeover-timing",
5399 5400 "makeover-webview",
5400 5401 ]
5401 5402
@@ -5411,6 +5412,15 @@
5411 5412 source = "registry+https://github.com/rust-lang/crates.io-index"
5412 5413 checksum = "774bfd81b003f0d0059ff50daa8e625e6969175bc0132ddf7c2108bba40c47d5"
5413 5414
5415 + [[package]]
5416 + name = "makeover-timing"
5417 + version = "0.1.1"
5418 + source = "registry+https://github.com/rust-lang/crates.io-index"
5419 + checksum = "c83b1e0502c0179754752e59dd98fa4b15df8f9d0b454e0291b80c984aa2bd49"
5420 + dependencies = [
5421 + "makeover-geometry",
5422 + ]
5423 +
5414 5424 [[package]]
5415 5425 name = "makeover-touch"
5416 5426 version = "0.24.0"
@@ -5712,7 +5722,7 @@
5712 5722 source = "registry+https://github.com/rust-lang/crates.io-index"
5713 5723 checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
5714 5724 dependencies = [
5715 - "windows-sys 0.59.0",
5725 + "windows-sys 0.61.2",
5716 5726 ]
5717 5727
5718 5728 [[package]]
@@ -7329,7 +7339,7 @@
7329 7339 "errno",
7330 7340 "libc",
7331 7341 "linux-raw-sys 0.12.1",
7332 - "windows-sys 0.59.0",
7342 + "windows-sys 0.61.2",
7333 7343 ]
7334 7344
7335 7345 [[package]]
@@ -7409,7 +7419,7 @@
7409 7419 "security-framework 3.7.0",
7410 7420 "security-framework-sys",
7411 7421 "webpki-root-certs",
7412 - "windows-sys 0.59.0",
7422 + "windows-sys 0.61.2",
7413 7423 ]
7414 7424
7415 7425 [[package]]
@@ -8535,7 +8545,7 @@
8535 8545 "getrandom 0.4.3",
8536 8546 "once_cell",
8537 8547 "rustix 1.1.4",
8538 - "windows-sys 0.59.0",
8548 + "windows-sys 0.61.2",
8539 8549 ]
8540 8550
8541 8551 [[package]]
@@ -9961,7 +9971,7 @@
9961 9971 source = "registry+https://github.com/rust-lang/crates.io-index"
9962 9972 checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
9963 9973 dependencies = [
9964 - "windows-sys 0.48.0",
9974 + "windows-sys 0.61.2",
9965 9975 ]
9966 9976
9967 9977 [[package]]
@@ -10757,6 +10767,18 @@
10757 10767 name = "synckit-config"
10758 10768 version = "0.2.0"
10759 10769
10770 + [[patch.unused]]
10771 + name = "kberg"
10772 + version = "0.1.0"
10773 +
10774 + [[patch.unused]]
10775 + name = "ops-status"
10776 + version = "0.1.0"
10777 +
10778 + [[patch.unused]]
10779 + name = "painhours"
10780 + version = "0.1.0"
10781 +
10760 10782 [[patch.unused]]
10761 10783 name = "quasi-immediate"
10762 10784 version = "0.63.0"
@@ -10772,15 +10794,3 @@
10772 10794 [[patch.unused]]
10773 10795 name = "quasi-tauri"
10774 10796 version = "0.63.0"
10775 -
10776 - [[patch.unused]]
10777 - name = "kberg"
10778 - version = "0.1.0"
10779 -
10780 - [[patch.unused]]
10781 - name = "ops-status"
10782 - version = "0.1.0"
10783 -
10784 - [[patch.unused]]
10785 - name = "painhours"
10786 - version = "0.1.0"
@@ -254,7 +254,7 @@
254 254 # Emits static/geometry.css (makeover-geometry) and static/layout.css
255 255 # (makeover-webview). The same generator GO and BB run; only the output paths
256 256 # differ, since the server serves its stylesheets rather than bundling them.
257 - makeover-build = "0.51.0"
257 + makeover-build = "0.52.0"
258 258 # Read directly for the embeds' own copy of the spacing layer, which they need
259 259 # because an iframe cannot link a stylesheet. makeover-build does not re-export
260 260 # it, so the pin lives here and has to track the one makeover-build resolves.
M server/build.rs +10 -2
@@ -44,8 +44,16 @@
44 44 ("quasi-download.js", quasi_webview::DOWNLOAD_JS),
45 45 ("quasi-fill.js", quasi_webview::FILL_JS),
46 46 ] {
47 - fs::write(format!("static/{name}"), source)
48 - .unwrap_or_else(|error| panic!("write static/{name}: {error}"));
47 + // `write_if_changed`, not `fs::write`, and this is load-bearing rather
48 + // than a micro-optimisation. `markup_files` globs `static/*.js`, and
49 + // `check_vocabulary_use` emits a `rerun-if-changed` for every file it
50 + // reads, so these four are files this script both writes AND watches.
51 + // An unconditional write moves the mtime on every run, cargo then sees
52 + // a watched file newer than the build script's own output, and the
53 + // crate recompiles on every cargo invocation forever. That is what put
54 + // a second full 5m25s compile inside every Sando `cargo_test` gate
55 + // (task 4200580f); cargo named this exact file as the stale one.
56 + write_if_changed(Path::new(&format!("static/{name}")), source);
49 57 }
50 58
51 59 makeover_build::geometry_css("static/geometry.css", None);
@@ -87,6 +87,7 @@
87 87 // this file defines two tokens and matches no element.
88 88 .styled(format!("/static/typography.css?v={V}"))
89 89 .styled(format!("/static/geometry.css?v={V}"))
90 + .styled(format!("/static/timing.css?v={V}"))
90 91 .styled(format!("/static/layout.css?v={V}"))
91 92 .styled(format!("/static/style.css?v={V}"))
92 93 // Last in the head, after htmx: the favicon has no order to keep,
@@ -179,7 +180,13 @@
179 180 let stmt = head
180 181 .find("@layer makeover, base, components, responsive;")
181 182 .expect("the order is stated");
182 - for sheet in ["typography.css", "geometry.css", "layout.css", "style.css"] {
183 + for sheet in [
184 + "typography.css",
185 + "geometry.css",
186 + "timing.css",
187 + "layout.css",
188 + "style.css",
189 + ] {
183 190 assert!(stmt < head.find(sheet).expect("the sheet is linked"));
184 191 }
185 192 }