Skip to main content

max / goingson

Take the current design system, and assert the class names it actually emits The makeover pins were three to five releases behind: makeover-build 0.18, makeover-webview 0.23.0, makeover-layout 0.12.0, makeover-tui 0.12, against a suite at 0.20.1, 0.25.1, 0.14.0 and 0.13. Being behind is what the exact-patch discipline is meant to prevent, and it had also become a resolution failure under the quasi feature: quasi-webview asks for makeover-webview 0.25.1, and two makeover-webviews wanted incompatible makeover-touch versions. The three test failures under `--features quasi` were pre-existing and are a contract quasi corrected at f287ac1: tone is `data-tone`, not a `tone-*` class, and a latched chip is `latched`, not `chip-latched`. makeover defines none of the names these asserted, so each one was pinning down markup that rendered untoned and unlatched. The assertions now say what is emitted.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-11 18:55 UTC
Signed with PGP, not checked
Commit: afe8f29186563c349c36275fa2f55b2ed81c6924
Parent: 092aec0
6 files changed, +38 insertions, -48 deletions
M Cargo.lock +19 -36
@@ -2234,8 +2234,8 @@
2234 2234 "makeover",
2235 2235 "makeover-build",
2236 2236 "makeover-geometry",
2237 - "makeover-layout 0.12.0",
2238 - "makeover-webview 0.23.0",
2237 + "makeover-layout",
2238 + "makeover-webview",
2239 2239 "notify",
2240 2240 "notify-debouncer-mini",
2241 2241 "open",
@@ -3398,13 +3398,13 @@
3398 3398
3399 3399 [[package]]
3400 3400 name = "makeover-build"
3401 - version = "0.18.0"
3401 + version = "0.20.1"
3402 3402 source = "registry+https://github.com/rust-lang/crates.io-index"
3403 - checksum = "31befafd278832b811b0b7ffa30d4caaae4397178268010f796a05d0c0934554"
3403 + checksum = "b61d78cbf82d8a25505d4150472501be53e2e92cac07540225e65ecefa385d35"
3404 3404 dependencies = [
3405 3405 "makeover",
3406 3406 "makeover-geometry",
3407 - "makeover-webview 0.23.0",
3407 + "makeover-webview",
3408 3408 ]
3409 3409
3410 3410 [[package]]
@@ -3415,56 +3415,39 @@
3415 3415
3416 3416 [[package]]
3417 3417 name = "makeover-layout"
3418 - version = "0.12.0"
3418 + version = "0.14.0"
3419 3419 source = "registry+https://github.com/rust-lang/crates.io-index"
3420 - checksum = "58edd16523115ed4c9ca6de016693300ac95cf1bb0bd8ccf7fd246213102a7ff"
3421 -
3422 - [[package]]
3423 - name = "makeover-layout"
3424 - version = "0.13.0"
3425 - source = "registry+https://github.com/rust-lang/crates.io-index"
3426 - checksum = "3e503a11485fe2e17d9e7b0326cb7fef8a9ff0968e1d37d101b45ea08298b0b9"
3420 + checksum = "e08cfaa62476d03061dc86a2befc0c24129399ba37a6f7645fbb72b011abf2f0"
3427 3421
3428 3422 [[package]]
3429 3423 name = "makeover-touch"
3430 - version = "0.8.1"
3424 + version = "0.8.2"
3431 3425 source = "registry+https://github.com/rust-lang/crates.io-index"
3432 - checksum = "d9427a7a6890849f5c815a0e77a63faa4791d7a37e7efaff4802bcafa3b8235a"
3426 + checksum = "42481d14654fcbe37a3b2fcfca239448e3c6c7cf474e26a9837b02447fbb1e5c"
3433 3427 dependencies = [
3434 3428 "makeover-geometry",
3435 - "makeover-layout 0.12.0",
3429 + "makeover-layout",
3436 3430 ]
3437 3431
3438 3432 [[package]]
3439 3433 name = "makeover-tui"
3440 - version = "0.12.0"
3434 + version = "0.13.0"
3441 3435 source = "registry+https://github.com/rust-lang/crates.io-index"
3442 - checksum = "88982f3e29d40336e9748e9adafa88278d123c42875aad178e0cea640a128d57"
3436 + checksum = "5c81462316380492a2b339250324273c5d72f98b28d2718628441b1682e64ff9"
3443 3437 dependencies = [
3444 3438 "makeover",
3445 - "makeover-layout 0.12.0",
3439 + "makeover-layout",
3446 3440 "ratatui",
3447 3441 ]
3448 3442
3449 3443 [[package]]
3450 3444 name = "makeover-webview"
3451 - version = "0.23.0"
3445 + version = "0.25.1"
3452 3446 source = "registry+https://github.com/rust-lang/crates.io-index"
3453 - checksum = "0303225f8e8be6ef237ed268652e7fbfd501bd17843323680a18a9df30b38fe3"
3447 + checksum = "41fb147debeae14c46a48286459712f70cd89d1cce49595fd46a947528c302d5"
3454 3448 dependencies = [
3455 3449 "makeover-geometry",
3456 - "makeover-layout 0.12.0",
3457 - "makeover-touch",
3458 - ]
3459 -
3460 - [[package]]
3461 - name = "makeover-webview"
3462 - version = "0.24.0"
3463 - source = "registry+https://github.com/rust-lang/crates.io-index"
3464 - checksum = "6e88bf1eafa0806bbef3002435b91bfb28ce25a989fe484f19eb1e16c58eafc6"
3465 - dependencies = [
3466 - "makeover-geometry",
3467 - "makeover-layout 0.13.0",
3450 + "makeover-layout",
3468 3451 "makeover-touch",
3469 3452 ]
3470 3453
@@ -4679,7 +4662,7 @@
4679 4662 name = "quasi-router"
4680 4663 version = "0.1.0"
4681 4664 dependencies = [
4682 - "makeover-layout 0.13.0",
4665 + "makeover-layout",
4683 4666 ]
4684 4667
4685 4668 [[package]]
@@ -4697,8 +4680,8 @@
4697 4680 version = "0.1.0"
4698 4681 dependencies = [
4699 4682 "docengine",
4700 - "makeover-layout 0.13.0",
4701 - "makeover-webview 0.24.0",
4683 + "makeover-layout",
4684 + "makeover-webview",
4702 4685 "quasi-http",
4703 4686 "quasi-router",
4704 4687 ]
M Cargo.toml +1 -1
@@ -95,7 +95,7 @@
95 95 notify = "8.2"
96 96 notify-debouncer-mini = "0.7"
97 97 makeover = "2.5"
98 - makeover-tui = "0.12"
98 + makeover-tui = "0.13"
99 99 toml = "1.1"
100 100
101 101 # Enums
@@ -18,12 +18,12 @@
18 18 # Materialises all three generated files: themes/, geometry.css, layout.css,
19 19 # and holds both drift checks this build.rs used to carry itself: touch density
20 20 # as of 0.17, breakpoints as of 0.18.
21 - makeover-build = "0.18"
21 + makeover-build = "0.20.1"
22 22 # The table CSS is generated here too: the columns are this app's, so the
23 23 # shared helper cannot know them, but the tracks and the narrowing rules come
24 24 # from the description rather than from hand-written nth-child cuts.
25 - makeover-webview = "0.23.0"
26 - makeover-layout = "0.12.0"
25 + makeover-webview = "0.25.1"
26 + makeover-layout = "0.14.0"
27 27 # Width. Direct rather than through makeover-webview, because the narrow table
28 28 # pass keys off SizeClass::Compact and a boundary reached transitively is a
29 29 # boundary nobody pinned.
@@ -112,8 +112,8 @@
112 112 # The forms emitter and the description it renders. Runtime deps, not build:
113 113 # form markup depends on the value, the error and the options at the moment a
114 114 # modal opens, so it cannot be materialised the way the stylesheet is.
115 - makeover-webview = "0.23.0"
116 - makeover-layout = "0.12.0"
115 + makeover-webview = "0.25.1"
116 + makeover-layout = "0.14.0"
117 117 # Browser opening
118 118 open = { workspace = true }
119 119
@@ -213,7 +213,7 @@
213 213 async fn a_row_carries_both_badges_as_tokens_and_keeps_the_status_tone() {
214 214 // Was `a_row_carries_both_badges_as_one_trailing_fact`, which asserted the
215 215 // workaround: "Side Project · On Hold" joined into `meta`, and
216 - // `!html.contains("tone-warning")` pinning down the loss. makeover-layout
216 + // `!html.contains("warning")` pinning down the loss. makeover-layout
217 217 // 0.9.0's `RowPart::Tokens` is what this screen's finding asked for, and
218 218 // this is the assertion inverted.
219 219 let state = state().await;
@@ -230,7 +230,11 @@
230 230 assert!(html.contains("On Hold"));
231 231 // The thing the join could not keep. `utils.js:statusTone` maps OnHold to
232 232 // warning, and now so does the description.
233 - assert!(html.contains("tone-warning"));
233 + // `data-tone`, not a `tone-warning` class. quasi@f287ac1 stopped emitting
234 + // the class names, because makeover defines none of them: its whole
235 + // vocabulary keys tone off the attribute, so a toned thing wearing a class
236 + // rendered untoned.
237 + assert!(html.contains("data-tone=\"warning\""));
234 238 assert!(!html.contains("Side Project · On Hold"));
235 239 }
236 240
@@ -86,7 +86,7 @@
86 86 // form `Priority::as_str` gives, which is what the JS chip shows too.
87 87 assert!(page.contains("Pending"));
88 88 assert!(page.contains(">H<"));
89 - assert!(page.contains("tone-danger"));
89 + assert!(page.contains("data-tone=\"danger\""));
90 90 }
91 91
92 92 #[tokio::test]
@@ -202,16 +202,19 @@
202 202
203 203 let plain = review(&state);
204 204 assert!(plain.contains("Wednesday"));
205 - assert!(!plain.contains("chip-latched"));
205 + // `latched`, which is the class makeover styles. This asserted
206 + // `chip-latched`, a third name that no stylesheet defined, so a latched
207 + // chip looked exactly like an unlatched one. quasi@f287ac1.
208 + assert!(!plain.contains("latched"));
206 209
207 210 let off = html(post(&state, "/weekly-review/vacation/2", Params::new()));
208 - assert!(off.contains("chip-latched"));
211 + assert!(off.contains("latched"));
209 212 assert!(off.contains(r#"aria-pressed="true""#));
210 213 // The day it marks off stops reporting counts and says so.
211 214 assert!(off.contains("Day off"));
212 215
213 216 let on_again = html(post(&state, "/weekly-review/vacation/2", Params::new()));
214 - assert!(!on_again.contains("chip-latched"));
217 + assert!(!on_again.contains("latched"));
215 218 }
216 219
217 220 #[tokio::test]