Skip to main content

max / goingson

Take quasi 0.104: name the time summary where it is placed `summary_body` is its own shape, so it answers a Slot, and a Slot no longer carries the name of the control that reveals it. The name moves to the parent, which is the one that discloses it: `framed "Time tracked" include summary_body(panel)`. This is the case a hoist cannot reach. Inside one declare! the macro lifts a child region's own `label` onto the placement and nothing changes; across two invocations there is no child region to lift from, only a shape that answers a value.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01P8ostB2UmZJGj5WjSHRSot
Author: Max Johnson <me@maxj.phd> · 2026-09-08 00:50 UTC
Signed with PGP, not checked
Commit: d815de681e04d4f7f298be54287e2e1350195c55
Parent: e1bc68b
3 files changed, +12 insertions, -12 deletions
@@ -36,7 +36,7 @@
36 36 makeover-geometry = "0.7"
37 37 # Only to write its selection and clock scripts into the frontend. Those two are
38 38 # the whole of `frontend/js/` since the swap.
39 - quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.103" }
39 + quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.104" }
40 40
41 41 [dependencies]
42 42 goingson-core = { workspace = true }
@@ -54,10 +54,10 @@
54 54 # dependency's source even with the feature off -- so a public clone could not
55 55 # build at all against a URL it could not reach. quasi went public that day and
56 56 # the URL moved here with it.
57 - quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.103" }
58 - quasi-http = { git = "https://makenot.work/git/max/quasi.git", version = "0.103" }
59 - quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.103" }
60 - quasi-tauri = { git = "https://makenot.work/git/max/quasi.git", version = "0.103" }
57 + quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.104" }
58 + quasi-http = { git = "https://makenot.work/git/max/quasi.git", version = "0.104" }
59 + quasi-webview = { git = "https://makenot.work/git/max/quasi.git", version = "0.104" }
60 + quasi-tauri = { git = "https://makenot.work/git/max/quasi.git", version = "0.104" }
61 61 quasi-declare = { git = "https://makenot.work/git/max/quasi.git", version = "0.1" }
62 62
63 63 # The notification declaration, and it is NOT behind the `quasi` feature: the
@@ -70,7 +70,7 @@
70 70 # so an app wanting eight lines over `tauri-plugin-notification` had to link the
71 71 # whole description stack for them. quasicoherent `c231ff13` moved it here,
72 72 # where the `Deliver` trait it implements already lives.
73 - quasi-notifs = { git = "https://makenot.work/git/max/quasi.git", version = "0.103", features = ["synckit", "describe", "tauri"] }
73 + quasi-notifs = { git = "https://makenot.work/git/max/quasi.git", version = "0.104", features = ["synckit", "describe", "tauri"] }
74 74
75 75 # Tauri
76 76 tauri = { workspace = true, features = ["image-png", "devtools"] }
@@ -913,13 +913,13 @@
913 913 /// What the day view's tracked-time panel holds.
914 914 ///
915 915 /// The collapse the JS wires by hand is a disclosure holding one child,
916 - /// open. The child is where the label goes, because a region showing one at
917 - /// a time is what names them.
916 + /// open. The name goes on the placement rather than here: this shape answers
917 + /// a `Slot`, and a `Slot` cannot carry the name of the control that reveals
918 + /// it (quasicoherent `2cdc6761`). See `summary_panel`, which places it with
919 + /// `framed`.
918 920 shape summary_body(panel: &TimeSummaryPanel) -> Slot;
919 921
920 922 region "time-summary-body" as Group {
921 - label "Time tracked";
922 -
923 923 stats [] {
924 924 figure Figure::new(today_total(panel), "today");
925 925 }
@@ -955,7 +955,7 @@
955 955 fed_by Action::get("/timer/summary");
956 956 showing_at_most_one Some(0);
957 957
958 - include summary_body(panel);
958 + framed "Time tracked" include summary_body(panel);
959 959 }
960 960 }
961 961
@@ -202,7 +202,7 @@
202 202 page.slots
203 203 .iter()
204 204 .find(|slot| slot.id == super::LIST)
205 - .and_then(|slot| slot.body.first())
205 + .and_then(|slot| slot.body.get(0))
206 206 .map_or_else(Vec::new, |ranked| match &ranked.node {
207 207 Node::Table { rows, .. } => rows.clone(),
208 208 other => panic!("expected a list, got {other:?}"),