Skip to content

Releases: exoego/uika

v0.11.0

Choose a tag to compare

@exoego exoego released this 27 Sep 13:07
1320d2a

What's Changed

🚀 New features

  • Configure the Mill plugin once on a UikaModule object in build.mill by @exoego in #412
  • Set Clojure tool options once in the alias's :exec-args by @exoego in #408
  • Configure the Gradle plugin once in a uika {} block, with -P properties overriding it by @exoego in #410
  • Bazel users declare uika once with a single uika macro by @exoego in #409
  • perf: Write classpath dumps about twice as fast with a fifth of the allocation by @exoego in #422
  • perf: Cut pass-1 CPU by stopping class-header inflate near the header end by @exoego in #423
  • perf: Lower peak RSS by reading jar entries in 256 KiB spans by @exoego in #424
  • perf: Convert JFR class-load recordings about 20% faster with 29% less allocation by @exoego in #421
  • perf: Make multi-module upgrade-check scan each shared jar once, not once per module by @exoego in #426

🐛 Bug fixes

  • Maven: check a JDK move for modules that declare no release by @exoego in #414
  • sbt dumps record the compiling JDK's release for modules that declare none by @exoego in #415
  • Mill dumps record the JDK a module compiles on when it declares no release by @exoego in #413
  • Check a JDK upgrade to 25 on JDKs that ship no jmods by @exoego in #406
  • Exit 2 when the CLI crashes instead of reporting violations by @exoego in #403
  • Skip a JFR recording given as a text class-load log by @exoego in #402
  • Fail the check when a class directory cannot be read by @exoego in #401
  • Exit 2 with a one-line error on Bazel usage mistakes by @exoego in #405
  • Record rules_jvm_external artifacts in the Bazel baseline dump by @exoego in #404
  • Stop the first check after a plugin upgrade from running a JDK pair nobody moved to by @exoego in #416

📖 Documentation

  • Trim rationale and history from the tool and evidence pages by @exoego in #399
  • Keep Bazel rule internals out of the Bazel page by @exoego in #398
  • Keep maintainer rationale out of the shared build-tool and CLI pages by @exoego in #397
  • State the Java 17, sbt 1.9 and Mill 1.1.8 floors the integrations need by @exoego in #384
  • Correct the option table and the list of options only some tools have by @exoego in #383
  • Tell sbt users to fork tests at ThisBuild scope for JFR collection by @exoego in #394
  • Correct the Leiningen page on which CLI version wins by @exoego in #389
  • Say that Bazel's exclude_files takes workspace paths, not labels by @exoego in #392
  • Tell Clojure CLI users that dump-classpath builds nothing by @exoego in #391
  • Show report examples the binary actually prints by @exoego in #396
  • Correct four cli.md claims the binary contradicts by @exoego in #395
  • Recommend AOT-compiling Clojure namespaces so uika sees them by @exoego in #400
  • Say that a POM-configured surefire argLine ignores -DargLine by @exoego in #393
  • Say -Duika.jdkRelease belongs on both Maven goals by @exoego in #388
  • Stop the sbt, Mill and Leiningen PR gates from checking the base branch's classes by @exoego in #381
  • Tell Gradle users the root project needs repositories by @exoego in #386
  • Explain why Mill task bodies never show up in coverage by @exoego in #418
  • Agent notes say an undeclared module records the JDK that compiles it by @exoego in #417
  • Record the 2026-09-27 inflate and span round in the performance skill by @exoego in #425

📦 Dependency updates

  • Update codecov/codecov-action action to v7.1.1 by @renovate[bot] in #379
  • Update github/codeql-action action to v4.38.1 by @renovate[bot] in #380

🛠 Other changes

  • Keep one agent notes file per directory by dropping the CLAUDE.md symlinks by @exoego in #420
  • Load each build tool's agent notes only when working in that tool by @exoego in #419

Full Changelog: v0.10.0...v0.11.0

v0.10.0

Choose a tag to compare

@exoego exoego released this 23 Sep 11:41
2183b3c

What's Changed

