Skip to content

chore: release v0.6.43 — ship pipeline auto-commit - #628

Merged
githubrobbi merged 7 commits into
mainfrom
release/v0.6.43
Oct 3, 2026
Merged

githubrobbi merged 7 commits into
mainfrom
release/v0.6.43

Conversation

@githubrobbi

Copy link
Copy Markdown
Collaborator

Summary

just ship Phase 2 auto-commit for v0.6.43 — the [workspace.package].version bump in Cargo.toml. This PR routes that commit through branch-protection rules. Once it merges to main, run just release-tag to cut the signed v0.6.43 tag, which fires release.yml and 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 --squash is queued — GitHub will merge as soon as the required status checks pass. Squash is required because main-protection mandates 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 satisfies required_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 local main never drifted — sync it with a plain git pull --ff-only origin main (no reset --hard needed).

…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.
@githubrobbi
githubrobbi enabled auto-merge October 3, 2026 05:23
@githubrobbi
githubrobbi added this pull request to the merge queue Oct 3, 2026
Merged via the queue into main with commit 0c9abdf Oct 3, 2026
22 checks passed
@githubrobbi
githubrobbi deleted the release/v0.6.43 branch October 3, 2026 05:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant