Skip to content

chore: release v0.6.40 — ship pipeline auto-commit - #620

Merged
githubrobbi merged 6 commits into
mainfrom
release/v0.6.40
Sep 1, 2026
Merged

chore: release v0.6.40 — ship pipeline auto-commit#620
githubrobbi merged 6 commits into
mainfrom
release/v0.6.40

Conversation

@githubrobbi

Copy link
Copy Markdown
Collaborator

Summary

just ship Phase 2 auto-commit for v0.6.40 — 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.40 tag, which fires release.yml and builds the cross-platform binaries + GitHub Release v0.6.40. (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.40, so local main never drifted — sync it with a plain git pull --ff-only origin main (no reset --hard needed).

…repo

docenta honors a per-repo .docentaignore (gitignore syntax, outranks
.gitignore, !pattern whitelists).  This checkout carries one that keeps
_trash/ (the design-document quarantine) in the corpus even though
/_trash/* is gitignored.  The policy is per-machine, so the file itself
is never committed.
…n.rs

`main.rs` carried the bodies of `run_search`, `run_stats`,
`run_aggregate` and `run_daemon` (plus the search payload writer) as a
leftover of the pre-#436 grammar, while every newer command already
lived in `commands/*` behind a `run_<command>` entry point.  Move the
four stragglers to the same shape:

- `commands/search/run.rs` — `run_search` + `write_search_payload_to_stdout`,
  re-exported as `commands::search::run_search`; the `--stats` / `--agg`
  synthesised searches re-enter through it.
- `commands/stats.rs` — `run_stats` (and the module docs no longer claim
  the daemon-mode route lives in `main.rs`).
- `commands/aggregate.rs` — `run_aggregate`.
- `commands/daemon_mgmt.rs` — `run_daemon`.

`dispatch.rs` now names every command through `commands::…` instead of
reaching back into the crate root.  `client_profile` is declared once
with the other modules (the `#[path]` re-declaration mid-file pointed at
the file's default location anyway).  The crate-level
`#![expect(clippy::single_call_fn)]` is gone: the workspace already
allows that lint by policy, and the expectation would have gone
unfulfilled once the single-call bodies left the file.

Tests moved beside what they exercise: the `parse_drive_letter` cases to
`args.rs`, the `SearchParams::from_cli_args` contract checks to the
search entry point.  The elevation tests stay with `main`.

`main.rs` now holds only `main`, `run` and the two elevation helpers
(651 → 227 lines).  Behaviour unchanged; clippy (all targets, all
features) and the 162 uffs-cli unit + integration tests are green.
The crate header and module docs promised one visual language "for the
daemon, broker, combined-system, and MCP status output", which reads as
if those binaries render through this crate.  They do not: the daemon
reports status over the wire (`StatusResponse`) and `uffs-broker
--status` is a four-line service probe.  The only consumer is
`uffs-cli`, whose `--status` / `--daemon status` views cover all
four sections.

Say so, and record why it stays a separate layer-0 crate instead of
folding into `uffs-format` (which pulls `uffs-mft`): the thin CLI
must style output without the MFT reader in its dependency graph.
Two comments in crates/uffs-cli/Cargo.toml still said
`version = "0.5.90"` while the pins beside them read 0.6.39 — the
release bump rewrites the value but not the prose.  Describe the field
without quoting a number so the comment cannot rot again (the same
lesson rust-toolchain.toml's header records for the channel date).
The README explained the thin client's dropped tokio/ws2_32 dependency
but never why there is no clap — the question every reader of
src/args.rs asks.  Add the answer with its evidence from
docs/research/cross-tool-benchmark-analysis.md §4.1.1: Windows process
creation is ~12 ms + ~2.7 ms per MB, the 52.7 MB fat client spent
136 ms before main(), a clap parse is ~1 ms — the cost was weight, not
parsing — and the thin client landed at ~774 KB.  Name where clap still
lives (uffs-mft, uffs-daemon, uffs-mcp, uffs-bench) and give the
two-line PowerShell recipe to re-measure size and cold start on a
release box.
@githubrobbi
githubrobbi added this pull request to the merge queue Sep 1, 2026
Merged via the queue into main with commit a14d399 Sep 1, 2026
22 checks passed
@githubrobbi
githubrobbi deleted the release/v0.6.40 branch September 1, 2026 04:02
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