🚀 New features

  • Bound the inflate reservation by what the compressed bytes can hold by @exoego in #283
  • Read a loose class file until the channel reports its end by @exoego in #282
  • Fork directory lanes on demand instead of spinning by @exoego in #284
  • Dump project dependencies as directories so the dump zips no jar by @exoego in #288
  • Name the JSON path in classpath dump errors by @exoego in #324
  • Report three upgrade breaks the bridge-method guard used to hide by @exoego in #320
  • Check classes whose names hold an unpaired surrogate instead of dropping them by @exoego in #319
  • Judge class access like the JVM, which ignores protected and private on a class by @exoego in #316
  • Stop warning that an exclude rule matched nothing when it suppressed a JDK-move break by @exoego in #315
  • Stop --draft-exclude-file from overwriting files it did not write, and drop Rust notation from errors by @exoego in #317
  • Report a subclass that overrides a method its library newly made final by override by @exoego in #326
  • Name the jar that cannot be read, and drop internal terms from jar warnings by @exoego in #331
  • Share package prefixes between interned names by @exoego in #335
  • Parse central directories straight into pooled columns by @exoego in #336
  • Fill Huffman decode tables by doubling by @exoego in #333
  • Identify scan targets by file key instead of real path by @exoego in #337
  • Read jar spans of 1 MiB by @exoego in #338
  • Keep later CRCs of a name in arena lists by @exoego in #339
  • Grow class buffers to the request above 256 KiB by @exoego in #342
  • Scan paths through a sliding window instead of chunk rounds by @exoego in #340
  • Memoize supertype walks in the check tail by @exoego in #341
  • Record the reference-bearing pool entries while walking the pool by @exoego in #343
  • Look symbols up without the shard lock by @exoego in #334
  • Keep the reason in service-provider read warnings by @exoego in #347
  • Skip a corrupt entry in a fallback-read jar instead of failing the check by @exoego in #357

🐛 Bug fixes

  • Point exclude file mistakes at the key path in TOML terms, not Rust types by @exoego in #325
  • Reject a signed \u escape in dump JSON by @exoego in #349

📖 Documentation

  • Say why the baseline fetch shells out to gh api by @exoego in #236

📦 Dependency updates

  • Lock file maintenance by @renovate[bot] in #235
  • Update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.6.0 by @renovate[bot] in #237
  • Update taiki-e/install-action action to v2.87.3 by @renovate[bot] in #238
  • Update taiki-e/install-action action to v2.87.4 by @renovate[bot] in #240
  • Update dependency clojure to v1.12.6.1673 by @renovate[bot] in #241
  • Update dependency rust to v1.98.1 by @renovate[bot] in #244
  • Update dependency org.clojure/tools.deps to v0.31.1646 by @renovate[bot] in #243
  • Update dependency org.clojure/clojure to v1.12.6 by @renovate[bot] in #242
  • Update taiki-e/install-action action to v2.87.5 by @renovate[bot] in #245
  • Update taiki-e/install-action action to v2.87.6 by @renovate[bot] in #246
  • Update taiki-e/install-action action to v2.87.7 by @renovate[bot] in #247
  • Update mavenPluginTools.version to v3.16.0 by @renovate[bot] in #248
  • Update taiki-e/install-action action to v2.87.8 by @renovate[bot] in #250
  • Update github-actions by @renovate[bot] in #256
  • Update taiki-e/install-action action to v2.87.11 by @renovate[bot] in #259
  • Update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.6.2 by @renovate[bot] in #258
  • Update taiki-e/install-action action to v2.87.12 by @renovate[bot] in #260
  • Update dependency org.apache.maven.resolver:maven-resolver-api to v2.0.23 by @renovate[bot] in #261
  • Update codecov/codecov-action action to v7.1.0 by @renovate[bot] in #277

