Skip to main content

max / goingson

Drop the local sort-caret gap; makeover-webview 0.31.0 emits it The gap and the reserved box were written here on 2026-08-11, and in mnw-server's stylesheet the same afternoon, because the webview renderer appended the caret glyph bare while the other two renderers wrote a leading space into theirs. Both copies had to be box-only, with a comment explaining that this file is unlayered and so declaring `content` would win over the generated caret and leave the heading with no arrow. 0.31.0 emits the space inside the glyph and holds the box open on the unsorted arm, so both rules and the two REVIEWED_OVERLAPS entries covering them come out. A reviewed pairing is a claim about who owns a property, and it expires when the design system takes the property back. makeover-build moves to 0.24.0 in the same pass, since the renderer's `links` key means the whole graph takes one version or none.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-12 14:26 UTC
Signed with PGP, not checked
Commit: 228c0b8534c2378eb9b1dc92b9a51c9b292332c2
Parent: b2edf80
4 files changed, +14 insertions, -39 deletions
M Cargo.lock +4 -4
@@ -3398,9 +3398,9 @@
3398 3398
3399 3399 [[package]]
3400 3400 name = "makeover-build"
3401 - version = "0.23.1"
3401 + version = "0.24.0"
3402 3402 source = "registry+https://github.com/rust-lang/crates.io-index"
3403 - checksum = "09326dad8b7fdbf1ae4359f866e8f4432a86c837f5a8bf1576bf0c298afcd41b"
3403 + checksum = "12bcb5bc04026df9a5f4007e2a0f17ed34d8671573ea6445b4d17d7f44280d69"
3404 3404 dependencies = [
3405 3405 "makeover",
3406 3406 "makeover-geometry",
@@ -3442,9 +3442,9 @@
3442 3442
3443 3443 [[package]]
3444 3444 name = "makeover-webview"
3445 - version = "0.30.1"
3445 + version = "0.31.0"
3446 3446 source = "registry+https://github.com/rust-lang/crates.io-index"
3447 - checksum = "d6f86fc082c5fc0d73192a3f3f5f74840848ba2cc815154ab207b1fc707f7c64"
3447 + checksum = "f9f97c1694d50160ed5c980a17c96b1c8d007dbdb2d6b9472a2a5270e28cb4fd"
3448 3448 dependencies = [
3449 3449 "makeover-geometry",
3450 3450 "makeover-layout",
@@ -18,11 +18,11 @@
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.23.1"
21 + makeover-build = "0.24.0"
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.30.1"
25 + makeover-webview = "0.31.0"
26 26 makeover-layout = "0.16.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
@@ -112,7 +112,7 @@
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.30.1"
115 + makeover-webview = "0.31.0"
116 116 makeover-layout = "0.16.0"
117 117 # Browser opening
118 118 open = { workspace = true }
@@ -436,14 +436,10 @@
436 436 /// - `.field { box-shadow }` -- makeover owns the resting and invalid bevels;
437 437 /// GO's are `.field--ghost` (deliberately borderless in toolbars) and the
438 438 /// `:focus` ring on an invalid field, which makeover draws no arm for.
439 - /// - `.table-heading { content }` -- the sort caret's reserved gap. Declared on
440 - /// the **unsorted** arm (`:not([aria-sort])::after`) precisely so it cannot
441 - /// blank the generated caret on the sorted one. Declaring it on the sorted
442 - /// arm is the trap that bit twice on 2026-08-11; this entry is what keeps the
443 - /// correct arrangement legible rather than looking like the bug.
444 - /// - `.table-heading { display }` -- different elements, not different arms:
445 - /// makeover sets `table-cell` on the heading, GO sets `inline-block` on the
446 - /// caret pseudo-element inside it.
439 + /// The caret's two entries were here until makeover-webview 0.31.0, which emits
440 + /// the leading space and the reserved box itself. Both of GO's rules are gone
441 + /// with them: a reviewed pairing is a claim about who owns a property, and it
442 + /// expires when the design system takes the property back.
447 443 ///
448 444 /// An entry that stops colliding fails the build, so this list cannot outlive
449 445 /// what it describes.
@@ -455,8 +451,6 @@
455 451 ("field", "box-shadow"),
456 452 ("field", "color"),
457 453 ("tab", "color"),
458 - ("table-heading", "content"),
459 - ("table-heading", "display"),
460 454 ];
461 455
462 456 /// Widths that are tuning inside the wide shell, not a shell boundary.
@@ -1247,8 +1247,9 @@
1247 1247 generated pair to match.
1248 1248
1249 1249 What is left below is what the design system does not answer -- whether a
1250 - pressable heading takes a hover surface, and the caret's spacing -- and
1251 - nothing that restates the glyph. */
1250 + pressable heading takes a hover surface -- and nothing that restates the
1251 + glyph. The caret's gap and its reserved box were here too until
1252 + makeover-webview 0.31.0 began emitting both. */
1252 1253 .table-heading[data-sortable] {
1253 1254 user-select: none;
1254 1255 white-space: nowrap;
@@ -1258,26 +1259,6 @@
1258 1259 background: var(--hover-surface);
1259 1260 }
1260 1261
1261 - /* makeover-tui and makeover-immediate both emit their caret with a leading
1262 - space; the webview emitter appends the bare glyph, so the gap is the app's to
1263 - put back. Reserved on every sortable heading rather than only the sorted one,
1264 - or pressing a header shifts the row it sits in.
1265 -
1266 - Box only, never `content`, on the sorted arm. This layer outranks `makeover`,
1267 - so declaring `content` here at all would win over the generated caret and put
1268 - the arrow back to nothing -- which is the same override this block was
1269 - written to delete, one property along. The empty box goes on the arm the
1270 - generator does not match. */
1271 - .table-heading[data-sortable]:not([aria-sort])::after {
1272 - content: '';
1273 - }
1274 -
1275 - .table-heading[data-sortable]::after {
1276 - display: inline-block;
1277 - min-width: 1ch;
1278 - margin-left: var(--gap-bound);
1279 - }
1280 -
1281 1262 /* Overdue task highlighting */
1282 1263 .task-overdue .task-description-text {
1283 1264 color: var(--danger);