Skip to content

chore: release 0.16.0 - #980

Merged
raeq merged 1 commit into
mainfrom
chore/release-0.16.0
Sep 6, 2026
Merged

chore: release 0.16.0#980
raeq merged 1 commit into
mainfrom
chore/release-0.16.0

Conversation

@raeq

@raeq raeq commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Summary

The 0.16.0 release PR. Ten version fields, the four disarm_core glue pins, the two JVM documentation snippets, the changelog stamp with a consolidated Upgrade notes section, the golden-fixture header, and one row in docs/RUST_API.md's upgrade table.

No tag and no GitHub Release yet. Richard reviews first; the publish step is listed at the end and has not been run.

Why a minor

KEY_SCHEMA_VERSION went 3 → 9 since v0.15.0, in six steps, and #910 is a feat!. RELEASING.md rules both out of a patch.

What moved

file change
Cargo.toml, pyproject.toml, CITATION.cff 0.15.00.16.0
bindings/node/package.json, package-lock.json (two fields) 0.15.00.16.0
bindings/ruby/lib/disarm/version.rb 0.15.00.16.0
bindings/java/disarm-java/build.gradle.kts, disarm-kotlin/build.gradle.kts 0.15.00.16.0
uv.lock regenerated online: the disarm entry, plus a python_full_version < '3.11' marker on typing-extensions that is the lock catching up to pyproject.toml. An offline regeneration downgraded hypothesis from the local cache and was discarded.
bindings/{node,ruby/ext/disarm,java/rust,cabi}/Cargo.toml disarm_core pin 0.150.16; all four resolve to disarm 0.16.0 under the CI [patch.crates-io] redirect
docs/java/getting-started.md, bindings/java/README.md the seven coordinate lines, including the Maven XML form the 0.15.0 sweep caught
CHANGELOG.md stamped [0.16.0] — 2026-09-06; empty [Unreleased] above; ### Upgrade notes added; one arrow corrected
docs/RUST_API.md 0.15.x0.16.0 row in the key-stability upgrade table
tests/fixtures/key_stability/golden_keys.tsv.gz header re-stamped to 0.16.0; all 23,171 rows byte-identical; KEY_FIXTURE_SHA256 unchanged

The Upgrade notes section

Six changes moved a stored output this cycle, and each carried its own inline note under Added or Changed (breaking), hundreds of lines apart. The new section lists them in one table: step, change, and what moves versus what stays byte-identical.