🛠 Other changes

  • Raise jvm-plugin-core test coverage by @exoego in #249
  • Do not pass an empty failed JFR conversion to the CLI by @exoego in #251
  • Fail the unchecked-truncation test instead of skipping it by @exoego in #252
  • Tidy the JFR test helpers by @exoego in #253
  • Test the dump's external coordinates and second classes dir by @exoego in #254
  • Test classifier and coordinate-less notations in rehydration by @exoego in #255
  • Reimplement the CLI in pure Java by @exoego in #262
  • Report Java CLI coverage to Codecov by @exoego in #263
  • Publish the Java CLI jar under the uika-cli coordinate by @exoego in #264
  • Let UikaCli run the CLI jar by @exoego in #265
  • Run the Java CLI from the Bazel rules by @exoego in #271
  • Run the Java CLI from the Clojure tool and the Leiningen plugin by @exoego in #270
  • Run the Java CLI from the sbt plugin by @exoego in #268
  • Run the Java CLI from the Gradle plugin by @exoego in #266
  • Run the Java CLI from the Mill plugin by @exoego in #269
  • Run the Java CLI from the Maven plugin by @exoego in #267
  • Clear the stub's records before each Maven IT run by @exoego in #273
  • Match the Rust CLI's stderr on argument, dump and ct.sym errors by @exoego in #276
  • Send a jar whose local header lies past the directory to the fallback by @exoego in #275
  • Skip invokedynamic as a five-byte instruction in both scanners by @exoego in #274
  • Bless the goldens and run the probe from the Java CLI by @exoego in #279
  • Remove the native-binary helpers no integration uses any more by @exoego in #278
  • Remove the Rust CLI by @exoego in #281
  • Retire the Rust CLI: move the notes, then remove the crate by @exoego in #280
  • Pin the tool pages to a shared shape and to every knob their tool accepts by @exoego in #286
  • Test the command line end to end by @exoego in #285
  • Re-measure every benchmark row with the shipped jar by @exoego in #289
  • Test the JSON reader and writer by @exoego in #290
  • Test the report wording and drop its dead branches by @exoego in #291
  • Test the Modified UTF-8 decoder by @exoego in #292
  • Test class-file parsing and reference extraction on malformed input by @exoego in #293
  • Test intern hash collisions and drop the unused byteAt by @exoego in #294
  • Read UIKA_THREADS through Env and test it by @exoego in #295
  • Test class-load log edge cases and draft write failures by @exoego in #296
  • Test the JDK API layer with stand-in homes, and drop impossible null checks by @exoego in #297
  • Test the POM reader on malformed markup and drop two dead checks by @exoego in #298
  • Test the remaining dump shape errors by @exoego in #299
  • Test the argument parser, launcher and entry point edge cases by @exoego in #301
  • Test exclude file read errors and unused rule echoes by @exoego in #300
  • Test per-module run sharing, merging and JDK moves in upgrade-check by @exoego in #303
  • Test check's scan targets, JDK layer and verdicts stream failures by @exoego in https://github.com/exoego/uika/pull/...
Read more

v0.9.0

Choose a tag to compare

@exoego exoego released this 03 Sep 05:24
1847fc5

What's Changed

