Skip to content

Release 2.3.0 — Tiers 10 and 11 - #159

Merged
tonytonycoder11 merged 1 commit into
mainfrom
release/2.3.0
Sep 10, 2026
Merged

Release 2.3.0 — Tiers 10 and 11#159
tonytonycoder11 merged 1 commit into
mainfrom
release/2.3.0

Conversation

@tonytonycoder11

Copy link
Copy Markdown
Contributor

Closes #104, closes #110, closes #143.

Cuts 2.3.0. Merge this and the annotated tag goes on the merge commit, which is what triggers
release.yml.

One version for two tiers

The tier-to-tag rule is pre-1.0. After 1.0 a version follows API impact and nothing else, and both
tiers are additive, so this is one minor. Two tags on the same tree would make "when did that land" a
question with two answers. #110 records that decision the way #95 did for Tier 9 inside 2.2.0, and closes
rather than waiting for a 2.4.0 that should not exist.

What reconciling [Unreleased] turned up

Two Dependabot groups had landed with no changelog entry, which is exactly the gap that check is for. One
of them mattered: io.qdrant:client going to 1.19.0 moved PointId out of its Points class, and the
comparison benchmark stopped compiling with nothing to report it, because the JMH source set was not part
of build. Both are now under Internal, and CI compiles the harness.

Three numbers that were recalled rather than counted

The gRPC engine refuses sixteen operations. Its own KDoc said fourteen, the factory's KDoc said eleven,
and the README said fourteen. Adding the two quota calls made all three wrong and nobody re-counted:

grep -o 'restOnly("[a-zA-Z]*")' GrpcQdrantTransport.kt | sort -u | wc -l   # 16

All three are fixed, and the KDoc now names RestOnlyOperationsTest as what keeps the number honest: it
drives every one of them, so the list cannot grow without the test growing with it.

It is a recompile, not a jar swap

Measured rather than assumed, because apiCheck passing on a branch says nothing about a release:

git diff v2.2.0 v2.3.0 -- '*/api/*.api' | grep -c '^-[^-]'   # 132

114 are constructors and generated copy on nineteen data classes that gained a defaulted property; 18 are
count and retrieve gaining routeAffinity. Nothing was renamed and nothing was removed. The changelog
says this and STABILITY.md has the table.

One thing moved before the tag, because the tag was the last moment it could. payload on
CreateCollectionRequest sat in the middle of the parameter list, which shifted every componentN after
it: a destructuring or positional copy() compiled against 2.2.0 would have resolved to the wrong field.
It is appended now, and that removed 8 of the 140 removals this started with.

Topics, on measured usage

Five free slots filled, all 20 used. mcp, model-context-protocol, ai-agents and llm for the volume
people search by; kotlin-native at 673 repositories because it is low and it is the precise term for the
thing no JVM client can claim.

The Awesome Kotlin badge (#143)

At the end of the row, after the identity group, because it is neither build state nor identity. It is
height="20" like the other six so the row holds. Its colours are #00a9ff and #f88909 against the
0B0E17 labels the others share, and that cannot be fixed: it is a fixed SVG served from kotlin.link
with no parameters. So the choice was their badge as it is, or none, and a listing worth having is worth a
mismatched badge at the end of a row.

Still to do by hand, after the tag

  • The product page on nacodestudios.it. It holds the version, the install snippet, the module count,
    the platform list and the highlights, and it is a Firestore document rather than a file here, so a
    perfectly green release leaves it exactly as it was. The module count is now 14 and the version is
    2.3.0.
  • The README compatibility table still reads v1.19.0 in its newest row. It is generated from a matrix
    run: KDRANT_UPDATE_COMPAT=1 ./gradlew :kdrant-transport-rest:jvmTest --tests '*QdrantVersionMatrix*'
    with Docker available, which this machine has not got.
  • Maven Central. automaticRelease = true lands in this release, so 2.3.0 should publish itself and
    the new step will say whether every artifact resolves. That step has never run before, so it is worth
    watching rather than assuming.

Both tiers in one version. Post-1.0 a version follows API impact and nothing else,
and both tiers are additive, so two tags on the same tree would only make "when did
that land" a question with two answers. Tier 11's release item records the same
decision Tier 9's did at 2.2.0.

Reconciling [Unreleased] against the log found two dependency groups that had landed
with no entry, which is the gap this check exists for. One of them mattered: the
official client going to 1.19.0 moved PointId out of its Points class and the
comparison benchmark stopped compiling, with nothing to report it because the JMH
source set was not part of `build`.

Three numbers in the prose were stale and are now counted rather than recalled. The
gRPC engine refuses sixteen operations, not the fourteen its own KDoc claimed and not
the eleven the factory's KDoc claimed; quotas added two and nobody re-counted. The
README said fourteen as well. `RestOnlyOperationsTest` drives every one of them, so
the list cannot grow without the test growing with it, and the comment now says so.

The release is a recompile rather than a jar swap, and the changelog and STABILITY
say so with the measurement behind it: `git diff v2.2.0 v2.3.0 -- '*/api/*.api'`
removes 132 lines, 114 of them constructors and generated copy on nineteen data
classes that gained a defaulted property, 18 of them count and retrieve gaining
routeAffinity. Nothing renamed, nothing removed.

One thing moved before the tag because the tag is the last moment it could move:
`payload` on CreateCollectionRequest was in the middle of the parameter list, which
shifted every componentN after it, so a destructuring compiled against 2.2.0 would
have resolved to the wrong field. Appended instead. A property added to the end of a
data class costs a recompile; one added to the middle costs more.

Topics re-ranked on measured usage rather than taste, filling the five free slots:
mcp, model-context-protocol, ai-agents and llm for the volume people actually search,
and kotlin-native at 673 repositories because it is low and it is the precise term
for the thing no JVM client can claim.

And the Awesome Kotlin badge (#143), at the end of the row. It is the same height as
the other six so the row holds; its colours do not match the 0B0E17 labels and cannot
be made to, because it is a fixed SVG served from kotlin.link.
@tonytonycoder11
tonytonycoder11 requested a review from a team as a code owner September 10, 2026 22:02
@trueup-by-nacode-studios

Copy link
Copy Markdown

This pull request adds no capability. The code it touches can already touch the filesystem (2 places).

What I could not follow

41 calls resolve to a name whose type is written nowhere, so what they reach is not established here. Across everything it read that is 41 of 633, 6%. That is too many to list, and where they are is more useful than which they are:

  • kdrant-transport-grpc/src/main/kotlin/dev/kdrant/transport/grpc/GrpcQdrantTransport.kt — 41 calls

If one of those reaches the network or starts a process, this report does not show it.

9 files read · 7165 ms · against a926d89 · engine 1.4.1

@tonytonycoder11 tonytonycoder11 moved this to In progress in Kdrant Sep 10, 2026
@tonytonycoder11
tonytonycoder11 merged commit cf173fc into main Sep 10, 2026
14 checks passed
@tonytonycoder11
tonytonycoder11 deleted the release/2.3.0 branch September 10, 2026 22:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In progress

1 participant