Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -784,15 +784,15 @@ hunting for the wrong things.

Plan §1 goal-4 ("no regression on CLI hot path vs the v0.5.35
baseline") verified end-to-end on the Windows 7-drive reference
box. Current v0.5.105 (post-Phase-8 tiered architecture) is
box. Current v0.5.106 (post-Phase-8 tiered architecture) is
**universally faster** than v0.5.35 across every benchmarked
pattern, with the largest result set (`*.dll`, 44 529 rows)
showing a **2.7× speedup**:

```
Drive D, 7.07 M records, 30 rounds, HOT phase, p50 / p95 wall_ms:

v0.5.35 v0.5.105 Δ p50
v0.5.35 v0.5.106 Δ p50
exact (3 rows) 20 / 23 → 18 / 19 −10 %
prefix (8 732) 46 / 50 → 40 / 46 −13 %
ext_rare (11) 18 / 20 → 17 / 18 −6 %
Expand Down Expand Up @@ -968,7 +968,7 @@ log-message renames fail CI before reaching another 24-h soak.
2026-05-13. No new operator-surface features land on `main`
until v0.6.0 ships.

## [0.5.105] - 2026-05-08
## [0.5.106] - 2026-05-08

> **Note on the v0.5.91 gap.** v0.5.91 was prepared and tagged but never
> reached a published GitHub Release: the `release.yml` finalize step hit
Expand All @@ -977,7 +977,7 @@ log-message renames fail CI before reaching another 24-h soak.
> partial release was deleted, the tag name became permanently locked by
> GitHub's *immutable releases* feature (the pre-receive hook refuses any
> future ref creation under that name even after a clean delete). The
> public release sequence therefore jumps `v0.5.90 → v0.5.105`; all
> public release sequence therefore jumps `v0.5.90 → v0.5.106`; all
> intended v0.5.91 changes are rolled forward into this release.

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ license-url: "https://github.com/skyllc-ai/UltraFastFileSearch/blob/main/LICENSE
# Keep this in sync with [workspace.package].version in Cargo.toml.
# The release pipeline (release-plz / just ship) should bump this automatically
# once Pattern 5 in build/update_all_versions.rs is extended to cover CITATION.cff.
version: "0.5.105"
date-released: "2026-05-29"
version: "0.5.106"
date-released: "2026-05-31"

# ── Classification ───────────────────────────────────────────────────────────
type: software
Expand Down
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ members = [
# Workspace Package Metadata (inherited by all crates)
# ─────────────────────────────────────────────────────────────────────────────
[workspace.package]
version = "0.5.105"
version = "0.5.106"
edition = "2024"
# No `rust-version` claim: the workspace is structurally nightly-only.
# `crates/uffs-polars` enables `polars/nightly` unconditionally, which
Expand Down Expand Up @@ -118,21 +118,21 @@ publish = false
# proposed-plan output for 12 days because `release-plz update`
# failed at `cargo package` with this very error. See
# `release-automation-baseline.md` §10 for the diagnostic trail.
uffs-polars = { path = "crates/uffs-polars", version = "0.5.105" }
uffs-security = { path = "crates/uffs-security", version = "0.5.105" }
uffs-text = { path = "crates/uffs-text", version = "0.5.105" }
uffs-time = { path = "crates/uffs-time", version = "0.5.105" }
uffs-mft = { path = "crates/uffs-mft", version = "0.5.105" }
uffs-format = { path = "crates/uffs-format", version = "0.5.105" }
uffs-core = { path = "crates/uffs-core", version = "0.5.105" }
uffs-client = { path = "crates/uffs-client", version = "0.5.105" }
uffs-polars = { path = "crates/uffs-polars", version = "0.5.106" }
uffs-security = { path = "crates/uffs-security", version = "0.5.106" }
uffs-text = { path = "crates/uffs-text", version = "0.5.106" }
uffs-time = { path = "crates/uffs-time", version = "0.5.106" }
uffs-mft = { path = "crates/uffs-mft", version = "0.5.106" }
uffs-format = { path = "crates/uffs-format", version = "0.5.106" }
uffs-core = { path = "crates/uffs-core", version = "0.5.106" }
uffs-client = { path = "crates/uffs-client", version = "0.5.106" }
# `uffs-broker-protocol` carries the wire-protocol types shared between
# `uffs-broker` (the elevated handle vendor, Windows-only binary) and
# `uffs-daemon::broker_client` (the handle consumer). Pure-logic
# Layer-0 lib — cross-platform tests run on every CI lane. Added in
# F5 (issue #205) so neither side duplicates `BROKER_PIPE_NAME` /
# wire-format byte literals.
uffs-broker-protocol = { path = "crates/uffs-broker-protocol", version = "0.5.105" }
uffs-broker-protocol = { path = "crates/uffs-broker-protocol", version = "0.5.106" }
# NOTE: no `uffs-broker` workspace dependency alias on purpose —
# `uffs-broker` is a binary-only crate (the only `[lib]` it carries is
# this protocol module's now-extracted sibling); no other workspace
Expand Down
4 changes: 0 additions & 4 deletions crates/uffs-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,6 @@ fn run_search(args: &[String]) -> Result<()> {

let t_ready = std::time::Instant::now();
// 2 minutes — `from_mins` is nightly-only as of 2026-04.
#[expect(
clippy::duration_suboptimal_units,
reason = "Duration::from_mins is nightly-only"
)]
let ready_timeout = core::time::Duration::from_secs(120);
client
.await_ready(ready_timeout)
Expand Down
4 changes: 0 additions & 4 deletions crates/uffs-daemon/src/index/loading.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,6 @@ impl IndexManager {
/// daemon. Raw NTFS volume reads can hang indefinitely when a
/// drive is unresponsive (bad sectors, sleep, USB disconnect).
#[cfg(windows)]
#[expect(
clippy::duration_suboptimal_units,
reason = "Duration::from_mins is unstable (rust-lang/rust#120301); cannot migrate yet"
)]
const DRIVE_LOAD_TIMEOUT: core::time::Duration = core::time::Duration::from_secs(300);

/// Load live Windows drives — **all drives in parallel**.
Expand Down
20 changes: 20 additions & 0 deletions crates/uffs-mcp/src/handler/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,10 @@ impl ServerHandler for UffsMcpServer {
}
}

#[expect(
clippy::unused_async_trait_impl,
reason = "rmcp ServerHandler trait mandates an async signature; this handler returns precomputed data and has no .await"
)]
async fn list_tools(
&self,
_request: Option<PaginatedRequestParams>,
Expand Down Expand Up @@ -456,6 +460,10 @@ impl ServerHandler for UffsMcpServer {
final_result.map_err(McpError::from)
}

#[expect(
clippy::unused_async_trait_impl,
reason = "rmcp ServerHandler trait mandates an async signature; this handler returns precomputed data and has no .await"
)]
async fn list_resources(
&self,
_request: Option<PaginatedRequestParams>,
Expand Down Expand Up @@ -513,6 +521,10 @@ impl ServerHandler for UffsMcpServer {
})
}

#[expect(
clippy::unused_async_trait_impl,
reason = "rmcp ServerHandler trait mandates an async signature; this handler returns precomputed data and has no .await"
)]
async fn list_resource_templates(
&self,
_request: Option<PaginatedRequestParams>,
Expand Down Expand Up @@ -614,6 +626,10 @@ impl ServerHandler for UffsMcpServer {
)]))
}

#[expect(
clippy::unused_async_trait_impl,
reason = "rmcp ServerHandler trait mandates an async signature; this handler returns precomputed data and has no .await"
)]
async fn list_prompts(
&self,
_request: Option<PaginatedRequestParams>,
Expand All @@ -627,6 +643,10 @@ impl ServerHandler for UffsMcpServer {
})
}

#[expect(
clippy::unused_async_trait_impl,
reason = "rmcp ServerHandler trait mandates an async signature; this handler builds prompt messages synchronously with no .await"
)]
async fn get_prompt(
&self,
request: GetPromptRequestParams,
Expand Down
6 changes: 5 additions & 1 deletion crates/uffs-mft/src/reader/index_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,11 @@ impl MftReader {
/// Always returns `MftError::PlatformNotSupported` on non-Windows
/// platforms.
#[cfg(not(windows))]
#[expect(clippy::unused_async, reason = "async for API parity with windows")]
#[expect(
clippy::unused_async,
clippy::unused_async_trait_impl,
reason = "async signature mirrors the Windows impl for cross-cfg API parity"
)]
pub async fn read_index_cached(&self, _ttl_seconds: u64) -> Result<crate::index::MftIndex> {
Err(MftError::PlatformNotSupported)
}
Expand Down
6 changes: 5 additions & 1 deletion crates/uffs-mft/src/reader/index_read.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,11 @@ impl MftReader {
/// Always returns `MftError::PlatformNotSupported` on non-Windows
/// platforms.
#[cfg(not(windows))]
#[expect(clippy::unused_async, reason = "async for API parity with windows")]
#[expect(
clippy::unused_async,
clippy::unused_async_trait_impl,
reason = "async signature and by-value callback mirror the Windows impl for cross-cfg API parity"
)]
pub async fn read_index_with_progress<F>(&self, _callback: F) -> Result<crate::index::MftIndex>
where
F: Fn(MftProgress) + Send + 'static,
Expand Down
6 changes: 5 additions & 1 deletion crates/uffs-mft/src/reader/index_timing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,11 @@ impl MftReader {
/// Always returns `MftError::PlatformNotSupported` on non-Windows
/// platforms.
#[cfg(not(windows))]
#[expect(clippy::unused_async, reason = "async for API parity with windows")]
#[expect(
clippy::unused_async,
clippy::unused_async_trait_impl,
reason = "async signature mirrors the Windows impl for cross-cfg API parity"
)]
pub async fn read_all_index_with_timing(
&self,
) -> Result<(crate::index::MftIndex, BenchmarkResult)> {
Expand Down
Loading
Loading