From 7dfbe3184a6a6ce5f1e564b2645f08c9abd973ed Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Thu, 27 Aug 2026 20:27:45 +0200 Subject: [PATCH] Merge master into the face branch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Master moved 24 commits while this branch was building the face sweep, and one of them changed how the interface reaches a server: `remote.rs` is now the only file that names a connector, and everything else takes `&dyn RemoteBackend`. The face sweep was written before that landed and built a `NextcloudBackend` directly. Git merged the text without complaint and the result did not compile, which is the useful kind of conflict — it goes through `remote::connect` now, like every other pass. Two documentation conflicts, both resolved toward master. `code-health.md` was an add/add: master's copy carries the CH resolution for the backend seam and a better provenance note, so it wins outright, with its measured figures re-taken against the merged tree rather than either side's — `run()` is 1,855 lines now, 2,042 tests, 793 traceability tags. `traceability.md` is generated, so it was regenerated rather than hand-merged. The seam grades in code-health.md are unchanged by this merge. That is worth noticing rather than glossing: the face work went into the seams that already existed — `run()`, `library.rs`, `AppWindow` — which is exactly the pressure CH-1 describes rather than evidence against it. All four CI jobs pass: desktop (fmt, clippy, test, build), layering, traceability, and the Android cross-build. Co-Authored-By: Claude Opus 5 (1M context) --- ui/dr-ui/src/library.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/dr-ui/src/library.rs b/ui/dr-ui/src/library.rs index a4da903..d204e09 100644 --- a/ui/dr-ui/src/library.rs +++ b/ui/dr-ui/src/library.rs @@ -2904,7 +2904,9 @@ pub fn spawn_face_sweep( }; rt.block_on(async { - let backend = match NextcloudBackend::new(&creds, &user_id) { + // Through `remote::connect`, which is the only place in the + // interface that knows whose backend this is. + let backend = match crate::remote::connect(&creds, &user_id) { Ok(b) => b, Err(e) => { log::warn!("face sweep: {e}"); @@ -2931,7 +2933,7 @@ pub fn spawn_face_sweep( .collect(); let results = futures_join_all(lanes.into_iter().map(|lane| { - let backend = &backend; + let backend = &*backend; let models = ⊧ let options = &options; async move {