BL-16690 Honor a collection's minimum Bloom version, upgrading in place - #8213
BL-16690 Honor a collection's minimum Bloom version, upgrading in place#8213andrew-polk wants to merge 2 commits into
Conversation
|
[Claude Opus 5 from Andrew Polk's machine during preflight] Consulted Devin — 2026-08-18, up to commit
|
8618989 to
9f829fc
Compare
|
[Claude Opus 5 from Andrew Polk's machine during preflight] Consulted Devin again — 2026-08-19, up to commit
|
17cb2ae to
410ae82
Compare
|
[Claude Opus 5 from Andrew Polk's machine during preflight] Consulted Devin — 2026-08-19, up to commit
|
69225b1 to
cbc0cb5
Compare
410ae82 to
d291122
Compare
6d2145e to
4ee539d
Compare
|
[Claude Fable 5 from Andrew Polk's machine during preflight] Consulted Devin on this PR up to Round 1 (on Round 2 (on the final CI is green on the current head; the full C# suite passes (2871, with the one known opt-in RAB environmental failure in an untouched fixture). The gate commit's content carries its byte-identical review history from #8206. |
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
andrew-polk
left a comment
There was a problem hiding this comment.
@andrew-polk resolved 4 discussions.
Reviewable status: 0 of 19 files reviewed, 5 unresolved discussions.
andrew-polk
left a comment
There was a problem hiding this comment.
@andrew-polk reviewed 19 files and all commit messages.
Reviewable status: 0 of 19 files reviewed, 5 unresolved discussions.
StephenMcConnel
left a comment
There was a problem hiding this comment.
One minor comment that might not be fixable.
@StephenMcConnel reviewed 19 files and all commit messages, made 2 comments, and resolved 5 discussions.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on andrew-polk).
-- commits line 243 at r3:
What does this have to do with minimum version? Did your branch get polluted? Everything following seems unrelated.
andrew-polk
left a comment
There was a problem hiding this comment.
@andrew-polk made 1 comment.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on StephenMcConnel).
Previously, StephenMcConnel (Steve McConnel) wrote…
What does this have to do with minimum version? Did your branch get polluted? Everything following seems unrelated.
Wow. Yeah, apparently it just blindly took messages from a merge or something and folded those into the squashed commit message. I'll have it fix it.
I don't pay much attention to commit messages. I guess I should.
A collection can declare, in its .bloomCollection file, the oldest Bloom allowed to open it: <MinimumBloomVersion>6.6</MinimumBloomVersion>, added by hand (no UI), in preparation for Cloud syncing. An older Bloom refuses the collection and offers to upgrade in place or open a different one. Only major.minor are compared; unparseable values are ignored. The value survives CollectionSettings.Save(), which rebuilds the file. For a Team Collection the repository's copy governs, read straight from the shared folder at the gate. That includes LIFTING a requirement -- a refused member never syncs, so a mistaken minimum would otherwise lock them out forever -- and a minimum arriving while a member works locks them out mid-session. When the repository is unreachable, the local file plus anything the repository said earlier in the session decides. Only interactive collection opening is gated; the command-line paths and BulkUploader are deliberately left alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…dialog Upgrade Bloom now drives the same machinery as the "new version available" toast. A new UpdateReporter separates what the update code says from where it goes: the toasts are one reporter, unchanged; a progress dialog is another, usable before any collection is open (ProgressDialogApi is registered once at the application level, and a websocket server is created for the duration, or reused mid-session). - The download shows Velopack's real percentage; on success the dialog closes itself and Bloom restarts. Failure, offline, and nothing-newer endings stay open to be read (offline used to produce an empty dialog). - Cancel really cancels: Velopack abandons the transfer and nothing installs on exit. - If Bloom's own update check is already running, the dialog waits it out, showing that download's percentage, then proceeds through the normal path. Cancelling the wait leaves Bloom's own download alone. - The size in "Downloading update to..." no longer reads (0K) for full downloads. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4ee539d to
d59debd
Compare
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
andrew-polk
left a comment
There was a problem hiding this comment.
@andrew-polk made 1 comment.
Reviewable status: all files reviewed (commit messages unreviewed), 1 unresolved discussion (waiting on StephenMcConnel).
Previously, andrew-polk wrote…
Wow. Yeah, apparently it just blindly took messages from a merge or something and folded those into the squashed commit message. I'll have it fix it.
I don't pay much attention to commit messages. I guess I should.
Done.
BL-16690: a collection can declare, in its
.bloomCollectionfile, the oldest Bloom allowed toopen it (
<MinimumBloomVersion>6.6</MinimumBloomVersion>, hand-edited — no UI). An older Bloom isrefused the collection and offered two ways forward: Upgrade Bloom (in place, through
Velopack) or Open a Different Collection. This PR is the whole feature, in two commits meant
to be read separately:
cbc0cb5876) — reading and honoring the minimum, keeping it alive throughCollectionSettings.Save(), Team Collections (the repository's copy governs, includingmid-session lock-out when an administrator raises it while a member works), and the startup
funnel in
Program.cs. Details in its commit message; previously reviewed as BL-16690 Honor a collection's minimum Bloom version, upgrading in place #8206.d291122539) — clicking Upgrade Bloom drives exactly the machinerybehind the ordinary "new version available" toast, shown live in a progress dialog.
The upgrade path, briefly
UpdateReportersplits what the update code says from where it goes:ToastUpdateReporterkeeps today's toasts exactly;
ProgressUpdateReporterwrites the same sentences plus Velopack'sreal percentage into a progress dialog, and carries the outcome back to the caller.
offline, nothing-newer). On success it closes itself and Bloom restarts — the restart is the
news, and Velopack shows its own progress while installing.
left downloaded, nothing installs on exit — even when the cancel lands in the same instant the
download finishes.
slow connection that download can run 20+ minutes), the dialog says so, shows that download's
live percentage while waiting it out, then proceeds through the ordinary path. Cancelling the
wait abandons the wait, not Bloom's own download.
ProgressDialogApimoves toApplicationContainer(its handlers are static; registering per-project would throw on theduplicate key), and a websocket server is stood up for the duration — or reused mid-session,
which is why
BloomWebSocketServer.Disposenow clearsInstance.Bugs found along the way
(0K)for any full download (pre-existing in the toast;now user-visible). Reports
(88415K).Quietverbosity, a failure to reach the update server was computed but never shown —an offline user got an empty dialog.
Finishednow says it if nothing else has.MessageBoxIcon.Warningsilently draws no icon (Warning == Exclamation, and the TSX onlyhandles "warning"/"asterisk"); documented at the conversion, and the gate dialog asks for none.
Verified live (real Velopack feed, 6.4.105 → 6.4.108, no synthesized input)
Update.exeinstalls,Bloom restarts into the same collection.
sq.versionuntouched.that wait (the background download completed unharmed).
Not exercised: a network share vanishing between lock-out and reopening (the session-memory
fallback), and the two-hour cap on a wedged download.
🤖 Generated with Claude Code
This change is
Devin review