Skip to main content

max / quasi

Describe a pager, and draw a direction only where it acts A pager was a `Rest` the screen supplied whole. A `Rest` has no sentinel and a supplier of one takes a struct, so a paged screen could not reach the residual seam however it was written. Said as a description it is a `Rest` settled by its own body, one guard per direction, and everything it carries is a number or an address -- the two things a residual already holds. What made that work was a look ruling, Max's, 2026-09-08. A direction with no address was drawn disabled, so turning its guard off SUBSTITUTED one markup for another rather than deleting bytes; the derivation looks for a clean deletion, found none, and silently baked the enabled form. A first page would have served an enabled Prev pointing at page 0. It is left out now, which this renderer's own rule already asked for: a control that answers nothing is the lying control `control_tag` exists to prevent. The layout shift is the price, and `.rest` is where to pay it if it matters. `Jump` carries `here` per jump and `Rest::is_here` is gone. Three renderers each compared a jump's page against the paging to find the current one, which is a fact the description already knows. Same ruling as `Choice::chosen`'s, and the strip needs it whichever way `Op::Arms` goes. A setting's body may now hold a body of its own, which is what a marked jump inside a pager's strip is. The strip itself does not derive yet: it marks its page by substitution too, and unlike the disabled Prev that is deliberate -- the page you are on is not a control. 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 14:26 UTC
Signed with PGP, not checked
Commit: 812871c85dad0fbfd2b84bdfa9a1e74169ebfd18
Parent: 20b67a5
22 files changed, +356 insertions, -129 deletions
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.105.0"
3 + version = "0.106.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.105" }
17 - quasi-http = { path = "../quasi-http", version = "0.105" }
16 + quasi-router = { path = "../quasi-router", version = "0.106" }
17 + quasi-http = { path = "../quasi-http", version = "0.106" }
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.105" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.106" }
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.105.0"
3 + version = "0.106.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.105" }
16 + quasi-router = { path = "../quasi-router", version = "0.106" }
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.105" }
25 - quasi-http = { path = "../quasi-http", version = "0.105" }
24 + quasi-webview = { path = "../quasi-webview", version = "0.106" }
25 + quasi-http = { path = "../quasi-http", version = "0.106" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.105.0"
3 + version = "0.106.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.105" }
30 - quasi-webview = { path = "../quasi-webview", version = "0.105" }
31 - quasi-tui = { path = "../quasi-tui", version = "0.105" }
32 - quasi-immediate = { path = "../quasi-immediate", version = "0.105" }
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" }
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.105" }
36 + quasi-http = { path = "../quasi-http", version = "0.106" }
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.105" }
34 + quasi-router = { path = "../quasi-router", version = "0.106" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.105.0"
3 + version = "0.106.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.105" }
16 + quasi-router = { path = "../quasi-router", version = "0.106" }
17 17 http = "1.3.1"
18 18 form_urlencoded = "1.2.2"