step change
3 → 4 single-letter Latin small capitals (#815, #915)
4 → 5 six unreachable confusable rows (#833, #919)
5 → 6 54 negative enclosed letters (#815, #920)
6 → 7 llm_guardrail and strip_obfuscation stop naming emoji (#910, #926)
7 → 8 the deletion class resolved (#937, #941)
8 → 9 two measured-visual rows (#738, #955)

One inline note was wrong and is corrected in place: the #920 entry said 4 → 5; the constant went from 5 to 6 at that commit (derived by reading src/api/metadata.rs at each of the six commits).

The sweep

grep -rn "0.15.0" --exclude=CHANGELOG.md . | grep -v deprecated leaves 101 hits, none of them a version field:

hits where why it stays
53 benchmarks/meta/baselines/default.json the measurement record of the 0.15.0 build; subject keys and disarm_version are data
12 tests/test_meta_benchmark.py test literals using 0.15.0 as a sample version
26 benchmarks/meta/**, .github/workflows/publish-*.yml, src/api/metadata.rs, python/disarm/_presets.py, three test docstrings, docs/user-guide/tokenizer-preprocessing.md prose about the 0.15.0 cycle
1 tests/fixtures/latin_shape_exposure.tsv the fixture's provenance stamp, kept like the golden-key header was until this PR re-stamped it
1 docs/RUST_API.md the existing 0.14.x → 0.15.0 row; the 0.15.x → 0.16.0 row now sits beside it

Verification

  • Tier 3 on origin/main at 3cc21fb before branching: the exhaustive trio, exhaustive_confusables, the lib-level ignored set, pytest -m formal. All green.
  • On this branch: cargo fmt --check, clippy on both feature sets with -D warnings, perf_lint.sh, no pyo3 in the pure tree, cargo test (796 unit tests plus the integration targets), cargo doc --no-deps with 0 warnings.
  • maturin develop --release reports 0.16.0; pytest -n 8 --dist loadfile: 7,636 passed, 42 skipped. test_key_stability.py and test_version_consistency.py: 34 passed, including test_glue_pin_tracks_the_minor.
  • The built wheel installed into a clean uv venv reports 0.16.0.
  • Docs and lint on the same install: ruff check and ruff format --check at the pinned 0.16.5, mypy, audit_language_consistency.py, test_toolchain_pins.py, mkdocs build --strict, run_doc_tests.py 42/42, check_doc_claims.py, check_docs_against_release.py. All green.
  • Not run locally: the per-binding toolchains (rubocop, rspec, biome, gradle, the cabi smoke). The binding jobs run on this PR in CI, and no binding source changed, only its pin.

After merge, not done here

gh release create v0.16.0 --target main --title "disarm 0.16.0" --notes-file <notes>

That fires publish.yml (Tier 3, then crates.io and PyPI) and the node, ruby and java publishers behind it. Then confirm each registry, not the workflow: PyPI, crates.io, npm, the six RubyGems platforms, and repo1.maven.org metadata for dev.disarm:disarm and disarm-kotlin.

Refs #902

🤖 Generated with Claude Code

Ten version fields across nine files, plus the four `disarm_core` glue pins,
which a MINOR moves in the release PR itself (RELEASING.md):

  Cargo.toml, pyproject.toml, CITATION.cff
  bindings/node/package.json + package-lock.json (two fields)
  bindings/ruby/lib/disarm/version.rb
  bindings/java/{disarm-java,disarm-kotlin}/build.gradle.kts
  uv.lock (regenerated online; the only other movement is a
    `python_full_version < '3.11'` marker on typing-extensions, the lock
    catching up to pyproject rather than dependency churn. An offline
    regeneration also downgraded hypothesis from the local cache and was
    discarded.)
  bindings/{node,ruby/ext/disarm,java/rust,cabi}/Cargo.toml  0.15 -> 0.16

The two JVM documentation versions the eight numbered items do not cover:
docs/java/getting-started.md (the Kotlin DSL, Groovy and Maven XML forms) and
bindings/java/README.md.

CHANGELOG.md is stamped `[0.16.0] — 2026-09-06` under an empty `[Unreleased]`
and gains a consolidated `### Upgrade notes` section, as 0.15.0 had one.
`KEY_SCHEMA_VERSION` went 3 -> 9 in six steps this cycle (#915, #919, #920,
#926, #941, #955), each with an inline note under Added or Changed (breaking),
and nothing listed them together. One inline arrow was wrong and is corrected:
the negative-enclosed-letters entry (#920) said 4 -> 5, and the constant went
5 -> 6 at that commit. docs/RUST_API.md's upgrade table gets the matching
`0.15.x -> 0.16.0` row.

tests/fixtures/key_stability/golden_keys.tsv.gz is regenerated so its header
stamps 0.16.0; every row is byte-identical to HEAD's and KEY_FIXTURE_SHA256 is
unchanged, which is what #887's header-excluding digest exists to show.

The RELEASING.md sweep (`grep -rn "0.15.0" --exclude=CHANGELOG.md`) leaves 101
hits: prose about the 0.15.0 cycle, test literals, the meta-benchmark
baseline's measurement record of the 0.15.0 build, and two fixture provenance
stamps. Those are the classes RELEASING.md says stay as written.

Verified on this tree: cargo fmt, clippy on both feature sets, perf_lint, no
pyo3 in the pure dependency tree, cargo test (796 unit + the integration
targets), rustdoc with 0 warnings, pytest 7,636 passed / 42 skipped against a
`maturin develop --release` install that reports 0.16.0, key-stability and
version-consistency 34/34, the four glue pins resolving to disarm 0.16.0 under
the CI patch redirect, and the built wheel installed into a clean venv reporting
0.16.0. Docs and lint on the same install: ruff check and format at the pinned
0.16.5, mypy, the language-consistency audit, toolchain pins, `mkdocs build
--strict`, run_doc_tests 42/42, check_doc_claims, and check_docs_against_release
all pass.

Tier 3 was run on origin/main at 3cc21fb before this branch was cut, and was
green throughout: the exhaustive trio, exhaustive_confusables, the lib-level
ignored set and `pytest -m formal`.

No tag and no GitHub Release are created with this change.

Refs #902

Assisted-by: Claude Fable 5.1
Signed-off-by: Richard Quinn <quinn.richard@gmail.com>
Copilot AI lite review requested due to automatic review settings September 6, 2026 20:14
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown

📄 Docs preview: https://36a919bb.disarm-docs.pages.dev

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The changes are limited to consistent version/pin/doc updates for the 0.16.0 release, and the key-schema statements referenced in docs match the current KEY_SCHEMA_VERSION value.

Pull request overview

This PR prepares the monorepo for the 0.16.0 release by bumping versions across the Rust core and all bindings, updating dependency lock/pins, and stamping release documentation (including key-stability upgrade guidance).

Changes:

  • Bump release versions to 0.16.0 across Rust, Python, Node, Ruby, and JVM artifacts.
  • Update binding glue pins (disarm_core = disarm 0.16) and refresh uv.lock metadata.
  • Stamp release docs: add a consolidated Upgrade notes section for KEY_SCHEMA_VERSION 3 → 9 and update upgrade tables/snippets.
File summaries
File Description
Cargo.toml Rust crate version bump to 0.16.0.
pyproject.toml Python package version bump to 0.16.0.
uv.lock Lockfile refresh: disarm 0.16.0 and updated typing-extensions marker for exceptiongroup.
CITATION.cff Citation metadata version bump to 0.16.0.
CHANGELOG.md Stamp 0.16.0 release date and consolidate key-schema upgrade notes.
docs/RUST_API.md Add 0.15.x → 0.16.0 upgrade guidance referencing consolidated upgrade notes.
docs/java/getting-started.md Update Maven/Gradle coordinates to 0.16.0.
bindings/java/README.md Update Maven coordinates snippet to 0.16.0.
bindings/java/disarm-java/build.gradle.kts JVM artifact version bump to 0.16.0.
bindings/java/disarm-kotlin/build.gradle.kts Kotlin artifact version bump to 0.16.0.
bindings/java/rust/Cargo.toml Java binding core pin bump (disarm_core 0.15 → 0.16).
bindings/node/package.json Node package version bump to 0.16.0.
bindings/node/package-lock.json Node lockfile version fields bump to 0.16.0.
bindings/node/Cargo.toml Node binding core pin bump (disarm_core 0.15 → 0.16).
bindings/ruby/lib/disarm/version.rb Ruby gem version bump to 0.16.0.
bindings/ruby/ext/disarm/Cargo.toml Ruby binding core pin bump (disarm_core 0.15 → 0.16).
bindings/cabi/Cargo.toml C-ABI binding core pin bump (disarm_core 0.15 → 0.16).
tests/fixtures/key_stability/golden_keys.tsv.gz Re-stamp fixture header for 0.16.0 while keeping rows byte-identical (per PR description).
Review details

Files not reviewed (1)

  • bindings/node/package-lock.json: Generated file
  • Files reviewed: 15/18 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@raeq
raeq merged commit 2054bb8 into main Sep 6, 2026
32 checks passed
@raeq
raeq deleted the chore/release-0.16.0 branch September 6, 2026 20:35
raeq added a commit that referenced this pull request Sep 6, 2026
… (#982)

`Pipeline#purpose`'s comment (#860) referred to `Disarm#listProfiles`. Python has
`list_profiles`; the Java binding has `getPipeline(String)` and no listing at all.
`javadoc` rejects a broken `{@link}`, and the only place the task ran was inside
`publishAllPublicationsToStagingRepository`, so the v0.16.0 Java publisher failed
at the Central Portal step with nothing uploaded, after every PR gate had passed
and after the core, Node and Ruby artifacts had shipped.

Reproduced locally with `./gradlew --offline :disarm-java:javadoc` (exit 1,
"Pipeline.java:65: error: reference not found"); green after the change.

The link now names `Disarm#getPipeline(String)`, which is what the sentence was
about: a name goes in, and the step list says what the pipeline does, and neither
says what it is for. CI's Java job runs `:disarm-java:javadoc` beside `check`, so
the next broken reference fails its own pull request.

`docs/java/api.md` lists `listLangs`, `listProfiles` and `reverseLangs` as Java
entry points and none is declared; that is a parity gap rather than a link and is
filed separately.

Assisted-by: Claude Fable 5.1

Signed-off-by: Richard Quinn <quinn.richard@gmail.com>
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.

2 participants