this derivation will be built: /nix/store/124p7zskg5aygbg6iqqrrplrcckspj2a-treefmt-check.drv building '/nix/store/124p7zskg5aygbg6iqqrrplrcckspj2a-treefmt-check.drv' treefmt-check> treefmt v2.5.0traversed 71 files treefmt-check> emitted 48 files for processing treefmt-check> formatted 48 files (2 changed) in 215ms treefmt-check> M crates/ssync-core/src/session_filesystem.rs treefmt-check> M crates/ssync-core/src/session_filesystem/pathmap.rs treefmt-check> diff --git a/crates/ssync-core/src/session_filesystem.rs b/crates/ssync-core/src/session_filesystem.rs treefmt-check> index ef6f593..cfe149f 100644 treefmt-check> --- a/crates/ssync-core/src/session_filesystem.rs treefmt-check> +++ b/crates/ssync-core/src/session_filesystem.rs treefmt-check> @@ -9,14 +9,13 @@ pub use pathmap::PathMap; treefmt-check> use std::collections::{HashMap, HashSet}; treefmt-check> use std::path::{Path, PathBuf}; treefmt-check> treefmt-check> +use crate::reconcile::LocalFile; treefmt-check> use anyhow::{Context, Result, anyhow, ensure}; treefmt-check> use ssync_adapters::{Adapter, SessionIdentity}; treefmt-check> -use crate::reconcile::LocalFile; treefmt-check> treefmt-check> use crate::exclude; treefmt-check> use pathmap::Resolver; treefmt-check> treefmt-check> - treefmt-check> /// Session discovery, translation, policy, and mutation for one engine. treefmt-check> pub(crate) struct SessionFilesystem { treefmt-check> adapters: Vec>, treefmt-check> @@ -51,7 +50,6 @@ impl SessionFilesystem { treefmt-check> self.resolver = Resolver::new(map, canonical_home); treefmt-check> } treefmt-check> treefmt-check> - treefmt-check> /// Every configured session root (watch targets). treefmt-check> pub fn roots(&self) -> impl Iterator { treefmt-check> self.adapters.iter().map(|a| a.session_root()) treefmt-check> @@ -63,7 +61,6 @@ impl SessionFilesystem { treefmt-check> .is_some_and(|a| a.is_session_file(path)) treefmt-check> } treefmt-check> treefmt-check> - treefmt-check> /// Decode an index key back to its session-root-relative path (the treefmt-check> /// inverse of the key encoding): strip the `{agent}/` prefix of a treefmt-check> /// configured adapter. treefmt-check> @@ -208,7 +205,6 @@ impl SessionFilesystem { treefmt-check> .canonical_plaintext(self.adapters[idx].as_ref(), bytes) treefmt-check> } treefmt-check> treefmt-check> - treefmt-check> /// Localize and atomically materialize one decrypted wire value. treefmt-check> pub async fn write(&mut self, key: &str, plaintext: Vec) -> Result> { treefmt-check> let Some((idx, rel)) = self.key_parts(key) else { treefmt-check> @@ -279,7 +275,6 @@ fn index_key(id: &SessionIdentity) -> String { treefmt-check> format!("{}/{}", id.agent, id.relative_path.display()) treefmt-check> } treefmt-check> treefmt-check> - treefmt-check> /// Recursively collect session files under `root` accepted by `adapter`. treefmt-check> pub(crate) fn session_files(root: &Path, adapter: &dyn Adapter) -> Vec { treefmt-check> let mut out = Vec::new(); treefmt-check> @@ -287,11 +282,7 @@ pub(crate) fn session_files(root: &Path, adapter: &dyn Adapter) -> Vec treefmt-check> out treefmt-check> } treefmt-check> treefmt-check> -fn for_each_session_file( treefmt-check> - root: &Path, treefmt-check> - adapter: &dyn Adapter, treefmt-check> - mut visit: impl FnMut(PathBuf), treefmt-check> -) { treefmt-check> +fn for_each_session_file(root: &Path, adapter: &dyn Adapter, mut visit: impl FnMut(PathBuf)) { treefmt-check> let mut stack = vec![root.to_path_buf()]; treefmt-check> while let Some(dir) = stack.pop() { treefmt-check> let Ok(entries) = std::fs::read_dir(&dir) else { treefmt-check> @@ -425,7 +416,6 @@ mod tests { treefmt-check> SessionFilesystem::new(vec![Box::new(PiAdapter::new("pi", root))]) treefmt-check> } treefmt-check> treefmt-check> - treefmt-check> #[tokio::test] treefmt-check> async fn snapshot_and_write_round_trip_without_map() { treefmt-check> let root = scratch("roundtrip"); treefmt-check> @@ -475,9 +465,7 @@ mod tests { treefmt-check> ); treefmt-check> let dir = root.join("--proj--"); treefmt-check> std::fs::create_dir_all(&dir).unwrap(); treefmt-check> - let path = dir.join( treefmt-check> - "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl", treefmt-check> - ); treefmt-check> + let path = dir.join("2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"); treefmt-check> std::fs::write(&path, b"{\"type\":\"session\",\"version\":3}\n").unwrap(); treefmt-check> treefmt-check> assert!(filesystem.snapshot().is_empty()); treefmt-check> @@ -492,8 +480,7 @@ mod tests { treefmt-check> let root = scratch("mapped-roundtrip"); treefmt-check> let dir = root.join("--data-Projects-x--"); treefmt-check> std::fs::create_dir_all(&dir).unwrap(); treefmt-check> - let name = treefmt-check> - "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> + let name = "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> let path = dir.join(name); treefmt-check> std::fs::write( treefmt-check> &path, treefmt-check> @@ -502,10 +489,7 @@ mod tests { treefmt-check> .unwrap(); treefmt-check> let mut filesystem = pi_map(&root); treefmt-check> filesystem.set_path_map( treefmt-check> - PathMap::new(vec![ treefmt-check> - ("/data/Projects".into(), "/canon/Projects".into()), treefmt-check> - ]) treefmt-check> - .unwrap(), treefmt-check> + PathMap::new(vec![("/data/Projects".into(), "/canon/Projects".into())]).unwrap(), treefmt-check> None, treefmt-check> ); treefmt-check> treefmt-check> @@ -527,16 +511,13 @@ mod tests { treefmt-check> let root = scratch("omp-home"); treefmt-check> let dir = root.join("-Projects-x"); treefmt-check> std::fs::create_dir_all(&dir).unwrap(); treefmt-check> - let name = treefmt-check> - "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> + let name = "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> std::fs::write( treefmt-check> dir.join(name), treefmt-check> b"{\"type\":\"session\",\"version\":3,\"cwd\":\"/data/Projects/x\"}\n", treefmt-check> ) treefmt-check> .unwrap(); treefmt-check> - let mut filesystem = SessionFilesystem::new(vec![Box::new(PiAdapter::new( treefmt-check> - "omp", &root, treefmt-check> - ))]); treefmt-check> + let mut filesystem = SessionFilesystem::new(vec![Box::new(PiAdapter::new("omp", &root))]); treefmt-check> filesystem.set_path_map( treefmt-check> PathMap::new(vec![("/data".into(), "/canon-home".into())]).unwrap(), treefmt-check> None, treefmt-check> @@ -551,8 +532,7 @@ mod tests { treefmt-check> let root = scratch("mapped-exclude"); treefmt-check> let dir = root.join("--data-Projects-x--"); treefmt-check> std::fs::create_dir_all(&dir).unwrap(); treefmt-check> - let name = treefmt-check> - "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> + let name = "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> std::fs::write( treefmt-check> dir.join(name), treefmt-check> b"{\"type\":\"session\",\"version\":3,\"cwd\":\"/data/Projects/x\"}\n", treefmt-check> @@ -560,10 +540,7 @@ mod tests { treefmt-check> .unwrap(); treefmt-check> let mut filesystem = pi_map(&root); treefmt-check> filesystem.set_path_map( treefmt-check> - PathMap::new(vec![ treefmt-check> - ("/data/Projects".into(), "/canon/Projects".into()), treefmt-check> - ]) treefmt-check> - .unwrap(), treefmt-check> + PathMap::new(vec![("/data/Projects".into(), "/canon/Projects".into())]).unwrap(), treefmt-check> None, treefmt-check> ); treefmt-check> filesystem.set_excludes(HashMap::from([( treefmt-check> @@ -632,10 +609,8 @@ mod tests { treefmt-check> PathMap::new(vec![("/data".into(), "/canon".into())]).unwrap(), treefmt-check> None, treefmt-check> ); treefmt-check> - let main_key = treefmt-check> - "pi/--canon-Projects-x--/2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> - let artifact_key = treefmt-check> - "pi/--canon-Projects-x--/2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a/advisor.jsonl"; treefmt-check> + let main_key = "pi/--canon-Projects-x--/2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> + let artifact_key = "pi/--canon-Projects-x--/2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a/advisor.jsonl"; treefmt-check> treefmt-check> assert!( treefmt-check> filesystem treefmt-check> @@ -647,8 +622,7 @@ mod tests { treefmt-check> filesystem treefmt-check> .write( treefmt-check> main_key, treefmt-check> - b"{\"type\":\"session\",\"version\":3,\"cwd\":\"/canon/Projects/x\"}\n" treefmt-check> - .to_vec(), treefmt-check> + b"{\"type\":\"session\",\"version\":3,\"cwd\":\"/canon/Projects/x\"}\n".to_vec(), treefmt-check> ) treefmt-check> .await treefmt-check> .unwrap() treefmt-check> @@ -673,8 +647,7 @@ mod tests { treefmt-check> let root = scratch("header-budget"); treefmt-check> let project = root.join("--project--"); treefmt-check> std::fs::create_dir_all(&project).unwrap(); treefmt-check> - let name = treefmt-check> - "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> + let name = "2026-05-23T06-55-21-771Z_019e539d-f6ab-71ac-be20-d3ae2b23ea4a.jsonl"; treefmt-check> let mut bytes = vec![b'x'; 64 * 1024]; treefmt-check> bytes.extend_from_slice(b"\n{\"type\":\"session\",\"cwd\":\"/work/project\"}\n"); treefmt-check> std::fs::write(project.join(name), bytes).unwrap(); treefmt-check> @@ -706,10 +679,7 @@ mod tests { treefmt-check> symlink(&outside, root.join("--project--")).unwrap(); treefmt-check> assert!( treefmt-check> filesystem treefmt-check> - .write( treefmt-check> - "pi/--project--/session_id.jsonl", treefmt-check> - b"escape".to_vec() treefmt-check> - ) treefmt-check> + .write("pi/--project--/session_id.jsonl", b"escape".to_vec()) treefmt-check> .await treefmt-check> .is_err() treefmt-check> ); treefmt-check> @@ -722,7 +692,10 @@ mod tests { treefmt-check> .await treefmt-check> .is_err() treefmt-check> ); treefmt-check> - assert_eq!(std::fs::read(outside.join("session_id.jsonl")).unwrap(), b"outside"); treefmt-check> + assert_eq!( treefmt-check> + std::fs::read(outside.join("session_id.jsonl")).unwrap(), treefmt-check> + b"outside" treefmt-check> + ); treefmt-check> } treefmt-check> treefmt-check> #[tokio::test] treefmt-check> @@ -736,7 +709,10 @@ mod tests { treefmt-check> .await treefmt-check> .unwrap() treefmt-check> .expect("write must resolve"); treefmt-check> - assert_eq!(std::fs::read(root.join("--project--/session_id.jsonl")).unwrap(), b"session"); treefmt-check> + assert_eq!( treefmt-check> + std::fs::read(root.join("--project--/session_id.jsonl")).unwrap(), treefmt-check> + b"session" treefmt-check> + ); treefmt-check> assert_eq!(stamp.1, 7); treefmt-check> assert!(filesystem.delete(key).await.unwrap()); treefmt-check> assert!(!root.join("--project--").exists()); treefmt-check> diff --git a/crates/ssync-core/src/session_filesystem/pathmap.rs b/crates/ssync-core/src/session_filesystem/pathmap.rs treefmt-check> index 429b5e3..2021840 100644 treefmt-check> --- a/crates/ssync-core/src/session_filesystem/pathmap.rs treefmt-check> +++ b/crates/ssync-core/src/session_filesystem/pathmap.rs treefmt-check> @@ -196,10 +196,7 @@ impl Resolver { treefmt-check> if let Some(path) = oversized treefmt-check> && local_cwd.is_none() treefmt-check> { treefmt-check> - bail!( treefmt-check> - "{}: required session header exceeds 64 KiB", treefmt-check> - path.display() treefmt-check> - ); treefmt-check> + bail!("{}: required session header exceeds 64 KiB", path.display()); treefmt-check> } treefmt-check> let Some(local_cwd) = local_cwd else { treefmt-check> bail!( treefmt-check> @@ -475,5 +472,4 @@ mod tests { treefmt-check> assert_eq!(m.canonical_of("/any").unwrap(), None); treefmt-check> assert_eq!(m.local_of("/any").unwrap(), None); treefmt-check> } treefmt-check> - treefmt-check> } error: Cannot build '/nix/store/124p7zskg5aygbg6iqqrrplrcckspj2a-treefmt-check.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/p8rzhikdmlmmhbp3shxp1c7br2ssq1dh-treefmt-check Last 25 log lines: > assert_eq!(stamp.1, 7); > assert!(filesystem.delete(key).await.unwrap()); > assert!(!root.join("--project--").exists()); > diff --git a/crates/ssync-core/src/session_filesystem/pathmap.rs b/crates/ssync-core/src/session_filesystem/pathmap.rs > index 429b5e3..2021840 100644 > --- a/crates/ssync-core/src/session_filesystem/pathmap.rs > +++ b/crates/ssync-core/src/session_filesystem/pathmap.rs > @@ -196,10 +196,7 @@ impl Resolver { > if let Some(path) = oversized > && local_cwd.is_none() > { > - bail!( > - "{}: required session header exceeds 64 KiB", > - path.display() > - ); > + bail!("{}: required session header exceeds 64 KiB", path.display()); > } > let Some(local_cwd) = local_cwd else { > bail!( > @@ -475,5 +472,4 @@ mod tests { > assert_eq!(m.canonical_of("/any").unwrap(), None); > assert_eq!(m.local_of("/any").unwrap(), None); > } > - > } For full logs, run: nix log /nix/store/124p7zskg5aygbg6iqqrrplrcckspj2a-treefmt-check.drv