Skip to main content

max / makenotwork

Follow the makeover-layout 0.42.0 wave, and re-seal a ratchet that had drifted `Picture` is `Image` at the two sites that name it. The rest of the wave reaches this repo as version requirements, across server, magicmirror and mnw-cli, because `links = "makeover-layout"` forbids a consumer staying behind. DEAD_VOCABULARY_HIGH_WATER goes 49 to 52, and the reasoning is recorded beside it rather than only the number. This is not the wave's doing: the generated set is byte-identical between the published makeover-webview and the working copy, and recomputing the check by hand over the same 769 files gives 52 at the previous commit too. It stayed quiet because a `cargo check` that recompiles nothing does not run the build script, and the last one finished in a second. Changing a dependency re-ran it and a seal that had been wrong for a while reported itself. The cause is the first one the check names: the vocabulary grew. Described screens carry cell-, facet-, run- and track- classes, and 19 screens here are described against roughly 176 templates, so the generated set runs ahead of the markup while the transition is mid-flight. The note says the number should fall as phase 3 converts screens, and that a second raise means reading the list first.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-09-01 21:07 UTC
Signed with PGP, not checked
Commit: 5bb6146039ab286294e6fb50abbb847ecdab38ca
Parent: 3424dd2
10 files changed, +162 insertions, -108 deletions
@@ -1125,9 +1125,7 @@
1125 1125
1126 1126 [[package]]
1127 1127 name = "makeover-layout"
1128 - version = "0.41.0"
1129 - source = "registry+https://github.com/rust-lang/crates.io-index"
1130 - checksum = "668c1ae75b3cc6617b9ef840f7980b0f576a93564f244c920191c90794fc8e17"
1128 + version = "0.42.0"
1131 1129
1132 1130 [[package]]
1133 1131 name = "makeover-timing"
@@ -1140,9 +1138,7 @@
1140 1138
1141 1139 [[package]]
1142 1140 name = "makeover-tui"
1143 - version = "0.41.0"
1144 - source = "registry+https://github.com/rust-lang/crates.io-index"
1145 - checksum = "3d1ea0f2ab4d28552f7442f01688a8c65b4100a326c8cc79eadb0535a860dbe0"
1141 + version = "0.42.0"
1146 1142 dependencies = [
1147 1143 "makeover",
1148 1144 "makeover-layout",
@@ -3000,46 +2996,42 @@
3000 2996 source = "registry+https://github.com/rust-lang/crates.io-index"
3001 2997 checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
3002 2998
2999 + [[patch.unused]]
3000 + name = "alloy_tui"
3001 + version = "13.0.0"
3002 +
3003 + [[patch.unused]]
3004 + name = "makeover-build"
3005 + version = "0.64.0"
3006 +
3007 + [[patch.unused]]
3008 + name = "makeover-immediate"
3009 + version = "0.43.0"
3010 +
3011 + [[patch.unused]]
3012 + name = "makeover-touch"
3013 + version = "0.32.0"
3014 +
3015 + [[patch.unused]]
3016 + name = "makeover-webview"
3017 + version = "0.71.0"
3018 +
3019 + [[patch.unused]]
3020 + name = "quasi-type"
3021 + version = "0.1.3"
3022 +
3023 + [[patch.unused]]
3024 + name = "synckit-client"
3025 + version = "0.10.0"
3026 +
3027 + [[patch.unused]]
3028 + name = "synckit-config"
3029 + version = "0.2.0"
3030 +
3003 3031 [[patch.unused]]
3004 3032 name = "docengine"
3005 3033 version = "0.7.0"
3006 3034
3007 - [[patch.unused]]
3008 - name = "quasi-axum"
3009 - version = "0.81.0"
3010 -
3011 - [[patch.unused]]
3012 - name = "quasi-basics"
3013 - version = "0.81.0"
3014 -
3015 - [[patch.unused]]
3016 - name = "quasi-http"
3017 - version = "0.81.0"
3018 -
3019 - [[patch.unused]]
3020 - name = "quasi-immediate"
3021 - version = "0.81.0"
3022 -
3023 - [[patch.unused]]
3024 - name = "quasi-notifs"
3025 - version = "0.81.0"
3026 -
3027 - [[patch.unused]]
3028 - name = "quasi-router"
3029 - version = "0.81.0"
3030 -
3031 - [[patch.unused]]
3032 - name = "quasi-store"
3033 - version = "0.1.0"
3034 -
3035 - [[patch.unused]]
3036 - name = "quasi-tauri"
3037 - version = "0.81.0"
3038 -
3039 - [[patch.unused]]
3040 - name = "quasi-webview"
3041 - version = "0.81.0"
3042 -
3043 3035 [[patch.unused]]
3044 3036 name = "kberg"
3045 3037 version = "0.1.0"
@@ -3053,13 +3045,37 @@
3053 3045 version = "0.4.1"
3054 3046
3055 3047 [[patch.unused]]
3056 - name = "synckit-client"
3057 - version = "0.10.0"
3048 + name = "quasi-axum"
3049 + version = "0.97.0"
3058 3050
3059 3051 [[patch.unused]]
3060 - name = "synckit-config"
3061 - version = "0.2.0"
3052 + name = "quasi-basics"
3053 + version = "0.97.0"
3062 3054
3063 3055 [[patch.unused]]
3064 - name = "quasi-type"
3065 - version = "0.1.3"
3056 + name = "quasi-http"
3057 + version = "0.97.0"
3058 +
3059 + [[patch.unused]]
3060 + name = "quasi-immediate"
3061 + version = "0.97.0"
3062 +
3063 + [[patch.unused]]
3064 + name = "quasi-notifs"
3065 + version = "0.97.0"
3066 +
3067 + [[patch.unused]]
3068 + name = "quasi-router"
3069 + version = "0.97.0"
3070 +
3071 + [[patch.unused]]
3072 + name = "quasi-store"
3073 + version = "0.1.0"
3074 +
3075 + [[patch.unused]]
3076 + name = "quasi-tauri"
3077 + version = "0.97.0"
3078 +
3079 + [[patch.unused]]
3080 + name = "quasi-webview"
3081 + version = "0.97.0"
@@ -18,7 +18,7 @@
18 18 # `makeover-tui` is the terminal renderer, and its `theme` feature is the
19 19 # intents-to-ratatui-colours mapping. No hex value is written in this crate.
20 20 makeover = "3.0"
21 - makeover-tui = { version = "0.41.0", features = ["theme"] }
21 + makeover-tui = { version = "0.42", features = ["theme"] }
22 22 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "time", "sync", "signal", "fs"] }
23 23 # `rustls-no-provider` rather than `rustls`: the latter is an alias for
24 24 # `__rustls-aws-lc-rs`, which links a C crypto backend. The provider is ring
M mnw-cli/Cargo.lock +37 -21
@@ -1836,9 +1836,7 @@
1836 1836
1837 1837 [[package]]
1838 1838 name = "makeover-layout"
1839 - version = "0.41.0"
1840 - source = "registry+https://github.com/rust-lang/crates.io-index"
1841 - checksum = "668c1ae75b3cc6617b9ef840f7980b0f576a93564f244c920191c90794fc8e17"
1839 + version = "0.42.0"
1842 1840
1843 1841 [[package]]
1844 1842 name = "makeover-timing"
@@ -1851,9 +1849,7 @@
1851 1849
1852 1850 [[package]]
1853 1851 name = "makeover-tui"
1854 - version = "0.41.0"
1855 - source = "registry+https://github.com/rust-lang/crates.io-index"
1856 - checksum = "3d1ea0f2ab4d28552f7442f01688a8c65b4100a326c8cc79eadb0535a860dbe0"
1852 + version = "0.42.0"
1857 1853 dependencies = [
1858 1854 "makeover",
1859 1855 "makeover-layout",
@@ -1947,7 +1943,7 @@
1947 1943
1948 1944 [[package]]
1949 1945 name = "mnw-cli"
1950 - version = "0.1.3"
1946 + version = "0.1.4"
1951 1947 dependencies = [
1952 1948 "anyhow",
1953 1949 "bytes",
@@ -4777,10 +4773,6 @@
4777 4773 source = "registry+https://github.com/rust-lang/crates.io-index"
4778 4774 checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
4779 4775
4780 - [[patch.unused]]
4781 - name = "quasi-type"
4782 - version = "0.1.3"
4783 -
4784 4776 [[patch.unused]]
4785 4777 name = "kberg"
4786 4778 version = "0.1.0"
@@ -4798,32 +4790,32 @@
4798 4790 version = "0.4.1"
4799 4791
4800 4792 [[patch.unused]]
4801 - name = "synckit-config"
4802 - version = "0.2.0"
4793 + name = "quasi-type"
4794 + version = "0.1.3"
4803 4795
4804 4796 [[patch.unused]]
4805 4797 name = "quasi-axum"
4806 - version = "0.81.0"
4798 + version = "0.97.0"
4807 4799
4808 4800 [[patch.unused]]
4809 4801 name = "quasi-basics"
4810 - version = "0.81.0"
4802 + version = "0.97.0"
4811 4803
4812 4804 [[patch.unused]]
4813 4805 name = "quasi-http"
4814 - version = "0.81.0"
4806 + version = "0.97.0"
4815 4807
4816 4808 [[patch.unused]]
4817 4809 name = "quasi-immediate"
4818 - version = "0.81.0"
4810 + version = "0.97.0"
4819 4811
4820 4812 [[patch.unused]]
4821 4813 name = "quasi-notifs"
4822 - version = "0.81.0"
4814 + version = "0.97.0"
4823 4815
4824 4816 [[patch.unused]]
4825 4817 name = "quasi-router"
4826 - version = "0.81.0"
4818 + version = "0.97.0"
4827 4819
4828 4820 [[patch.unused]]
4829 4821 name = "quasi-store"
@@ -4831,12 +4823,36 @@
4831 4823
4832 4824 [[patch.unused]]
4833 4825 name = "quasi-tauri"
4834 - version = "0.81.0"
4826 + version = "0.97.0"
4835 4827
4836 4828 [[patch.unused]]
4837 4829 name = "quasi-webview"
4838 - version = "0.81.0"
4830 + version = "0.97.0"
4831 +
4832 + [[patch.unused]]
4833 + name = "synckit-config"
4834 + version = "0.2.0"
4839 4835
4840 4836 [[patch.unused]]
4841 4837 name = "docengine"
4842 4838 version = "0.7.0"
4839 +
4840 + [[patch.unused]]
4841 + name = "alloy_tui"
4842 + version = "13.0.0"
4843 +
4844 + [[patch.unused]]
4845 + name = "makeover-build"
4846 + version = "0.64.0"
4847 +
4848 + [[patch.unused]]
4849 + name = "makeover-immediate"
4850 + version = "0.43.0"
4851 +
4852 + [[patch.unused]]
4853 + name = "makeover-touch"
4854 + version = "0.32.0"
4855 +
4856 + [[patch.unused]]
4857 + name = "makeover-webview"
4858 + version = "0.71.0"
@@ -15,7 +15,7 @@
15 15 # selection; `makeover-tui` is the terminal renderer, and its `theme` feature is
16 16 # the intents-to-ratatui-colours mapping. No colour is named in this crate.
17 17 makeover = "3.0"
18 - makeover-tui = { version = "0.41.0", features = ["theme"] }
18 + makeover-tui = { version = "0.42", features = ["theme"] }
19 19 tokio = { version = "1", features = ["full"] }
20 20 # `rustls-no-provider` rather than `rustls`: the latter is an alias for
21 21 # `__rustls-aws-lc-rs`, which links a C crypto backend. The provider is ring
M server/Cargo.lock +32 -28
@@ -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,9 +5390,7 @@
5390 5390
5391 5391 [[package]]
5392 5392 name = "makeover-build"
5393 - version = "0.63.0"
5394 - source = "registry+https://github.com/rust-lang/crates.io-index"
5395 - checksum = "e6bac617f443bd197e965b00686c8648fac58902fed28434aeacaa7fbfcab502"
5393 + version = "0.64.0"
5396 5394 dependencies = [
5397 5395 "makeover",
5398 5396 "makeover-geometry",
@@ -5408,9 +5406,7 @@
5408 5406
5409 5407 [[package]]
5410 5408 name = "makeover-layout"
5411 - version = "0.41.2"
5412 - source = "registry+https://github.com/rust-lang/crates.io-index"
5413 - checksum = "f99de8062307b884315ffa57696427bfc846227d4b1d8b03ade031cd07c9eb2c"
5409 + version = "0.42.0"
5414 5410
5415 5411 [[package]]
5416 5412 name = "makeover-timing"
@@ -5423,9 +5419,7 @@
5423 5419
5424 5420 [[package]]
5425 5421 name = "makeover-touch"
5426 - version = "0.31.0"
5427 - source = "registry+https://github.com/rust-lang/crates.io-index"
5428 - checksum = "8b59944f2258db046b4c7ea325eaef71a9e681e854432cd88e1355ea891eecc1"
5422 + version = "0.32.0"
5429 5423 dependencies = [
5430 5424 "makeover-geometry",
5431 5425 "makeover-layout",
@@ -5433,9 +5427,7 @@
5433 5427
5434 5428 [[package]]
5435 5429 name = "makeover-webview"
5436 - version = "0.70.0"
5437 - source = "registry+https://github.com/rust-lang/crates.io-index"
5438 - checksum = "ef402e7badce6073d49320837ec3262bfaa6f739561c0f4e27926e94fee29ad0"
5430 + version = "0.71.0"
5439 5431 dependencies = [
5440 5432 "makeover-geometry",
5441 5433 "makeover-layout",
@@ -5722,7 +5714,7 @@
5722 5714 source = "registry+https://github.com/rust-lang/crates.io-index"
5723 5715 checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
5724 5716 dependencies = [
5725 - "windows-sys 0.59.0",
5717 + "windows-sys 0.61.2",
5726 5718 ]
5727 5719
5728 5720 [[package]]
@@ -7339,7 +7331,7 @@
7339 7331 "errno",
7340 7332 "libc",
7341 7333 "linux-raw-sys 0.12.1",
7342 - "windows-sys 0.59.0",
7334 + "windows-sys 0.61.2",
7343 7335 ]
7344 7336
7345 7337 [[package]]
@@ -7419,7 +7411,7 @@
7419 7411 "security-framework 3.7.0",
7420 7412 "security-framework-sys",
7421 7413 "webpki-root-certs",
7422 - "windows-sys 0.59.0",
7414 + "windows-sys 0.61.2",
7423 7415 ]
7424 7416
7425 7417 [[package]]
@@ -8545,7 +8537,7 @@
8545 8537 "getrandom 0.4.3",
8546 8538 "once_cell",
8547 8539 "rustix 1.1.4",
8548 - "windows-sys 0.59.0",
8540 + "windows-sys 0.61.2",
8549 8541 ]
8550 8542
8551 8543 [[package]]
@@ -9971,7 +9963,7 @@
9971 9963 source = "registry+https://github.com/rust-lang/crates.io-index"
9972 9964 checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
9973 9965 dependencies = [
9974 - "windows-sys 0.48.0",
9966 + "windows-sys 0.61.2",
9975 9967 ]
9976 9968
9977 9969 [[package]]
@@ -10759,6 +10751,26 @@
10759 10751 "pkg-config",
10760 10752 ]
10761 10753
10754 + [[patch.unused]]
10755 + name = "synckit-client"
10756 + version = "0.10.0"
10757 +
10758 + [[patch.unused]]
10759 + name = "synckit-config"
10760 + version = "0.2.0"
10761 +
10762 + [[patch.unused]]
10763 + name = "alloy_tui"
10764 + version = "13.0.0"
10765 +
10766 + [[patch.unused]]
10767 + name = "makeover-immediate"
10768 + version = "0.43.0"
10769 +
10770 + [[patch.unused]]
10771 + name = "makeover-tui"
10772 + version = "0.42.0"
10773 +
10762 10774 [[patch.unused]]
10763 10775 name = "quasi-immediate"
10764 10776 version = "0.97.0"
@@ -10775,14 +10787,6 @@
10775 10787 name = "quasi-tauri"
10776 10788 version = "0.97.0"
10777 10789
10778 - [[patch.unused]]
10779 - name = "synckit-client"
10780 - version = "0.10.0"
10781 -
10782 - [[patch.unused]]
10783 - name = "synckit-config"
10784 - version = "0.2.0"
10785 -
10786 10790 [[patch.unused]]
10787 10791 name = "kberg"
10788 10792 version = "0.1.0"
@@ -168,14 +168,14 @@
168 168 # rather than reached through quasi-router's re-export because a described
169 169 # screen names FieldKind and Tone directly; it has to track what quasi-router
170 170 # resolves or the two `layout::` paths are different crates.
171 - makeover-layout = "0.41.0"
171 + makeover-layout = "0.42"
172 172 # The webview renderer's field emitter, called directly by
173 173 # `quasi::rich_field` so one markdown editor's markup comes from the same
174 174 # place a whole described screen's would. Pinned here rather than reached
175 175 # through quasi-webview for makeover-layout's reason: two `form::` paths from
176 176 # two resolutions are two crates, and the `data-format="markdown"` rules in
177 177 # `static/layout.css` are generated from this one.
178 - makeover-webview = "0.70.0"
178 + makeover-webview = "0.71"
179 179 # For the request head the per-viewer state factory reads. axum re-exports it,
180 180 # but the factory's signature is quasi-axum's and names `http::request::Parts`.
181 181 http = "1.3.1"
@@ -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.63.0"
257 + makeover-build = "0.64"
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 +19 -1
@@ -393,7 +393,25 @@
393 393 /// naming the selector it styled; that script is deleted and the class is
394 394 /// emitted by `quasi-webview` at request time, which no scan of this repo can
395 395 /// see. A class the description writes is dead here by construction.
396 - const DEAD_VOCABULARY_HIGH_WATER: usize = 49;
396 + ///
397 + /// # 52 since 2026-09-01, and the three were already loose
398 + ///
399 + /// Re-sealed after measuring, not after a change: the count was 52 at the
400 + /// commit before the makeover-layout 0.42.0 cascade as well, computed over the
401 + /// same file set against `makeover_webview::vocabulary::names` from the
402 + /// published 0.70.2. The breach was latent because nothing had invalidated this
403 + /// build script in a while, and a `cargo check` that recompiles nothing does not
404 + /// run it. The cascade changed a dependency, the script re-ran, and a seal that
405 + /// had been wrong for some time reported itself.
406 + ///
407 + /// The cause is the one the check names first: the vocabulary grew. Described
408 + /// screens carry `cell-*`, `facet-*`, `run-*` and `track-*` classes, and 19 of
409 + /// this server's screens are described against roughly 176 templates. So the
410 + /// generated set runs ahead of the markup by construction while the transition
411 + /// is mid-flight, and this number should FALL as phase 3 converts screens
412 + /// rather than being raised again. If it needs raising a second time, read the
413 + /// list before doing it.
414 + const DEAD_VOCABULARY_HIGH_WATER: usize = 52;
397 415
398 416 /// The scripts this build script generates into `static/`.
399 417 ///
@@ -46,7 +46,7 @@
46 46
47 47 use makeover_layout as layout;
48 48 use quasi_axum::Serves as _;
49 - use quasi_router::screen::{Act, Picture, Row};
49 + use quasi_router::screen::{Act, Image, Row};
50 50 use quasi_router::{Action, Chrome, Document, Node, RegionKind, Screen, Slot};
51 51 use quasi_webview::{Shell, Webview};
52 52
@@ -156,7 +156,7 @@
156 156 /// any shape: the alternative is letterboxing inside a 40-pixel box, which is
157 157 /// the art unreadable and the box the wrong colour.
158 158 fn cover(url: &str) -> Node {
159 - let mut picture = Picture::new(url, "");
159 + let mut picture = Image::new(url, "");
160 160 picture.fit = layout::Fit::Cover;
161 161 Node::Image(picture)
162 162 }
@@ -67,7 +67,7 @@
67 67
68 68 use makeover_layout::{FieldKind, Fit};
69 69 use quasi_router::screen::Act;
70 - use quasi_router::{Action, Choice, Consult, Field, Node, Picture, RegionKind, Slot};
70 + use quasi_router::{Action, Choice, Consult, Field, Image, Node, RegionKind, Slot};
71 71
72 72 /// The stem both region ids are built from.
73 73 const REGION: &str = "media-picker";
@@ -338,7 +338,7 @@
338 338 // The alt is the file name, because that is what the tile is for: a
339 339 // reader who cannot see the thumbnail is choosing between file names,
340 340 // which is exactly what the control says.
341 - let mut picture = Picture::new(&entry.url, &entry.filename).lazy();
341 + let mut picture = Image::new(&entry.url, &entry.filename).lazy();
342 342 // The letterbox, which is what the shipped tile did with
343 343 // `object-fit: contain`: a thumbnail grid whose files are not all one
344 344 // shape, and the whole picture matters more than filling the square.
@@ -19,7 +19,7 @@
19 19 //! A widget that has never rendered anything is a guess about what the assembly
20 20 //! needs, so a new one is welcome to start here and leave later. The carousel
21 21 //! found a missing primitive on its way through
22 - //! (`makeover_layout::Image`, 0.21.0), which is the argument for proving one in
22 + //! (`makeover_layout::Image`, added 0.21.0, merged away in 0.42.0), which is the argument for proving one in
23 23 //! an app before it becomes shared.
24 24 //!
25 25 //! # A primitive's glue is a sibling of this directory, never a member