Skip to content

docs: prepare 3.1.0 - #74

Merged
rob-p merged 10 commits into
developfrom
chore/release-prep
Oct 1, 2026
Merged

rob-p merged 10 commits into
developfrom
chore/release-prep

Conversation

@rob-p

@rob-p rob-p commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Merge with "Create a merge commit", not squash. This branch includes a real merge of main (v3.0.3) into develop (acdd047). That merge is what lets develop merge into main cleanly for 3.1.0; a squash would drop it and bring back the Cargo.toml conflict.

Prepares develop for the 3.1.0 release. It makes no changes to what the build computes.

Changes

  • Website docs: --compress-intermediates, a cuttlefish probe section, an intermediate-compression section in resource control, and probe files in cleaning up. These missed perf: compress intermediates when the work directory's storage needs it #73's merge by minutes.
  • Release script:
    • The packaging check is now one cargo publish --workspace --dry-run. It packages and verifies all three crates against each other through a temporary local registry, which covers scratch-probe before its first publish.
    • The real release runs the same check right after the version bump, before anything is committed, tagged, pushed or published.
    • The usage text now includes scratch-probe.
  • CHANGELOG: Unreleased becomes 3.1.0, restructured, with headline numbers from one set of back-to-back runs, each checked against the raw data.
  • Version strings: the READMEs, docs/index.md and the website's version references and exact-version pin move to 3.1.0. probe is added to the command lists, including the CLI crate's README, which goes to crates.io.
  • Performance record: spinning-disk and Apple Silicon compression measurements.
  • scratch-probe README: a macOS drive-cache caveat.
  • Spelling: "color", never "colour", across code, comments and docs. The only exception is the third-party npm package @img/colour.
  • Main merged into develop, keeping develop's side; the tree is unchanged.

Release-candidate validation (develop at 485d11a)

150k Salmonella, k = 31, node-pinned, intermediate compression off. At 16 threads, develop and 3.0.3 ran as order-alternated pairs.

3.0.3 3.1.0 candidate C++
uncolored t16 12:09 / 12:14 6:06 / 6:04 14:43
colored t16 17:37 / 17:56 11:16 / 12:37 25:06
uncolored t64 4:45 2:38 / 2:52 5:24
colored t64 6:30 4:20 not run
written, uncolored / colored t16 472 / 616 GB 204 / 347 GB 644 / 970 GB
  • Every run gave 252,487,658 unitigs and 16,417,233,428 bases.
  • Uncolored output matches C++ (cuttlefish compare), and the colored color digest matches 3.0.3; a cyclic unitig may start at a different position.
  • Read mode (SRR105788) matches 3.0.3, as does the 10k k = 55 color digest.
  • A job from another user shared the benchmark cores during one colored run. That run was discarded and redone; the redo is the 12:37.
  • The first 64-thread uncolored run was compressed, because auto measured 4.44 GB/s against the 4.73 GB/s it needs. It took 2:42, no different from the uncompressed reruns shown.

Other checks:

  • NEON: end to end on an Apple Silicon Mac, three graphs from 1,000 assemblies match their x86 digests, and the test suite passes.
  • Slow disk: on HDD scratch with page cache capped at 16 GiB, compression made colored 10k builds 24% faster, which is the choice auto makes on rotational disks.
  • Packaging: scripts/bump_and_publish.sh 3.1.0 --dry-run --publish verifies all three crates. The same check, run at the bumped 3.1.0 in a scratch worktree, also passes.

Release steps after merge

  1. Merge develop into main (clean).
  2. On main: scripts/bump_and_publish.sh 3.1.0 --publish. It needs a default Rust toolchain or RUSTUP_TOOLCHAIN set (cargo 1.90+), and a crates.io token. It verifies packaging, bumps, commits, tags and pushes, then publishes scratch-probe 0.1.0, cuttlefish-rs and the CLI.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR

rob-p and others added 10 commits September 25, 2026 06:40
- Command line:
  - the `--compress-intermediates` flag in the build options;
  - a section on what `auto` decides, and when to force `on` or `off`;
  - a `cuttlefish probe` section.
