From 75cf25e5aa6c3f2990eaa9d0211cbfb6fefcf3ed Mon Sep 17 00:00:00 2001 From: Robert M1 <50460704+githubrobbi@users.noreply.github.com> Date: Thu, 23 Jul 2026 08:03:57 -0700 Subject: [PATCH 1/2] fix(version): re-stamp build info on every HEAD movement via the reflog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The version banner's rerun trigger watched only .git/HEAD — but a pull, commit, or reset onto the *current* branch leaves HEAD's symref line unchanged, so the embedded commit SHA went stale and --version reported the previous build's commit: exactly the 'am I running the fix?' trap the stamp exists to prevent. .git/logs/HEAD (the reflog) appends on every HEAD movement, making it the reliable trigger; .git/HEAD stays watched for branch switches on fresh clones without a reflog entry yet. Ported from the uffs-products build flow, where the same gap was found and fixed first. --- crates/uffs-version/src/lib.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/uffs-version/src/lib.rs b/crates/uffs-version/src/lib.rs index 098025b42..9d69fe84a 100644 --- a/crates/uffs-version/src/lib.rs +++ b/crates/uffs-version/src/lib.rs @@ -152,7 +152,15 @@ pub fn emit_build_env() { println!("cargo:rustc-env=UFFS_TARGET={}", env_or_unknown("TARGET")); println!("cargo:rustc-env=UFFS_PROFILE={}", env_or_unknown("PROFILE")); // Re-stamp when the checked-out commit or the compiler changes. + // + // `.git/HEAD` alone is not enough: a pull, commit, or reset onto the + // *current* branch leaves HEAD's symref unchanged (`ref: refs/heads/...`), + // so the SHA would go stale and `--version` would report the previous + // build's commit — exactly the "am I running the fix?" trap this stamp + // exists to prevent. `.git/logs/HEAD` (the reflog) appends on every HEAD + // movement, so it is the reliable trigger. println!("cargo:rerun-if-changed=../../.git/HEAD"); + println!("cargo:rerun-if-changed=../../.git/logs/HEAD"); println!("cargo:rerun-if-env-changed=RUSTC"); } From 073373460f50ab69accdf251b84f7786edf1bf6f Mon Sep 17 00:00:00 2001 From: Robert M1 <50460704+githubrobbi@users.noreply.github.com> Date: Thu, 23 Jul 2026 08:23:30 -0700 Subject: [PATCH 2/2] chore: development v0.6.30 - comprehensive testing complete [auto-commit] --- CHANGELOG.md | 15 +++++++++++- Cargo.lock | 48 +++++++++++++++++++------------------- Cargo.toml | 26 ++++++++++----------- crates/uffs-cli/Cargo.toml | 4 ++-- rust-toolchain.toml | 2 +- 5 files changed, 54 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1ad8248c..281fb0535 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.6.30] - 2026-07-23 + +### Added + +- mft: for_each_record — streaming fixed-up targeted record reads (#577) + +### Fixed + +- mft: real overlapped re-open for snapshot devices + snapshot-correct $MFT fallback (#578) +- mft: demote IOCP-fallback chain messages from WARN to INFO (#579) +- version: re-stamp build info on every HEAD movement via the reflog + ## [0.6.29] - 2026-07-22 ### Added @@ -2721,7 +2733,8 @@ thin clients over a unified `uffsd` process. ### Fixed - Various MFT parsing edge cases -[Unreleased]: https://github.com/skyllc-ai/UltraFastFileSearch/compare/v0.6.29...HEAD +[Unreleased]: https://github.com/skyllc-ai/UltraFastFileSearch/compare/v0.6.30...HEAD +[0.6.30]: https://github.com/skyllc-ai/UltraFastFileSearch/compare/v0.6.29...v0.6.30 [0.6.29]: https://github.com/skyllc-ai/UltraFastFileSearch/compare/v0.6.28...v0.6.29 [0.6.28]: https://github.com/skyllc-ai/UltraFastFileSearch/compare/v0.6.27...v0.6.28 [0.6.27]: https://github.com/skyllc-ai/UltraFastFileSearch/compare/v0.6.26...v0.6.27 diff --git a/Cargo.lock b/Cargo.lock index 0a9eea857..c2565713f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4390,7 +4390,7 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "uffs-bench" -version = "0.6.29" +version = "0.6.30" dependencies = [ "chrono", "clap", @@ -4407,7 +4407,7 @@ dependencies = [ [[package]] name = "uffs-broker" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "serde", @@ -4425,14 +4425,14 @@ dependencies = [ [[package]] name = "uffs-broker-protocol" -version = "0.6.29" +version = "0.6.30" dependencies = [ "thiserror 2.0.19", ] [[package]] name = "uffs-ci-pipeline" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "chrono", @@ -4451,7 +4451,7 @@ dependencies = [ [[package]] name = "uffs-cli" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "assert_cmd", @@ -4473,7 +4473,7 @@ dependencies = [ [[package]] name = "uffs-client" -version = "0.6.29" +version = "0.6.30" dependencies = [ "dirs-next", "libc", @@ -4493,7 +4493,7 @@ dependencies = [ [[package]] name = "uffs-core" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "bytemuck", @@ -4524,7 +4524,7 @@ dependencies = [ [[package]] name = "uffs-daemon" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "clap", @@ -4557,7 +4557,7 @@ dependencies = [ [[package]] name = "uffs-diag" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "chrono", @@ -4572,7 +4572,7 @@ dependencies = [ [[package]] name = "uffs-format" -version = "0.6.29" +version = "0.6.30" dependencies = [ "chrono", "itoa", @@ -4583,7 +4583,7 @@ dependencies = [ [[package]] name = "uffs-gen-hooks" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "clap", @@ -4595,7 +4595,7 @@ dependencies = [ [[package]] name = "uffs-gen-workflow" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "clap", @@ -4608,7 +4608,7 @@ dependencies = [ [[package]] name = "uffs-manifest-audit" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "clap", @@ -4620,7 +4620,7 @@ dependencies = [ [[package]] name = "uffs-mcp" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "axum", @@ -4644,7 +4644,7 @@ dependencies = [ [[package]] name = "uffs-mft" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "bitflags", @@ -4685,14 +4685,14 @@ dependencies = [ [[package]] name = "uffs-polars" -version = "0.6.29" +version = "0.6.30" dependencies = [ "polars", ] [[package]] name = "uffs-security" -version = "0.6.29" +version = "0.6.30" dependencies = [ "aes-gcm", "dirs-next", @@ -4707,22 +4707,22 @@ dependencies = [ [[package]] name = "uffs-statusfmt" -version = "0.6.29" +version = "0.6.30" [[package]] name = "uffs-text" -version = "0.6.29" +version = "0.6.30" dependencies = [ "bytemuck", ] [[package]] name = "uffs-time" -version = "0.6.29" +version = "0.6.30" [[package]] name = "uffs-update" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "dirs-next", @@ -4741,11 +4741,11 @@ dependencies = [ [[package]] name = "uffs-version" -version = "0.6.29" +version = "0.6.30" [[package]] name = "uffs-vss-requestor" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "cc", @@ -4757,7 +4757,7 @@ dependencies = [ [[package]] name = "uffs-winsvc" -version = "0.6.29" +version = "0.6.30" dependencies = [ "anyhow", "windows 0.62.2", diff --git a/Cargo.toml b/Cargo.toml index c3e1e4d30..009e87a87 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,7 +66,7 @@ members = [ # Workspace Package Metadata (inherited by all crates) # ───────────────────────────────────────────────────────────────────────────── [workspace.package] -version = "0.6.29" +version = "0.6.30" edition = "2024" # No `rust-version` claim: the workspace is structurally nightly-only. # `crates/uffs-polars` enables `polars/nightly` unconditionally, which @@ -133,30 +133,30 @@ 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.6.29" } -uffs-security = { path = "crates/uffs-security", version = "0.6.29" } -uffs-text = { path = "crates/uffs-text", version = "0.6.29" } -uffs-time = { path = "crates/uffs-time", version = "0.6.29" } -uffs-version = { path = "crates/uffs-version", version = "0.6.29" } -uffs-statusfmt = { path = "crates/uffs-statusfmt", version = "0.6.29" } -uffs-mft = { path = "crates/uffs-mft", version = "0.6.29" } -uffs-format = { path = "crates/uffs-format", version = "0.6.29" } -uffs-core = { path = "crates/uffs-core", version = "0.6.29" } -uffs-client = { path = "crates/uffs-client", version = "0.6.29" } +uffs-polars = { path = "crates/uffs-polars", version = "0.6.30" } +uffs-security = { path = "crates/uffs-security", version = "0.6.30" } +uffs-text = { path = "crates/uffs-text", version = "0.6.30" } +uffs-time = { path = "crates/uffs-time", version = "0.6.30" } +uffs-version = { path = "crates/uffs-version", version = "0.6.30" } +uffs-statusfmt = { path = "crates/uffs-statusfmt", version = "0.6.30" } +uffs-mft = { path = "crates/uffs-mft", version = "0.6.30" } +uffs-format = { path = "crates/uffs-format", version = "0.6.30" } +uffs-core = { path = "crates/uffs-core", version = "0.6.30" } +uffs-client = { path = "crates/uffs-client", version = "0.6.30" } # `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.6.29" } +uffs-broker-protocol = { path = "crates/uffs-broker-protocol", version = "0.6.30" } # `uffs-winsvc` — native Windows service control (SCM query/start/stop) + # the non-connecting broker-pipe readiness probe. Layer-0 leaf: its only # dependency is the `windows` crate (windows-target), with non-Windows # stubs so cross-platform consumers (uffs-update, uffs-cli) compile. # Single source of truth for the `sc`/SCM mechanics previously duplicated # across uffs-broker, uffs-update, and uffs-cli. -uffs-winsvc = { path = "crates/uffs-winsvc", version = "0.6.29" } +uffs-winsvc = { path = "crates/uffs-winsvc", version = "0.6.30" } # 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 diff --git a/crates/uffs-cli/Cargo.toml b/crates/uffs-cli/Cargo.toml index e8ce1d001..8c7684588 100644 --- a/crates/uffs-cli/Cargo.toml +++ b/crates/uffs-cli/Cargo.toml @@ -69,7 +69,7 @@ path = "src/main.rs" # `version = "0.5.90"` is required for `cargo package` validation — # see root `Cargo.toml`'s [workspace.dependencies] note for the full # rationale (R6 of `release-automation-plan.md`). -uffs-client = { path = "../uffs-client", version = "0.6.29", default-features = false } +uffs-client = { path = "../uffs-client", version = "0.6.30", default-features = false } # Canonical CSV / parity / legacy-footer writer. Direct dep (not a # re-export chain through `uffs-client`) so the CLI and the daemon @@ -77,7 +77,7 @@ uffs-client = { path = "../uffs-client", version = "0.6.29", default-features = # `version = "0.5.90"` is required for `cargo package` validation — # see root `Cargo.toml`'s [workspace.dependencies] note for the full # rationale (R6 of `release-automation-plan.md`). -uffs-format = { path = "../uffs-format", version = "0.6.29" } +uffs-format = { path = "../uffs-format", version = "0.6.30" } # Typed drive-letter newtype. Direct dep so the CLI command signatures # (`daemon_load`, `daemon_tiering`, etc.) name `DriveLetter` natively diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 1c4976bcf..9a5eca80c 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -32,7 +32,7 @@ # Run `just toolchain-sync` to re-attempt a channel bump; the CI # pipeline auto-refreshes on `ship --fresh` unless `--skip-toolchain-sync` # is passed. -channel = "nightly-2026-07-22" +channel = "nightly-2026-07-23" # Specify components that should always be available components = [