Skip to main content

max / quasi

Hold two markups at one position, as Op::Arms A guard derives as a branch only when turning it off deletes bytes. A renderer that draws one thing when a value is present and a different thing when it is absent deletes nothing, so there was no gap to measure and no branch to make -- the case the derivation started refusing in f2d4dd9. The pager's numbered strip is the site it was refused on: the page a reader is on is a readout where every other page is a control, deliberately, because a control that reloads the page it is on answers nothing. `swapped` makes `shrunk`'s measurement and keeps both middles instead of one. Both ends are pushed out past any sentinel they landed inside, since a maximal common prefix runs into the middle of a hole whenever two renders put the same one in the same place, and half a sentinel either side of an arm is `ZQH` reaching a reader. Two separate differences become one wide swap, unchanged middle and all, which rebuilds either render exactly; what it costs is room, so `build` refuses a swap another site nests inside rather than dropping structure the unrendered arm never showed. The arms' holes are numbered in the level around them, not in an arm, which is what lets one arm carry a hole the other does not: the strip's readout has a page number and no address, its control has both. That falls out of holes being filled by number rather than by position. One call site in the generated filler for both shapes, because the macro cannot know which the derivation will produce -- the fill program is written from the declaration and the residual is derived by rendering it. `Cursor::choose` runs the guarded item's own program on a branch and walks the chosen arm on arms. /feed still does not derive, and no longer for a staging reason: it shares its shapes with the library panel through a `Surface` argument, and a staged `include` drops its arguments. quasicoherent cbb63155.
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 15:06 UTC
Signed with PGP, not checked
Commit: 28e629b63d747bc4cb1f6edc0d74c8d7450ade0b
Parent: f2d4dd9
18 files changed, +517 insertions, -92 deletions
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.106.0"
3 + version = "0.107.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.106" }
17 - quasi-http = { path = "../quasi-http", version = "0.106" }
16 + quasi-router = { path = "../quasi-router", version = "0.107" }
17 + quasi-http = { path = "../quasi-http", version = "0.107" }
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.106" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.107" }
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.106.0"
3 + version = "0.107.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,7 +13,7 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.106" }
16 + quasi-router = { path = "../quasi-router", version = "0.107" }
17 17 quasi-declare = { path = "../quasi-declare", version = "0.1" }
18 18 makeover-layout = "0.44"
19 19
@@ -21,5 +21,5 @@
21 21 # A widget's guarantees are claims about what a renderer draws, so they are
22 22 # tested against a real one rather than by walking the tree the assembly just
23 23 # built. The webview is the renderer that recognises names today.
24 - quasi-webview = { path = "../quasi-webview", version = "0.106" }
25 - quasi-http = { path = "../quasi-http", version = "0.106" }
24 + quasi-webview = { path = "../quasi-webview", version = "0.107" }
25 + quasi-http = { path = "../quasi-http", version = "0.107" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.106.0"
3 + version = "0.107.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,14 +26,14 @@
26 26 askama = ["dep:askama"]
27 27
28 28 [dependencies]
29 - quasi-router = { path = "../quasi-router", version = "0.106" }
30 - quasi-webview = { path = "../quasi-webview", version = "0.106" }
31 - quasi-tui = { path = "../quasi-tui", version = "0.106" }
32 - quasi-immediate = { path = "../quasi-immediate", version = "0.106" }
29 + quasi-router = { path = "../quasi-router", version = "0.107" }
30 + quasi-webview = { path = "../quasi-webview", version = "0.107" }
31 + quasi-tui = { path = "../quasi-tui", version = "0.107" }
32 + quasi-immediate = { path = "../quasi-immediate", version = "0.107" }
33 33 # `Serves` is the trait carrying `screen` and `fragment`, which is what the
34 34 # webview is measured through. Taken directly rather than through quasi-webview
35 35 # because a bench calling a trait method should name the trait it calls.
36 - quasi-http = { path = "../quasi-http", version = "0.106" }
36 + quasi-http = { path = "../quasi-http", version = "0.107" }
37 37 # The macro under measurement. The bench holds the declared copy of the same
38 38 # screen `staging.rs` writes by hand, so the staged column measures what the
39 39 # server actually serves rather than a shape written for a benchmark.
@@ -31,4 +31,4 @@
31 31 trybuild = "1"
32 32 # The generated code names the vocabulary, so a case that is meant to COMPILE
33 33 # needs it. A proc-macro crate cannot depend on it outside dev.
34 - quasi-router = { path = "../quasi-router", version = "0.106" }
34 + quasi-router = { path = "../quasi-router", version = "0.107" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.106.0"
3 + version = "0.107.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.106" }
16 + quasi-router = { path = "../quasi-router", version = "0.107" }
17 17 http = "1.3.1"
18 18 form_urlencoded = "1.2.2"