- Resource control: an intermediate-compression section beside bucket
  compression.
- Cleaning up: cleanup also removes interrupted probes' files, but skips
  any from the last minute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
A dry run validates each crate with `cargo publish --dry-run`, which
resolves workspace dependencies against the index. It already tolerated
"failed to select a version" (the index holds only other versions).
It did not tolerate "no matching package named ... found", which is
what cargo says for scratch-probe before its first release. So the
3.1.0 dry run failed although the real publish, which publishes
scratch-probe first, would succeed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
- The CHANGELOG's Unreleased section becomes 3.1.0, restructured, with
  headline numbers from one set of back-to-back runs against 3.0.3.
- The performance record gains the spinning-disk measurement (newton HDD,
  16 GiB cgroup) and the Apple Silicon on/off pair.
- The scratch-probe README notes that on macOS a short probe of an SSD can
  time the drive's cache.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
The project's CLI and API already say `--color`, `colors dump` and
`ColoredCounted`, but comments, docs and one panic message used "colour" and
"coloured". Code, comments, the engineering record, the website sources and the
logo script now use "color" consistently. The only remaining "colour" is the
third-party npm package `@img/colour` in `website/package-lock.json`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
- CHANGELOG 3.1.0: corrections checked against the raw runs.
  - colored t16 17:46 to 11:56, and 347 GB written (the redo's 362 GB is a
    writeback artifact);
  - C++ uncolored 644 GB; the memory gap as measured;
  - k = 55 14%, read mode 6.1 GB, partitioning 23-28%;
  - cyclic unitigs may start elsewhere.
  - Also: the NEON label packer, the library compatibility notes for
    `BuildParams` and the entry points' probe, and `auto` leaving compression
    off only at moderate thread counts.
- Performance record: the slow-disk written GB are pair means, and the
  cgroup-limit claim covers only the runs where the peak was recorded.
- Website:
  - the `auto` list now renders as one list, and gains the Linux-only
    rotational detection and the failed-probe case;
  - the probe output is marked as an excerpt, and it times FUSE too;
  - cleanup's "only" covers probe files, and `--prefix` does not narrow
    them;
  - the resources page softens its NVMe claim.
- `cuttlefish cleanup --help` mentions probe files.
- The READMEs and docs/index.md list `probe` and show version 3.1.0. The
  website's version strings and its exact-version pin move to 3.1.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
…ible

The dry run checked each crate on its own, and had to wave through
cuttlefish-rs and the CLI while their dependencies were not yet on
crates.io. The real release therefore committed, tagged, pushed and
published scratch-probe before either crate had ever been packaged, and a
failure after that point could not be retried: the version and the tag
already existed.

Both paths now run a single `cargo publish --workspace --dry-run` instead.
Cargo resolves the workspace's own unpublished versions through a temporary
local registry, so all three crates are packaged and verified against each
other.
- The dry run does this at the current version.
- The real release does it right after the version bump, before the commit.
- A dependency crate already on crates.io at its version is excluded, as the
  real publish skips it.

The usage text and the crate summary now include scratch-probe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
v3.0.3's version bump reached develop only as a squashed copy (#69), so git
still saw main's release commit as unmerged. Merging develop into main for
3.1.0 would then conflict in Cargo.toml's [workspace.dependencies], where
develop has since added scratch-probe. This records the merge, keeping
develop's side (the tree is unchanged), so develop contains main and the 3.1.0
merge into main is clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
The 3.1.0 run behind the 64-thread uncolored figure ran compressed:
`auto` measured 4.44 GB/s against the 4.73 GB/s it needs at 64 threads.
Two reruns with compression off took 2:38 and 2:52, a mean of 2:45, so the
row reads 4:45 to 2:45 (-42%). The compressed run, at 2:42, was no
different. The table now says the figures are uncompressed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LUjJrrX3K6C7yC2fZ6J6xR
@rob-p
rob-p merged commit eea37ce into develop Oct 1, 2026
11 checks passed
@rob-p rob-p mentioned this pull request Oct 1, 2026
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