Repository navigation
docs(release): start the 1.5.0 upgrade guide with the storage module - #49
Merged
Merged
Conversation
Adds docs/releases/upgrade-to-1.5.md in the shape of the previous upgrade guides — a self-contained prompt an agent can run inside a consumer repo — covering the one consumer-facing change 1.5.0 carries so far. Marked as a draft, since 1.5.0 is unreleased and further sections will land with the features they describe. Writing the guard-rails section surfaced a contract violation between the two real implementations; recorded in docs/TODO.md as a fix that should land before 1.5.0 ships rather than being documented as behaviour. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Starts
docs/releases/upgrade-to-1.5.mdin the same shape as the previous guides — a self-contained prompt an agent can run inside a consumer repo. Marked as a draft, since 1.5.0 is unreleased; further sections land with the features they describe.What it covers
The one consumer-facing change 1.5.0 carries so far: the optional
spring-services-storagemodule. Dependency, theopenelements.storage.typechoice and its three property blocks, theObjectStoresurface, and the guard rails.The other three commits on
mainsince v1.4.0 (<url>POM fix, PomChecker CI guard, PomChecker version pin) have no consumer-facing effect and are deliberately not in the guide.Guard rails worth highlighting
Most came out of reading the implementations rather than the interface:
abortIncompleteUploadsOlderThan. An interrupted upload leaves a multipart upload thatlistcannot see — because S3 does not list them either — and that S3 still bills for.contentTypeby design; the application keeps it.putregardless of payload size, so concurrency and not object size sets the memory ceiling.One finding, recorded rather than documented
Writing the guard rails surfaced a contract violation between the two real implementations, added to
docs/TODO.md:ObjectStore#get(String, long, long)documents that a range past the end returns the available bytes rather than failing.FileObjectStoredoes that.S3ObjectStorecatches onlyNoSuchKeyException, so a first-byte position at or past the object's length surfaces as a rawS3Exception(HTTP 416) — not even wrapped asObjectStoreException. Next to it: forlength == 0the file store throwsObjectNotFoundExceptionfor a missing key while the S3 store returns an empty stream without checking.Two backends behind one interface must not answer the same call differently. It is marked fix before 1.5.0 ships — the module is new in this release, so correcting it costs nothing — which is why the guide does not document the divergence as behaviour.
(The 416 reading comes from the standard range semantics and the code path, not from a run against a live endpoint.)
🤖 Generated with Claude Code