🚀 New features

  • feat: Stop claiming a dropped optional dependency was required by @exoego in #97
  • Detect broken META-INF/services SPI providers by @exoego in #98
  • fix: Correct SPI ServiceLoader semantics, vendor real break fixtures by @exoego in #102
  • perf: Raise default pass-1 chunk size to 16x thread count by @exoego in #99
  • Ingest runtime class-load logs as promote-only evidence by @exoego in #110
  • Collect and consume runtime class-load logs in the build plugins by @exoego in #111
  • Verify class-load evidence against a real JVM's log output by @exoego in #112
  • Stop exclude drafts from waiving real breaks and cut evidence memory 20x by @exoego in #113
  • Collect and read class-load evidence as JFR recordings by @exoego in #118
  • Add a Mill build-tool plugin by @exoego in #123
  • Add a Clojure CLI tool (clojure -Tuika) by @exoego in #124
  • Add a Leiningen plugin (lein uika) by @exoego in #126
  • Derive --jdk-release from what the modules compile for by @exoego in #130
  • Expose --draft-exclude-file in both Clojure frontends by @exoego in #132
  • Close three of the draft-exclude sharp edges by @exoego in #134
  • Record the release the application runs on, per module by @exoego in #135
  • Bazel and rules_jvm_external support by @exoego in #137
  • Dump a whole Bazel workspace without listing its targets by @exoego in #141
  • Fail on a manifest field carrying a delimiter by @exoego in #140
  • Make a sweep dump name files that outlive the merge by @exoego in #143
  • Publish the Clojure CLI tool to Maven Central and convert JFR in both Clojure frontends by @exoego in #146
  • Read a Scala module's scalacOptions in the Mill release derivation by @exoego in #149
  • Make jdk_release 0 actually switch the JDK API layer off in the Bazel check by @exoego in #148
  • Read uikaFailOn, uikaExcludeFiles and uikaCliVersion at root-project scope by @exoego in #150
  • Drop a blank :fail-on instead of handing clap an empty --fail-on by @exoego in #153
  • Make a root-project-scoped uikaJfr reach every subproject's forked tests by @exoego in #151
  • Report a malformed -PuikaJdkRelease with a uika-named error by @exoego in #158
  • Use the unpublishable 0.0.0-dev placeholder in every JVM plugin build by @exoego in #157
  • Keep unmanaged jars in the sbt dump by @exoego in #155
  • Leave reactor-attributed artifacts out of the rehydration fetch by @exoego in #164
  • Reject exclude_files entries the property ride cannot transport by @exoego in #167
  • Define the sbt merge once in buildSettings by @exoego in #168
  • Delete the temp file when extractBinary fails by @exoego in #166
  • Consolidate the PR gate docs per tool and fail rehydration on unresolved artifacts by @exoego in #160
  • Carry the comma rule into every hand-written JFR recipe and pin them to the composer by @exoego in #161
  • Reject a non-numeric jdk_release in the Bazel macros by @exoego in #185
  • Fail the Gradle dump on a configuration it cannot resolve by @exoego in #179
  • Stop the sbt dump repeating a jar once per configuration by @exoego in #181
  • Guard the Bazel check binary's arguments like its siblings by @exoego in #183
  • Give Maven a command-line form for excludeFiles by @exoego in #187
  • Treat a blank :cli-path or :cli-version as unset by @exoego in #188
  • Let the four JVM plugins run a binary from UIKA_CLI_PATH by @exoego in #186
  • Name the error each class-load break actually throws by @exoego in #209
  • gradle: Let -PuikaExcludeFile name more than one file by @exoego in #223
  • Check UIKA_CLI_PATH the same way in all seven integrations by @exoego in #220
  • Unit-test the release derivation that is Maven's alone by @exoego in #226
  • Give every tool the merged-classpath knob, and rename the CLI flag by @exoego in #227
  • Pin the Clojure port of the CLI command line by @exoego in #221
  • Stop dumping projects that compile nothing as modules by @exoego in #219

🐛 Bug fixes

  • Revert the pass 1 owner-filter narrowing, and record why by @exoego in #136
  • Parse the JDK 8 spelling of java.specification.version in the JVM probe by @exoego in #152
  • Dump only the selected reactor projects under -pl by @exoego in #156
  • Convert recordings handed to --classLoadLog, not only the --jfr value by @exoego in #154
  • Read :javac-options in the lein release derivation by @exoego in #159
  • Read UIKA_JFR back in the Mill check and guard the collection value shapes by @exoego in #163
  • clojure: Reject a misspelled option in the Clojure tool too by @exoego in #222

📖 Documentation

  • Give the PR gate table every tool the plugins cover by @exoego in #144
  • Split the build-tool sections into per-tool pages under docs/ by @exoego in #145
  • Document the uika.cli tag and the append semantics of the check flags by @exoego in #169
  • Say that uika check is a CLI command, not a plugin task by @exoego in #194
  • Point the Clojure usage hint at the documented invocation by @exoego in #190
  • Document Mill's dump-side --jdkRelease by @exoego in #191
  • Describe the Bazel check flags the rule actually has by @exoego in #184
  • Split CLI usage into docs/cli.md by @exoego in #199
  • Move runtime load evidence onto its own docs page by @exoego in #201
  • Move the JDK upgrade section under what a check reports by @exoego in #202
  • Fold the PR gate section into Usage by @exoego in #203
  • Fold the JFR section into the violation tiers section by @exoego in #204
  • cleanup doc by @exoego in #205
  • Name the exception every detection throws in the README by @exoego in #206
  • Fix README claims that contradict the report, and its reading order by @exoego in #208
  • Move the JDK API layer out of How it works into docs/jdk.md by @exoego in #212
  • Document the JFR evidence CI shape where it can be followed by @exoego in #216
  • Correct the doc claims a run against the binary disproves by @exoego in #218
  • Say the four things the pages were leaving to be rediscovered by @exoego in #229

