Skip to content

SILO 20261015: Superseded Draft Record

Historical 20261015 candidate source and artifact acceptance record, superseded by Server 20261018.

Status: Superseded by Server 20261018. RELEASE.2026-10-15T00-00-00Z was briefly published at 2026-10-15 13:52:28 (UTC+8), then reverted to Draft and superseded by Server 20261018, which includes the complete October repair and component stack. This page archives the candidate source scope and acceptance test results; use 20261018 for all deployments and upgrades.

Object Lock repairs

  • SN-2026-015 — Retention authorization (#234): every PutObjectRetention request requires s3:PutObjectRetention, evaluated with request-body Object Lock condition keys before reading object state. Shortening, clearing, or changing the mode of active GOVERNANCE retention additionally requires the explicit bypass header and s3:BypassGovernanceRetention (which does not override a Deny on s3:PutObjectRetention). Clearing retention evaluates remaining days as 0, and distant future dates no longer saturate duration arithmetic.
  • SN-2026-016 — Protected version writes (#235): caller-selected write versionId parameters require trusted replication credentials (s3:ReplicateObject). Directory null versions and persisted multipart targets are checked under the destination write lock before overwrite (including uploads initiated before upgrading or recovered from legacy staging state), enforcing active GOVERNANCE, COMPLIANCE, and legal-hold protections; unreadable lock metadata fails closed.
  • Release gate (#237): the release workflow runs the Object Lock race regression suite as a build prerequisite, covering slow-body directory overwrites, preflight read failures, legacy multipart completions against COMPLIANCE, and recovered-upload UUID collisions.

See the security advisory and repair design for full details.

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 (see stale metadata reuse).
#225 Align checksum error messages with AWS S3, including Content-MD5 capitalization.
#220 Fix the inverted TargetIDSet.IsEmpty check for Lambda notification target sets and add regression coverage.
fa565ec9f Upgrade to Go 1.27.2, updated golangci-lint, and golang.org/x/net v0.60.0 across module requirements and pinned Docker build stages.

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
Go toolchain Go 1.27.2

Upgrade requirements

  1. Upgrade all writers and replication peers: upgrade every Server node and all replication sites accepting S3 writes so unpatched peers cannot accept unauthorized retention changes or in-place overwrites.
  2. Review retention policies: policies granting s3:BypassGovernanceRetention without s3:PutObjectRetention, or relying on bypass to evade retention condition keys, now receive 403 AccessDenied.
  3. Caller-selected versionId restriction: ordinary S3 writes (including root-signed requests) cannot specify a target versionId; trusted replication preserves version IDs, and mcli batch replicate into SILO requires s3:ReplicateObject on the destination credentials.
  4. Fail-closed lock checks: locked directory objects and locked multipart targets cannot be overwritten; if lock metadata is unreadable, restore drive health before retrying.
  5. Audit historical state: review prior audit logs for unexpected retention changes before the upgrade (when upgrading from releases prior to 20260916, also follow the September upgrade requirements).

Candidate artifact acceptance

The following CI workflows and verification checks passed against 7a3ca0f82100cce06289a465f54139da2639f642:

Check Result Workflow run
Main Go CI Passed Run 38686240587
Vulnerability check (VulnCheck) Passed Run 38686240625
Release build and Object Lock gate Passed Run 38686425467
Finalize release packages Passed Run 38687734395
  • Static artifact verification: verified all 36 release assets, 34 build provenance attestations, static version/commit identities across all 6 Linux/macOS/Windows amd64/arm64 binaries, payloads across all 6 RPM/DEB/APK packages, and both RPM signatures (see historical archive checksums and package checksums).
  • macOS arm64 runtime acceptance (110/110 passed):
Scenario Passed
Fresh installation, full Object Lock API suite 49/49
In-place upgrade over data created by the official 20260916 binary 12/12
Full Object Lock API suite after upgrade 49/49

(Across those runs, all 65 rejected operations left the complete target object state unchanged; Windows and macOS amd64 binaries were verified statically.)

Docker images

Docker publication run 38689158028 built and attested the multi-platform (linux/amd64 and linux/arm64) images from the same release commit:

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

All four platform-specific images (whose /usr/bin/silo binaries matched the official Linux archive binaries byte for byte) passed /minio/health/ready probes and the full Object Lock API suite (196/196 passed, with all 120 rejected operations preserving object content, version identity, ETag, retention, legal hold, and version listings):

Image Runtime environment API checks Binary comparison
Classic linux/arm64 Native ARM64 on Docker Desktop ARM64 49/49 Byte-identical to Linux arm64 archive
Classic linux/amd64 AMD64 emulation on Docker Desktop ARM64 49/49 Byte-identical to Linux amd64 archive
Distroless linux/arm64 Native ARM64 on Docker Desktop ARM64 49/49 Byte-identical to Linux arm64 archive
Distroless linux/amd64 AMD64 emulation on Docker Desktop ARM64 49/49 Byte-identical to Linux amd64 archive

Combined with the native macOS arm64 installation and upgrade suite, candidate runtime acceptance passed 306/306 checks.