Skip to main content

max / goingson

Follow the Bespoke split: the heatmap is Ceded `Slot::bespoke` becomes `Slot::ceded` for the completion heatmap, on this module's own words: "Not a workaround and not a gap". Nothing is owed there, so a renderer without a fill for it draws nothing and is right to, which is what the new member says and the old one could not.
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 22:06 UTC
Signed with PGP, not checked
Commit: f3214639bee8fa752e21648e7cf6086c49450445
Parent: 9b85c8e
6 files changed, +17 insertions, -16 deletions
M Cargo.lock +5 -5
@@ -3459,7 +3459,7 @@
3459 3459
3460 3460 [[package]]
3461 3461 name = "makeover-layout"
3462 - version = "0.42.0"
3462 + version = "0.43.0"
3463 3463
3464 3464 [[package]]
3465 3465 name = "makeover-timing"
@@ -8474,6 +8474,10 @@
8474 8474 name = "makeover-immediate"
8475 8475 version = "0.43.0"
8476 8476
8477 + [[patch.unused]]
8478 + name = "ops-status"
8479 + version = "0.1.0"
8480 +
8477 8481 [[patch.unused]]
8478 8482 name = "quasi-axum"
8479 8483 version = "0.97.0"
@@ -8489,7 +8493,3 @@
8489 8493 [[patch.unused]]
8490 8494 name = "quasi-store"
8491 8495 version = "0.1.0"
8492 -
8493 - [[patch.unused]]
8494 - name = "ops-status"
8495 - version = "0.1.0"
M Cargo.toml +1 -1
@@ -100,7 +100,7 @@
100 100 notify = "8.2"
101 101 notify-debouncer-mini = "0.7"
102 102 makeover = "3.2"
103 - makeover-tui = "0.42"
103 + makeover-tui = "0.43"
104 104 toml = "1.1"
105 105
106 106 # Enums
@@ -18,7 +18,7 @@
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.64"
21 + makeover-build = "0.65"
22 22 # Cuts the two house faces into frontend/fonts/. A git dependency because
23 23 # quasi-type is `publish = false`, which is also why makeover-build cannot do
24 24 # this and only emits the CSS that fetches the result. The rev is the one
@@ -28,8 +28,8 @@
28 28 # The table CSS is generated here too: the columns are this app's, so the
29 29 # shared helper cannot know them, but the tracks and the narrowing rules come
30 30 # from the description rather than from hand-written nth-child cuts.
31 - makeover-webview = "0.71"
32 - makeover-layout = "0.42"
31 + makeover-webview = "0.72"
32 + makeover-layout = "0.43"
33 33 # Width. Direct rather than through makeover-webview, because the narrow table
34 34 # pass keys off SizeClass::Compact and a boundary reached transitively is a
35 35 # boundary nobody pinned.
@@ -134,8 +134,8 @@
134 134 # The forms emitter and the description it renders. Runtime deps, not build:
135 135 # form markup depends on the value, the error and the options at the moment a
136 136 # modal opens, so it cannot be materialised the way the stylesheet is.
137 - makeover-webview = "0.71"
138 - makeover-layout = "0.42"
137 + makeover-webview = "0.72"
138 + makeover-layout = "0.43"
139 139 # Browser opening
140 140 open = { workspace = true }
141 141
@@ -126,7 +126,7 @@
126 126 ///
127 127 /// # The grid is not described
128 128 ///
129 - /// A month grid is [`RegionKind::Bespoke`]'s shape. A list of days that had
129 + /// A month grid is [`RegionKind::Ceded`]'s shape. A list of days that had
130 130 /// something on them keeps every fact the grid carries except the shape, and
131 131 /// inventing a `Node::Calendar` to keep the shape is a vocabulary decision this
132 132 /// screen has no standing to make alone.
@@ -4,7 +4,8 @@
4 4 //!
5 5 //! The completion heatmap is a month grid of counts, and a description
6 6 //! expressive enough to produce one is a widget library wearing a description's
7 - //! name. It gets a [`RegionKind::Bespoke`] and stops there.
7 + //! name. It gets a [`RegionKind::Ceded`] and stops there: nothing is owed, so
8 + //! a renderer with no fill for it draws nothing and is right to.
8 9 //!
9 10 //! # The shape
10 11 //!
@@ -160,7 +161,7 @@
160 161 Node::section("Completion History"),
161 162 habit_figures(streak),
162 163 // The heatmap. A month grid of completion counts is exactly what
163 - // `Region::Bespoke` was named for: the description says a thing called
164 + // `Region::Handover` was named for: the description says a thing called
164 165 // `task-heatmap` goes here and says nothing else, and
165 166 // `task-overview.js:renderHeatmap` fills it. Not a workaround and not a
166 167 // gap — a description able to produce a calendar grid is a widget
@@ -168,7 +169,7 @@
168 169 //
169 170 // The id carries the task so the filling code knows which chain to
170 171 // render without asking the screen.
171 - Node::Region(Slot::bespoke(
172 + Node::Region(Slot::ceded(
172 173 format!("task-heatmap-{task_id}"),
173 174 "task-heatmap",
174 175 )),
@@ -353,7 +353,7 @@
353 353 /// Not filed as its own task. `Arrangement`'s docs say the two members came from
354 354 /// measuring the two apps and that discovering the layer missing after the
355 355 /// renderers exist is a redesign; this is the first counter-example and one
356 - /// counter-example is not a member. It is noted on the `Region::Bespoke`
356 + /// counter-example is not a member. It is noted on the `Region::Handover`
357 357 /// reasoning instead: a dashboard is a candidate for the app owning its own
358 358 /// arrangement, the way it owns the heatmap.
359 359 fn column(id: &str, title: &str, body: Node) -> Slot {