Skip to main content

max / quasi

Compile a dispatch to arms, and stop dropping a long loop body Section 24 refused a staged dispatch and named `Op::Arms` as the answer, since its cases replace each other at one position and there is no insertion to measure. The twin now reads `plan.arm(id, count)` -- the count rides along so a traced render records it, because the derivation renders the site once per case and nothing else counts them -- and `dispatched` takes the widest region any case disagrees over, since they all sit at one place. Every case's holes are numbered at the level around the dispatch rather than inside a case, which is what lets one case carry a hole another does not. Same arrangement the swap uses. In a row, one position means one column: every case has to place its value the same way, compared as the emitted call so it generalises past cells, and two cases naming two columns are two cells and belong in two statements. Also fixes a loop the derivation was dropping, found because the new refusal fired where nothing was wrong. `grown` subtracts one body length to turn the extra copy's earliest placement into the body's, and read it as `?`. Two copies of the same body agree with each other, so the maximal common suffix runs back through the extra one and lands at the start of the markup BEFORE the loop -- earlier than one body length whenever the body is longer than that markup, which is any table whose rows are longer than its heading row. It underflowed, the loop was dropped, and the residual held one pass as a literal with a `Repeat` still in the fill program to panic on the first request. There is no window in that case rather than no span. Every screen on the seam had a preamble longer than its rows, which is why nothing had hit it. 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 16:40 UTC
Signed with PGP, not checked
Commit: 64138166defb227b6603661066802a9a205501d9
Parent: 28e629b
19 files changed, +568 insertions, -59 deletions
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.107.0"
3 + version = "0.108.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.107" }
17 - quasi-http = { path = "../quasi-http", version = "0.107" }
16 + quasi-router = { path = "../quasi-router", version = "0.108" }
17 + quasi-http = { path = "../quasi-http", version = "0.108" }
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.107" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.108" }
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.107.0"
3 + version = "0.108.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.107" }
16 + quasi-router = { path = "../quasi-router", version = "0.108" }
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.107" }
25 - quasi-http = { path = "../quasi-http", version = "0.107" }
24 + quasi-webview = { path = "../quasi-webview", version = "0.108" }
25 + quasi-http = { path = "../quasi-http", version = "0.108" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.107.0"
3 + version = "0.108.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.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" }
29 + quasi-router = { path = "../quasi-router", version = "0.108" }
30 + quasi-webview = { path = "../quasi-webview", version = "0.108" }
31 + quasi-tui = { path = "../quasi-tui", version = "0.108" }
32 + quasi-immediate = { path = "../quasi-immediate", version = "0.108" }
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.107" }
36 + quasi-http = { path = "../quasi-http", version = "0.108" }
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.107" }
34 + quasi-router = { path = "../quasi-router", version = "0.108" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.107.0"
3 + version = "0.108.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.107" }
16 + quasi-router = { path = "../quasi-router", version = "0.108" }
17 17 http = "1.3.1"
18 18 form_urlencoded = "1.2.2"