Skip to main content

max / quasi

Hold the row's fallback in its type, not in a runtime check Slot::beside panicked when the slot had no run, which made a rule the vocabulary depends on enforceable only after the description was already written. Measured across the three shape trees: 58 .beside( sites, 33 with .across( in the same function body and 25 without, so a static same-body check could never have covered it either. Slot::across now takes the row itself. Run::new(fallback) is a Run's only constructor, so a row that has not said what it does when it is tight is unconstructable rather than merely rejected. A bare Fallback still converts, which is what the five MNW tab strips want: a TabGroup fills its own row from its children's labels, so declaring the fallback and no members is the whole statement. Breaking, so the suite goes to 0.100.0 and every consumer requirement moves with it in the same pass.
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-03 02:15 UTC
Signed with PGP, not checked
Commit: b93f352c49f9f42698ee87ef6458e595ea979865
Parent: a65febb
16 files changed, +183 insertions, -125 deletions
M Cargo.lock +15 -15
@@ -3476,11 +3476,11 @@
3476 3476
3477 3477 [[package]]
3478 3478 name = "quasi"
3479 - version = "0.99.1"
3479 + version = "0.100.0"
3480 3480
3481 3481 [[package]]
3482 3482 name = "quasi-axum"
3483 - version = "0.99.1"
3483 + version = "0.100.0"
3484 3484 dependencies = [
3485 3485 "axum",
3486 3486 "http",
@@ -3494,7 +3494,7 @@
3494 3494
3495 3495 [[package]]
3496 3496 name = "quasi-basics"
3497 - version = "0.99.1"
3497 + version = "0.100.0"
3498 3498 dependencies = [
3499 3499 "makeover-layout",
3500 3500 "quasi-http",
@@ -3504,7 +3504,7 @@
3504 3504
3505 3505 [[package]]
3506 3506 name = "quasi-bench"
3507 - version = "0.99.1"
3507 + version = "0.100.0"
3508 3508 dependencies = [
3509 3509 "askama",
3510 3510 "dhat",
@@ -3521,7 +3521,7 @@
3521 3521
3522 3522 [[package]]
3523 3523 name = "quasi-http"
3524 - version = "0.99.1"
3524 + version = "0.100.0"
3525 3525 dependencies = [
3526 3526 "form_urlencoded",
3527 3527 "http",
@@ -3530,7 +3530,7 @@
3530 3530
3531 3531 [[package]]
3532 3532 name = "quasi-immediate"
3533 - version = "0.99.1"
3533 + version = "0.100.0"
3534 3534 dependencies = [
3535 3535 "docengine",
3536 3536 "egui",
@@ -3541,7 +3541,7 @@
3541 3541
3542 3542 [[package]]
3543 3543 name = "quasi-notifs"
3544 - version = "0.99.1"
3544 + version = "0.100.0"
3545 3545 dependencies = [
3546 3546 "quasi-router",
3547 3547 "synckit-config",
@@ -3551,7 +3551,7 @@
3551 3551
3552 3552 [[package]]
3553 3553 name = "quasi-router"
3554 - version = "0.99.1"
3554 + version = "0.100.0"
3555 3555 dependencies = [
3556 3556 "makeover-layout",
3557 3557 ]
@@ -3568,7 +3568,7 @@
3568 3568
3569 3569 [[package]]
3570 3570 name = "quasi-tauri"
3571 - version = "0.99.1"
3571 + version = "0.100.0"
3572 3572 dependencies = [
3573 3573 "http",
3574 3574 "quasi-http",
@@ -3579,7 +3579,7 @@
3579 3579
3580 3580 [[package]]
3581 3581 name = "quasi-tui"
3582 - version = "0.99.1"
3582 + version = "0.100.0"
3583 3583 dependencies = [
3584 3584 "docengine",
3585 3585 "makeover",
@@ -3592,7 +3592,7 @@
3592 3592
3593 3593 [[package]]
3594 3594 name = "quasi-webview"
3595 - version = "0.99.1"
3595 + version = "0.100.0"
3596 3596 dependencies = [
3597 3597 "docengine",
3598 3598 "makeover-layout",
@@ -6271,10 +6271,6 @@
6271 6271 name = "synckit-client"
6272 6272 version = "0.10.0"
6273 6273
6274 - [[patch.unused]]
6275 - name = "quasi-type"
6276 - version = "0.1.3"
6277 -
6278 6274 [[patch.unused]]
6279 6275 name = "kberg"
6280 6276 version = "0.1.0"
@@ -6290,3 +6286,7 @@
6290 6286 [[patch.unused]]
6291 6287 name = "tagtree"
6292 6288 version = "0.4.1"
6289 +
6290 + [[patch.unused]]
6291 + name = "quasi-type"
6292 + version = "0.1.3"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.99.1"
3 + version = "0.100.0"
4 4 description = "The axum host adapter for quasi-router: an HTTP request in, a rendered description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,14 +13,14 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.99.1" }
17 - quasi-http = { path = "../quasi-http", version = "0.99.1" }
16 + quasi-router = { path = "../quasi-router", version = "0.100.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.100.0" }
18 18 axum = "0.8.8"
19 19 http = "1.3.1"
20 20 tokio = { version = "1.50.0", features = ["rt"] }
21 21
22 22 [dev-dependencies]
23 - quasi-webview = { path = "../quasi-webview", version = "0.99.1" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.100.0" }
24 24 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread"] }
25 25 tower = { version = "0.5.3", features = ["util"] }
26 26 http-body-util = "0.1.3"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-basics"
3 - version = "0.99.1"
3 + version = "0.100.0"
4 4 description = "The first-party widget set: named assemblies of primitives, shared across our apps"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,12 +13,12 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.99.1" }
16 + quasi-router = { path = "../quasi-router", version = "0.100.0" }
17 17 makeover-layout = "0.44"
18 18
19 19 [dev-dependencies]
20 20 # A widget's guarantees are claims about what a renderer draws, so they are
21 21 # tested against a real one rather than by walking the tree the assembly just
22 22 # built. The webview is the renderer that recognises names today.
23 - quasi-webview = { path = "../quasi-webview", version = "0.99.1" }
24 - quasi-http = { path = "../quasi-http", version = "0.99.1" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.100.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.100.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.99.1"
3 + version = "0.100.0"
4 4 description = "What a described screen costs to render, in time and in allocations"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -26,13 +26,13 @@
26 26 askama = ["dep:askama"]
27 27
28 28 [dependencies]
29 - quasi-router = { path = "../quasi-router", version = "0.99.1" }
30 - quasi-webview = { path = "../quasi-webview", version = "0.99.1" }
31 - quasi-tui = { path = "../quasi-tui", version = "0.99.1" }
29 + quasi-router = { path = "../quasi-router", version = "0.100.0" }
30 + quasi-webview = { path = "../quasi-webview", version = "0.100.0" }
31 + quasi-tui = { path = "../quasi-tui", version = "0.100.0" }
32 32 # `Serves` is the trait carrying `screen` and `fragment`, which is what the
33 33 # webview is measured through. Taken directly rather than through quasi-webview
34 34 # because a bench calling a trait method should name the trait it calls.
35 - quasi-http = { path = "../quasi-http", version = "0.99.1" }
35 + quasi-http = { path = "../quasi-http", version = "0.100.0" }
36 36 makeover-layout = "0.44"
37 37 # The renderer's own escaper, so the staged path fills a hole exactly the way
38 38 # `Node::Text` does and the guarantee is not quietly reimplemented.
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.99.1"
3 + version = "0.100.0"
4 4 description = "The http-shaped seam quasi's webview host adapters share: decoding in, a rendered description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,6 +13,6 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.99.1" }
16 + quasi-router = { path = "../quasi-router", version = "0.100.0" }
17 17 http = "1.3.1"
18 18 form_urlencoded = "1.2.2"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-immediate"
3 - version = "0.99.1"
3 + version = "0.100.0"
4 4 edition = "2024"
5 5 description = "The immediate-mode renderer for quasi-router: a described screen in, an egui frame out. Immediate mode is the constraint that matters, not the library."
6 6 license = "MIT"
@@ -12,7 +12,7 @@
12 12 categories = ["gui"]
13 13
14 14 [dependencies]
15 - quasi-router = { path = "../quasi-router", version = "0.99.1" }
15 + quasi-router = { path = "../quasi-router", version = "0.100.0" }
16 16 # The node drawing, which is the makeover layer's and not this crate's. Every
17 17 # widget here that is not a container comes from it: a screen walk that painted
18 18 # its own meter would be the divergence the suite exists to end, one copy per
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-notifs"
3 - version = "0.99.1"
3 + version = "0.100.0"
4 4 description = "Declared notification kinds and the registry that holds them: what a notification says and what it is for, apart from how it reaches a person"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -28,7 +28,7 @@
28 28 tauri = ["dep:tauri", "dep:tauri-plugin-notification"]
29 29
30 30 [dependencies]
31 - quasi-router = { path = "../quasi-router", version = "0.99.1", optional = true }
31 + quasi-router = { path = "../quasi-router", version = "0.100.0", optional = true }
32 32 synckit-config = { git = "https://makenot.work/git/max/synckit.git", version = "0.2", optional = true }
33 33 tauri-plugin-notification = { version = "2.3.3", optional = true }
34 34 # Default features off, for `quasi-tauri`'s reason: this takes an `AppHandle`