📦 Dependency updates

  • Update github/codeql-action action to v4.37.6 by @renovate[bot] in #95
  • chore(deps): update jdx/mise-action action to v4.2.5 by @renovate[bot] in #104
  • fix(deps): update junit-framework monorepo to v6.1.3 by @renovate[bot] in #100
  • chore(deps): lock file maintenance by @renovate[bot] in #103
  • chore(deps): update build toolchain (mise) by @renovate[bot] in #101
  • chore(deps): update github/codeql-action action to v4.37.7 by @renovate[bot] in #105
  • Lock file maintenance by @renovate[bot] in #119
  • Update dependency org.clojure/clojure to v1.12.5 by @renovate[bot] in #125
  • Update dependency gradle to v9.7.1 by @renovate[bot] in #142
  • Update dependency org.apache.maven.resolver:maven-resolver-api to v2.0.22 by @renovate[bot] in #147
  • Update dependency github:sbt/sbt to v1.13.0 by @renovate[bot] in #170
  • Update dependency sbt/sbt to v1.13.0 by @renovate[bot] in https://github.co...
Read more

v0.8.0

Choose a tag to compare

@exoego exoego released this 10 Aug 07:03
8a65791

What's Changed

🚀 New features

  • Make the Gradle plugin configuration-cache compatible by @exoego in #79
  • Order the upgrade check after dump and resolve in one invocation by @exoego in #80
  • feat: Add a latent tier for uninvoked newly-abstract methods by @exoego in #82
  • Say "throws" instead of "->" for the runtime error by @exoego in #83
  • Fix unnatural English in the report output by @exoego in #84
  • Use one kind vocabulary across diff, check and exclude by @exoego in #85
  • Detect subclasses of a newly sealed type by @exoego in #89
  • Detect a signature inherited as a default from two interfaces by @exoego in #90
  • Check a JDK upgrade, from the CLI and the build-tool plugins by @exoego in #91
  • Gate sealing on the old side and on unreadable attributes by @exoego in #92

📖 Documentation

  • doc: cut redundancy from README and agent docs by @exoego in #93
  • doc: move contributor docs out of README and cut duplication by @exoego in #94

📦 Dependency updates

🛠 Other changes

  • Skip build outputs in baseline dump examples by @exoego in #78
  • Deny every clippy warning by @exoego in #87

Full Changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@exoego exoego released this 07 Aug 23:55
4eb3cd4

What's Changed

🚀 New features

  • Make the check report human readable and fix oriented by @exoego in #76

📦 Dependency updates

  • Update dependency org.apache.maven.plugins:maven-jar-plugin to v3.5.1 by @renovate[bot] in #72
  • Lock file maintenance by @renovate[bot] in #75

🛠 Other changes

  • Cut Maven Central bundle from 114 to 76 files by @exoego in #69
  • chore: fix jreleaser pgpg deprecation by @exoego in #68
  • Split AGENTS.md into scoped files so less loads every session by @exoego in #70
  • Halve the Maven Central deployment to 2.9 MB per release by @exoego in #71
  • chore: keep the sbt plugin toolchain on sbt 1.x by @exoego in #74

Full Changelog: v0.6.0...v0.7.0

v0.6.0

Choose a tag to compare

@exoego exoego released this 01 Aug 01:45
e6b61f9

What's Changed

🚀 New features

  • feat: Per-module upgrade-check. judge each module against its own resolved classpath by @exoego in #62

📦 Dependency updates

  • chore(deps): update rust crate clap to v4.6.5 by @renovate[bot] in #61

