Skip to content

release: cut 8.1.0.01, and fix client/server version-mismatch detection - #2012

Merged
jcschaff merged 4 commits into
masterfrom
release/8.1.0.01
Aug 21, 2026
Merged

release: cut 8.1.0.01, and fix client/server version-mismatch detection#2012
jcschaff merged 4 commits into
masterfrom
release/8.1.0.01

Conversation

@jcschaff

@jcschaff jcschaff commented Aug 21, 2026

Copy link
Copy Markdown
Member

What

Cuts 8.1.0.01, the first release candidate for VCell 8.1, moves the build number onto the 8.1.x sequence, and repairs the client/server version check — which has been unable to detect a PATCH-level mismatch since 2022.

Published numbers up to 8.0.28.01 are unchanged; nothing already released is renumbered.

The version check

A VCell patch release can carry a breaking API change. So a client and server differing in MAJOR, MINOR or PATCH are not known to be compatible, and the check now reports all three. Only BUILD is ignored.

That is what the check was written to do in 2018. It could not, because of the parser bug below: getPatchVersion() returned MINOR, so the comparison tested MINOR twice and ignored PATCH entirely. Across the whole 8.0 line every build parsed as (8, 0, 0), so the warning was effectively dormant.

Expect it to appear more often — a patch difference alone is now enough. It remains advisory and does not prevent use.

Mid-session server updates

The client reconnects on its own after a deployment. That path — the package-private ClientServerManager.reconnect() the Reconnector drives — went straight to connectToServer() and skipped the version check entirely, so a user could work on against a server their client no longer matched, with no sign anything had changed.

The automatic reconnect now runs the check, only once the reconnect has succeeded: a failed attempt says nothing about the server's version, and the check makes an HTTP call of its own that the retry loop must not repeat.

Same comparison either way; only the advice differs:

found message
at login, or a user-initiated reconnect download the current client
mid-session, after an automatic reconnect save your work, exit and restart to install the matching version

The mid-session message does not tell the user their session is safe to continue. If a patch can break the API, that promise cannot be made.

The parser fix (#2011)

VCellSoftwareVersion read PATCH from parts[1] instead of parts[2], so getPatchVersion() returned a copy of getMinorVersion().

The line dates from 2018, when the same statement used split(".") — a regex matching any character, so the split returned an empty array and every part stayed -1. A 2022 one-line fix to that argument, inside an unrelated commit about compartment reordering, made MAJOR and MINOR work for the first time and made this typo live alongside them. Its only consumer compared it against an equally wrong value, so nothing surfaced for four years.

Verified against the recompiled class:

version string major minor patch
Alpha_Version_8.0.28_build_01 8 0 28 ✓ (was 0)
Alpha_Version_8.1.0_build_01 8 1 0 ✓ (was 1)

Adds the class's first tests (3, @Tag("Fast")), including one distinguishing 8.1.0 from 8.0.1 — a pair the old parser could not tell apart.

Closes #2011.

Note on the dialog

It is not dismissible. VCell has a "Do not show this warning again" mechanism (UserPreferences + UserMessage) that this dialog does not use. Left alone deliberately — a separate decision, and more relevant now that the warning will be seen more often.

Verification

  • mvn -o compile -pl vcell-apiclient -am — clean
  • VCellSoftwareVersionTest — 3 tests, 0 failures
  • CRLF preserved in all three Java files (checked byte-wise; no LF-only lines introduced)

Deploying to dev (alpha) after merge.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn

jcschaff and others added 4 commits August 21, 2026 09:48
getPatchVersion() returned a copy of getMinorVersion(): the version number
was split correctly but PATCH was read from parts[1] instead of parts[2].

The line dates from 2018, when the same statement used split(".") -- a
regex matching any character, so the split returned an empty array and
every part stayed -1. A 2022 fix to that argument made MAJOR and MINOR
work for the first time and made this typo live along with them. Its only
consumer compared it against an equally wrong value, so nothing surfaced
in four years.

Adds the class's first tests, including one that distinguishes 8.1.0 from
8.0.1 -- a pair the old parser could not tell apart.

Closes #2011

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn
The client reconnects on its own after a deployment, but that path went
straight to connectToServer() and skipped the version check entirely, so
a user could work for hours against a server newer than their client with
no sign that a new one had been published.

The automatic reconnect now runs the check, and only once the reconnect
has succeeded -- a failed attempt says nothing about the server's version,
and the check makes an HTTP call of its own that the retry loop should not
repeat.

The two situations get the policy that suits them:

  ON_CONNECT           login or a reconnect the user asked for. MAJOR or
                       MINOR only; a PATCH difference is ordinary here.
  AFTER_SERVER_CHANGED the server moved underneath a running client, so
                       any difference is worth reporting, PATCH included.

The second message says the session is safe and to restart when
convenient, rather than the "download the latest client" wording that
suits a mismatch found at login.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn
…se name

This work has been called VCell 8.1 in the release notes since it began,
while its builds continued the 8.0.x sequence. From 8.1.0.01 the two
agree. Published numbers up to 8.0.28.01 are unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn
A VCell patch release can carry a breaking API change, so a client and
server differing in the patch number are not known to be compatible. That
makes a patch mismatch worth reporting wherever it is found, not only
after a mid-session server update -- and it is what the check has meant to
do since 2018, which the parser bug in #2011 silently prevented.

Drops the two-policy split from the previous commit. The context now
selects only the wording: a mismatch found at login says to download the
current client, one appearing mid-session says to save, exit and restart.

Also removes the claim that the session is safe to continue after a
mid-session update. If a patch can break the API, that promise cannot be
made.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn
@jcschaff jcschaff changed the title release: cut 8.1.0.01, and report a mid-session server update release: cut 8.1.0.01, and fix client/server version-mismatch detection Aug 21, 2026
@jcschaff
jcschaff merged commit 4974f78 into master Aug 21, 2026
9 checks passed
@jcschaff
jcschaff deleted the release/8.1.0.01 branch August 21, 2026 14:37
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.

VCellSoftwareVersion parses PATCH from parts[1], so patchVersion is a copy of minorVersion

1 participant