Skip to main content

max / quasi

Close four vocabulary collisions and give a row its Nesting Four names in one description could mean two things each, and one type the crate had already ruled on was carrying a bare integer instead. - `screen::Fill` becomes `Prefill`. It collided with `layout::Fill`, the surface intent, and both are in scope in every description. Its own doc never defended the name, unlike `Picture` and `Tag`, which are the deliberate dodges for `layout::Image` and `layout::Token` and stay. - `Progress::Standing` becomes `Progress::Idle`, off `layout::Standing`, the facet state. Nothing serialised it; the three lowercase spellings a payload carries are hand-written and untouched. - `Richness::Prose` becomes `Richness::Sentence`, off the `Prose` type. Not `Plain`: the tier admits paragraphs, lists, code and links, and `docengine::render_plain` means the opposite thing three frames away. `Sentence` is the opposition the type's own doc already draws against `Document`. - `Row::depth` and `Cells::depth` carry `layout::Nesting` rather than a bare `usize`, which is what `edf33114` ruled on 2026-08-30 and what makeover-webview's comment already claimed was true. `Outline::depth` and `folded_by` follow. That deletes the three lossy narrowings the renderers were each doing by hand, and moves the one fallible conversion to audiofiles' tag sidebar, where the depth is a count of dots in a tag path. quasi-router's makeover-layout requirement said 0.41.0, in which `Nesting` does not exist; caret resolution to the installed 0.41.2 was hiding it. Fixed to 0.41.2. Breaking, so the workspace goes to 0.97.0 and its consumers follow 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-01 19:03 UTC
Signed with PGP, not checked
Commit: 1995e32c8820aa66a761700529ac8411d9a4315d
Parent: a37b75f
23 files changed, +134 insertions, -121 deletions
M Cargo.lock +13 -13
@@ -2668,9 +2668,9 @@
2668 2668
2669 2669 [[package]]
2670 2670 name = "makeover-layout"
2671 - version = "0.41.0"
2671 + version = "0.41.2"
2672 2672 source = "registry+https://github.com/rust-lang/crates.io-index"
2673 - checksum = "668c1ae75b3cc6617b9ef840f7980b0f576a93564f244c920191c90794fc8e17"
2673 + checksum = "f99de8062307b884315ffa57696427bfc846227d4b1d8b03ade031cd07c9eb2c"
2674 2674
2675 2675 [[package]]
2676 2676 name = "makeover-timing"
@@ -3476,11 +3476,11 @@
3476 3476
3477 3477 [[package]]
3478 3478 name = "quasi"
3479 - version = "0.96.0"
3479 + version = "0.97.0"
3480 3480
3481 3481 [[package]]
3482 3482 name = "quasi-axum"
3483 - version = "0.96.0"
3483 + version = "0.97.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.96.0"
3497 + version = "0.97.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.96.0"
3507 + version = "0.97.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.96.0"
3524 + version = "0.97.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.96.0"
3533 + version = "0.97.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.96.0"
3544 + version = "0.97.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.96.0"
3554 + version = "0.97.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.96.0"
3571 + version = "0.97.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.96.0"
3582 + version = "0.97.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.96.0"
3595 + version = "0.97.0"
3596 3596 dependencies = [
3597 3597 "docengine",
3598 3598 "makeover-layout",
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.96.0"
3 + version = "0.97.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.96.0" }
17 - quasi-http = { path = "../quasi-http", version = "0.96.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.97.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.97.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.96.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.97.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.96.0"
3 + version = "0.97.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.96.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.97.0" }
17 17 makeover-layout = "0.41.0"
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.96.0" }
24 - quasi-http = { path = "../quasi-http", version = "0.96.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.97.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.97.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.96.0"
3 + version = "0.97.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.96.0" }
30 - quasi-webview = { path = "../quasi-webview", version = "0.96.0" }
31 - quasi-tui = { path = "../quasi-tui", version = "0.96.0" }
29 + quasi-router = { path = "../quasi-router", version = "0.97.0" }
30 + quasi-webview = { path = "../quasi-webview", version = "0.97.0" }
31 + quasi-tui = { path = "../quasi-tui", version = "0.97.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.96.0" }
35 + quasi-http = { path = "../quasi-http", version = "0.97.0" }
36 36 makeover-layout = "0.41.0"
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.96.0"
3 + version = "0.97.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.96.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.97.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.96.0"
3 + version = "0.97.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.96.0" }
15 + quasi-router = { path = "../quasi-router", version = "0.97.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.96.0"
3 + version = "0.97.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.96.0", optional = true }
31 + quasi-router = { path = "../quasi-router", version = "0.97.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`