🛠 Other changes

  • chore(deps): require a 7-day minimum release age in Renovate by @exoego in #63
  • Add CodeQL workflow for code analysis by @exoego in #66
  • Fix CodeQL workflow settings and lint Scala with scalac by @exoego in #67

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@exoego exoego released this 30 Jul 12:31
0d4990b

What's Changed

🚀 New features

  • feat: add --exclude-file to suppress known false positives by @exoego in #19
  • feat: Drop references from shadowed duplicate class definitions by @exoego in #21
  • feat: Detect version-lag subclassing of a final class in a lagging sibling by @exoego in #22
  • feat: Enable the JDK API layer by default in the build plugins by @exoego in #24
  • feat: Add an opt-in JDK API layer from ct.sym (--jdk-release) by @exoego in #23
  • feat: Detect InstantiationError and class/interface flips by @exoego in #25
  • feat: Three-valued is_subclass and owner-only constructor resolution by @exoego in #26
  • feat: Resolve members in JVMS 5.4.3.2/3.3 order by @exoego in #27
  • feat: Pin one overload in exclude rules with a descriptor by @exoego in #28
  • feat: detect AbstractMethodError (both shapes) and guard synthetic/bridge methods by @exoego in #31

⚡ Performance

  • perf(cli): speed up the pass 1 scan by about 1.8x by @exoego in #43
  • perf(cli): eliminate redundant work on duplicate classes by @exoego in #46

📖 Documentation

  • docs: cross-check class-shape breaks against japicmp and Linkage Checker by @exoego in #29

📦 Dependency updates

  • chore(deps): update dependency sbt/sbt to v1.12.14 by @renovate[bot] in #35
  • chore(deps): update github-actions by @renovate[bot] in #38
  • fix(deps): update dependency org.apache.maven:maven-plugin-api to v3.9.16 by @renovate[bot] in #40
  • fix(deps): update dependency org.apache.maven:maven-core to v3.9.16 by @renovate[bot] in #39
  • chore(deps): update dependency scala to v2.12.21 by @renovate[bot] in #37
  • chore(deps): update dependency org.apache.maven.plugins:maven-invoker-plugin to v3.10.1 by @renovate[bot] in #44
  • chore(deps): update dependency org.apache.maven.plugins:maven-source-plugin to v3.4.0 by @renovate[bot] in #45
  • fix(deps): update dependency org.apache.maven.resolver:maven-resolver-api to v1.9.27 by @renovate[bot] in #41
  • fix(deps): update rust crates (non-major) by @renovate[bot] in #42
  • chore(deps): update dependency org.codehaus.mojo:flatten-maven-plugin to v1.8.0 by @renovate[bot] in #47
  • fix(deps): update junit-framework monorepo by @renovate[bot] in #49
  • chore(deps): update rust crate toml to v1 with minimal features by @exoego in #54
  • chore(deps): update rust crate zip to v8 with minimal features by @exoego in #55
  • fix(deps): update dependency org.apache.maven.resolver:maven-resolver-api to v2 by @renovate[bot] in #57
  • chore(deps): update junit to v6 by @exoego in #58

🛠 Other changes

  • ci: add golden regression tests and a real-JVM probe harness by @exoego in #20
  • test: cover the unused descriptor-pinned exclude rule message by @exoego in #30
  • chore: add Renovate config (renovate.json5) by @exoego in #32
  • chore: categorize auto-generated release notes by PR label by @exoego in #59

New Contributors

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@exoego exoego released this 15 Jul 09:53
88bd384

What's Changed

  • fix: report access narrowing only when access actually narrowed from old by @exoego in #18

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@exoego exoego released this 15 Jul 06:13
1916902

What's Changed

  • docs: reorganizing by @exoego in #16
  • feat: group upgrade-check violations by suggestion by @exoego in #17

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@exoego exoego released this 14 Jul 14:00
f70766b

What's Changed

  • docs: update prior art and add benchmark by @exoego in #14
  • feat: add --fail-on exit policy to check/upgrade-check by @exoego in #15

Full Changelog: v0.1.0...v0.2.0