Repository navigation
kartograph v0.22.0
Kartograph 0.22.0
Distribution status
Publication was verified on 2026-10-14. All seven GitHub assets below match the release workflow’s two reproducible build sets; all six payloads also match the published SHA256SUMS. The exact Gradle Plugin Portal marker and implementation are available. A fresh plugins-DSL Java consumer resolved the published 0.22.0 plugin with strict dependency verification and completed classes kartographDependencies. Both public CLI archives passed the unchanged 72-check contract without skips, and the public compiler collectors passed independent javac17 installation, stale-input and failed-receipt controls.
Upgrade notes
This pre-1.0 minor release changes JVM binary signatures. QuerySnapshot adds optional external-retention contexts, changing its constructor, default-argument and copy entry points. Direct compiled library consumers must recompile against matching 0.22.0 modules. Do not mix module JAR versions. The existing ExternalRetentionCodec.parse(String) and AdoptionReporter.render entry points remain available.
When upgrading from the last fully distributed 0.20.0 version:
GraphNodealso addssourceDeclaration,kotlinSourceNameandkotlinDefaultBridge, changing its constructor andcopysignatures.- Keep the CLI, Gradle plugin and optional compiler-collector JAR, runner and cache adapter on the same release.
- Class and hierarchy cache formats advance from 7 to 9 and 3 to 4. Old entries are reparsed automatically; manual cache deletion is unnecessary.
- Plain/compact snapshot format numbers remain 1/2. Older snapshots lacking optional evidence or retention contexts still load without inventing that evidence. Older readers are not guaranteed to preserve the new fields.
- Strict graph JSON/NDJSON readers should allow the optional node evidence and
sourceDeclarationrecord.
Improvements and fixes
- Preserve optional provenance in version 0
external-retentionsdocuments through dead/explain reports, snapshots, saved queries and aggregation, including documents with zero retained roots. Original source order, multiplicity and cross-language project/caller/evidence paths are retained. Provenance does not establish compiler freshness or authorize deletion. - Validate known provenance version 1 fields and retain unknown positive versions as bounded opaque context. Enforce document, depth and array limits, and reject duplicate decoded keys and invalid Unicode, dates or portable numbers.
- Wait for cooperative indexing-worker cleanup before leaving an archive scope after interruption. Repeated interrupts do not extend the existing 30-second total deadline; the caller's interrupt is restored. Timeout is reported rather than claiming forced termination of an uncooperative worker.
- Avoid dispatch-model work unused by cycles/rules/metrics through the existing export-selection boundary, while preserving full parsing, metadata, runtime analysis and validation. Reuse a normalized graph only when the full origin filter removes nothing and compiler-position state is empty/uncaptured. Actual removals and default graph/dead/cache behavior retain their established paths.
- Include the source-declaration anchors, Kotlin names/default-argument bridge evidence, inherited static/super/field resolution and valid generic-lambda dependency-scanner fix prepared in 0.21.0.
- Add bounded optional JSON smoke observations for selected Java/runner/resource facts and the dedicated sequential invocation's waited-child CPU. Observation failures do not change the original result or the 20-second total / 5-second command budgets.
The fixed comparisons and compiler-backed fixtures support their declared scopes. They do not establish universal performance gains or overall superiority to IntelliJ PSI.
Verification and installation
The exact release tree passed PR178 CI, post-merge CI, the complete nonpublishing readiness gate, and the original tag release workflow. The tag workflow passed clean tests and coverage, fixtures, optional collectors, exact compiler-position checks, minimum AGP/Gradle checks, and its own two-build readiness before uploading assets and publishing the plugin. Both unpacked archive suites passed 206 cases with two Homebrew-specific skips each. All eight build hashes match the earlier readiness run; bundled documentation and license checks passed.
The intended seven assets are CLI ZIP/TAR archives, the Gradle-plugin JAR, optional compiler collectors, two runtime SBOMs and SHA256SUMS. Verify all six downloaded payloads against that checksum file. Install plugin version 0.22.0 through the plugins DSL only after its exact marker and implementation resolve from the Gradle Plugin Portal.
Preserved release history
The 0.21.0 tag and page remain unchanged. Its original release run stopped at a 20.346-second smoke total against the 20-second budget, before publishing assets or the Portal plugin. Earlier local/CI timing failures and rejected or inconclusive comparisons remain recorded; later successful validations do not establish their cause. The prepared 0.20.1 was never issued. Broad draft PR158 remains excluded.
Source: b2b9b99a0c7dbdb393c653f32a64846fbc36097b, tree b8d53ccb1253ba67afe71612c073e75eb2efc257.