Skip to main content

max / audiofiles

Delete the quasi feature: the described screens are the app The terminal step of the port. The feature existed so a described screen could sit beside the shipped one it replaced and be wrong cheaply; the last flip landed and a switch with one position is just a thing to forget to set. Three `cfg` sites and four lines of manifest: the `pub mod quasi` gate, the `described` field and its initialiser, the feature itself, and the two `optional = true` deps. On by default since 2026-08-22, so nothing changes about what is built. `state.described` stays, and the task's done condition needed re-reading before it was deleted: it holds one `Runtime` per window plus what a picker answered and what a destination has room for. What was parallel about it was the beside-arrangement, not the field. The `cfg` goes; the field is what every described screen runs on. Three headers corrected in the same pass, since all three described the arrangement in the present tense: `quasi/mod.rs` ("behind the off-by-default feature"), `quasi/panel.rs` ("in windows beside the shipped ones"), and the workspace manifest's note on the two deps. `panel.rs`'s header also picks up the hole `8d5519cb` records, because this is where somebody will look for it: `draw_settings` and `draw_sync` are windows nothing can open, the doors having gone with `49b7429`. Both are kept, since re-wiring the doors is one of the two answers.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-25 22:29 UTC
Signed with PGP, not checked
Commit: 7cb0ecef5110c0a8af236fc607c6c09c7737cc8c
Parent: 0b84d36
6 files changed, +44 insertions, -37 deletions
M Cargo.toml +3 -2
@@ -23,8 +23,9 @@
23 23 # type of its crosses a renderer boundary, so it is under the same rule as
24 24 # makeover-geometry above rather than the layout/immediate pair below.
25 25 makeover-timing = "0.1"
26 - # The described screens, behind audiofiles-browser's `quasi` feature. By git URL
27 - # with a version requirement, per the tree's rule for cross-repo deps.
26 + # The described screens, which are audiofiles-browser's screens. By git URL with
27 + # a version requirement, per the tree's rule for cross-repo deps. They were
28 + # behind a `quasi` feature until 2026-08-25, when the last flip landed.
28 29 quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.61" }
29 30 quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.61" }
30 31 egui = { version = "0.35", default-features = false, features = ["default_fonts"] }
@@ -5,23 +5,18 @@
5 5 edition.workspace = true
6 6
7 7 [features]
8 - # `quasi` is on by default as of 2026-08-22, when the loose-files warning became
9 - # the first screen to serve from the description rather than sit beside one. Off,
10 - # that screen and every one flipped after it is simply missing. The feature
11 - # itself goes when the last flip lands; until then it is a switch with one
12 - # position that is still spelled.
13 - default = ["device-profiles", "quasi"]
8 + # The `quasi` feature is gone as of 2026-08-25. It existed so a described screen
9 + # could sit beside the shipped one it replaced and be wrong cheaply; the last
10 + # flip landed, nothing is beside anything, and a switch with one position is
11 + # just a thing to forget to set. `crate::quasi` is the app now.
12 + default = ["device-profiles"]
14 13 device-profiles = ["dep:audiofiles-rhai", "dep:rayon"]
15 - # The described screens, off by default. On, `crate::quasi` compiles and the
16 - # shipped egui panels in `crate::ui` are untouched; off, none of it is built.
17 - # goingson's `7c8e6be2` arrangement, for the same reason.
18 - quasi = ["dep:quasi-router", "dep:quasi-immediate"]
19 14
20 15 [dependencies]
21 16 audiofiles-core = { workspace = true }
22 17 audiofiles-rhai = { workspace = true, optional = true }
23 - quasi-router = { workspace = true, optional = true }
24 - quasi-immediate = { workspace = true, optional = true }
18 + quasi-router = { workspace = true }
19 + quasi-immediate = { workspace = true }
25 20 audiofiles-sync = { workspace = true }
26 21 egui = { workspace = true }
27 22 makeover-layout = { workspace = true }
@@ -20,8 +20,7 @@
20 20 pub mod storage_cap;
21 21 pub mod ui;
22 22
23 - /// The described screens, behind the off-by-default `quasi` feature.
24 - #[cfg(feature = "quasi")]
23 + /// The described screens, which are the app's screens.
25 24 pub mod quasi;
26 25 pub mod waveform;
27 26
@@ -1,10 +1,16 @@
1 - //! audiofiles' screens, described.
1 + //! audiofiles' screens, described. **These are the app's screens.**
2 2 //!
3 - //! Behind the off-by-default `quasi` feature, so the shipped egui panels in
4 - //! [`crate::ui`] are exactly what they were while the described versions are
5 - //! proved beside them. That is goingson's arrangement, and the reason is the
6 - //! same: a port that replaces a working screen on the way in has to be right
7 - //! first time, and a port that sits beside one can be wrong cheaply.
3 + //! They sat behind an off-by-default `quasi` feature until 2026-08-25, beside
4 + //! the shipped egui panels they were replacing, which is goingson's arrangement
5 + //! and was right for the reason it gives: a port that replaces a working screen
6 + //! on the way in has to be right first time, and a port that sits beside one can
7 + //! be wrong cheaply.
8 + //!
9 + //! Every one of them has been flipped, the panels they replaced are deleted, and
10 + //! the feature is gone. What is left in [`crate::ui`] is the never-described
11 + //! set — the theme, the widgets, the colour space, the host's file dialogs and
12 + //! the instrument keyboard — plus the confirm overlay, which is what
13 + //! [`Act::confirm`](quasi_router::Act::confirm) asks *through*.
8 14 //!
9 15 //! # What the router's state is, and why it is this small
10 16 //!
@@ -1,14 +1,21 @@
1 - //! The described screens, in windows beside the shipped ones.
1 + //! The described screens, in the windows the shipped ones used to have.
2 2 //!
3 - //! Beside rather than instead of, which is the whole arrangement: with the
4 - //! feature on, opening Settings opens two windows and opening Cloud Sync opens
5 - //! two, so each port can be compared by looking at it. A port that replaced a
6 - //! working panel on the way in would have to be right first time.
3 + //! Beside them until 2026-08-25, which was the whole arrangement while it
4 + //! lasted: with the feature on, opening Settings opened two windows and each
5 + //! port could be compared by looking at it. The feature is gone and so are the
6 + //! panels, so these are the windows now.
7 7 //!
8 - //! One described window per shipped window, each holding its own [`Runtime`],
9 - //! which mirrors the app rather than inventing navigation the shipped app does
10 - //! not have. A described screen *can* navigate — that is what [`Step::Call`] is
11 - //! — but a link from Settings to Sync would be a screen this port made up.
8 + //! One window per screen, each holding its own [`Runtime`], which mirrors the
9 + //! app rather than inventing navigation the shipped app did not have. A
10 + //! described screen *can* navigate — that is what [`Step::Call`] is — but a
11 + //! link from Settings to Sync would be a screen this port made up.
12 + //!
13 + //! **Two of these windows cannot currently be opened**, and that is a hole this
14 + //! module did not make: the doors that set `settings.show_manager` and
15 + //! `sync.show_panel` were the shipped sidebar's and went with `49b7429`, and the
16 + //! described toolbar reaches both addresses by navigating the shell inline
17 + //! instead. Filed as audiofiles `8d5519cb`; `draw_settings` and `draw_sync` are
18 + //! kept because the answer may well be to re-wire the doors.
12 19 //!
13 20 //! # What this module is, and what it deliberately is not
14 21 //!
@@ -261,11 +261,11 @@
261 261 pub settings: SettingsUiState,
262 262 /// The described settings screen, behind the `quasi` feature.
263 263 ///
264 - /// Its own state rather than a field on `SettingsUiState`: the described
265 - /// screen holds what was typed into it, and the shipped panel holds its own
266 - /// separately. Two windows, two states, no sharing, which is what lets them
267 - /// be compared.
268 - #[cfg(feature = "quasi")]
264 + /// Its own state rather than a field on `SettingsUiState`, which the
265 + /// beside-arrangement needed and the described screens still want: this
266 + /// holds one `Runtime` per window, plus what a picker answered and what a
267 + /// destination has room for. A frame does not outlive itself and the
268 + /// buffers behind the fields have to.
269 269 pub described: crate::quasi::panel::Described,
270 270
271 271 /// Tag-classifier UI state (rules builder in Settings).
@@ -447,7 +447,6 @@
447 447 == Some("1");
448 448
449 449 Ok(Self {
450 - #[cfg(feature = "quasi")]
451 450 described: crate::quasi::panel::Described::default(),
452 451 data_dir: data_dir.to_path_buf(),
453 452 backend,