Skip to main content

max / audiofiles

Follow quasi to 0.97, where a row carries its Nesting `Row::depth` takes `layout::Nesting` rather than a bare `usize`. The tag sidebar is the tree in this app and so the only construction site in it: the dot count in `drums.kick` becomes a `Nesting`, which puts the one fallible narrowing in the tree here, on a tag path that is never 255 deep.
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:06 UTC
Signed with PGP, not checked
Commit: 7bd2b3aade1c1c4b220d8eae05948972e5b68ce4
Parent: 4865bca
4 files changed, +21 insertions, -20 deletions
M Cargo.lock +14 -14
@@ -3086,9 +3086,9 @@
3086 3086
3087 3087 [[package]]
3088 3088 name = "makeover-layout"
3089 - version = "0.41.0"
3089 + version = "0.41.2"
3090 3090 source = "registry+https://github.com/rust-lang/crates.io-index"
3091 - checksum = "668c1ae75b3cc6617b9ef840f7980b0f576a93564f244c920191c90794fc8e17"
3091 + checksum = "f99de8062307b884315ffa57696427bfc846227d4b1d8b03ade031cd07c9eb2c"
3092 3092
3093 3093 [[package]]
3094 3094 name = "makeover-timing"
@@ -4256,7 +4256,7 @@
4256 4256
4257 4257 [[package]]
4258 4258 name = "quasi-immediate"
4259 - version = "0.95.0"
4259 + version = "0.97.0"
4260 4260 dependencies = [
4261 4261 "docengine",
4262 4262 "egui",
@@ -4267,7 +4267,7 @@
4267 4267
4268 4268 [[package]]
4269 4269 name = "quasi-router"
4270 - version = "0.95.0"
4270 + version = "0.97.0"
4271 4271 dependencies = [
4272 4272 "makeover-layout",
4273 4273 ]
@@ -7558,19 +7558,19 @@
7558 7558
7559 7559 [[patch.unused]]
7560 7560 name = "quasi-axum"
7561 - version = "0.95.0"
7561 + version = "0.97.0"
7562 7562
7563 7563 [[patch.unused]]
7564 7564 name = "quasi-basics"
7565 - version = "0.95.0"
7565 + version = "0.97.0"
7566 7566
7567 7567 [[patch.unused]]
7568 7568 name = "quasi-http"
7569 - version = "0.95.0"
7569 + version = "0.97.0"
7570 7570
7571 7571 [[patch.unused]]
7572 7572 name = "quasi-notifs"
7573 - version = "0.95.0"
7573 + version = "0.97.0"
7574 7574
7575 7575 [[patch.unused]]
7576 7576 name = "quasi-store"
@@ -7578,11 +7578,15 @@
7578 7578
7579 7579 [[patch.unused]]
7580 7580 name = "quasi-tauri"
7581 - version = "0.95.0"
7581 + version = "0.97.0"
7582 7582
7583 7583 [[patch.unused]]
7584 7584 name = "quasi-webview"
7585 - version = "0.95.0"
7585 + version = "0.97.0"
7586 +
7587 + [[patch.unused]]
7588 + name = "quasi-type"
7589 + version = "0.1.3"
7586 7590
7587 7591 [[patch.unused]]
7588 7592 name = "kberg"
@@ -7595,7 +7599,3 @@
7595 7599 [[patch.unused]]
7596 7600 name = "painhours"
7597 7601 version = "0.1.0"
7598 -
7599 - [[patch.unused]]
7600 - name = "quasi-type"
7601 - version = "0.1.3"
M Cargo.toml +2 -2
@@ -26,8 +26,8 @@
26 26 # The described screens, which are audiofiles-browser's screens. By git URL with
27 27 # a version requirement, per the tree's rule for cross-repo deps. They were
28 28 # behind a `quasi` feature until 2026-08-25, when the last flip landed.
29 - quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.95" }
30 - quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.95" }
29 + quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.97" }
30 + quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.97" }
31 31 egui = { version = "0.35", default-features = false, features = ["default_fonts"] }
32 32 egui_extras = { version = "0.35", default-features = false }
33 33 eframe = { version = "0.35", default-features = false, features = ["default_fonts", "glow"] }
@@ -75,7 +75,7 @@
75 75 //! - **The onboarding banner.** `show_vfs_banner` explains what a vault is once.
76 76 //! A described first run is its own subject.
77 77
78 - use quasi_router::layout::Tone;
78 + use quasi_router::layout::{Nesting, Tone};
79 79 use quasi_router::{
80 80 Act, Action, Node, RegionKind, Request, Response, RouteError, Router, Row, Slot, Tag,
81 81 };
@@ -376,7 +376,8 @@
376 376 said.push(branch.to_owned());
377 377 let level = branch.matches('.').count();
378 378 let label = branch.rsplit('.').next().unwrap_or(branch);
379 - let mut row = Row::new(label).depth(level);
379 + let mut row =
380 + Row::new(label).depth(Nesting::at(u8::try_from(level).unwrap_or(u8::MAX)));
380 381 // A tag in its own right is ticked to filter by it. A segment that
381 382 // only groups is neither ticked nor tickable.
382 383 if let Some(filter) = all.iter().find(|filter| filter.path == branch) {
@@ -5175,9 +5175,9 @@
5175 5175 let library = FakeLibrary::stocked();
5176 5176 let rows = tag_rows(&browsed(&library));
5177 5177
5178 - let shape: Vec<(String, usize, Option<bool>)> = rows
5178 + let shape: Vec<(String, u8, Option<bool>)> = rows
5179 5179 .iter()
5180 - .map(|row| (row.primary(), row.depth, row.open))
5180 + .map(|row| (row.primary(), row.depth.level, row.open))
5181 5181 .collect();
5182 5182 assert_eq!(
5183 5183 shape,