chore: release 0.16.0 - #980
Merged
Merged
Conversation
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>
|
📄 Docs preview: https://36a919bb.disarm-docs.pages.dev |
Contributor
There was a problem hiding this comment.
🟢 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 refreshuv.lockmetadata. - Stamp release docs: add a consolidated Upgrade notes section for
KEY_SCHEMA_VERSION3 → 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.
This was referenced Sep 6, 2026
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>
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
The 0.16.0 release PR. Ten version fields, the four
disarm_coreglue pins, the two JVM documentation snippets, the changelog stamp with a consolidated Upgrade notes section, the golden-fixture header, and one row indocs/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_VERSIONwent 3 → 9 since v0.15.0, in six steps, and #910 is afeat!. RELEASING.md rules both out of a patch.What moved
Cargo.toml,pyproject.toml,CITATION.cff0.15.0→0.16.0bindings/node/package.json,package-lock.json(two fields)0.15.0→0.16.0bindings/ruby/lib/disarm/version.rb0.15.0→0.16.0bindings/java/disarm-java/build.gradle.kts,disarm-kotlin/build.gradle.kts0.15.0→0.16.0uv.lockdisarmentry, plus apython_full_version < '3.11'marker ontyping-extensionsthat is the lock catching up topyproject.toml. An offline regeneration downgraded hypothesis from the local cache and was discarded.bindings/{node,ruby/ext/disarm,java/rust,cabi}/Cargo.tomldisarm_corepin0.15→0.16; all four resolve to disarm 0.16.0 under the CI[patch.crates-io]redirectdocs/java/getting-started.md,bindings/java/README.mdCHANGELOG.md[0.16.0] — 2026-09-06; empty[Unreleased]above;### Upgrade notesadded; one arrow correcteddocs/RUST_API.md0.15.x→0.16.0row in the key-stability upgrade tabletests/fixtures/key_stability/golden_keys.tsv.gzKEY_FIXTURE_SHA256unchangedThe 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.
llm_guardrailandstrip_obfuscationstop naming emoji (#910, #926)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 readingsrc/api/metadata.rsat each of the six commits).The sweep
grep -rn "0.15.0" --exclude=CHANGELOG.md . | grep -v deprecatedleaves 101 hits, none of them a version field:benchmarks/meta/baselines/default.jsondisarm_versionare datatests/test_meta_benchmark.py0.15.0as a sample versionbenchmarks/meta/**,.github/workflows/publish-*.yml,src/api/metadata.rs,python/disarm/_presets.py, three test docstrings,docs/user-guide/tokenizer-preprocessing.mdtests/fixtures/latin_shape_exposure.tsvdocs/RUST_API.md0.14.x → 0.15.0row; the0.15.x → 0.16.0row now sits beside itVerification
exhaustive_confusables, the lib-level ignored set,pytest -m formal. All green.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-depswith 0 warnings.maturin develop --releasereports 0.16.0;pytest -n 8 --dist loadfile: 7,636 passed, 42 skipped.test_key_stability.pyandtest_version_consistency.py: 34 passed, includingtest_glue_pin_tracks_the_minor.uv venvreports 0.16.0.ruff checkandruff format --checkat the pinned 0.16.5, mypy,audit_language_consistency.py,test_toolchain_pins.py,mkdocs build --strict,run_doc_tests.py42/42,check_doc_claims.py,check_docs_against_release.py. All green.After merge, not done here
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, andrepo1.maven.orgmetadata fordev.disarm:disarmanddisarm-kotlin.Refs #902
🤖 Generated with Claude Code