chore: release v0.6.43 — ship pipeline auto-commit - #628
Merged
Merged
Conversation
…warm-up retry
The Windows deadline guard now raises a `fired` flag before it calls
CancelSynchronousIo, and `send_request` maps a read/write that fails
while the flag is set (plus any kernel TimedOut / WouldBlock) to
ClientError::Timeout instead of a raw `Io("... os error 995")`.
The CLI's warm-up retry matches only a daemon-reported os error 995 from
now on. Before, the client's own cancellation carried the same code,
was mistaken for the "index warming" transient, and was re-sent up to
five times while the daemon was still running the first search: the
2026-10-03 benchmark run issued five `*.*` scans for three invocations.
`rpc_deadline` is public so the CLI can name the budget in its message.
The classification helpers live in `connect_sync_errors.rs` to keep
`connect_sync.rs` under the file-size policy.
…d scan `run_search_over` returns `Result<SearchResponse, SearchFailure>`. A scan that outlives its budget is reported as ERR_SEARCH_TIMEOUT (-5), permit saturation as ERR_SEARCH_BUSY (-6) and a panicked scan task as ERR_INTERNAL — each with an operator-facing message — instead of the success-shaped zero-row response all three used to return, which the client could not tell from "nothing matched" (two of the three 2026-10-03 benchmark runs read "0 results" that were timeouts). The budget is `UFFS_SEARCH_TIMEOUT_SECS` (default 30 s, below the client's 60 s deadline so the error reaches the client). Dropping the JoinHandle never stopped the workers; `SearchFilters` now carries a cancel flag that every per-drive scan loop polls every 4 096 records, the daemon raises it on timeout, and a cancelled search returns no rows rather than a partial subset. `SearchFailure` lives in `index/search_failure.rs` for the file-size policy.
`--benchmark` used to skip the client-side write entirely (the #626 fix), so per-row formatting, shmem reads and blob copies were never measured — the one thing a benchmark of a file-search tool is for. The rows now run through the real formatter into a byte-counting sink and the profile block prints an `Output (sink)` line with the elapsed time and bytes produced; only the terminal is left out. `--benchmark -v` sends the same output to the real stdout. `--no-output` stays the match-only switch: the daemon builds no rows, so it times "how many files match" and nothing else (auto-set when stdout is NUL). The profile is printed after the output pass so `--profile` reports the real stdout cost too. A client-side timeout now prints what actually happened — the daemon is still running the search, most likely paging parked drives back in — instead of a bare "request timed out". `render_native_results_into` lives in `output/render_into.rs` for the file-size policy.
Two INFO lines fired on every USN apply tick for every warm drive — "USN refresh applied" and a Warm → Warm `shard.transition` with `reason="usn-refresh"` — 159 of them in one 2026-10-03 session, burying the real tier transitions. A body swap is housekeeping, not a tier change; both are DEBUG events now. The `idle_demote_tracing` contract (exactly one demote + one promote at INFO) is unchanged.
Owner ruling 2026-10-03: a shard goes Parked → Hot when a search needs it and is then left alone; only the idle TTL ladder retires it. The kernel-Low pressure cascade that parked LRU Warm shards one by one is removed — `cascade_demote_one_step`, `PressureLevel:: requires_cascade_demote`, `DemoteReason::PressureCascade` (`reason="pressure-cascade"`) and their tests are gone. `spawn_pressure_subscriber` keeps logging every transition under `cache.pressure` and does nothing else; a new lifecycle test pins that `Low` moves no shard and trims nothing. Trigger: on a memory-starved host the cascade fired 2.5 minutes after start, parked all six drives right after a benchmark had warmed them, and turned the next `*.*` into a four-minute MFT re-read. The Windows-host validation runbook marks G1 and the G4 cascade assertions as the historical record; concurrency policy, README and the operator-facing doc comments say what the subscriber does now.
`taplo fmt --check` over the workspace failed on 15 files that predate the pre-commit staged-scope gate: 12 hand-aligned test-definition files (3 siblings were already unaligned), the hand-aligned comment column in rustfmt.toml, and a trailing blank line in the fuzz manifest. Whitespace only — every file parses to the identical TOML value before and after (checked with tomllib). The repo-wide check is clean now.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
just shipPhase 2 auto-commit for v0.6.43 — the[workspace.package].versionbump inCargo.toml. This PR routes that commit through branch-protection rules. Once it merges tomain, runjust release-tagto cut the signedv0.6.43tag, which firesrelease.ymland builds the cross-platform binaries + GitHub Release v0.6.43. (No auto-tag on merge — the tag step is manual on-demand, Path B.)Auto-merge
--auto --squashis queued — GitHub will merge as soon as the required status checks pass. Squash is required becausemain-protectionmandates signed commits, and GitHub's rebase-auto-merge cannot sign the rebased commit; the squash-merge commit is signed by GitHub's own key, which satisfiesrequired_signatures: true. The original author's signed commit remains verifiable in the PR branch history.After merge
The auto-commit lived only on
release/v0.6.43, so localmainnever drifted — sync it with a plaingit pull --ff-only origin main(noreset --hardneeded).