SILO 20261015 Release Notes
Tag: RELEASE.2026-10-15T00-00-00Z · Package version: 20261015000000.0.0. Use the download page for binaries, Linux packages and Docker instructions.
This is the first Server release containing the complete SN-2026-015 and SN-2026-016 Object Lock repairs from PR #234 and PR #235. Server 20260916 and the earlier tested Server 20260903 are affected; no earlier SILO release contains these repairs. Upgrade every Server process and every replication site that accepts S3 writes.
Selected source: 7a3ca0f82100cce06289a465f54139da2639f642.
Published: 2026-10-15 13:52:28 (UTC+8). The 36 published GitHub assets match the accepted files; the checksum manifest is available without authentication.
The release includes the merged changes since Server 20260916, whose source is 2a4d51406b7e. See the complete source comparison.
Object Lock repairs
- SN-2026-015 — retention authorization: every
PutObjectRetentionrequest requiress3:PutObjectRetention, evaluated with request-body condition keys before reading object state. Shortening or removing active GOVERNANCE retention, or changing its mode additionally requires the explicit bypass header ands3:BypassGovernanceRetention. A bypass grant no longer overrides a retention Deny. Removal evaluates remaining retention as zero days; distant future dates no longer saturate the calculation. - SN-2026-016 — protected version writes: caller-selected write version IDs require trusted replication. Directory
nullversions and persisted multipart targets are checked under the destination write lock before overwrite, including uploads started before upgrading or recovered from older staging state. Existing GOVERNANCE, COMPLIANCE and legal-hold protection applies at the actual write. Lock-state read failures reject the operation. - Release prerequisite: PR #237 makes the release workflow reuse the existing Object Lock race regression suite. A failed regression blocks artifact publication. The suite includes slow-body directory overwrites, preflight read failures, legacy multipart completion against COMPLIANCE and recovered-upload UUID collisions.
See the security advisory for affected behavior and the repair design for regression boundaries and trade-offs.
Other changes since 20260916
| Change | User-visible effect |
|---|---|
| #233 | Clear absent fields when decoding reused legacy xl.meta headers and keep scanner update/final responses mutually exclusive. Storage formats and RPC fields are unchanged. See the verification record. |
| #225 | Align checksum error messages with S3, including Content-MD5 spelling. |
| #220 | Correct Lambda target-set emptiness checks and cover empty/nonempty sets with a regression. |
fa565ec9f |
Build with Go 1.27.2 and golang.org/x/net v0.60.0; align the module, dependency check and pinned Docker build stages. |
Build tooling also updates golangci-lint for Go 1.27.2. The release does not rewrite historical metadata, recover overwritten content or reconstruct old retention settings.
Component identities
| Component | Selected version |
|---|---|
| Server | RELEASE.2026-10-15T00-00-00Z; package 20261015000000.0.0 |
| Embedded Console | v2.4.1, source 1360e26d976d |
| mcli | RELEASE.2026-09-16T00-00-00Z, source e952aa78f10a |
| Shared package | github.com/pgsty/silo-pkg/v3 v3.14.1 |
| Upstream S3 SDK | github.com/minio/minio-go/v7 v7.3.1-0.20260915093545-32e1f32cb176 |
| Toolchain | Go 1.27.2 |
Console, mcli and pkg retain their existing released identities. Updating those components alone does not repair an installed Server. The supported administration stack is the coordinated PGSTY stack; compatibility with unmodified upstream MinIO/MC remains best effort.
Upgrade requirements
- Upgrade every Server process and all replication sites that accept S3 writes. A fixed site does not reauthorize a retention change already accepted by an unpatched peer. Mixed deployments remain exposed through their old writers.
- Review policies that used bypass without
s3:PutObjectRetention, or relied on bypass to evade retention conditions. They now fail with403 AccessDenied. Keeping or extending GOVERNANCE with the base permission remains supported. - Ordinary S3 writes cannot choose a target
versionId, including requests signed by root. Use normal version-creating writes. Trusted replication retains version IDs;mcli batch replicateto SILO requiress3:ReplicateObjecton the target credentials. - Locked directory objects and existing locked multipart targets cannot be overwritten. If lock metadata cannot be read, restore storage health before retrying; a read failure does not authorize an overwrite.
- Review prior audit records for unexpected retention changes and check data affected before the upgrade. The fix prevents new bypasses; it does not undo accepted changes. When upgrading from releases before 20260916, also follow the September upgrade requirements.
Artifact acceptance
The following checks passed against the released source 7a3ca0f82100cce06289a465f54139da2639f642:
| Check | Result | Evidence |
|---|---|---|
| Main Go CI | Success | Run 38686240587 |
| Vulnerability check | Success | Run 38686240625 |
| Release build and Object Lock prerequisite | Success | Run 38686425467 |
| Finalize release packages | Success | Run 38687734395 |
All 36 release assets were downloaded and verified. 34 artifact attestations bind their covered files to the exact tagged source. Static identity checks confirmed the tag and commit in all six Linux/macOS/Windows amd64/arm64 binaries. The six RPM/DEB/APK packages contain the matching Linux binary and expected supporting files; both RPM signatures passed verification. Compare downloads with the archive and SBOM checksums and package checksums.
The actual macOS arm64 release binary passed 110/110 runtime and upgrade checks:
| Run | Passed |
|---|---|
| Fresh installation, full Object Lock API suite | 49/49 |
| Upgrade from the official 20260916 binary using the same data | 12/12 |
| Full API suite after that upgrade | 49/49 |
Across those runs, 65 rejected operations left the complete checked object state unchanged. These runtime results cover macOS arm64. Windows and macOS amd64 binaries were not executed; their verification was static. Linux runtime results are recorded below.
Docker images
Docker publication run 38689158028 passed for the same release source. Both images are anonymously accessible from Docker Hub and contain linux/amd64 and linux/arm64 manifests.
| Variant | Version tag | Multi-platform index digest |
|---|---|---|
| Classic | RELEASE.2026-10-15T00-00-00Z |
sha256:aaac6bce13eb99316b3c88bd20143fc3c38ab607585256a411a095c44ee57f62 |
| Distroless | RELEASE.2026-10-15T00-00-00Z-distroless |
sha256:70cac541c5a928be5cd16d6b8732d85ac06e891a0e3d9956a745381330692fc6 |
At publication, latest matched the classic version digest and distroless matched the distroless version digest. Independent OCI attestation verification passed for both exact index digests, binding them to the release tag, source 7a3ca0f82100cce06289a465f54139da2639f642 and the GitHub-hosted docker-release.yml workflow.
Each of the four platform manifests was pulled by its exact digest and passed the same Object Lock API suite:
| Image | Runtime environment | API checks | Binary bytes |
|---|---|---|---|
| Classic linux/arm64 | Native ARM64 on Docker Desktop ARM64 | 49/49 | Match official Linux arm64 archive |
| Classic linux/amd64 | AMD64 emulation on Docker Desktop ARM64 | 49/49 | Match official Linux amd64 archive |
| Distroless linux/arm64 | Native ARM64 on Docker Desktop ARM64 | 49/49 | Match official Linux arm64 archive |
| Distroless linux/amd64 | AMD64 emulation on Docker Desktop ARM64 | 49/49 | Match official Linux amd64 archive |
The /usr/bin/silo copied from each container is byte-for-byte identical to the corresponding official Linux archive binary. All four actual endpoints returned HTTP 200 for /minio/health/ready. The image suite passed 196/196 checks; 120 rejected operations returned the exact expected HTTP/S3 error and preserved the checked object content, version identity, ETag, size, modification time, retention, legal hold, user metadata and full version listing.
Together with the native installation and same-data upgrade checks, runtime acceptance passed 306 checks with zero failures. These results cover the environments listed above; they do not establish that an operator’s production deployment has been upgraded.