<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>PGSTY SILO Blog on SILO</title>
    <link>https://silo.pgsty.com/blog/</link>
    <description>Recent content in PGSTY SILO Blog on SILO</description>
    <generator>Hugo</generator>
    <language>en</language>
    
    
    
      <lastBuildDate>Mon, 09 Nov 2026 18:13:26 +0800</lastBuildDate>
    
    
      <atom:link href="https://silo.pgsty.com/blog/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>Adding Multilingual Support to SILO</title>
        <link>https://silo.pgsty.com/blog/design/console-languages/</link>
        <pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/console-languages/</guid>
        <description>Why SILO adds ten UI languages, how the registry and maintenance tiers work, and why per-language compression with eager loading balances size, caching and implementation cost.</description>
      </item>
    <item>
        <title>mcli 20261109: Data Safety and Automation Fixes</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20261109/</link>
        <pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20261109/</guid>
        <description>&lt;p&gt;&lt;strong&gt;mcli 20261109 is released.&lt;/strong&gt; Tag: &lt;code&gt;RELEASE.2026-11-09T00-00-00Z&lt;/code&gt;; package version: &lt;strong&gt;&lt;code&gt;20261109000000.0.0&lt;/code&gt;&lt;/strong&gt;; source: &lt;a href=&#34;https://github.com/pgsty/mc/commit/e1d4cc5abfe00b674eb36347399e7398990be467&#34;&gt;&lt;code&gt;e1d4cc5abfe0&lt;/code&gt;&lt;/a&gt;. These notes describe changes since &lt;strong&gt;20261026&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is a standalone mcli maintenance release. It does not replace the client embedded in an existing Server or Console build. The maintained and release-tested server is &lt;strong&gt;PGSTY SILO&lt;/strong&gt;; compatibility with upstream MinIO and other S3-compatible services remains best effort.&lt;/p&gt;&#xA;&lt;h2 id=&#34;data-safety&#34;&gt;Removal, moves and downloads&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dry runs stay read-only.&lt;/strong&gt; &lt;code&gt;rm --purge --dry-run&lt;/code&gt; previews the requested prefix without deleting it. Namespace removal protection applies to every command-line target and each stdin target; adding another argument no longer bypasses &lt;code&gt;--dangerous&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Each copy or move uses its own source alias.&lt;/strong&gt; Multi-source operations no longer reuse the first alias when reading or deleting later objects.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Known self-moves are rejected before copying or deleting the source.&lt;/strong&gt; This includes resolved object URLs, normalized filesystem paths, symlinks and hardlinks. The endpoint guard also rejects the same bucket/key across endpoints with the same scheme and port when their IP addresses overlap, including &lt;code&gt;--resolve&lt;/code&gt; mappings.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multipart &lt;code&gt;od&lt;/code&gt; downloads read the requested sequence.&lt;/strong&gt; Downloads no longer repeat the last part, and opened readers are closed on success or failure. Invalid operands, zero part sizes, negative sizes and arithmetic overflow are rejected before changing the target; empty copies no longer produce invalid rate output.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The move guard is conservative: distinct virtual hosts on a shared IP and port can be refused. Establish that the stores are independent before copying, verifying and deleting explicitly; matching bytes through two aliases does not prove independence. Different IPs, ports, proxy routing, virtual-host addressing or changing DNS can conceal a shared backend. Use consistent endpoint URLs for aliases to the same store.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO Console 2.7.0: Ten Languages, Usage Worker and Container Fixes</title>
        <link>https://silo.pgsty.com/blog/release/console-2.7.0/</link>
        <pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.7.0/</guid>
        <description>&lt;p&gt;Console 2.7.0 expands the administration interface to ten languages, fixes&#xA;container HTTPS and temporary files, adopts the released mcli 20261109 and&#xA;silo-pkg 3.16.0 and updates API documentation. It also fixes usage-worker TLS&#xA;and scheduling, folder sizes over plain HTTP and malformed uploads, all found&#xA;in the final pre-release review. Publication status and assets are on&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases&#34;&gt;GitHub releases&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases&#34;&gt;GitHub releases&lt;/a&gt; ·&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/compare/v2.6.0...v2.7.0&#34;&gt;Changes since 2.6.0&lt;/a&gt; ·&#xA;&lt;a href=&#34;https://silo.pgsty.com/compatibility/console/&#34;&gt;Console compatibility&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;fixes&#34;&gt;Fixes found before release&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The final review before release found defects that 2.6.0 already shipped&#xA;with. 2.7.0 fixes them:&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.16: JOSE Security and Configuration Fixes</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.16.0/</link>
        <pubDate>Sun, 08 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.16.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;silo-pkg v3.16.0&lt;/strong&gt; is a source-only maintenance release of &lt;code&gt;github.com/pgsty/silo-pkg/v3&lt;/code&gt;. It requires &lt;strong&gt;Go 1.27.3&lt;/strong&gt; and remains API-compatible with v3.15.2. Server, Console and mcli receive the changes only after adopting this version and rebuilding; their existing release artifacts are not replaced by a library release.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dependencies&#34;&gt;Dependency updates&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;wide expand td-table--wide&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Module&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;v3.15.2&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;v3.16.0&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;github.com/go-jose/go-jose/v4&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v4.1.6&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v4.1.9&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;golang.org/x/net&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v0.61.0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v0.62.0&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;golang.org/x/crypto&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v0.58.0&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v0.58.1-0.20261009181718-2f1f834330b2&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;github.com/klauspost/cpuid/v2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v2.4.1&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v2.4.2&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;go.yaml.in/yaml/v3&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v3.0.5&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v3.0.6&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The JOSE update includes the five security fixes in &lt;a href=&#34;https://github.com/go-jose/go-jose/releases/tag/v4.1.7&#34;&gt;go-jose v4.1.7&lt;/a&gt;: invalid RSA thumbprints, JSON decoding of embedded unexported fields, JWE protected/unprotected header handling, RSA certificate-verification limits, and limits on JWS signatures/JWE recipients. Version 4.1.9 also restores OpaqueSigner support for unrecognized public-key types and improves unsupported-key errors. These are dependency advisories; their applicability depends on which operations a consuming application exposes.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Native Restore in Two Phases</title>
        <link>https://silo.pgsty.com/blog/design/native-restore-two-phase/</link>
        <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/native-restore-two-phase/</guid>
        <description>Why a native restore held the object lock for its whole tier download, why the first fix of #281 also stranded failed ordinary uploads, and how staging outside the lock and a short, checked commit replace the private upload.</description>
      </item>
    <item>
        <title>A Partial View Must Not Report an Existing Object as Missing</title>
        <link>https://silo.pgsty.com/blog/design/partial-view-read-404/</link>
        <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/partial-view-read-404/</guid>
        <description>Why a node that reaches only some drives of an erasure set can answer 404 NoSuchKey for an object that exists, and why mapping inconsistent metadata to &amp;ldquo;not found&amp;rdquo; only when every drive answered is the minimum complete repair.</description>
      </item>
    <item>
        <title>A Failed Multipart Completion Can Strand the Upload</title>
        <link>https://silo.pgsty.com/blog/design/multipart-complete-retry/</link>
        <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/multipart-complete-retry/</guid>
        <description>Why a CompleteMultipartUpload that misses write quorum can destroy the upload on the drives where its rename succeeded, leaving it stuck until stale-upload cleanup, and why the repair is deferred until storage operations can be fenced.</description>
      </item>
    <item>
        <title>SILO Console 2.6.0: Usage Scans and Safer Bucket Administration</title>
        <link>https://silo.pgsty.com/blog/release/console-2.6.0/</link>
        <pubDate>Thu, 05 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.6.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Console 2.6.0 was published on 2026-11-05 (UTC+8)&lt;/strong&gt;, following&#xA;&lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.5.1/&#34;&gt;2.5.1&lt;/a&gt;. The&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.6.0&#34;&gt;GitHub release&lt;/a&gt;&#xA;records source commit &lt;code&gt;f8ab146695fd1df74e4b84128a286d552921bf00&lt;/code&gt;, release assets&#xA;and verification evidence. This is a standalone Console release; Server&amp;rsquo;s&#xA;embedded Console has its own release cycle.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases&#34;&gt;GitHub releases&lt;/a&gt; ·&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/pull/82&#34;&gt;Release preparation PR #82&lt;/a&gt; ·&#xA;&lt;a href=&#34;https://silo.pgsty.com/administration/console/managing-objects/&#34;&gt;Object management&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Folder and bucket usage&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The object browser can calculate folder sizes with cancellable metadata scans,&#xA;including optional retained-version totals. Current object bytes and retained&#xA;bytes are shown separately. The scan does not download object contents or&#xA;measure physical disk consumption. It runs with the caller&amp;rsquo;s permissions;&#xA;listing versions requires permission to list versions.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Lock Domains of Large Single-Pool Clusters</title>
        <link>https://silo.pgsty.com/blog/design/single-pool-lock-domains/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/single-pool-lock-domains/</guid>
        <description>Why DELETE and CopyObject can fail to exclude PUT on the same key in a distributed single-pool deployment whose erasure sets do not share the same hosts, which layouts that covers, what the race does to xl.meta, and the smallest routing change that closes it.</description>
      </item>
    <item>
        <title>Restored Copies: Expire the Copy, Not the Object</title>
        <link>https://silo.pgsty.com/blog/design/restored-copy-expiry/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/restored-copy-expiry/</guid>
        <description>Why the expiry of a restored copy of a current version hid the object or stripped an older null version, why addressing the exact version is the core repair, and which storage and native-restore safeguards have to ship with it.</description>
      </item>
    <item>
        <title>Failed Writes and Phantom Empty Prefixes</title>
        <link>https://silo.pgsty.com/blog/design/failed-rename-empty-prefix/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/failed-rename-empty-prefix/</guid>
        <description>Why a write whose staged data is already gone can leave an empty object directory that later appears as a common prefix with nothing under it, and why removing empty directories on the rename failure path is the minimum complete repair.</description>
      </item>
    <item>
        <title>Multi-Pool Lifecycle Expiry: Decide on the Whole Object</title>
        <link>https://silo.pgsty.com/blog/design/multi-pool-lifecycle-expiry/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/multi-pool-lifecycle-expiry/</guid>
        <description>Why lifecycle rules evaluated on the versions of one pool hide, delete, or resurrect versions stored in another pool, and why a recheck on the merged version list under the object lock is the minimum complete repair.</description>
      </item>
    <item>
        <title>Heal Dry Run Must Not Delete Data</title>
        <link>https://silo.pgsty.com/blog/design/heal-dry-run-safety/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/heal-dry-run-safety/</guid>
        <description>Why an admin heal run as a dry run can still delete a dangling object version when its metadata has no read quorum, why a five-line early return is the right fix for this release, and why the same fix must also carry the dry-run flag to remote nodes during bucket heal.</description>
      </item>
    <item>
        <title>Lifecycle Delete-All Must Stay on One Key</title>
        <link>https://silo.pgsty.com/blog/design/ilm-delete-all-exact-key/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/ilm-delete-all-exact-key/</guid>
        <description>Why a lifecycle or batch &amp;ldquo;delete all versions&amp;rdquo; of one key also deletes every object stored under that key&amp;rsquo;s name, and why purging the key&amp;rsquo;s own versions by ID, under the object lock and after a recheck, is the minimum complete repair.</description>
      </item>
    <item>
        <title>Bucket Quota in the Console: List Display and Numeric Validation</title>
        <link>https://silo.pgsty.com/blog/design/console-quota-numeric-validation/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/console-quota-numeric-validation/</guid>
        <description>Why a quota set in the web Console showed as a dash in the bucket list, why the bucket-creation form turned 1000 Ei into a one-byte quota and rejected 0.5 Gi, which releases carried each defect, and why one shared conversion and one shared quota reader are the minimum complete repair.</description>
      </item>
    <item>
        <title>Audit Webhooks After a Peer Reload</title>
        <link>https://silo.pgsty.com/blog/design/audit-webhook-peer-reload/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/audit-webhook-peer-reload/</guid>
        <description>Why a runtime change to audit_webhook leaves every server except the one that served it with a webhook target whose worker has already exited, which other subsystems share the defect, and why building logger targets on the server context is the minimum complete repair.</description>
      </item>
    <item>
        <title>ILM Expiry and Pool Migration Ordering</title>
        <link>https://silo.pgsty.com/blog/design/ilm-migration-ordering/</link>
        <pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/ilm-migration-ordering/</guid>
        <description>Why lifecycle expiry and pool migration disagree about a versioned current object, what #266 fixes, and how #276 completes the tier and lifecycle safety boundaries.</description>
      </item>
    <item>
        <title>Tier Free Versions Are Internal Cleanup Records</title>
        <link>https://silo.pgsty.com/blog/design/tier-free-version-semantics/</link>
        <pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/tier-free-version-semantics/</guid>
        <description>Why a tier free version is an internal cleanup record, how treating it as a normal version breaks lifecycle and pool migration, and why PR #264 is the minimum complete repair.</description>
      </item>
    <item>
        <title>Mixed EC Layouts and Migration Listing</title>
        <link>https://silo.pgsty.com/blog/design/mixed-ec-migration-listing/</link>
        <pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/mixed-ec-migration-listing/</guid>
        <description>Why an object with two readable erasure-code layouts can disappear from decommission and rebalance listings, and why the narrow recount in PR #262 is the minimum safe repair.</description>
      </item>
    <item>
        <title>Pool Migration Integrity Review: #261, #263, and #265</title>
        <link>https://silo.pgsty.com/blog/design/pool-migration-integrity-review/</link>
        <pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/pool-migration-integrity-review/</guid>
        <description>A maintainer review of three storage-pool migration reports: mixed erasure-code layouts, tier free versions, and lifecycle expiry ordering. It records root causes, minimum safe fixes, evidence, and merge order.</description>
      </item>
    <item>
        <title>SILO at One Year: What Actually Changed Since Upstream MinIO?</title>
        <link>https://silo.pgsty.com/blog/post/silo-one-year/</link>
        <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/silo-one-year/</guid>
        <description>From MinIO&amp;rsquo;s final public release on 2025-10-15 to SILO 20261026: 376 days and 604 commits. Here is the engineering ledger of what SILO actually changed across security boundaries, S3 protocol and checksums, replication and lifecycle, storage write/rollback and multi-pool safety, Console and mcli, and operational delivery—plus the boundaries that remain unchanged.</description>
      </item>
    <item>
        <title>silo-pkg 3.15: Go 1.27.3 and S3 SDK Fixes</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.15.2/</link>
        <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.15.2/</guid>
        <description>&lt;p&gt;&lt;strong&gt;silo-pkg v3.15.2 is now released&lt;/strong&gt; (commit &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/0416eb1f450536ca2cc3592c2c2a06a3df88d4e0&#34;&gt;&lt;code&gt;0416eb1f4505&lt;/code&gt;&lt;/a&gt;) and is adopted directly across the &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261026/&#34;&gt;SILO 20261026 stack&lt;/a&gt; as &lt;code&gt;github.com/pgsty/silo-pkg/v3&lt;/code&gt;. This note summarizes the full 3.15 series (&lt;code&gt;v3.15.0&lt;/code&gt;, &lt;code&gt;v3.15.1&lt;/code&gt;, and &lt;code&gt;v3.15.2&lt;/code&gt;) since &lt;strong&gt;v3.14.3&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dependencies&#34;&gt;3.15.0: Toolchain and shared dependencies&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The module&amp;rsquo;s minimum Go version increases from &lt;strong&gt;1.26 to 1.27.3&lt;/strong&gt;, alongside updates to 13 direct dependencies: JWX &lt;code&gt;3.4.0&lt;/code&gt;, etcd &lt;code&gt;api&lt;/code&gt; / &lt;code&gt;client/pkg&lt;/code&gt; / &lt;code&gt;client&lt;/code&gt; &lt;code&gt;3.7.3&lt;/code&gt;, gRPC &lt;code&gt;1.84.0&lt;/code&gt;, grpc-gateway &lt;code&gt;2.32.0&lt;/code&gt;, &lt;code&gt;go-json 0.11.2&lt;/code&gt;, &lt;code&gt;swag/conv 0.29.2&lt;/code&gt;, &lt;code&gt;go-colorable 0.1.16&lt;/code&gt;, &lt;code&gt;cpuid 2.4.1&lt;/code&gt;, &lt;code&gt;fwd 1.2.1&lt;/code&gt;, and the two Google generated API/RPC modules pinned at &lt;code&gt;ce908d29299b&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO Console 2.5: Interface and Administration Updates</title>
        <link>https://silo.pgsty.com/blog/release/console-2.5.1/</link>
        <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.5.1/</guid>
        <description>&lt;p&gt;&lt;strong&gt;SILO Console v2.5.1 is now released&lt;/strong&gt; (commit &lt;a href=&#34;https://github.com/pgsty/silo-console/commit/fff1618d9abbf1f6125f1914bd50818e2bc347ed&#34;&gt;&lt;code&gt;fff1618d9abb&lt;/code&gt;&lt;/a&gt;) and ships embedded inside &lt;strong&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261026/&#34;&gt;SILO 20261026&lt;/a&gt;&lt;/strong&gt;. This note summarizes the full 2.5 release series since &lt;strong&gt;v2.4.2&lt;/strong&gt;, combining the &lt;code&gt;v2.5.0&lt;/code&gt; interface overhaul and the &lt;code&gt;v2.5.1&lt;/code&gt; patch fixes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.5.1&#34;&gt;GitHub release&lt;/a&gt; · &lt;a href=&#34;https://silo.pgsty.com/download/#console&#34;&gt;Downloads&lt;/a&gt; · &lt;a href=&#34;https://github.com/pgsty/silo-console/compare/v2.4.2...v2.5.1&#34;&gt;Full commit comparison&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;interface&#34;&gt;Navigation, overview, and metrics&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The 2.5 interface adopts neutral light and dark themes, system typography, consistent information density, Lucide icons, clear keyboard focus states, and &lt;code&gt;prefers-reduced-motion&lt;/code&gt; support. A mobile drawer and tablet rail adapt navigation to narrow viewports while respecting saved user preferences; object details open in a focus-restoring bottom sheet on mobile, and dialogs and forms scale cleanly to smaller screens. English and Chinese localization, accessible controls, and license attributions remain built in.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO 20261026: Server, mcli and KES</title>
        <link>https://silo.pgsty.com/blog/release/silo-20261026/</link>
        <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20261026/</guid>
        <description>&lt;p&gt;&lt;strong&gt;SILO, mcli, and PGSTY KES 20261026 are now released&lt;/strong&gt;, alongside &lt;strong&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.5.1/&#34;&gt;SILO Console 2.5.1&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.15.2/&#34;&gt;silo-pkg 3.15.2&lt;/a&gt;&lt;/strong&gt;. This article consolidates the October 24–25 maintenance records and summarizes all changes since the &lt;strong&gt;20261018&lt;/strong&gt; release. All three executables share the same release date and package version; KES remains an optional, independently deployed key encryption service.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Note&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;Subsequent standalone releases ship &lt;strong&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20261109/&#34;&gt;mcli 20261109&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.6.0/&#34;&gt;Console 2.6.0&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.16.0/&#34;&gt;silo-pkg 3.16.0&lt;/a&gt;&lt;/strong&gt;. Additional post-&lt;code&gt;20261026&lt;/code&gt; Server maintenance repairs are merged on &lt;code&gt;main&lt;/code&gt; and await the next Server release; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/server/#post-20261026&#34;&gt;Server compatibility page&lt;/a&gt; and &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt;.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
      </item>
    <item>
        <title>Multi-Pool Deletion: Preserve the Latest Copy on Failure</title>
        <link>https://silo.pgsty.com/blog/design/multi-pool-delete-safety/</link>
        <pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/multi-pool-delete-safety/</guid>
        <description>Why error reporting and online-drive checks were insufficient for multi-pool deletion, how staged cleanup protects the authoritative copy, and the measured performance and compatibility costs of PR #257.</description>
      </item>
    <item>
        <title>Overwrite Pool Affinity: Why #245 Was Not Adopted</title>
        <link>https://silo.pgsty.com/blog/design/overwrite-pool-affinity/</link>
        <pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/overwrite-pool-affinity/</guid>
        <description>The design, correctness fixes, two rounds of m3 benchmarks, and decision to stop the overwrite-affinity experiment: fewer stale copies did not justify the remaining small-object write cost.</description>
      </item>
    <item>
        <title>FULL_OBJECT Checksum Replication: Preserve the Type at Upload Initiation</title>
        <link>https://silo.pgsty.com/blog/design/replication-full-object-checksum/</link>
        <pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replication-full-object-checksum/</guid>
        <description>PR #255 restores the FULL_OBJECT checksum type when replicating multipart CRC objects. This note documents the BadDigest failure chain, the upstream regression, why a three-line guard also repairs CopyObject replication, and the verification and upgrade guidance.</description>
      </item>
    <item>
        <title>LDAP Long DNs: Restoring Login Without Hiding Revocation Errors</title>
        <link>https://silo.pgsty.com/blog/design/ldap-long-dn/</link>
        <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/ldap-long-dn/</guid>
        <description>Why LDAP DN normalization exposed an IAM filename limit, how parent-revision reads turned it into a login regression, and why the fix classifies only impossible ASCII path components as absent.</description>
      </item>
    <item>
        <title>IAM Policy Reloads: Lock Scope, Cancellation, and Time Budgets</title>
        <link>https://silo.pgsty.com/blog/design/iam-policy-cancellation/</link>
        <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/iam-policy-cancellation/</guid>
        <description>Why a slow policy list blocked ordinary S3 authentication, how request cancellation was lost before reaching KES, and why fixing context propagation required separating etcd read timeouts from decryption budgets.</description>
      </item>
    <item>
        <title>Alias regions: a small configuration change with compatibility boundaries</title>
        <link>https://silo.pgsty.com/blog/design/alias-region/</link>
        <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/alias-region/</guid>
        <description>Why mcli needs an optional region per alias, why the resolved region belongs in the client cache key, and how to preserve ordinary upgrades without promising lossless downgrades.</description>
      </item>
    <item>
        <title>SILO 20261018 Release Notes</title>
        <link>https://silo.pgsty.com/blog/release/silo-20261018/</link>
        <pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20261018/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-10-18T00-00-00Z&#34;&gt;Server 20261018&lt;/a&gt; is available with versioned archives, native packages, and standard/distroless Docker Hub images for &lt;code&gt;amd64&lt;/code&gt; and &lt;code&gt;arm64&lt;/code&gt;. It supersedes Server &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;20260916&lt;/a&gt; (&lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261015/&#34;&gt;20261015&lt;/a&gt; is retained as a superseded historical draft record).&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;wide expand td-table--wide&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Identity&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Value&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Release tag&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;RELEASE.2026-10-18T00-00-00Z&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Package version&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;20261018000000.0.0&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Release source&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/0cd388c666f8211f552604ae73448a066e9c25ce&#34;&gt;&lt;code&gt;0cd388c666f8211f552604ae73448a066e9c25ce&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Previous public source&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/2a4d51406b7ed87af5fe6fe0f801f3290f96eb3c&#34;&gt;&lt;code&gt;2a4d51406b7ed87af5fe6fe0f801f3290f96eb3c&lt;/code&gt;&lt;/a&gt; (Server 20260916)&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Complete change set&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://github.com/pgsty/silo/compare/2a4d51406b7ed87af5fe6fe0f801f3290f96eb3c...0cd388c666f8211f552604ae73448a066e9c25ce&#34;&gt;20260916 → 20261018&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;See the &lt;a href=&#34;https://silo.pgsty.com/download/&#34;&gt;download page&lt;/a&gt; for versioned archives, native packages, and pinned container commands.&lt;/p&gt;&#xA;&lt;h2 id=&#34;security&#34;&gt;Object Lock and IAM security&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;SN-2026-015 / SN-2026-016 — Object Lock retention authorization and in-place overwrite protection.&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/pull/234&#34;&gt;#234&lt;/a&gt; and &lt;a href=&#34;https://github.com/pgsty/silo/pull/235&#34;&gt;#235&lt;/a&gt; repair retention authorization and in-place overwrites:&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO, KES and OpenBao: Key Ownership and Recovery</title>
        <link>https://silo.pgsty.com/blog/design/kes-openbao/</link>
        <pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/kes-openbao/</guid>
        <description>Separate object encryption, key-service authorization and persistent root-key storage, with explicit upgrade and recovery checks.</description>
      </item>
    <item>
        <title>October Security Update: Object Lock, Admin Credentials and JWK Parsing</title>
        <link>https://silo.pgsty.com/blog/security/20261018-release-hardening/</link>
        <pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20261018-release-hardening/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;SILO Server 20261018&lt;/a&gt; delivers the fixes for &lt;strong&gt;&lt;code&gt;SN-2026-015&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;SN-2026-016&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;SN-2026-017&lt;/code&gt;&lt;/strong&gt;, scoped STS token revocation, and Go toolchain and dependency updates across &lt;code&gt;silo&lt;/code&gt;, &lt;code&gt;mcli&lt;/code&gt;, and &lt;code&gt;silo-console&lt;/code&gt;. Server &lt;code&gt;20260916&lt;/code&gt; and &lt;code&gt;20260903&lt;/code&gt; are affected (and &lt;code&gt;20261015&lt;/code&gt; was a superseded pre-release draft).&lt;/p&gt;&#xA;&lt;h2 id=&#34;object-lock&#34;&gt;Object Lock: SN-2026-015 and SN-2026-016&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://silo.pgsty.com/blog/security/20260926-governance-retention-bypass/&#34;&gt;SN-2026-015 &amp;amp; SN-2026-016 advisory&lt;/a&gt; and &lt;a href=&#34;https://silo.pgsty.com/blog/design/governance-retention-bypass-repair/&#34;&gt;repair design note&lt;/a&gt; document the affected &lt;code&gt;PutObjectRetention&lt;/code&gt; and in-place version overwrite paths, reproductions, and mitigations. &lt;a href=&#34;https://github.com/pgsty/silo/pull/234&#34;&gt;PR #234&lt;/a&gt; (&lt;code&gt;14042b5aa&lt;/code&gt;) and &lt;a href=&#34;https://github.com/pgsty/silo/pull/235&#34;&gt;PR #235&lt;/a&gt; (&lt;code&gt;0d3ba5d4c&lt;/code&gt;) enforce &lt;code&gt;s3:PutObjectRetention&lt;/code&gt; before object lookup, require both &lt;code&gt;x-amz-bypass-governance-retention: true&lt;/code&gt; and &lt;code&gt;s3:BypassGovernanceRetention&lt;/code&gt; when weakening active &lt;code&gt;GOVERNANCE&lt;/code&gt; retention, and reject caller-addressed &lt;code&gt;?versionId=&lt;/code&gt; overwrites while enforcing WORM checks under the object write lock for &lt;code&gt;null&lt;/code&gt;-version overwrites.&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.14.3 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.14.3/</link>
        <pubDate>Sun, 18 Oct 2026 07:29:13 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.14.3/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.14.3&#34;&gt;v3.14.3&lt;/a&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/e9d585ba1e7a30ee5eb85b992d883820b83768f5&#34;&gt;&lt;code&gt;e9d585ba1e7a&lt;/code&gt;&lt;/a&gt;. See the &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.2/&#34;&gt;v3.14.2 release notes&lt;/a&gt; for the October dependency baseline.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;github.com/pgsty/silo-pkg/v3 v3.14.3&lt;/code&gt; reduces the cost of classifying &lt;code&gt;admin:&lt;/code&gt; actions during IAM policy evaluation and is selected by &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;Server 20261018&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;AdminAction.IsValid&lt;/code&gt; and &lt;code&gt;HasResource&lt;/code&gt; now perform exact map lookups before scanning the action sets: literal misses return immediately, and wildcard patterns whose prefix cannot match the &lt;code&gt;admin:&lt;/code&gt; namespace skip the validation scan, while patterns such as &lt;code&gt;adm*&lt;/code&gt; and &lt;code&gt;a*d*m*i*n*&lt;/code&gt; retain their exact existing behavior.&lt;/p&gt;</description>
      </item>
    <item>
        <title>PGSTY KES 20261018 Released</title>
        <link>https://silo.pgsty.com/blog/release/kes-20261018/</link>
        <pubDate>Sun, 18 Oct 2026 00:57:52 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/kes-20261018/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/kes/releases/tag/RELEASE.2026-10-18T00-00-00Z&#34;&gt;RELEASE.2026-10-18T00-00-00Z&lt;/a&gt; · &lt;strong&gt;Package:&lt;/strong&gt; &lt;code&gt;20261018000000.0.0&lt;/code&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/kes/commit/2f7e741db905d7ea755967b29666657d819d7ad0&#34;&gt;&lt;code&gt;2f7e741db905&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is the first maintained PGSTY release of the Key Encryption Service (KES). &lt;strong&gt;KES is a standalone stateless service&lt;/strong&gt; for SILO deployments that require external KMS-backed server-side encryption (see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Establish PGSTY maintenance and release pipelines while preserving upstream copyright, attribution, and third-party licenses. The executable and system packages remain &lt;code&gt;kes&lt;/code&gt;, and the Go module path remains &lt;code&gt;github.com/minio/kes&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Build with &lt;strong&gt;Go 1.27.2&lt;/strong&gt;, refresh dependencies, and migrate the AWS Secrets Manager backend from the deprecated AWS SDK for Go v1 to &lt;strong&gt;AWS SDK for Go v2&lt;/strong&gt;. Preserve YAML configuration fields, explicit credential precedence, custom endpoints, and stored key formats (continuing to ignore &lt;code&gt;~/.aws/config&lt;/code&gt; and SDK endpoint environment overrides).&lt;/li&gt;&#xA;&lt;li&gt;Preserve the KES HTTP API, &lt;code&gt;MINIO_KMS_KES_*&lt;/code&gt; configuration settings, existing root keys, and encrypted objects so existing SILO + KES deployments can upgrade in place without key migration.&lt;/li&gt;&#xA;&lt;li&gt;Add upgrade, rollback, and restart integration suites pairing SILO with OpenBao KV v2 and the Moto Secrets Manager emulator, restarting SILO at each version transition so in-memory key caches cannot mask compatibility regressions.&lt;/li&gt;&#xA;&lt;li&gt;Ship signed Git tags, GitHub build provenance attestations, GPG-signed RPMs, and non-root container images, with the built-in &lt;code&gt;kes update&lt;/code&gt; self-updater disabled.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;upgrade&#34;&gt;Deployment and upgrade&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In a server-side encryption deployment, SILO encrypts object contents, KES authenticates mTLS client requests and wraps or unwraps data encryption keys (DEKs), and OpenBao persists the root key encryption keys (KEKs). Point &lt;code&gt;MINIO_KMS_KES_ENDPOINT&lt;/code&gt; at &lt;strong&gt;KES&lt;/strong&gt;, not OpenBao (see the &lt;a href=&#34;https://silo.pgsty.com/blog/design/kes-openbao/&#34;&gt;KES and OpenBao design note&lt;/a&gt; for architecture boundaries and recovery requirements).&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO Console 2.4.2 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.4.2/</link>
        <pubDate>Sat, 17 Oct 2026 20:49:49 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.4.2/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.4.2&#34;&gt;v2.4.2&lt;/a&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/commit/ef2dd2c41d212ed6405c90fa8e5ab671899a7365&#34;&gt;&lt;code&gt;ef2dd2c41d21&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Console v2.4.2 ships both as a standalone release and as the embedded Console in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/#components&#34;&gt;Server 20261018&lt;/a&gt; (see also the &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.2/&#34;&gt;silo-pkg v3.14.2 release notes&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Adopt &lt;strong&gt;mcli 20261018&lt;/strong&gt;, &lt;strong&gt;silo-pkg v3.14.2&lt;/strong&gt;, and upstream &lt;strong&gt;minio-go v7.4.1&lt;/strong&gt;. The SDK cleans up failed multipart uploads after cancellation, formats retention timestamps in UTC, and preserves requested STS durations (parallel GET and ComposeObject remain opt-in).&lt;/li&gt;&#xA;&lt;li&gt;Preserve wrapped S3 error codes during bucket-versioning operations so attempting to suspend versioning on an Object Lock bucket surfaces &lt;code&gt;InvalidBucketState&lt;/code&gt; cleanly.&lt;/li&gt;&#xA;&lt;li&gt;Build with &lt;strong&gt;Go 1.27.2&lt;/strong&gt; and &lt;strong&gt;Node 24.22.0 LTS&lt;/strong&gt;. Refresh &lt;code&gt;golang.org/x/*&lt;/code&gt; modules alongside compress &lt;strong&gt;v1.20.3&lt;/strong&gt;, msgp &lt;strong&gt;v1.6.5&lt;/strong&gt;, etcd &lt;strong&gt;v3.7.2&lt;/strong&gt;, fwd &lt;strong&gt;v1.2.1&lt;/strong&gt;, and cpuid &lt;strong&gt;v2.4.1&lt;/strong&gt; (retaining go-systemd &lt;strong&gt;v22.6.0&lt;/strong&gt; for NetBSD and tablewriter &lt;strong&gt;v0.0.5&lt;/strong&gt; for MC API compatibility).&lt;/li&gt;&#xA;&lt;li&gt;Pin &lt;strong&gt;GoReleaser v2.18.3&lt;/strong&gt;, &lt;strong&gt;golangci-lint v2.15.0&lt;/strong&gt;, and &lt;strong&gt;govulncheck v1.9.0&lt;/strong&gt;, rebuild embedded frontend assets as Console 2.4.2, and update pinned container build stages.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;integration&#34;&gt;Integration&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Because the retained module path has no &lt;code&gt;/v2&lt;/code&gt; suffix, Go consumers reference Console v2.4.2 via pseudo-version &lt;code&gt;v0.0.0-20261017112417-ef2dd2c41d21&lt;/code&gt;. An embedding Server must declare both Console and MC replacements explicitly:&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20261018 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20261018/</link>
        <pubDate>Sat, 17 Oct 2026 19:06:00 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20261018/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-10-18T00-00-00Z&#34;&gt;RELEASE.2026-10-18T00-00-00Z&lt;/a&gt; · &lt;strong&gt;Package:&lt;/strong&gt; &lt;code&gt;20261018000000.0.0&lt;/code&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/fa3b8bf72458b9b5480c4da0ce63a4f224e058c8&#34;&gt;&lt;code&gt;fa3b8bf72458&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;mcli 20261018&lt;/code&gt; ships both as the standalone CLI client and as the coordinated client module in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/#components&#34;&gt;Server 20261018&lt;/a&gt; and &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.2/&#34;&gt;Console v2.4.2&lt;/a&gt; (see also the &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.2/&#34;&gt;silo-pkg v3.14.2 release notes&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Adopt &lt;strong&gt;silo-pkg v3.14.2&lt;/strong&gt; and upstream &lt;strong&gt;minio-go v7.4.1&lt;/strong&gt;. The SDK cleans up failed multipart uploads after cancellation, formats retention timestamps in UTC, and preserves requested STS durations while retaining existing &lt;code&gt;CopyObject&lt;/code&gt; embedded-error and checksum handling (parallel GET and ComposeObject remain opt-in).&lt;/li&gt;&#xA;&lt;li&gt;Build with &lt;strong&gt;Go 1.27.2&lt;/strong&gt;. Refresh &lt;code&gt;golang.org/x/*&lt;/code&gt; modules, compress &lt;strong&gt;v1.20.3&lt;/strong&gt;, msgp &lt;strong&gt;v1.6.5&lt;/strong&gt;, and etcd clients &lt;strong&gt;v3.7.2&lt;/strong&gt; (with fwd &lt;strong&gt;v1.2.1&lt;/strong&gt; fixing reads that return bytes alongside an error as well as &lt;code&gt;Skip&lt;/code&gt; offsets, and cpuid &lt;strong&gt;v2.4.1&lt;/strong&gt; fixing cache detection).&lt;/li&gt;&#xA;&lt;li&gt;Pull in go-jose &lt;strong&gt;v4.1.6&lt;/strong&gt; (fixing excessive CPU usage on oversized RSA JWKs in &lt;a href=&#34;https://github.com/go-jose/go-jose/security/advisories/GHSA-mgcc-cww5-fp2q&#34;&gt;GHSA-mgcc-cww5-fp2q&lt;/a&gt;) and LDAP &lt;strong&gt;v3.4.15&lt;/strong&gt; via &lt;code&gt;silo-pkg&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Refresh pinned UBI 9 base images and release tooling: GoReleaser &lt;strong&gt;v2.18.3&lt;/strong&gt; (including log secret redaction and archive fixes), nFPM &lt;strong&gt;v2.48.0&lt;/strong&gt;, golangci-lint &lt;strong&gt;v2.15.0&lt;/strong&gt;, govulncheck &lt;strong&gt;v1.9.0&lt;/strong&gt;, and gofumpt &lt;strong&gt;v0.12.0&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;upgrade&#34;&gt;Upgrade&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;CLI commands, aliases, &lt;code&gt;MC_*&lt;/code&gt; environment variables, and configuration formats are unchanged (retaining the go-systemd &lt;strong&gt;v22.6.0&lt;/strong&gt; replacement for NetBSD builds and tablewriter &lt;strong&gt;v0.0.5&lt;/strong&gt;). See the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for version pairings.&lt;/p&gt;</description>
      </item>
    <item>
        <title>LIST Recovery: Confirm Only Uncertain Names and Bound the Waiting Cost</title>
        <link>https://silo.pgsty.com/blog/design/listing-recovery-lock-cost/</link>
        <pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/listing-recovery-lock-cost/</guid>
        <description>The #218 / #239 design keeps ordinary listings on their fast path, confirms eligible disagreements across pools, distinguishes confirmed deletion from drive or decode failures, covers existing writer lock domains, and bounds short-conflict lock waiting.</description>
      </item>
    <item>
        <title>IAM Admin API Authorization Boundaries</title>
        <link>https://silo.pgsty.com/blog/design/iam-admin-authorization/</link>
        <pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/iam-admin-authorization/</guid>
        <description>Enforcing self-service policy decisions, preventing session credentials from escaping their restrictions, protecting root credentials, and preserving empty-policy and damaged-key cleanup behavior with a small handler-level repair.</description>
      </item>
    <item>
        <title>silo-pkg 3.14.2 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.14.2/</link>
        <pubDate>Thu, 15 Oct 2026 21:32:32 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.14.2/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.14.2&#34;&gt;v3.14.2&lt;/a&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/c6835145176f385dd5f2d2a6d5ccd337b258d9bb&#34;&gt;&lt;code&gt;c6835145176f&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;github.com/pgsty/silo-pkg/v3 v3.14.2&lt;/code&gt; provides the October dependency baseline for &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20261018/&#34;&gt;mcli 20261018&lt;/a&gt; and &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.2/&#34;&gt;Console v2.4.2&lt;/a&gt;; follow-up patch &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.3/&#34;&gt;v3.14.3&lt;/a&gt; adds an admin-action classification optimization used by &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;Server 20261018&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Update upstream &lt;code&gt;minio-go&lt;/code&gt; to v7.4.1&lt;/strong&gt;: clean up failed multipart uploads even after caller context cancellation, serialize Object Lock retention timestamps in UTC, preserve requested STS durations, and support projected Kubernetes service-account token files (parallel GET and ComposeObject remain opt-in).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Update &lt;code&gt;go-jose&lt;/code&gt; to v4.1.6&lt;/strong&gt;: fix excessive CPU consumption when parsing oversized RSA JWKs (&lt;a href=&#34;https://github.com/go-jose/go-jose/security/advisories/GHSA-mgcc-cww5-fp2q&#34;&gt;GHSA-mgcc-cww5-fp2q&lt;/a&gt;); update &lt;strong&gt;LDAP to v3.4.15&lt;/strong&gt;, &lt;strong&gt;msgp to v1.6.5&lt;/strong&gt;, and &lt;strong&gt;etcd clients to v3.7.2&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refresh &lt;code&gt;golang.org/x/*&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;x/crypto&lt;/code&gt; &lt;strong&gt;v0.58.0&lt;/strong&gt;, &lt;code&gt;x/net&lt;/code&gt; &lt;strong&gt;v0.61.0&lt;/strong&gt;, &lt;code&gt;x/sys&lt;/code&gt; &lt;strong&gt;v0.49.0&lt;/strong&gt;, and &lt;code&gt;x/text&lt;/code&gt; &lt;strong&gt;v0.43.0&lt;/strong&gt;. Built and tested with &lt;strong&gt;Go 1.27.2&lt;/strong&gt; while retaining the &lt;code&gt;go 1.26&lt;/code&gt; module floor and the &lt;code&gt;go-systemd v22.6.0&lt;/code&gt; NetBSD replacement.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;adoption&#34;&gt;Compatibility and adoption&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-fd04f690-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;go&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-fd04f690-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pgsty&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;silo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pkg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.14.2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Public package signatures and password-policy semantics are unchanged (see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/password-permissions/&#34;&gt;password-permission migration guide&lt;/a&gt; when upgrading from before v3.14.0, and the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt; for version pairings).&lt;/p&gt;</description>
      </item>
    <item>
        <title>Clearing Stale Fields in Legacy Metadata and Scanner Responses</title>
        <link>https://silo.pgsty.com/blog/design/stale-metadata-reuse/</link>
        <pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/stale-metadata-reuse/</guid>
        <description>PR #233 fixes stale fields carried over when legacy xl.meta headers and namespace-scanner responses are reused. This note documents the triggers, observed behavior, targeted field resets, deterministic regression tests, distributed scanner verification, and operator guidance.</description>
      </item>
    <item>
        <title>SILO 20261015: Superseded Draft Record</title>
        <link>https://silo.pgsty.com/blog/release/silo-20261015/</link>
        <pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20261015/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status: Superseded by &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;Server 20261018&lt;/a&gt;.&lt;/strong&gt; &lt;code&gt;RELEASE.2026-10-15T00-00-00Z&lt;/code&gt; was briefly published at 2026-10-15 13:52:28 (UTC+8), then reverted to Draft and superseded by &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;Server 20261018&lt;/a&gt;, which includes the complete October repair and component stack. This page archives the candidate source scope and acceptance test results; use &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;20261018&lt;/a&gt; for all deployments and upgrades.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Historical tag&lt;/strong&gt;: &lt;code&gt;RELEASE.2026-10-15T00-00-00Z&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Package version&lt;/strong&gt;: &lt;code&gt;20261015000000.0.0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Candidate source&lt;/strong&gt;: &lt;a href=&#34;https://github.com/pgsty/silo/commit/7a3ca0f82100cce06289a465f54139da2639f642&#34;&gt;&lt;code&gt;7a3ca0f82100cce06289a465f54139da2639f642&lt;/code&gt;&lt;/a&gt; (&lt;a href=&#34;https://github.com/pgsty/silo/compare/2a4d51406b7ed87af5fe6fe0f801f3290f96eb3c...7a3ca0f82100cce06289a465f54139da2639f642&#34;&gt;full diff against Server 20260916&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;object-lock&#34;&gt;Object Lock repairs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;SN-2026-015 — Retention authorization (&lt;a href=&#34;https://github.com/pgsty/silo/pull/234&#34;&gt;#234&lt;/a&gt;)&lt;/strong&gt;: every &lt;code&gt;PutObjectRetention&lt;/code&gt; request requires &lt;code&gt;s3:PutObjectRetention&lt;/code&gt;, evaluated with request-body Object Lock condition keys before reading object state. Shortening, clearing, or changing the mode of active &lt;code&gt;GOVERNANCE&lt;/code&gt; retention additionally requires the explicit bypass header and &lt;code&gt;s3:BypassGovernanceRetention&lt;/code&gt; (which does not override a &lt;code&gt;Deny&lt;/code&gt; on &lt;code&gt;s3:PutObjectRetention&lt;/code&gt;). Clearing retention evaluates remaining days as &lt;code&gt;0&lt;/code&gt;, and distant future dates no longer saturate duration arithmetic.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SN-2026-016 — Protected version writes (&lt;a href=&#34;https://github.com/pgsty/silo/pull/235&#34;&gt;#235&lt;/a&gt;)&lt;/strong&gt;: caller-selected write &lt;code&gt;versionId&lt;/code&gt; parameters require trusted replication credentials (&lt;code&gt;s3:ReplicateObject&lt;/code&gt;). Directory &lt;code&gt;null&lt;/code&gt; 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 &lt;code&gt;GOVERNANCE&lt;/code&gt;, &lt;code&gt;COMPLIANCE&lt;/code&gt;, and legal-hold protections; unreadable lock metadata fails closed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Release gate (&lt;a href=&#34;https://github.com/pgsty/silo/pull/237&#34;&gt;#237&lt;/a&gt;)&lt;/strong&gt;: 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 &lt;code&gt;COMPLIANCE&lt;/code&gt;, and recovered-upload UUID collisions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See the &lt;a href=&#34;https://silo.pgsty.com/blog/security/20260926-governance-retention-bypass/&#34;&gt;security advisory&lt;/a&gt; and &lt;a href=&#34;https://silo.pgsty.com/blog/design/governance-retention-bypass-repair/&#34;&gt;repair design&lt;/a&gt; for full details.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Object Lock Retention Bypass and Version-Overwrite Repair Design (SN-2026-015 / SN-2026-016)</title>
        <link>https://silo.pgsty.com/blog/design/governance-retention-bypass-repair/</link>
        <pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/governance-retention-bypass-repair/</guid>
        <description>Report verification, Git provenance, entry and write-lock defense-in-depth design, fail-closed preflight hardening, and candidate trade-off evaluation for SN-2026-015 and SN-2026-016.</description>
      </item>
    <item>
        <title>SN-2026-015 &amp; SN-2026-016: S3 Object Lock Governance Retention Bypass and Version-Addressed Overwrites</title>
        <link>https://silo.pgsty.com/blog/security/20260926-governance-retention-bypass/</link>
        <pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20260926-governance-retention-bypass/</guid>
        <description>&lt;p&gt;&lt;strong&gt;&lt;code&gt;SN-2026-015&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;SN-2026-016&lt;/code&gt;&lt;/strong&gt; cover two S3 Object Lock retention and immutability vulnerabilities fixed in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;SILO Server 20261018&lt;/a&gt; via PR &lt;a href=&#34;https://github.com/pgsty/silo/pull/234&#34;&gt;&lt;code&gt;#234&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;14042b5aa&lt;/code&gt;) and PR &lt;a href=&#34;https://github.com/pgsty/silo/pull/235&#34;&gt;&lt;code&gt;#235&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;0d3ba5d4c&lt;/code&gt;), as detailed in the companion &lt;a href=&#34;https://silo.pgsty.com/blog/design/governance-retention-bypass-repair/&#34;&gt;repair design note&lt;/a&gt;. While the delete path already enforced &lt;code&gt;s3:BypassGovernanceRetention&lt;/code&gt; (&lt;a href=&#34;https://github.com/minio/minio/security/advisories/GHSA-c8fc-mjj8-fc63&#34;&gt;CVE-2023-25812&lt;/a&gt;), the retention-write path (&lt;code&gt;PutObjectRetention&lt;/code&gt;) and four in-place version overwrite paths remained bypassable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;advisory-scope-sn-2026-015&#34;&gt;Advisory Scope: &lt;code&gt;SN-2026-015&lt;/code&gt; and &lt;code&gt;SN-2026-016&lt;/code&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;sn-2026-015&#34;&gt;SN-2026-015: &lt;code&gt;PutObjectRetention&lt;/code&gt; Authorization and Governance Bypass (&lt;code&gt;#231&lt;/code&gt;)&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;In &lt;code&gt;PutObjectRetentionHandler&lt;/code&gt; (&lt;code&gt;cmd/object-handlers.go&lt;/code&gt;), three interacting flaws in &lt;code&gt;enforceRetentionBypassForPut&lt;/code&gt; and &lt;code&gt;isPutRetentionAllowed&lt;/code&gt; broke S3 Object Lock authorization:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Pinned TLS Parameters and Handshake Compatibility</title>
        <link>https://silo.pgsty.com/blog/design/tls-parameter-pinning/</link>
        <pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/tls-parameter-pinning/</guid>
        <description>Why Go 1.27 changed the TLS 1.3 ClientHello, how SILO&amp;rsquo;s inherited explicit curve list prevented GODEBUG=tlsmlkem=0 from taking effect, what the 20260916 repair covers, and the remediation options when a TLS-inspecting middlebox resets connections over new post-quantum identifiers.</description>
      </item>
    <item>
        <title>SILO Console 2.4.1 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.4.1/</link>
        <pubDate>Wed, 16 Sep 2026 16:36:03 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.4.1/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.4.1&#34;&gt;SILO Console v2.4.1&lt;/a&gt;&#xA;was released on September 16, 2026 from&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/commit/1360e26d976d82eda395b0b2e449df8c9d49f39c&#34;&gt;&lt;code&gt;1360e26d976d&lt;/code&gt;&lt;/a&gt;.&#xA;It integrates pkg v3.14.1 and mcli 20260916, restricts the anonymous sharing proxy,&#xA;streams multi-object ZIP downloads and adds signed, traceable release artifacts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sharing&#34;&gt;Shared downloads&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The fix for &lt;a href=&#34;https://github.com/pgsty/silo-console/issues/52&#34;&gt;#52&lt;/a&gt; restricts the&#xA;anonymous proxy to &lt;strong&gt;object-content GET requests at the configured S3 origin&lt;/strong&gt;.&#xA;It rejects redirects, system paths and query-selected operations that are not&#xA;object downloads. Public objects, presigned links and version-specific downloads&#xA;continue to work. &lt;strong&gt;No new sharing-disable environment variable is needed.&lt;/strong&gt;&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.14.1 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.14.1/</link>
        <pubDate>Wed, 16 Sep 2026 12:16:06 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.14.1/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.14.1&#34;&gt;v3.14.1&lt;/a&gt; was published from&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/fa657ef431ae22e720df37e5144cf00f67102945&#34;&gt;&lt;code&gt;fa657ef4&lt;/code&gt;&lt;/a&gt;.&#xA;This is a dependency and tooling release of &lt;code&gt;github.com/pgsty/silo-pkg/v3&lt;/code&gt;;&#xA;the &lt;a href=&#34;https://github.com/pgsty/silo-pkg/compare/v3.14.0...v3.14.1&#34;&gt;diff from v3.14.0&lt;/a&gt;&#xA;changes no package Go source or public API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dependencies&#34;&gt;Dependency changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JWX advances from v3.2.0 to v3.3.0. The &lt;a href=&#34;https://github.com/lestrrat-go/jwx/releases/tag/v3.3.0&#34;&gt;vendor&amp;rsquo;s release notes&lt;/a&gt;&#xA;identify GHSA-4cf7-xm37-g63h: custom JSON field names must be escaped during&#xA;encoding. Reachability depends on accepting attacker-controlled custom claim&#xA;names; this package&amp;rsquo;s &lt;code&gt;env&lt;/code&gt; JWT path uses registered claim names.&lt;/li&gt;&#xA;&lt;li&gt;Upstream minio-go advances to &lt;code&gt;v7.3.1-0.20260915093545-32e1f32cb176&lt;/code&gt;, including&#xA;&lt;a href=&#34;https://github.com/minio/minio-go/pull/2306&#34;&gt;minio-go #2306&lt;/a&gt;: recognize an S3&#xA;&lt;code&gt;CopyObject&lt;/code&gt; error embedded in an HTTP 200 response instead of reporting a&#xA;successful copy.&lt;/li&gt;&#xA;&lt;li&gt;Testify advances to v1.12.1 and the lint configuration adopts &lt;code&gt;gomodguard_v2&lt;/code&gt;.&#xA;The Go 1.26 floor, Go 1.27.1 toolchain and go-systemd NetBSD replacement remain.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;migration&#34;&gt;Component and migration boundary&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.0/#migration&#34;&gt;v3.14.0 password-policy change&lt;/a&gt; remains&#xA;in force; this patch does not revert it. Preserve the paired&#xA;&lt;code&gt;admin:CreateUser&lt;/code&gt; / &lt;code&gt;admin:ChangeMyPassword&lt;/code&gt; Deny where that was the intended&#xA;restriction, using the &lt;a href=&#34;https://silo.pgsty.com/compatibility/password-permissions/&#34;&gt;migration guide&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>A Listing Must Not Drop a Null Version That Still Has Quorum</title>
        <link>https://silo.pgsty.com/blog/design/list-null-version-quorum/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/list-null-version-quorum/</guid>
        <description>A successful ListObjects omitted keys that existed and were readable. One cause is an order-sensitive version selection inherited from upstream healing tolerance; it is repaired in Server 20260916. A second, rolling-restart omission reproduced on the repaired build and was subsequently closed in Server 20261018.</description>
      </item>
    <item>
        <title>Go 1.27 TLS Defaults and OIDC Discovery Failure Modes</title>
        <link>https://silo.pgsty.com/blog/design/go127-tls-oidc-discovery/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/go127-tls-oidc-discovery/</guid>
        <description>What the Go 1.27 toolchain upgrade changed at the TLS layer, how to diagnose OIDC discovery failures by connection phase, and which health endpoint reports an offline identity provider. Distilled from the investigation of issue #154 and verified with synthetic experiments.</description>
      </item>
    <item>
        <title>Request-Header Deadlines: Absolute Header Limits and Rolling Body Idle Timeouts</title>
        <link>https://silo.pgsty.com/blog/design/request-header-timeouts/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/request-header-timeouts/</guid>
        <description>The decision record for PR #196&amp;rsquo;s HTTP deadline repair (fix 055030ea5): the connection wrapper&amp;rsquo;s rolling deadline overwrote every absolute read-header deadline, and the &amp;ndash;read-header-timeout flag was never wired into the server. Covers the two timeout classes, the configuration matrix, how HTTP/1, HTTP/2, and TLS behave across phases, and why the rejected alternatives would have killed long uploads.</description>
      </item>
    <item>
        <title>Replica Metadata Normalization: What a Trusted Copy May Not Re-Inject</title>
        <link>https://silo.pgsty.com/blog/design/replica-metadata-normalization/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replica-metadata-normalization/</guid>
        <description>The decision record for PR #194 (fix 4fcdf37ce): trusted replication COPY re-extracted raw request metadata through the permissive path, so transport-only aws-chunked encodings and GHSA-redacted user metadata came back into stored objects. Covers the expected encoding mappings, the Snowball behavior change, why upgrading does not repair existing objects, and the status of the stored-metadata remediation proposal.</description>
      </item>
    <item>
        <title>Replicated Tag Ordering: Revision Timestamps, Tombstones, and Resurrection</title>
        <link>https://silo.pgsty.com/blog/design/replicated-tag-ordering/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replicated-tag-ordering/</guid>
        <description>The decision record for the replicated-tag repairs merged as PR #193 and #196: SSE-KMS destination copies silently dropped tag revision timestamps, and an empty tag value had no representable revision, so a delayed replication event could resurrect deleted tags. Covers the tombstone semantics, the stored-wins tie change, the two-ended upgrade requirement, and the cost of extra metadata copies during resync.</description>
      </item>
    <item>
        <title>SSE-C Replica Integrity</title>
        <link>https://silo.pgsty.com/blog/design/ssec-replica-integrity/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/ssec-replica-integrity/</guid>
        <description>Raw ciphertext, logical multipart sizes, retransmission and compression exclusions form one replica contract.</description>
      </item>
    <item>
        <title>Object Lock Replication Ordering</title>
        <link>https://silo.pgsty.com/blog/design/object-lock-replication-ordering/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/object-lock-replication-ordering/</guid>
        <description>Retention, legal hold and their removals are independently ordered state across replica writes and pools.</description>
      </item>
    <item>
        <title>Multi-Pool Object Consistency</title>
        <link>https://silo.pgsty.com/blog/design/multi-pool-object-consistency/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/multi-pool-object-consistency/</guid>
        <description>Select one logical object under a shared lock before evaluating conditions or merging tags and Object Lock state.</description>
      </item>
    <item>
        <title>Federated CopyObject: Preserve the Destination Contract</title>
        <link>https://silo.pgsty.com/blog/design/federated-copy-object/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/federated-copy-object/</guid>
        <description>Shipped in Server 20260916 (PR #157, #159, #163, #177, #179), legacy etcd federated CopyObject forwards logical source bytes, preserves destination encryption defaults and Object Lock headers, validates full-object checksums, and returns the exact committed write identity.</description>
      </item>
    <item>
        <title>Durable IAM Revocations</title>
        <link>https://silo.pgsty.com/blog/design/iam-revocations/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/iam-revocations/</guid>
        <description>Persistent deletion revisions, signed parent boundaries, safe replay, coordinated upgrades and the limits of IAM recovery.</description>
      </item>
    <item>
        <title>SILO 20260916 Release Notes</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260916/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260916/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Version date:&lt;/strong&gt; 2026-09-16 · &lt;strong&gt;Published:&lt;/strong&gt; 2026-09-16 UTC (September 17 in China) · &lt;strong&gt;Tag:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-09-16T00-00-00Z&#34;&gt;&lt;code&gt;RELEASE.2026-09-16T00-00-00Z&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Package version:&lt;/strong&gt; &lt;code&gt;20260916000000.0.0&lt;/code&gt;. Use the &lt;a href=&#34;https://silo.pgsty.com/download/&#34;&gt;download page&lt;/a&gt; for installation.&lt;/p&gt;&#xA;&lt;p&gt;The source range runs from released commit &lt;a href=&#34;https://github.com/pgsty/silo/commit/9b11dc9469e650815b775cb47b039610644f5da4&#34;&gt;&lt;code&gt;9b11dc9469e6&lt;/code&gt;&lt;/a&gt; to released &lt;a href=&#34;https://github.com/pgsty/silo/commit/2a4d51406b7ed87af5fe6fe0f801f3290f96eb3c&#34;&gt;&lt;code&gt;2a4d51406b7e&lt;/code&gt;&lt;/a&gt;: &lt;strong&gt;210 commits, including 140 non-merge commits&lt;/strong&gt;. These notes describe the final behavior, including the listing-quorum, version-purge and migration-tag repairs after #214.&lt;/p&gt;&#xA;&lt;h2 id=&#34;highlights&#34;&gt;Highlights&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stronger request authentication:&lt;/strong&gt; reject unsigned operation headers in ordinary and presigned SigV4, verify presigned body hashes, and use authenticated inputs for signature-age and payload-hash policies.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Durable IAM revocation:&lt;/strong&gt; retain deletion revisions, parent revocation boundaries and membership grant times across delayed events, same-name recreation and restart/recovery.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;One logical object across pools:&lt;/strong&gt; coordinate conditional PUT, multipart completion, conditional DELETE, addressed-version deletion and metadata updates under consistent selection and locking rules.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Preserve tags during pool migration:&lt;/strong&gt; rebalance and decommission retain tags, their original revision and ordered empty states for ordinary and multipart objects.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Correct encrypted and federated copies:&lt;/strong&gt; preserve raw SSE-C replicas, plaintext part sizes, independently ordered lock/tag metadata, and the checksum, version and time of the actual destination write.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;More reliable replication and configuration convergence:&lt;/strong&gt; repair tag resurrection, marker purge/MRF recovery, resync counters/cancellation, and bucket metadata source timestamps and deletions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Opt-in durable multipart discovery:&lt;/strong&gt; add persistent scanning, global pagination and read-only preflight. Legacy remains the default; capacity and late-creation-write limitations remain explicit.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Updated administration stack:&lt;/strong&gt; select Console 2.4.1, mcli 20260916 and pkg 3.14.1, including bounded browsing, streaming ZIPs, reliable failure exits and policy correctness fixes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Two upgrade requirements need advance preparation:&lt;/strong&gt; password permissions change the meaning of existing policies, and durable IAM revocation requires coordinated upgrades and complete backend backups.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;components&#34;&gt;Versions and components&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;wide expand td-table--wide&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Component&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Server 20260903&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Server 20260916&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Server&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;RELEASE.2026-09-16T00-00-00Z&lt;/code&gt;; inspected source &lt;code&gt;2a4d51406b7e&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Embedded Console&lt;/td&gt;&#xA;      &lt;td&gt;Source &lt;code&gt;464a59d73ada&lt;/code&gt;, v2.3.0 identity&lt;/td&gt;&#xA;      &lt;td&gt;Released &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.1/&#34;&gt;v2.4.1&lt;/a&gt;, source &lt;code&gt;1360e26d976d&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;MC module / image-bundled mcli&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260903/&#34;&gt;20260903&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Released &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260916/&#34;&gt;20260916&lt;/a&gt;, source &lt;code&gt;e952aa78f10a&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Shared package&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;github.com/pgsty/silo-pkg/v3 v3.13.2&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.1/&#34;&gt;v3.14.1&lt;/a&gt;, including the v3.13.3 and v3.14.0 changes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Upstream S3 SDK&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;minio-go/v7&lt;/code&gt;, revision &lt;code&gt;0e78d3f18efe&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;v7.3.1-0.20260915093545-32e1f32cb176&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Go / madmin-go&lt;/td&gt;&#xA;      &lt;td&gt;Go 1.27.1 / v3.0.110&lt;/td&gt;&#xA;      &lt;td&gt;Unchanged&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Helm&lt;/td&gt;&#xA;      &lt;td&gt;7.0.2&lt;/td&gt;&#xA;      &lt;td&gt;Chart 7.0.3 in the tagged source; no separate chart package or Helm repository publication&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The release explicitly replaces Console and MC with &lt;code&gt;v0.0.0-20260916075814-1360e26d976d&lt;/code&gt; and &lt;code&gt;v0.0.0-20260916070421-e952aa78f10a&lt;/code&gt;. Go does not inherit a dependency&amp;rsquo;s replacements. The shared package uses the PGSTY module path directly; Server, Console and MC retain their historical module identities and protocol names. &lt;code&gt;minio-go/v7&lt;/code&gt; continues to use a verified upstream revision.&lt;/p&gt;</description>
      </item>
    <item>
        <title>September Security Repairs: Payload Integrity, IAM Revocation and Console Sharing</title>
        <link>https://silo.pgsty.com/blog/security/20260916-release-hardening/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20260916-release-hardening/</guid>
        <description>&lt;p&gt;This bulletin covers three security repairs (&lt;code&gt;SN-2026-012&lt;/code&gt; through &lt;code&gt;SN-2026-014&lt;/code&gt;) and adjacent dependency updates shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;Server 20260916&lt;/a&gt; and &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.1/&#34;&gt;Console v2.4.1&lt;/a&gt;. See the &lt;a href=&#34;https://silo.pgsty.com/about/security-advisories/&#34;&gt;security advisory ledger&lt;/a&gt; for the complete index.&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;wide expand td-table--wide&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Finding&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Fixed source&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Delivery status&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;SN-2026-012&lt;/code&gt;: presigned payload integrity&lt;/td&gt;&#xA;      &lt;td&gt;Server &lt;code&gt;c4b5e1cb4&lt;/code&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/pull/177&#34;&gt;PR #177&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;Server 20260916&lt;/a&gt; (affected in &lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt; and earlier)&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;SN-2026-013&lt;/code&gt;: durable IAM revocation&lt;/td&gt;&#xA;      &lt;td&gt;Server &lt;a href=&#34;https://github.com/pgsty/silo/pull/191&#34;&gt;PR #191&lt;/a&gt; / &lt;a href=&#34;https://github.com/pgsty/silo/pull/192&#34;&gt;PR #192&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;Server 20260916&lt;/a&gt;; requires coordinated multi-node/multi-site upgrade&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;SN-2026-014&lt;/code&gt;: anonymous Console share proxy&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/pull/56&#34;&gt;Console PR #56&lt;/a&gt;; &lt;a href=&#34;https://github.com/pgsty/silo/pull/209&#34;&gt;Server PR #209&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Shipped in standalone &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.1/&#34;&gt;Console v2.4.1&lt;/a&gt; and embedded in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;Server 20260916&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;sn-2026-012&#34;&gt;Presigned payload integrity — SN-2026-012&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The generic authenticated handler path could verify a presigned request using a payload digest supplied via the &lt;code&gt;X-Amz-Content-Sha256&lt;/code&gt; header without verifying the actual request body bytes against that digest. A caller holding a presigned write URL could therefore substitute a different request body (the regression suite reproduces this against presigned &lt;code&gt;PutBucketPolicy&lt;/code&gt;).&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260916 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260916/</link>
        <pubDate>Wed, 16 Sep 2026 00:00:00 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260916/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-09-16T00-00-00Z&#34;&gt;RELEASE.2026-09-16T00-00-00Z&lt;/a&gt; · &lt;strong&gt;Package:&lt;/strong&gt; &lt;code&gt;20260916000000.0.0&lt;/code&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/e952aa78f10a2b77dd525a2b7e3143bcda0cd377&#34;&gt;&lt;code&gt;e952aa78f10a&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes since 20260913&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Adopt silo-pkg &lt;strong&gt;v3.14.1&lt;/strong&gt;, upstream minio-go &lt;strong&gt;v7.3.1-0.20260915093545-32e1f32cb176&lt;/strong&gt;, and &lt;strong&gt;JWX v3.3.0&lt;/strong&gt;. CopyObject retries and propagates S3 errors embedded in HTTP 200 responses, so a failed copy cannot authorize &lt;code&gt;mv&lt;/code&gt; to delete its source. JWX correctly escapes JSON field names.&lt;/li&gt;&#xA;&lt;li&gt;Report &lt;code&gt;mirror&lt;/code&gt; permission failures, including unreadable sources, rejected writes and failed local destination removals. Later objects continue; a finite mirror with failures exits &lt;strong&gt;1&lt;/strong&gt;. These per-object permission errors do not require &lt;code&gt;--skip-errors&lt;/code&gt; and do not restart an entire watch scan.&lt;/li&gt;&#xA;&lt;li&gt;Preserve the existing cancellation/retry path for listing and watcher failures. Persistent listing permission denial can still cause repeated scans; this release does not redesign that retry policy.&lt;/li&gt;&#xA;&lt;li&gt;Suppress normal final success statistics after a failed mirror. Explicit &lt;code&gt;--summary&lt;/code&gt; retains statistics: JSON uses &lt;strong&gt;&lt;code&gt;status: failure&lt;/code&gt;&lt;/strong&gt;; text error diagnostics remain on stderr. Transfers completed within one clock tick no longer produce infinite JSON speeds.&lt;/li&gt;&#xA;&lt;li&gt;Return failure for legalhold set/clear errors, partial recursive retention failures, and moves whose source deletion fails. &lt;code&gt;mv&lt;/code&gt; waits for deletion results; successful copies are not rolled back. Retention reports each failed object once instead of duplicate or misleading diagnostics.&lt;/li&gt;&#xA;&lt;li&gt;Reject empty retention durations and invalid &lt;code&gt;find --regex&lt;/code&gt; expressions with normal CLI errors instead of panics.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;upgrade&#34;&gt;Automation and upgrade notes&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Affected failure paths that returned 0 now return 1.&lt;/strong&gt; Check final exit status and error records. For &lt;code&gt;mv&lt;/code&gt;, a deletion failure may leave both the source and the successfully copied destination; inspect both before retrying.&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260913 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260913/</link>
        <pubDate>Sun, 13 Sep 2026 09:47:11 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260913/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-09-13T00-00-00Z&#34;&gt;RELEASE.2026-09-13T00-00-00Z&lt;/a&gt;&#xA;· &lt;strong&gt;Package:&lt;/strong&gt; &lt;code&gt;20260913000000.0.0&lt;/code&gt;&#xA;· &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/4f609a4da3bb8548446715867b68ab6c2d53a097&#34;&gt;&lt;code&gt;4f609a4d&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Changes since 20260903&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Preserve historical destination versions under &lt;code&gt;mirror --remove --watch&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Keep service-restart dry runs from executing a restart and make noninteractive&#xA;behavior explicit.&lt;/li&gt;&#xA;&lt;li&gt;Return failure for transfer and S3 Select errors, honor explicit checksums on&#xA;empty uploads, and retain &lt;code&gt;pipe&lt;/code&gt; JSON output when quiet mode is enabled.&lt;/li&gt;&#xA;&lt;li&gt;Accept on/off boolean environment values and repair CLI/JSON behavior across&#xA;supported platforms.&lt;/li&gt;&#xA;&lt;li&gt;Adopt &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.14.0/&#34;&gt;pkg v3.14.0&lt;/a&gt; and upstream SDK&#xA;&lt;code&gt;v7.3.1-0.20260910142817-60bd07042d49&lt;/code&gt;, refresh Go x/* and UBI dependencies,&#xA;and keep Go 1.27.1. NetBSD retains the go-systemd v22.6.0 portability pin.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The package retains the policy Deny/NotResource and bounded wildcard repairs&#xA;from pkg v3.13.3. Correctly preserved denies may now reject requests that relied&#xA;on lost clauses. Recover already-lost clauses from the original policy source.&lt;/p&gt;</description>
      </item>
    <item>
        <title>silo-pkg 3.14.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.14.0/</link>
        <pubDate>Sun, 13 Sep 2026 08:55:28 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.14.0/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.14.0&#34;&gt;v3.14.0&lt;/a&gt; was published on 2026-09-13 from commit &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/827f8109ff11bf6239a35d8d6d137cb5738539c3&#34;&gt;&lt;code&gt;827f8109&lt;/code&gt;&lt;/a&gt; under the module path &lt;code&gt;github.com/pgsty/silo-pkg/v3&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;migration&#34;&gt;Password-policy migration&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;This release updates authorization semantics for self-service password changes:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Policy.IsAllowedActions&lt;/code&gt; now allows &lt;code&gt;admin:ChangeMyPassword&lt;/code&gt; by default unless explicitly denied, while &lt;code&gt;admin:CreateUser&lt;/code&gt; still requires an explicit &lt;code&gt;Allow&lt;/code&gt;. On matching Server and Console builds, denying &lt;code&gt;admin:CreateUser&lt;/code&gt; alone no longer blocks a caller from changing their own password; denying &lt;code&gt;admin:ChangeMyPassword&lt;/code&gt; does.&lt;/li&gt;&#xA;&lt;li&gt;The built-in &lt;code&gt;readonly&lt;/code&gt; policy drops its previous &lt;code&gt;admin:CreateUser&lt;/code&gt; &lt;code&gt;Deny&lt;/code&gt; rule (so an explicit &lt;code&gt;admin:CreateUser&lt;/code&gt; &lt;code&gt;Allow&lt;/code&gt; granted by another attached policy can now take effect). The new &lt;code&gt;consolereadonly&lt;/code&gt; policy adds bucket listing and uses the same permission split. Neither built-in policy grants user-management permissions on its own.&lt;/li&gt;&#xA;&lt;li&gt;Existing custom policies and user-level policy overrides stored in the cluster are not rewritten automatically.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To keep the previous restriction that blocks both user administration and self-service password changes, include both &lt;code&gt;admin:CreateUser&lt;/code&gt; and &lt;code&gt;admin:ChangeMyPassword&lt;/code&gt; in the &lt;strong&gt;same &lt;code&gt;Deny&lt;/code&gt; statement&lt;/strong&gt; (preserving its original resource scope and conditions) before upgrading and throughout your rollback window—older Server builds do not enforce a standalone &lt;code&gt;admin:ChangeMyPassword&lt;/code&gt; deny on this endpoint. See the &lt;a href=&#34;https://silo.pgsty.com/compatibility/password-permissions/&#34;&gt;full password-permission migration guide&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-011: Fix and Release Status</title>
        <link>https://silo.pgsty.com/blog/security/20260913-signed-header-status/</link>
        <pubDate>Sun, 13 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20260913-signed-header-status/</guid>
        <description>&lt;p&gt;&lt;code&gt;SN-2026-011&lt;/code&gt; was fixed on &lt;code&gt;main&lt;/code&gt; starting with &lt;a href=&#34;https://github.com/pgsty/silo/commit/1233254309b15571f101b2b26d531951ceaeef1e&#34;&gt;&lt;code&gt;123325430&lt;/code&gt;&lt;/a&gt; on 2026-09-13 and shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;Server 20260916&lt;/a&gt;. Server &lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt; and earlier releases are affected (&lt;code&gt;silo-pkg v3.14.0&lt;/code&gt; and &lt;code&gt;mcli 20260913&lt;/code&gt; are client/library releases and do not patch existing Server deployments).&lt;/p&gt;&#xA;&lt;p&gt;A holder of a signed &lt;code&gt;PUT&lt;/code&gt; request could append an unsigned &lt;code&gt;x-amz-copy-source&lt;/code&gt; header and turn the authorized upload into a server-side &lt;code&gt;CopyObject&lt;/code&gt; of another object readable by the signing key. If the destination permits anonymous reads, the copied object&amp;rsquo;s contents become readable without holding the signing credentials. Both presigned URLs and &lt;code&gt;Authorization&lt;/code&gt;-header requests were affected.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Bucket Configuration Replication: Source Times, Deletions, and Deterministic Convergence</title>
        <link>https://silo.pgsty.com/blog/design/bucket-metadata-convergence/</link>
        <pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/bucket-metadata-convergence/</guid>
        <description>The engineering and design record for SILO #77 (shipped in Server 20260916, PR #180): why source timestamps, deletion tombstones, and the whole-bucket metadata lock are all required; how six configuration types handle duplicates and reordering; why rollout requires a default-off switch; and which alternatives were rejected.</description>
      </item>
    <item>
        <title>Replication Reliability: Delete Completion, MRF Visibility, and Resync Cancellation</title>
        <link>https://silo.pgsty.com/blog/design/replication-reliability/</link>
        <pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/replication-reliability/</guid>
        <description>The engineering record for SILO #153, #152, and #137: classify delete-marker purges accurately, expose drops from the bounded MRF queue, and bind resync cancellation to per-run contexts. Includes Round 2 on worker-side purge classification and persisted MRF marker recovery (PR #196), and Round 3 on exact-version purges, marker healing, and stale queued creations.</description>
      </item>
    <item>
        <title>SigV4 Signed-Header Coverage: Rejecting Unsigned x-amz-* Headers</title>
        <link>https://silo.pgsty.com/blog/design/signed-header-coverage/</link>
        <pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/signed-header-coverage/</guid>
        <description>A presigned or signed PUT authorized for a single object could be turned into a server-side copy of any object the signing key can read, because SigV4 verification only walked the list of signed header names without checking the x-amz-* headers that actually arrived, while the router dispatches CopyObject from an unsigned x-amz-copy-source header. This record documents SILO&amp;rsquo;s unsigned-header rejection boundary, the payload-hash exemption and signature-age derivation, the PutObjectTagging injection reorder, scope across signature modes, and verification evidence.</description>
      </item>
    <item>
        <title>SILO Console 2.4.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.4.0/</link>
        <pubDate>Tue, 08 Sep 2026 22:51:37 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.4.0/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.4.0&#34;&gt;v2.4.0&lt;/a&gt; was published&#xA;on 2026-09-08 from &lt;a href=&#34;https://github.com/pgsty/silo-console/commit/c103d08ec36aab8e08ba091d77b639158ce9f18f&#34;&gt;&lt;code&gt;c103d08e&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;changes&#34;&gt;Released behavior&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Object-browser directories load 100 entries per page by default, with choices&#xA;of 50, 100, 250, 500 and 1000. Each page uses one S3 continuation-token request.&#xA;Sorting, filtering and selection apply to the displayed page, not a complete&#xA;directory scan; there is no unbounded “all” mode.&lt;/li&gt;&#xA;&lt;li&gt;Version deletion stays bound to the selected object and directory deletion to&#xA;its prefix. Lifecycle edits preserve independent actions and unexposed&#xA;settings; replication rule deletion is saved consistently.&lt;/li&gt;&#xA;&lt;li&gt;Transient network failures preserve sessions. Empty versioning state,&#xA;malformed sidebar preferences and stale dropdown selections are handled.&lt;/li&gt;&#xA;&lt;li&gt;Embedded Console restores loopback proxy behavior when Server explicitly&#xA;enables the policy; standalone trust defaults remain unchanged.&lt;/li&gt;&#xA;&lt;li&gt;Dependencies include pkg &lt;strong&gt;v3.13.3&lt;/strong&gt;, MC source&#xA;&lt;strong&gt;&lt;code&gt;v0.0.0-20260908140805-c8aa5d25a63a&lt;/code&gt;&lt;/strong&gt;, and upstream SDK &lt;strong&gt;&lt;code&gt;0e78d3f18efe&lt;/code&gt;&lt;/strong&gt;.&#xA;This release consumed MC as source and did not itself publish a new mcli tag.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Correctly preserved Deny/NotResource clauses may reject requests that relied on&#xA;old deduplication defects. Restore already-lost clauses from the original policy&#xA;source. Embedders must copy the MC replacement from the&#xA;&lt;a href=&#34;https://github.com/pgsty/silo-console/blob/v2.4.0/README.md&#34;&gt;tagged README&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260903 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260903/</link>
        <pubDate>Thu, 03 Sep 2026 15:39:20 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260903/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-09-03 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-09-03T07-13-05Z&#34;&gt;RELEASE.2026-09-03T07-13-05Z&lt;/a&gt; · &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/commit/a2ef95c035d9ae7cc01469a63926900f1786f9e2&#34;&gt;&lt;code&gt;a2ef95c0&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Twenty-eight days after &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260806/&#34;&gt;mcli 20260806&lt;/a&gt;, this release carries everything the client accumulated since. The toolchain moves to Go 1.27.1 and the shared dependency stack is aligned with the SILO family, with &lt;code&gt;silo-pkg&lt;/code&gt; imported under its own module path so &lt;code&gt;go.mod&lt;/code&gt; says what the binary is built from. The first genuinely new command since the fork arrives — &lt;code&gt;mcli checksum verify&lt;/code&gt;, a read-only audit of stored S3 additional checksums against the bytes an endpoint actually returns. The panic that made &lt;code&gt;--json admin prometheus metrics&lt;/code&gt; unusable is fixed, as is the response double-close that could panic after &lt;code&gt;mcli sql&lt;/code&gt; had printed valid rows. Every path that can print a credential — &lt;code&gt;--debug&lt;/code&gt; traces, &lt;code&gt;admin trace&lt;/code&gt;, error messages, JSON error documents, checksum reports — was rewritten fail-closed. The release process changed as much as the code: artifacts come from a GPG-signed tag at the exact tip of &lt;code&gt;main&lt;/code&gt; with green CI for that commit, ship &lt;code&gt;LICENSE&lt;/code&gt;, &lt;code&gt;NOTICE&lt;/code&gt;, and a generated &lt;code&gt;CREDITS&lt;/code&gt; in every format, carry Sigstore build provenance, and land in an immutable GitHub release.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260903 Released</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260903/</link>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260903/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Version date:&lt;/strong&gt; 2026-09-03 · &lt;strong&gt;Published:&lt;/strong&gt; 2026-09-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-09-03T13-18-01Z&#34;&gt;&lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Previous release:&lt;/strong&gt; &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260806/&#34;&gt;RELEASE.2026-08-06T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO 20260903 is the security and correctness release following the first fully rebranded Silo release. It tightens core server invariants: client headers do not create replication authority, browser origins cannot trigger bucket-metadata I/O before authentication, concurrent bucket-configuration writers cannot silently overwrite one another, and authorization and checksum behavior more closely match AWS S3.&lt;/p&gt;&#xA;&lt;p&gt;This note consolidates the complete server, Console, shared-package, and client baseline delivered on 2026-09-03 relative to 20260806. Later fixes—including &lt;a href=&#34;https://silo.pgsty.com/blog/security/20260913-signed-header-status/&#34;&gt;SN-2026-011&lt;/a&gt;—shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260916/&#34;&gt;SILO 20260916&lt;/a&gt;, &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261015/&#34;&gt;SILO 20261015&lt;/a&gt;, and &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20261018/&#34;&gt;SILO 20261018&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SILO Server 20260903 Pre-release Review</title>
        <link>https://silo.pgsty.com/blog/design/server-release-readiness/</link>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/server-release-readiness/</guid>
        <description>The pre-release engineering review of every server change after 20260806: confirmed defects, fixes, complexity tradeoffs, validation evidence, explicit deferrals, and release gates. Includes the #116 restart-and-readback verification method.</description>
      </item>
    <item>
        <title>SILO 20260903 Security Notes: SN-2026-006 through 010</title>
        <link>https://silo.pgsty.com/blog/security/20260903-server-hardening/</link>
        <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/20260903-server-hardening/</guid>
        <description>&lt;p&gt;This bulletin covers five security findings fixed in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260903/&#34;&gt;SILO Server 20260903&lt;/a&gt; (&lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-09-03T13-18-01Z&#34;&gt;&lt;code&gt;RELEASE.2026-09-03T13-18-01Z&lt;/code&gt;&lt;/a&gt;), spanning customer-provided encryption keys (SSE-C), client-supplied replication headers, administrative status transitions, and explicit object-version deletion. &lt;code&gt;SN-2026-006&lt;/code&gt; through &lt;code&gt;SN-2026-010&lt;/code&gt; are SILO security-note identifiers grouping the pre-release audit findings inherited from the upstream &lt;code&gt;minio/minio&lt;/code&gt; codebase.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;wide expand td-table--wide&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;ID&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Required attacker position&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Security failure&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Released behavior&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;SN-2026-006&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Read access to a zero-byte SSE-C object&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;A wrong customer key was accepted because no data block was decrypted&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;The object key is authenticated; wrong keys return &lt;code&gt;403 AccessDenied&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;SN-2026-007&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Read access to an SSE-C object, or a client-supplied replication marker&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;GetObjectAttributes&lt;/code&gt; returned protected metadata without authenticating the customer key&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Ordinary requests need the correct key; only an authorized replication peer uses the replica exception&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;SN-2026-008&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Any authenticated principal able to invoke the affected read/write/delete operation&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Internal-looking headers granted replication-only effects without replication authorization&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Exact marker plus &lt;code&gt;s3:ReplicateObject&lt;/code&gt; or &lt;code&gt;s3:ReplicateDelete&lt;/code&gt; is required&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;SN-2026-009&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Authenticated admin API principal holding only one status action&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;The enable action authorized disable, and vice versa&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;The requested target state selects the required admin action&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;SN-2026-010&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Authenticated S3 principal with &lt;code&gt;s3:DeleteObject&lt;/code&gt; but not &lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;A caller could permanently delete an explicit version without the AWS-required action&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Explicit version deletion requires &lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;sn-2026-006&#34;&gt;SN-2026-006: zero-byte SSE-C key authentication&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Affected operations:&lt;/strong&gt; &lt;code&gt;GetObject&lt;/code&gt;, &lt;code&gt;HeadObject&lt;/code&gt;, &lt;code&gt;CopyObject&lt;/code&gt; source processing, and &lt;code&gt;GetObjectAttributes&lt;/code&gt; for zero-byte objects encrypted with SSE-C.&lt;br&gt;&#xA;&lt;strong&gt;Tracking:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/issues/82&#34;&gt;issue #82&lt;/a&gt;.&lt;br&gt;&#xA;&lt;strong&gt;Fixes:&lt;/strong&gt; &lt;code&gt;b73581b05&lt;/code&gt; and &lt;code&gt;c4fd97d0b&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Explicit Version Deletes Now Require DeleteObjectVersion</title>
        <link>https://silo.pgsty.com/blog/release/delete-object-version-authorization/</link>
        <pubDate>Wed, 02 Sep 2026 00:00:00 +0800</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/delete-object-version-authorization/</guid>
        <description>&lt;p&gt;Starting in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260903/&#34;&gt;Server 20260903&lt;/a&gt; (&lt;a href=&#34;https://github.com/pgsty/silo/pull/104&#34;&gt;pgsty/silo#104&lt;/a&gt;, tracking &lt;a href=&#34;https://github.com/pgsty/silo/issues/58&#34;&gt;issue #58&lt;/a&gt;), SILO maps object-delete authorization to the operation the request actually performs:&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;wide expand td-table--wide&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Request&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Required action&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;No &lt;code&gt;versionId&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;s3:DeleteObject&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Version UUID&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Explicit &lt;code&gt;versionId=null&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;DeleteObjects&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Applied independently to each XML entry&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Previously, SILO required &lt;code&gt;s3:DeleteObject&lt;/code&gt; for every delete operation and evaluated &lt;code&gt;s3:DeleteObjectVersion&lt;/code&gt; only as an explicit-deny check. A principal holding only &lt;code&gt;DeleteObject&lt;/code&gt; could permanently remove a specific historical version, whereas a least-privilege purge principal holding only &lt;code&gt;DeleteObjectVersion&lt;/code&gt; was denied.&lt;/p&gt;</description>
      </item>
    <item>
        <title>No I/O Before Auth, No Privilege From Headers</title>
        <link>https://silo.pgsty.com/blog/design/cors-replication-trust/</link>
        <pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/cors-replication-trust/</guid>
        <description>A pre-authentication CORS lookup turned arbitrary URL path segments into metadata I/O and cache entries, while a client-controlled replication marker acquired privileges across SSE-C reads, source timestamps, checksums, Object Lock, events, and deletes. This note defines SILO&amp;rsquo;s resident-only CORS hot path, two-level replication trust model, and post-signature sanitization boundary.</description>
      </item>
    <item>
        <title>ListMultipartUploads Behavior and Design Trade-Offs</title>
        <link>https://silo.pgsty.com/blog/design/list-multipart-uploads/</link>
        <pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/list-multipart-uploads/</guid>
        <description>Why public ListMultipartUploads returned to MinIO-compatible behavior in Server 20261018, what on-disk scanning cost on 16-drive erasure sets, and which multipart repairs were kept.</description>
      </item>
    <item>
        <title>silo-pkg 3.13.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.13.0/</link>
        <pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.13.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release date:&lt;/strong&gt; 2026-08-30 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.13.0&#34;&gt;v3.13.0&lt;/a&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/215f116ec25120ce365c79bce4096cd7665b2c1e&#34;&gt;&lt;code&gt;215f116&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg&#34;&gt;pgsty/silo-pkg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Version 3.13.0 is a breaking release: the module adopts &lt;code&gt;github.com/pgsty/silo-pkg/v3&lt;/code&gt; as its own import path and retires the &lt;code&gt;pgsty/silo-go&lt;/code&gt; fork in favour of upstream &lt;code&gt;minio-go&lt;/code&gt;. All maintained SILO components (&lt;code&gt;silo&lt;/code&gt;, &lt;code&gt;silo-console&lt;/code&gt;, and &lt;code&gt;mcli&lt;/code&gt;) migrated to this module path in the 2026-09-03 / v2.4.0 release wave; see the &lt;a href=&#34;https://silo.pgsty.com/compatibility/versions/&#34;&gt;component matrix&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;glance&#34;&gt;Release at a Glance&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Published:&lt;/strong&gt; the &lt;code&gt;silo-pkg v3.13.0&lt;/code&gt; tag and GitHub Release, declaring &lt;code&gt;module github.com/pgsty/silo-pkg/v3&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Retired:&lt;/strong&gt; the &lt;code&gt;github.com/minio/pkg/v3&lt;/code&gt; module identity and the &lt;code&gt;replace&lt;/code&gt; directive every consumer had to repeat.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Retired:&lt;/strong&gt; the &lt;code&gt;github.com/pgsty/silo-go/v7&lt;/code&gt; fork; this release requires upstream &lt;code&gt;minio-go&lt;/code&gt; directly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unchanged:&lt;/strong&gt; every package, symbol, and behaviour. Only the path they are imported from moved.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Downstream adoption:&lt;/strong&gt; completed across &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260903/&#34;&gt;SILO 20260903&lt;/a&gt;, &lt;a href=&#34;https://silo.pgsty.com/blog/release/console-2.4.0/&#34;&gt;Console v2.4.0&lt;/a&gt;, and &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260903/&#34;&gt;mcli 20260903&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;Why the Path Moved&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The fork kept upstream&amp;rsquo;s &lt;code&gt;github.com/minio/pkg/v3&lt;/code&gt; path so it stayed a drop-in replacement, selectable with one &lt;code&gt;replace&lt;/code&gt; directive. Go does not inherit &lt;code&gt;replace&lt;/code&gt; directives from dependency modules, and three costs came due while preparing the next SILO server release.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Read-Only Checksum Audit and Reliable CLI Output</title>
        <link>https://silo.pgsty.com/blog/design/checksum-verify/</link>
        <pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/checksum-verify/</guid>
        <description>MCLI can audit stored S3 checksums against logical object bytes without mutating data. Shipped in mcli 20260903 (PR #8, PR #13, #5), this record defines candidate selection, classification, report and exit semantics, and the non-TTY output contract required by pipelines and CI.</description>
      </item>
    <item>
        <title>Two SSE-C Keys, One CopyObject Response</title>
        <link>https://silo.pgsty.com/blog/design/copyobject-ssec-checksum-response/</link>
        <pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/copyobject-ssec-checksum-response/</guid>
        <description>CopyObject can carry one SSE-C key for the source and another for the destination. SILO stored the destination checksum under the destination key but tried to decrypt it for the response with the source key, silently omitting checksum fields.</description>
      </item>
    <item>
        <title>Config Environment Files Are Not Shell Scripts</title>
        <link>https://silo.pgsty.com/blog/design/config-env-file/</link>
        <pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/config-env-file/</guid>
        <description>MINIO_CONFIG_ENV_FILE is parsed directly by SILO, not sourced by a shell. A shell-identifier check rejected valid named configuration targets such as my-hook. This note defines the key grammar, whitespace and quoting rules, failure behavior, and the #65 restart trap.</description>
      </item>
    <item>
        <title>BadDigest, InvalidRequest, and the CompleteMultipartUpload Checksum Contract</title>
        <link>https://silo.pgsty.com/blog/design/complete-multipart-checksum-errors/</link>
        <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/complete-multipart-checksum-errors/</guid>
        <description>CompleteMultipartUpload validates stored checksum types and returns operation-specific S3 error codes. CRC64NVME plus COMPOSITE is rejected in Server 20260903, and streaming-checksum validation shipped in Server 20260916.</description>
      </item>
    <item>
        <title>A ListObjects Shortcut Must Not Turn a Missing Bucket into an Empty One</title>
        <link>https://silo.pgsty.com/blog/design/listobjects-nosuchbucket/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/listobjects-nosuchbucket/</guid>
        <description>Three ListObjects shortcuts return EOF before touching storage, causing a missing bucket to appear as an empty listing. This record explains the SILO #32 / PR #37 regression, S3 compatibility value, minimal shortcut-only existence check, cluster fan-out cost, derived risks, and acceptance decision.</description>
      </item>
    <item>
        <title>One Endpoint, Two Privileges: Separating User and Group Status</title>
        <link>https://silo.pgsty.com/blog/design/user-status-permissions/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/user-status-permissions/</guid>
        <description>Shared user and group status endpoints historically checked their Enable action even for disable requests. This record explains the least-privilege defect, SILO&amp;rsquo;s strict target-state authorization design, the user repair merged through PR #73, the group follow-up, four-way IAM tests, and migration guidance.</description>
      </item>
    <item>
        <title>Conditional DELETE: One Condition, One Logical Object</title>
        <link>https://silo.pgsty.com/blog/design/conditional-delete/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/conditional-delete/</guid>
        <description>Single-object If-Match DELETE evaluates the addressed version once under the outer multi-pool lock before mutating storage. Batch DeleteObjects ETags, extra GetObject checks, and recursive prefix guards remain outside this contract.</description>
      </item>
    <item>
        <title>Silo Console 2.2.0 Release Notes</title>
        <link>https://silo.pgsty.com/blog/release/console-2.2.0/</link>
        <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.2.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-26 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.2.0&#34;&gt;&lt;code&gt;v2.2.0&lt;/code&gt;&lt;/a&gt; (&lt;a href=&#34;https://github.com/pgsty/silo-console/commit/7dc4258a6a33b6e01b5b3bae8a0fd63f02b3bad8&#34;&gt;&lt;code&gt;7dc4258a6&lt;/code&gt;&lt;/a&gt;) · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;pgsty/silo-console&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO Console 2.2.0 adds a bounded text preview for logs and structured text, tightens download error handling so truncated archives cannot pass as complete, fixes table-action permission gating, splits user status updates from group membership edits, and validates database notification DSNs and IAM policy documents before writing them to the server.&lt;/p&gt;&#xA;&lt;p&gt;Underneath, the dependency stack moves to Go 1.27.0 and onto the maintained SILO packages: &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.12.1&#34;&gt;&lt;code&gt;pgsty/silo-pkg&lt;/code&gt; 3.12.1&lt;/a&gt; replaces upstream &lt;code&gt;minio/pkg&lt;/code&gt;, &lt;code&gt;pgsty/mc&lt;/code&gt; replaces upstream &lt;code&gt;mc&lt;/code&gt; as a library, &lt;code&gt;minio-go&lt;/code&gt; moves to 7.3.0, and the etcd client line moves to 3.7.1, closing &lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-6107&#34;&gt;CVE-2026-73500&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Why CompleteMultipartUpload Must Return ChecksumType: Review of PR #57</title>
        <link>https://silo.pgsty.com/blog/design/complete-multipart-checksum-type/</link>
        <pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/complete-multipart-checksum-type/</guid>
        <description>CompleteMultipartUpload now returns the stored ChecksumType in its XML response body. Included in Server 20260903 alongside UploadPart and completion validation repairs.</description>
      </item>
    <item>
        <title>Optional Checksums, Mandatory Failure: Repairing UploadPart and UploadPartCopy Compatibility</title>
        <link>https://silo.pgsty.com/blog/design/uploadpart-checksum/</link>
        <pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/uploadpart-checksum/</guid>
        <description>SILO required every part in a checksum-enabled multipart upload to carry a per-part checksum. That rejected ordinary UploadPart requests that omitted an optional header and made UploadPartCopy unusable. This record covers discovery, AWS and AIStor research, rejected designs, the one-pass plaintext solution, the compatibility-baseline blocker, design review, and the consistency contract for follow-up repairs.</description>
      </item>
    <item>
        <title>silo-pkg 3.12.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.12.0/</link>
        <pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.12.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release date:&lt;/strong&gt; 2026-08-24 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.12.0&#34;&gt;v3.12.0&lt;/a&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/2b087a11cf3547313a2e79275f52a0654c212e58&#34;&gt;&lt;code&gt;2b087a1&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg&#34;&gt;pgsty/silo-pkg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Version 3.12.0 is a main-line minor release with two themes: a policy-write guard for ARN prefixes that name no resource, and the maintained Go 1.27 / etcd 3.7 dependency baseline. It adds two exported inspection/validation methods, raises the verified consumer floor to Go 1.26, and is the first &lt;code&gt;silo-pkg&lt;/code&gt; release whose strict validation path is enabled by the SILO server (&lt;code&gt;eee05a17c&lt;/code&gt;, &lt;a href=&#34;https://silo.pgsty.com/about/security-advisories/#sn-2026-005&#34;&gt;&lt;code&gt;SN-2026-005&lt;/code&gt;&lt;/a&gt;, shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260903/&#34;&gt;SILO 20260903&lt;/a&gt;) for named-policy and service-account policy writes.&lt;/p&gt;</description>
      </item>
    <item>
        <title>When the Total Is Unknown: Folder Download Progress</title>
        <link>https://silo.pgsty.com/blog/design/dir-percentage/</link>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/dir-percentage/</guid>
        <description>Design for replacing NaN% with truthful indeterminate progress when SILO Console downloads a streamed folder ZIP, without changing the server API or ordinary file downloads.</description>
      </item>
    <item>
        <title>Preview Text, Never Execute It: SILO Console Text Preview Design</title>
        <link>https://silo.pgsty.com/blog/design/console-text-preview/</link>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/console-text-preview/</guid>
        <description>Design for previewing small log, text, JSON, and XML objects in SILO Console as bounded, strict UTF-8 text—never as a same-origin executable document.</description>
      </item>
    <item>
        <title>DSN-Only Database Notifications: A Compatibility Boundary for #53</title>
        <link>https://silo.pgsty.com/blog/design/notify-url/</link>
        <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/design/notify-url/</guid>
        <description>SILO retains PostgreSQL and MySQL notification targets while standardizing their configuration on complete connection strings. Pre-KV discrete database fields are an unsupported migration input and abort server startup with an explicit error instead of silently disabling every bucket notification.</description>
      </item>
    <item>
        <title>Silo 20260806 Released</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260806/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260806/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; &lt;code&gt;RELEASE.2026-08-06T00-00-00Z&lt;/code&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;code&gt;3be10fcc1a44f6620ded0bd303461f9d688cca23&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO 20260806 is the &lt;strong&gt;first release published under the Silo name&lt;/strong&gt;. The previous release, &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260804/&#34;&gt;20260804&lt;/a&gt;, was the last one delivered as &lt;code&gt;pgsty/minio&lt;/code&gt;; this release completes the cutover to &lt;a href=&#34;https://github.com/pgsty/silo&#34;&gt;&lt;code&gt;github.com/pgsty/silo&lt;/code&gt;&lt;/a&gt; and renames every delivery surface — binary, packages, container images, systemd unit, Helm chart — while deliberately preserving every wire and configuration surface a MinIO deployment depends on. On top of the rename it adds native health checking (&lt;code&gt;silo healthcheck&lt;/code&gt;), a single-binary &lt;strong&gt;distroless&lt;/strong&gt; container image pilot, complete license-compliance materials in every artifact, and a release pipeline gated on compatibility snapshots and build provenance.&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260806 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260806/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260806/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-06 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-08-06T00-00-00Z&#34;&gt;RELEASE.2026-08-06T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Two days after &lt;a href=&#34;https://silo.pgsty.com/blog/release/mcli-20260804/&#34;&gt;mcli 20260804&lt;/a&gt;, this release completes the client&amp;rsquo;s transition to the Silo identity. It is deliberately a pure rebranding and lockdown release: &lt;code&gt;--version&lt;/code&gt; and &lt;code&gt;--help&lt;/code&gt; now present the Silo client, every remaining path to MinIO&amp;rsquo;s SUBNET service is disabled at build time, the embedded vendor encryption key is removed from the diagnostics tooling, and the contribution policy moves to no-CLA with a mandatory DCO sign-off. There are &lt;strong&gt;no dependency changes and no protocol changes&lt;/strong&gt; in this cycle — &lt;code&gt;go.mod&lt;/code&gt; is byte-for-byte identical to 20260804 — so the regression surface is confined to text, command gating, and CI.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Console 2.1.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.1.0/</link>
        <pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.1.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-06 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.1.0&#34;&gt;v2.1.0&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;pgsty/silo-console&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO Console 2.1.0 is the first feature release after the independent 2.0.0. It delivers three main changes:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bilingual interface&lt;/strong&gt; — every console screen, help topic, and documentation link now renders in English or Chinese behind a toggle on every page, with zero new runtime dependencies;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Metrics V3 dashboard&lt;/strong&gt; — the dashboard moves from MinIO Metrics V2 names onto V3, with explicit handling for the semantics V3 changed underneath it;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Edge-case correctness fixes&lt;/strong&gt; — a select-all that matches what a bulk action will delete, placeholders that handle object names containing &lt;code&gt;$&amp;amp;&lt;/code&gt;, timestamps with an explicit timezone, and empty metrics that display &amp;ldquo;no data&amp;rdquo; rather than a fabricated &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This is a &lt;strong&gt;minor release&lt;/strong&gt;. No environment variable, module path, API contract, binary name, or data layout changes. Upgrading is a binary or image swap.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260804 Released</title>
        <link>https://silo.pgsty.com/blog/release/silo-20260804/</link>
        <pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/silo-20260804/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; &lt;code&gt;RELEASE.2026-08-04T00-00-00Z&lt;/code&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;code&gt;d88f46ccee345a9c2fabe2d221d9a9e56bc11aec&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO 20260804 is a security, correctness, and release-engineering update to the &lt;code&gt;pgsty/minio&lt;/code&gt; community fork. It completes the internode storage-containment work begun with CVE-2026-42600, prevents request-controlled values from impersonating server-calculated S3/IAM policy conditions, restores streaming flush behavior, fixes several multipart and versioning edge cases, hardens notification configuration migration, moves the build baseline to Go 1.26.5, and connects the server to the SILO-maintained Console, shared package, and &lt;code&gt;mcli&lt;/code&gt; releases. The release pipeline was rebuilt to produce reproducible binaries and GPG-signed packages.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-019: Notification Keyspace Registration and Validation Redaction</title>
        <link>https://silo.pgsty.com/blog/security/notify-keyspace-registration/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/notify-keyspace-registration/</guid>
        <description>&lt;p&gt;&lt;strong&gt;&lt;code&gt;SN-2026-019&lt;/code&gt;&lt;/strong&gt; covers a class of notification configuration defects fixed in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;code&gt;162ded343&lt;/code&gt; and &lt;code&gt;672c07a0f&lt;/code&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/issues/39&#34;&gt;&lt;code&gt;pgsty/silo#39&lt;/code&gt;&lt;/a&gt;): notification parser and legacy-migration paths read or wrote KVS configuration keys that were missing from &lt;code&gt;Default*KVS&lt;/code&gt;, while &lt;code&gt;CheckValidKeys&lt;/code&gt; echoed raw key values in validation errors and &lt;code&gt;FetchEnabledTargets&lt;/code&gt; aborted all active notification targets on the first validation failure. In &lt;a href=&#34;https://silo.pgsty.com/blog/design/notify-url/&#34;&gt;Server 20260903&lt;/a&gt; (&lt;code&gt;f1ba68358&lt;/code&gt;), the discrete PostgreSQL and MySQL host/credential keys uncovered by our AST audit were retired in favor of &lt;code&gt;connection_string&lt;/code&gt; and &lt;code&gt;dsn_string&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-018: Client Source Address Trust, Forwarded Headers, and aws:SourceIp</title>
        <link>https://silo.pgsty.com/blog/security/source-address-trust/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/source-address-trust/</guid>
        <description>&lt;p&gt;&lt;strong&gt;&lt;code&gt;SN-2026-018&lt;/code&gt;&lt;/strong&gt; addresses client source-IP spoofing across &lt;code&gt;aws:SourceIp&lt;/code&gt; IAM conditions, audit logs, bucket notification events, and admin HTTP traces in &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.12.0&#34;&gt;silo-pkg &lt;code&gt;v3.12.0&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;62f326d&lt;/code&gt;) and &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;code&gt;00a8171cb&lt;/code&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/issues/41&#34;&gt;&lt;code&gt;pgsty/silo#41&lt;/code&gt;&lt;/a&gt;): &lt;code&gt;handlers.GetSourceIP&lt;/code&gt; previously trusted &lt;code&gt;X-Forwarded-For&lt;/code&gt;, &lt;code&gt;X-Real-IP&lt;/code&gt;, and RFC 7239 &lt;code&gt;Forwarded&lt;/code&gt; from any TCP peer by default, and setting &lt;code&gt;_MINIO_API_XFF_HEADER=off&lt;/code&gt; only disabled &lt;code&gt;X-Forwarded-For&lt;/code&gt; while continuing to trust client-supplied &lt;code&gt;X-Real-IP&lt;/code&gt; and &lt;code&gt;Forwarded&lt;/code&gt; headers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Conclusions first&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;_MINIO_API_XFF_HEADER=off&lt;/code&gt; left two headers wide open&lt;/strong&gt;: Setting &lt;code&gt;_MINIO_API_XFF_HEADER=off&lt;/code&gt; skipped &lt;code&gt;X-Forwarded-For&lt;/code&gt;, but &lt;code&gt;handlers.GetSourceIP&lt;/code&gt; immediately fell through to &lt;code&gt;X-Real-IP&lt;/code&gt; and &lt;code&gt;Forwarded&lt;/code&gt;. Any direct client could forge &lt;code&gt;X-Real-IP: 10.0.0.1&lt;/code&gt; to satisfy &lt;code&gt;aws:SourceIp&lt;/code&gt; policies.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;ldquo;Put a reverse proxy in front&amp;rdquo; is often insufficient&lt;/strong&gt;: Even behind an ingress proxy, if the proxy appends to &lt;code&gt;X-Forwarded-For&lt;/code&gt; (&lt;code&gt;proxy_add_x_forwarded_for&lt;/code&gt;) while the server reads the left-most IP, or if internal pods can reach the server&amp;rsquo;s ClusterIP directly, an attacker can still spoof &lt;code&gt;aws:SourceIp&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;MINIO_API_TRUSTED_PROXIES&lt;/code&gt; provides explicit right-to-left chain verification&lt;/strong&gt;: &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; introduces &lt;code&gt;MINIO_API_TRUSTED_PROXIES&lt;/code&gt; (&lt;code&gt;off&lt;/code&gt; / &lt;code&gt;none&lt;/code&gt;, CIDR/IP list, or &lt;code&gt;all&lt;/code&gt; / &lt;code&gt;*&lt;/code&gt; for legacy behavior) and walks &lt;code&gt;X-Forwarded-For&lt;/code&gt; / &lt;code&gt;Forwarded&lt;/code&gt; from right to left, stopping at the first hop not in the trusted proxy set.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;consumers&#34;&gt;Every Consumer of &lt;code&gt;handlers.GetSourceIP&lt;/code&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In SILO, &lt;code&gt;handlers.GetSourceIP(r)&lt;/code&gt; (&lt;code&gt;silo-pkg/handlers/proxy.go&lt;/code&gt;) is the single function responsible for extracting the client IP address from an incoming &lt;code&gt;*http.Request&lt;/code&gt;. Four security- and observability-sensitive subsystems depend on its return value:&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-004: Object-Scoped Policy Grants Reaching Bucket Mutations</title>
        <link>https://silo.pgsty.com/blog/security/object-grant-bucket-reach/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/object-grant-bucket-reach/</guid>
        <description>&lt;p&gt;&lt;strong&gt;&lt;code&gt;SN-2026-004&lt;/code&gt;&lt;/strong&gt; fixes an IAM resource-matching flaw in &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.11.0&#34;&gt;silo-pkg &lt;code&gt;v3.11.0&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;3c24ad1&lt;/code&gt;, &lt;code&gt;1f97549&lt;/code&gt;, &lt;code&gt;d8b1fa7&lt;/code&gt;) and &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;code&gt;97b7d2804&lt;/code&gt;; upstream reference &lt;a href=&#34;https://github.com/minio/minio/issues/20449&#34;&gt;&lt;code&gt;minio/minio#20449&lt;/code&gt;&lt;/a&gt;): when evaluating bucket-level S3 requests (&lt;code&gt;args.ObjectName == &amp;quot;&amp;quot;&lt;/code&gt;), &lt;code&gt;Statement.IsAllowed&lt;/code&gt; synthesized &lt;code&gt;&amp;quot;bucket/&amp;quot;&lt;/code&gt; as the target resource string, allowing object-scoped wildcard grants such as &lt;code&gt;Allow s3:* on arn:aws:s3:::bucket/*&lt;/code&gt; to authorize sensitive bucket-level mutations including &lt;code&gt;s3:PutBucketPolicy&lt;/code&gt; and &lt;code&gt;s3:DeleteBucket&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Conclusions first&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Root cause&lt;/strong&gt;: When &lt;code&gt;args.ObjectName&lt;/code&gt; was empty, &lt;code&gt;Statement.IsAllowed&lt;/code&gt; appended &lt;code&gt;&#39;/&#39;&lt;/code&gt; to the bucket name (&lt;code&gt;&amp;quot;bucket/&amp;quot;&lt;/code&gt;), which matched the glob &lt;code&gt;&amp;quot;arn:aws:s3:::bucket/*&amp;quot;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Privilege escalation&lt;/strong&gt;: A tenant principal given &lt;code&gt;Allow s3:* on arn:aws:s3:::tenant/*&lt;/code&gt; (a common shorthand for &amp;ldquo;all object operations inside this bucket&amp;rdquo;) could call &lt;code&gt;PutBucketPolicy&lt;/code&gt; to grant &lt;code&gt;Principal: &amp;quot;*&amp;quot;&lt;/code&gt; on the bucket, or call &lt;code&gt;DeleteBucket&lt;/code&gt;, &lt;code&gt;PutReplicationConfiguration&lt;/code&gt;, &lt;code&gt;PutBucketLifecycle&lt;/code&gt;, &lt;code&gt;PutBucketVersioning&lt;/code&gt;, or &lt;code&gt;PutBucketObjectLockConfiguration&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Why a targeted fix was required&lt;/strong&gt;: Simply dropping the trailing &lt;code&gt;&#39;/&#39;&lt;/code&gt; for all empty-object checks broke 11 existing STS &lt;code&gt;ListBucket&lt;/code&gt; tests and weakened &lt;code&gt;Deny s3:* on arn:aws:s3:::bucket/*&lt;/code&gt; policies.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Targeted boundary&lt;/strong&gt;: For the 12 sensitive bucket-mutation actions on &lt;code&gt;Allow&lt;/code&gt; statements (&lt;code&gt;!legacyBucketResourceMatch &amp;amp;&amp;amp; statement.Effect == Allow &amp;amp;&amp;amp; isSensitiveBucketMutation(args.Action)&lt;/code&gt;), the resource pattern must match &lt;strong&gt;both&lt;/strong&gt; &lt;code&gt;&amp;quot;bucket&amp;quot;&lt;/code&gt; and &lt;code&gt;&amp;quot;bucket/&amp;quot;&lt;/code&gt;. Setting &lt;code&gt;MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH=on&lt;/code&gt; restores pre-&lt;code&gt;20260804&lt;/code&gt; matching if a deployment temporarily relies on legacy policies.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-defect&#34;&gt;Why &lt;code&gt;arn:aws:s3:::bucket/*&lt;/code&gt; Matched Bucket Requests&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;code&gt;silo-pkg/bucket/policy/statement.go&lt;/code&gt; (and &lt;code&gt;iam/policy/statement.go&lt;/code&gt;), &lt;code&gt;Statement.IsAllowed(args Args)&lt;/code&gt; constructed the resource string to test against &lt;code&gt;Statement.Resources&lt;/code&gt; as follows:&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-003: s3:versionid Condition Evaluation and Request Condition Hardening</title>
        <link>https://silo.pgsty.com/blog/security/s3-versionid-conditions/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/s3-versionid-conditions/</guid>
        <description>&lt;p&gt;&lt;strong&gt;&lt;code&gt;SN-2026-003&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;SN-2026-005&lt;/code&gt;&lt;/strong&gt; cover a set of S3 IAM policy evaluation fixes shipped in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;code&gt;80c2c9d03&lt;/code&gt;, &lt;code&gt;2f55347f7&lt;/code&gt;, &lt;code&gt;eee05a17c&lt;/code&gt;, and &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.12.0&#34;&gt;silo-pkg &lt;code&gt;v3.12.0&lt;/code&gt;&lt;/a&gt; commit &lt;code&gt;2b087a1&lt;/code&gt;; &lt;a href=&#34;https://github.com/pgsty/silo/issues/40&#34;&gt;&lt;code&gt;pgsty/silo#40&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/issues/53&#34;&gt;&lt;code&gt;pgsty/silo#53&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SN-2026-003&lt;/code&gt; (&lt;code&gt;80c2c9d03&lt;/code&gt;)&lt;/strong&gt;: &lt;code&gt;getConditionValues&lt;/code&gt; populated &lt;code&gt;args.ConditionValues[&amp;quot;versionid&amp;quot;] = []string{&amp;quot;&amp;quot;}&lt;/code&gt; even when a request carried no &lt;code&gt;versionId&lt;/code&gt;, causing IAM &lt;code&gt;Null&lt;/code&gt; conditions on &lt;code&gt;s3:versionid&lt;/code&gt; to evaluate as if the key were always present; fixing that alone would have opened a &lt;code&gt;DeleteObjects&lt;/code&gt; XML &lt;code&gt;&amp;lt;VersionId&amp;gt;&lt;/code&gt; bypass without per-entry rebinding in &lt;code&gt;authorizeRequestWithTags&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Condition-source isolation (&lt;code&gt;2f55347f7&lt;/code&gt;)&lt;/strong&gt;: Separated query parameters, HTTP headers, internal server keys, and &lt;code&gt;s3:ExistingObjectTag/&amp;lt;key&amp;gt;&lt;/code&gt; vs. &lt;code&gt;s3:RequestObjectTag/&amp;lt;key&amp;gt;&lt;/code&gt; so untrusted query strings or headers cannot spoof internal condition keys.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SN-2026-005&lt;/code&gt; (&lt;code&gt;2b087a1&lt;/code&gt; / &lt;code&gt;eee05a17c&lt;/code&gt;)&lt;/strong&gt;: Added &lt;code&gt;ParseConfigStrict&lt;/code&gt; to reject degenerate bare resource prefixes (&lt;code&gt;&amp;quot;arn:aws:s3:::&amp;quot;&lt;/code&gt; and &lt;code&gt;&amp;quot;*arn:aws:s3:::&amp;quot;&lt;/code&gt;) when writing IAM and bucket policies.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Conclusions first&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unconditional empty slice inverted &lt;code&gt;Null&lt;/code&gt; checks&lt;/strong&gt;: In &lt;code&gt;silo-pkg&lt;/code&gt;, &lt;code&gt;nullFunc.evaluate&lt;/code&gt; tests whether a condition key is absent by checking &lt;code&gt;len(rvalues) == 0&lt;/code&gt;. Because &lt;code&gt;getConditionValues&lt;/code&gt; unconditionally assigned &lt;code&gt;args.ConditionValues[&amp;quot;versionid&amp;quot;] = []string{vid}&lt;/code&gt; (producing &lt;code&gt;[]string{&amp;quot;&amp;quot;}&lt;/code&gt; when &lt;code&gt;vid == &amp;quot;&amp;quot;&lt;/code&gt;), &lt;code&gt;len(rvalues)&lt;/code&gt; was always &lt;code&gt;1&lt;/code&gt;—making &lt;code&gt;Null: {&amp;quot;s3:versionid&amp;quot;: &amp;quot;true&amp;quot;}&lt;/code&gt; always &lt;code&gt;false&lt;/code&gt; and &lt;code&gt;Null: {&amp;quot;s3:versionid&amp;quot;: &amp;quot;false&amp;quot;}&lt;/code&gt; always &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fixing &lt;code&gt;getConditionValues&lt;/code&gt; alone breaks &lt;code&gt;DeleteObjects&lt;/code&gt;&lt;/strong&gt;: In multi-object &lt;code&gt;DeleteObjects&lt;/code&gt; (&lt;code&gt;POST /?delete&lt;/code&gt;), the target &lt;code&gt;&amp;lt;VersionId&amp;gt;&lt;/code&gt; is inside each XML &lt;code&gt;&amp;lt;Object&amp;gt;&lt;/code&gt; element, not in the URL query string. If &lt;code&gt;getConditionValues&lt;/code&gt; simply omits &lt;code&gt;&amp;quot;versionid&amp;quot;&lt;/code&gt; when the URL query has no &lt;code&gt;versionId&lt;/code&gt;, a policy denying versioned deletes (&lt;code&gt;Deny s3:DeleteObjectVersion&lt;/code&gt; or &lt;code&gt;Condition: {&amp;quot;Null&amp;quot;: {&amp;quot;s3:versionid&amp;quot;: &amp;quot;false&amp;quot;}}&lt;/code&gt;) would fail to match &lt;code&gt;DeleteObjects&lt;/code&gt; XML entries unless &lt;code&gt;authorizeRequestWithTags&lt;/code&gt; rebinds &lt;code&gt;ConditionValues[&amp;quot;versionid&amp;quot;]&lt;/code&gt; from &lt;code&gt;ReqInfo.VersionID&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Whitespace trimming closes a &lt;code&gt;Deny&lt;/code&gt; bypass&lt;/strong&gt;: Version-reading handlers called &lt;code&gt;strings.TrimSpace(r.URL.Query().Get(&amp;quot;versionId&amp;quot;))&lt;/code&gt;, whereas &lt;code&gt;getConditionValues&lt;/code&gt; did not trim whitespace. A request with &lt;code&gt;?versionId=V%20&lt;/code&gt; bypassed &lt;code&gt;Deny StringEquals {&amp;quot;s3:versionid&amp;quot;: &amp;quot;V&amp;quot;}&lt;/code&gt; while still deleting or reading version &lt;code&gt;V&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-defect&#34;&gt;Why &lt;code&gt;Null&lt;/code&gt; on &lt;code&gt;s3:versionid&lt;/code&gt; Was Inverted&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;code&gt;silo-pkg/bucket/policy/condition/nullfunc.go&lt;/code&gt;, the IAM &lt;code&gt;Null&lt;/code&gt; condition operator checks whether a condition key is missing from the request context:&lt;/p&gt;</description>
      </item>
    <item>
        <title>mcli 20260804 Released</title>
        <link>https://silo.pgsty.com/blog/release/mcli-20260804/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/mcli-20260804/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/mc/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;RELEASE.2026-08-04T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the first release of the &lt;code&gt;pgsty/mc&lt;/code&gt; community fork since &lt;a href=&#34;https://silo.pgsty.com/blog/release/20260417/&#34;&gt;20260417&lt;/a&gt;. It fixes a credential leak in debug logging, severs every remaining connection between the client and upstream release channels, moves containers and packages onto artifacts this fork builds itself, and migrates packaging from MinIO&amp;rsquo;s &lt;code&gt;pkger&lt;/code&gt; to standard nFPM — with GPG-signed RPMs for the first time.&lt;/p&gt;&#xA;&lt;p&gt;Upstream &lt;code&gt;minio/mc&lt;/code&gt; was archived in July 2026. Its final commit, &lt;a href=&#34;https://github.com/minio/mc/commit/77f82e18b5401a65958f1619df6ebb994634bd88&#34;&gt;&lt;code&gt;77f82e18&lt;/code&gt;&lt;/a&gt;, is exactly this fork&amp;rsquo;s base, and upstream never cut a release containing it — so this build is strictly newer than any official &lt;code&gt;mc&lt;/code&gt; binary ever published.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Pkg 3.11.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/pkg-3.11.0/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/pkg-3.11.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Release date:&lt;/strong&gt; 2026-08-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/releases/tag/v3.11.0&#34;&gt;v3.11.0&lt;/a&gt; · &lt;strong&gt;Commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg/commit/d8b1fa7&#34;&gt;&lt;code&gt;d8b1fa7&lt;/code&gt;&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-pkg&#34;&gt;pgsty/silo-pkg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the fork&amp;rsquo;s &lt;strong&gt;first pinned release&lt;/strong&gt;. It restores the IAM bucket/object resource boundary reported as upstream &lt;a href=&#34;https://github.com/minio/minio/issues/20449&#34;&gt;minio/minio#20449&lt;/a&gt;: a policy condition-key bypass fix, three LDAP connection defects, a certificate watcher leak, a seeded-RNG defect, and the module&amp;rsquo;s real minimum Go version.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--warning&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-triangle-exclamation&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Warning&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Two things to check before upgrading&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;This release tightens authorization.&lt;/strong&gt; Twelve bucket-level write actions are no longer reachable through an object-only resource pattern such as &lt;code&gt;arn:aws:s3:::bucket/*&lt;/code&gt;. If you write your own bucket-scoped policies, read &lt;a href=&#34;https://silo.pgsty.com/blog/release/pkg-3.11.0/#bucket-boundary&#34;&gt;The IAM bucket/object boundary&lt;/a&gt; — the fix is one line of policy for anyone affected, and &lt;code&gt;MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH=on&lt;/code&gt; restores the previous behaviour in full.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Pair with the server condition-key update.&lt;/strong&gt; The policy lookup change and the server changes that reserve internal condition-key names each cover one half of the condition-key fix. The companion server work (&lt;code&gt;2f55347f7&lt;/code&gt;) ships in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260804/&#34;&gt;SILO 20260804&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;what-is-this&#34;&gt;What This Repository Is&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;silo-pkg&lt;/code&gt; is a maintained fork of &lt;a href=&#34;https://github.com/minio/pkg&#34;&gt;minio/pkg&lt;/a&gt;, carrying fixes needed by community MinIO forks that the now commercially driven upstream no longer accepts. The repository was renamed from &lt;code&gt;pgsty/minio-pkg&lt;/code&gt; on 2026-08-02.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo Console 2.0.0 Released</title>
        <link>https://silo.pgsty.com/blog/release/console-2.0.0/</link>
        <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/console-2.0.0/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-08-04 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console/releases/tag/v2.0.0&#34;&gt;v2.0.0&lt;/a&gt; · &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo-console&#34;&gt;pgsty/silo-console&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;SILO Console 2.0.0 is the first major release of this object-storage administration console as an independent project. Continuing from the &lt;code&gt;georgmangold/console&lt;/code&gt; v1.9.1 maintenance line, it accomplishes three things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;An independent identity&lt;/strong&gt; — product name, visual system, documentation entry points, source attribution, and the release pipeline all move into the SILO project, while the Go module path, environment variables, and other compatibility contracts are deliberately retained;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;A redesigned interface&lt;/strong&gt; — the login page, theme system, dashboard, and console details are reworked under one design language, backed by a regenerated brand icon set;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hardened engineering&lt;/strong&gt; — the embedded frontend payload shrinks from roughly 10MB to 3.5MB, known dependency vulnerabilities drop to zero, and a batch of inherited defects — including a runtime data race — is fixed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;td-callout td-callout--warning&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-triangle-exclamation&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Warning&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Read the compatibility boundary before upgrading&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Version 2.0.0 updates &lt;strong&gt;public identity and delivery contracts&lt;/strong&gt; while keeping the object data format and S3 protocol unchanged. Installation scripts that reference the old repository, binary name, or container image must be updated; existing integrations that use &lt;code&gt;CONSOLE_MINIO_SERVER&lt;/code&gt;, &lt;code&gt;CONSOLE_MINIO_REGION&lt;/code&gt;, &lt;code&gt;github.com/minio/console&lt;/code&gt;, or the MinIO-compatible Admin API remain unchanged and must &lt;strong&gt;not&lt;/strong&gt; be search-and-replaced.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
      </item>
    <item>
        <title>Duplicate Part Numbers in CompleteMultipartUpload</title>
        <link>https://silo.pgsty.com/blog/security/duplicate-part-numbers/</link>
        <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/duplicate-part-numbers/</guid>
        <description>&lt;p&gt;In &lt;code&gt;CompleteMultipartUpload&lt;/code&gt;, the S3 API requires part numbers in the completion XML to be strictly ascending. Up through Server &lt;code&gt;20260725&lt;/code&gt;, SILO enforced that invariant with &lt;code&gt;sort.SliceIsSorted&lt;/code&gt; and a strict &lt;code&gt;&amp;lt;&lt;/code&gt; comparator—which accepts non-decreasing sequences such as &lt;code&gt;[1, 1]&lt;/code&gt; and duplicates the referenced part in the assembled object. &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;a href=&#34;https://github.com/pgsty/silo/issues/49&#34;&gt;&lt;code&gt;pgsty/silo#49&lt;/code&gt;&lt;/a&gt;) replaces that check with an explicit adjacent-pair comparison (&lt;code&gt;Parts[i-1].PartNumber &amp;gt;= Parts[i].PartNumber&lt;/code&gt;) and fixes an adjacent empty-part panic in &lt;code&gt;ReadParts&lt;/code&gt; (&lt;code&gt;2602177ef&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Conclusions first&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;The bug is real and small&lt;/strong&gt;: &lt;code&gt;CompleteMultipartUpload&lt;/code&gt; used &lt;code&gt;sort.SliceIsSorted&lt;/code&gt; with &lt;code&gt;&amp;lt;&lt;/code&gt;, which tests non-decreasing order (&lt;code&gt;a[0] &amp;lt;= a[1] &amp;lt;= ...&lt;/code&gt;) rather than strictly increasing order (&lt;code&gt;a[0] &amp;lt; a[1] &amp;lt; ...&lt;/code&gt;). Passing duplicate part numbers such as &lt;code&gt;[1, 1]&lt;/code&gt; succeeded and duplicated the underlying part in the final object.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;This is a data-integrity defect, not a CVE&lt;/strong&gt;: Triggering it requires a caller who already holds &lt;code&gt;s3:PutObject&lt;/code&gt; permission on the target key and a valid &lt;code&gt;uploadId&lt;/code&gt; for an in-progress multipart upload. It does not cross tenant, bucket, or credential boundaries.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The fix stays at the HTTP handler boundary&lt;/strong&gt;: &lt;code&gt;cmd/object-handlers.go&lt;/code&gt; rejects &lt;code&gt;Parts[i-1].PartNumber &amp;gt;= Parts[i].PartNumber&lt;/code&gt; with &lt;code&gt;InvalidPartOrder&lt;/code&gt; (HTTP 400). Sparse part numbers (&lt;code&gt;[1, 3]&lt;/code&gt;, &lt;code&gt;[5, 9]&lt;/code&gt;, &lt;code&gt;[3]&lt;/code&gt;) remain valid.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-defect&#34;&gt;Why &lt;code&gt;sort.SliceIsSorted&lt;/code&gt; Accepted Duplicates&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;code&gt;cmd/object-handlers.go&lt;/code&gt;, &lt;code&gt;CompleteMultipartUploadHandler&lt;/code&gt; validated the parsed &lt;code&gt;&amp;lt;CompleteMultipartUpload&amp;gt;&lt;/code&gt; part list with:&lt;/p&gt;</description>
      </item>
    <item>
        <title>SN-2026-002: Internode Path Containment Audit — Paying Off What CVE-2026-42600 Left Owing</title>
        <link>https://silo.pgsty.com/blog/security/internode-path-containment/</link>
        <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/internode-path-containment/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released in &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-08-04T00-00-00Z&#34;&gt;Server 20260804&lt;/a&gt; (&lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260804/#sn-2026-002&#34;&gt;release notes&lt;/a&gt;)&lt;br&gt;&#xA;&lt;strong&gt;Identifier:&lt;/strong&gt; &lt;code&gt;SN-2026-002&lt;/code&gt; (&lt;a href=&#34;https://silo.pgsty.com/about/security-advisories/#sn-2026-002&#34;&gt;Security Advisories&lt;/a&gt;)&lt;br&gt;&#xA;&lt;strong&gt;Fix commits:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/ca7baa670&#34;&gt;&lt;code&gt;ca7baa670&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/b6f70ab08&#34;&gt;&lt;code&gt;b6f70ab08&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/80e8eaa42&#34;&gt;&lt;code&gt;80e8eaa42&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/1af351a70&#34;&gt;&lt;code&gt;1af351a70&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/a36fd8fff&#34;&gt;&lt;code&gt;a36fd8fff&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; Distributed erasure deployments only; cluster-root / internode JWT required&lt;br&gt;&#xA;&lt;strong&gt;Prerequisite reading:&lt;/strong&gt; &lt;a href=&#34;https://silo.pgsty.com/blog/security/cve-2026-42600/&#34;&gt;CVE-2026-42600 · ReadMultiple&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Following the removal of &lt;code&gt;/rmpl&lt;/code&gt; (&lt;code&gt;ReadMultiple&lt;/code&gt;) in &lt;a href=&#34;https://silo.pgsty.com/blog/security/cve-2026-42600/&#34;&gt;CVE-2026-42600&lt;/a&gt;, &lt;strong&gt;SN-2026-002&lt;/strong&gt; audits every remaining internode endpoint carrying filesystem paths inside msgpack request bodies or Grid RPC frames. This advisory records that audit across all four internode protocol surfaces, the twelve inherited defects it uncovered, and the four regressions we introduced and caught while building the fix.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260618 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260618/</link>
        <pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260618/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-06-18 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This release is a security and dependency-maintenance update for the &lt;code&gt;pgsty/minio&lt;/code&gt; fork. It hardens LDAP STS throttling, completes S3 Select oversized-record enforcement, removes the obsolete &lt;code&gt;ReadMultiple&lt;/code&gt; internode storage-REST API, upgrades the Go build baseline to &lt;code&gt;1.26.4&lt;/code&gt;, and refreshes Go module dependencies to pick up additional third-party security fixes.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Note&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Known issue&lt;/strong&gt;: this release — like every earlier community release since &lt;code&gt;RELEASE.2025-12-03T12-00-00Z&lt;/code&gt; — carries a silent streaming-flush regression inherited from upstream that breaks &lt;code&gt;mc watch&lt;/code&gt; / bucket-notification listeners and S3 Select keep-alives. The fix (&lt;a href=&#34;https://github.com/pgsty/silo/pull/34&#34;&gt;PR #34&lt;/a&gt;) shipped in &lt;a href=&#34;https://silo.pgsty.com/blog/release/silo-20260804/&#34;&gt;SILO 20260804&lt;/a&gt;.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
      </item>
    <item>
        <title>CVE-2026-42600: ReadMultiple Storage-REST Path Traversal</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-42600/</link>
        <pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-42600/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/73ac52472&#34;&gt;&lt;code&gt;73ac524&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-xh8f-g2qw-gcm7&#34;&gt;GHSA-xh8f-g2qw-gcm7&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Affected scope:&lt;/strong&gt; Distributed erasure deployments only; cluster-root / internode JWT required&lt;/p&gt;&#xA;&lt;p&gt;The internode storage-REST route &lt;code&gt;/rmpl&lt;/code&gt; (&lt;code&gt;ReadMultiple&lt;/code&gt;) decoded a msgpack request body carrying &lt;code&gt;Bucket&lt;/code&gt;, &lt;code&gt;Prefix&lt;/code&gt;, and &lt;code&gt;Files&lt;/code&gt;, and joined those fields directly into filesystem paths without a drive-root containment check.&lt;/p&gt;&#xA;&lt;p&gt;Our initial fix retained the endpoint and added preflight path validation. A subsequent call-chain audit then revealed that &lt;code&gt;ReadMultiple&lt;/code&gt; had had zero production callers since September 2024. We therefore discarded the in-place validation patch and deleted the route, handler, client wrapper, &lt;code&gt;StorageAPI&lt;/code&gt; method, and generated msgpack types (&lt;a href=&#34;https://github.com/pgsty/silo/commit/73ac52472&#34;&gt;&lt;code&gt;73ac524&lt;/code&gt;&lt;/a&gt;)—eliminating roughly a thousand lines of unused privileged RPC surface.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260417 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260417/</link>
        <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260417/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-04-17 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This release focuses on security hardening and compatibility tightening. It bundles fixes across OIDC, LDAP STS, S3 Select, replication metadata handling, unsigned-trailer flows, the Snowball upload path, and multiple dependency- and Go toolchain-related security issues, while also incorporating the LDAP TLS regression fix and a cleanup of community-fork documentation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tighten the identity-authentication flow: OIDC / WebIdentity now accepts only asymmetrically signed &lt;code&gt;ID Token&lt;/code&gt; values backed by the IdP &lt;code&gt;JWKS&lt;/code&gt;; symmetrically signed tokens such as &lt;code&gt;HS256&lt;/code&gt; are no longer accepted. LDAP STS also now hides the distinction between unknown-user and bad-password failures to reduce username-enumeration risk.&lt;/li&gt;&#xA;&lt;li&gt;Update LDAP STS rate limiting: limits now apply to both source IP and normalized username, and successful requests no longer consume quota incorrectly. By default MinIO now uses only the socket peer address as the source and no longer trusts &lt;code&gt;X-Forwarded-For&lt;/code&gt;, &lt;code&gt;X-Real-IP&lt;/code&gt;, or &lt;code&gt;Forwarded&lt;/code&gt;; to rate-limit by real client IP, configure &lt;code&gt;MINIO_IDENTITY_LDAP_STS_TRUSTED_PROXIES&lt;/code&gt; explicitly.&lt;/li&gt;&#xA;&lt;li&gt;Make upload and write paths stricter: presigned query parameters can no longer be combined with &lt;code&gt;unsigned-trailer&lt;/code&gt; &lt;code&gt;PUT&lt;/code&gt; or multipart uploads. Snowball auto-extract now also performs full signature validation on the &lt;code&gt;unsigned-trailer&lt;/code&gt; path and rejects anonymous or forged-signature requests.&lt;/li&gt;&#xA;&lt;li&gt;Prevent replication metadata spoofing: internal &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; headers attached to ordinary &lt;code&gt;PUT&lt;/code&gt; / &lt;code&gt;COPY&lt;/code&gt; requests are now rejected or ignored, and only trusted replication flows may write the related internal metadata.&lt;/li&gt;&#xA;&lt;li&gt;Clarify S3 Select error semantics: oversized CSV and line-delimited JSON records now return &lt;code&gt;OverMaxRecordSize&lt;/code&gt; directly instead of the generic &lt;code&gt;InternalError&lt;/code&gt;; clients or alerting rules that depend on the old error code should be adjusted.&lt;/li&gt;&#xA;&lt;li&gt;Upgrade the runtime and dependency baseline: fix the regression where &lt;code&gt;ldaps://&lt;/code&gt; did not correctly apply TLS settings, replace &lt;code&gt;minio/pkg/v3&lt;/code&gt; with &lt;code&gt;pgsty/minio-pkg/v3&lt;/code&gt;, and pin several critical dependencies that are prone to breaking changes. The release also upgrades &lt;code&gt;go-jose&lt;/code&gt;, &lt;code&gt;go.opentelemetry.io&lt;/code&gt;, and Go &lt;code&gt;1.26.2&lt;/code&gt; to unify the build and release baseline.&lt;/li&gt;&#xA;&lt;li&gt;Refresh documentation and security guidance: update &lt;code&gt;SECURITY.md&lt;/code&gt;, &lt;code&gt;VULNERABILITY_REPORT.md&lt;/code&gt;, &lt;code&gt;docs/sts/ldap.md&lt;/code&gt;, and related documents, add a security advisory index, and switch upstream &lt;code&gt;minio/minio&lt;/code&gt; references in the security guidance over to &lt;code&gt;pgsty/minio&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-34986&#34;&gt;CVE-2026-34986&lt;/a&gt;: upgrade &lt;code&gt;go-jose&lt;/code&gt; to &lt;code&gt;v4.1.4&lt;/code&gt; and fix known security issues in the JWT / JOSE dependency chain.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories/GHSA-hfvc-g4fc-pqhx&#34;&gt;CVE-2026-39883&lt;/a&gt;: upgrade the &lt;code&gt;go.opentelemetry.io&lt;/code&gt; dependency stack to fix the PATH-hijacking risk.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-33322&#34;&gt;CVE-2026-33322&lt;/a&gt;: restore the strict JWKS-only OIDC JWT verification path to block keyring injection and algorithm-confusion risk.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-33419&#34;&gt;CVE-2026-33419&lt;/a&gt;: systematically harden LDAP STS authentication, rate limiting, source-address identification, and accounting logic across four follow-up fixes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-34204&#34;&gt;CVE-2026-34204&lt;/a&gt;: reject injection of &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; metadata by untrusted requests to prevent objects from being written with invalid replication state.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories?query=CVE-2026-39414&#34;&gt;CVE-2026-39414&lt;/a&gt;: reject oversized S3 Select records early to avoid continued buffering and parsing of abnormal inputs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories/GHSA-hv4r-mvr4-25vw&#34;&gt;GHSA-hv4r-mvr4-25vw&lt;/a&gt;: close the unsigned-trailer query-auth bypass.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/advisories/GHSA-9c4q-hq6p-c237&#34;&gt;GHSA-9c4q-hq6p-c237&lt;/a&gt;: harden unsigned-trailer authentication and signature validation in Snowball auto-extract scenarios.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4947&#34;&gt;CVE-2026-32280&lt;/a&gt;, &lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4946&#34;&gt;CVE-2026-32281&lt;/a&gt;, and &lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4870&#34;&gt;CVE-2026-32283&lt;/a&gt;: upgrade Go to &lt;code&gt;1.26.2&lt;/code&gt; and absorb the upstream toolchain and stdlib security fixes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/ce1c537eb1dd6c4efa1cf75cf5df0e2c489c947a&#34;&gt;ce1c537&lt;/a&gt;: fix: pin deps with breaking changes and fix LDAP TLS regression (#15)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/68e0ba997138519abfc3a1e555e7304812f0eb13&#34;&gt;68e0ba9&lt;/a&gt;: fix: upgrade go-jose to v4.1.4 to patch CVE-2026-34986&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/1869bd30b8905ff90782d4f48f6a3976b493ae87&#34;&gt;1869bd3&lt;/a&gt;: fix: CVE-2026-39883 upgrade go.opentelemetry.io&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/ff58df9499865f0ed00457d282ede219091b1f33&#34;&gt;ff58df9&lt;/a&gt;: merge: PR #18 upgrade go-jose to v4.1.4 for CVE-2026-34986&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/e4fa063942151a8b83288700f28c911376cdca9b&#34;&gt;e4fa063&lt;/a&gt;: merge: PR #19 upgrade go.opentelemetry.io for CVE-2026-39883&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/d24f449e089123210af06c51ee92ea2d51404a31&#34;&gt;d24f449&lt;/a&gt;: fix: CVE-2026-33322 restore JWKS-only OIDC JWT verification&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/3b950f8fa8576639c813c7aaeb60d93f9968ace5&#34;&gt;3b950f8&lt;/a&gt;: fix: CVE-2026-33419 harden LDAP STS auth&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/56fa63bfd155154157cd7e1fb6dc295a3b3104ed&#34;&gt;56fa63b&lt;/a&gt;: fix: CVE-2026-34204 reject untrusted replication metadata&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/3252d5b7f349e0ea41987761e4487972ea977e15&#34;&gt;3252d5b&lt;/a&gt;: fix: CVE-2026-39414 reject oversized S3 Select records&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/f444b6f37e4494aa043b8786214c7c2c5703e5ff&#34;&gt;f444b6f37&lt;/a&gt;: fix: fake CVE-2026-40027 block unsigned-trailer query auth bypass&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/efb6e5b00b03e189b44c0349efcee07d440ec428&#34;&gt;efb6e5b00&lt;/a&gt;: fix: fake CVE-2026-40028 harden snowball unsigned-trailer auth&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/db4c0fd5e375761013896bffe4eda8563adc5ec8&#34;&gt;db4c0fd&lt;/a&gt;: fix: CVE-2026-32280/CVE-2026-32281/CVE-2026-32283 upgrade Go to 1.26.2&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/18b712d49a689b40edf4ee7052b4eb223d700c40&#34;&gt;18b712d&lt;/a&gt;: fix: CVE-2026-33419 preserve LDAP STS rate limits on success&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/9e10f6d9a03c7d9e356251d55290d78c153a1159&#34;&gt;9e10f6d&lt;/a&gt;: fix: CVE-2026-33419 harden LDAP STS rate-limit source IP&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/f44110890bebc5a126fff532d562154669be6dcb&#34;&gt;f441108&lt;/a&gt;: fix: CVE-2026-33419 tighten LDAP STS rate-limit accounting&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/f48dbe777d0e066d2e74d5e671a8ca21c2ec1664&#34;&gt;f48dbe7&lt;/a&gt;: docs: refresh security guidance and fork references&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>MinIO Fork, Promise Kept</title>
        <link>https://silo.pgsty.com/blog/post/minio-promise-kept/</link>
        <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-promise-kept/</guid>
        <description>Two months after forking MinIO, pgsty/minio ships patches for four CVEs and related security issues.  No new features — just working builds, a restored console, and timely security fixes.</description>
      </item>
    <item>
        <title>CVE-2026-41145: Unsigned-Trailer Query Authentication Bypass</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-41145/</link>
        <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-41145/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/f444b6f37e4494aa043b8786214c7c2c5703e5ff&#34;&gt;&lt;code&gt;f444b6f37&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-hv4r-mvr4-25vw&#34;&gt;GHSA-hv4r-mvr4-25vw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before &lt;a href=&#34;https://github.com/pgsty/silo/commit/f444b6f37e4494aa043b8786214c7c2c5703e5ff&#34;&gt;&lt;code&gt;f444b6f37&lt;/code&gt;&lt;/a&gt;, query-string SigV4 credentials could enter a &lt;code&gt;STREAMING-UNSIGNED-PAYLOAD-TRAILER&lt;/code&gt; upload while the handlers verified the request signature only when an HTTP &lt;code&gt;Authorization&lt;/code&gt; header was present. An attacker who knew a valid access-key identifier could therefore complete an object or multipart write using a forged query-string signature.&lt;/p&gt;&#xA;&lt;p&gt;The fix moves presigned-credential rejection and SigV4 verification directly into &lt;code&gt;newUnsignedV4ChunkedReader()&lt;/code&gt; (&lt;code&gt;cmd/streaming-v4-unsigned.go&lt;/code&gt;), ensuring every handler that consumes an unsigned-trailer chunked stream shares a single authentication boundary.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-40344: Snowball Auto-Extract Authentication Bypass</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-40344/</link>
        <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-40344/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/efb6e5b00b03e189b44c0349efcee07d440ec428&#34;&gt;&lt;code&gt;efb6e5b00&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-9c4q-hq6p-c237&#34;&gt;GHSA-9c4q-hq6p-c237&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Snowball&amp;rsquo;s &lt;code&gt;PutObjectExtractHandler&lt;/code&gt; (&lt;code&gt;X-Amz-Meta-Snowball-Auto-Extract: true&lt;/code&gt;) previously omitted the &lt;code&gt;authTypeStreamingUnsignedTrailer&lt;/code&gt; authentication case. A tar archive sent with &lt;code&gt;X-Amz-Content-Sha256: STREAMING-UNSIGNED-PAYLOAD-TRAILER&lt;/code&gt; and a forged signature could enter &lt;code&gt;untar()&lt;/code&gt; before authentication completed, allowing a single unauthenticated request to fan out into multiple object writes.&lt;/p&gt;&#xA;&lt;p&gt;Commit &lt;a href=&#34;https://github.com/pgsty/silo/commit/efb6e5b00b03e189b44c0349efcee07d440ec428&#34;&gt;&lt;code&gt;efb6e5b00&lt;/code&gt;&lt;/a&gt; initializes &lt;code&gt;newUnsignedV4ChunkedReader()&lt;/code&gt;, validates the decoded content length, and completes SigV4 verification before any tar byte reaches the extractor.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cve-number&#34;&gt;Why the commit subject used a temporary identifier&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When the fix was committed on 2026-04-16, the official CVE number had not yet been published by GitHub Security Advisories, so the Git commit subject used the temporary placeholder &lt;code&gt;fake CVE-2026-40028&lt;/code&gt;. Once &lt;a href=&#34;https://github.com/advisories/GHSA-9c4q-hq6p-c237&#34;&gt;GHSA-9c4q-hq6p-c237&lt;/a&gt; was published, the official identifier was assigned as &lt;strong&gt;CVE-2026-40344&lt;/strong&gt;. We kept the immutable Git commit SHA &lt;a href=&#34;https://github.com/pgsty/silo/commit/efb6e5b00b03e189b44c0349efcee07d440ec428&#34;&gt;&lt;code&gt;efb6e5b00&lt;/code&gt;&lt;/a&gt; intact and mapped it to &lt;code&gt;CVE-2026-40344&lt;/code&gt; in the advisory ledger.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-39414: Oversized S3 Select Records and a SIMD Bypass</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-39414/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-39414/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released; second-round fix completed in June&lt;br&gt;&#xA;&lt;strong&gt;Initial fix release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Complete fix release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commits:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/3252d5b7f349e0ea41987761e4487972ea977e15&#34;&gt;&lt;code&gt;3252d5b&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/5dc705936&#34;&gt;&lt;code&gt;5dc705936&lt;/code&gt;&lt;/a&gt; (&lt;a href=&#34;https://github.com/pgsty/silo/commit/fd69c89d0&#34;&gt;&lt;code&gt;fd69c89&lt;/code&gt;&lt;/a&gt;)&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/issues/25&#34;&gt;pgsty/silo#25&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our initial April patch (&lt;a href=&#34;https://github.com/pgsty/silo/commit/3252d5b7f349e0ea41987761e4487972ea977e15&#34;&gt;&lt;code&gt;3252d5b&lt;/code&gt;&lt;/a&gt;) reused the existing 1 MiB &lt;code&gt;maxCharsPerRecord&lt;/code&gt; limit for both CSV and standard JSON Lines in S3 Select, stopping unbounded buffering while waiting for a record delimiter and returning the S3 &lt;code&gt;OverMaxRecordSize&lt;/code&gt; error code to clients.&lt;/p&gt;&#xA;&lt;p&gt;A follow-up call-chain audit in June uncovered a hardware-dependent gap: on x86_64 CPUs with AVX2/AVX-512 support where &lt;code&gt;simdjson.SupportedCPU()&lt;/code&gt; returned &lt;code&gt;true&lt;/code&gt;, JSON Lines took a separate &lt;code&gt;simdjson&lt;/code&gt; fast path that bypassed the bounded &lt;code&gt;json.PReader&lt;/code&gt; completely. The June fix (&lt;a href=&#34;https://github.com/pgsty/silo/commit/5dc705936&#34;&gt;&lt;code&gt;5dc705936&lt;/code&gt;&lt;/a&gt; / &lt;a href=&#34;https://github.com/pgsty/silo/commit/fd69c89d0&#34;&gt;&lt;code&gt;fd69c89&lt;/code&gt;&lt;/a&gt;) routed JSON Lines through the bounded reader on every CPU architecture, while also correcting streaming error codes, parser error wrapping, and pre-error output queue flushing.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-34204: Replication Metadata Injection</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-34204/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-34204/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/56fa63bfd155154157cd7e1fb6dc295a3b3104ed&#34;&gt;&lt;code&gt;56fa63b&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/issues/24&#34;&gt;pgsty/silo#24&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before &lt;a href=&#34;https://github.com/pgsty/silo/commit/56fa63bfd155154157cd7e1fb6dc295a3b3104ed&#34;&gt;&lt;code&gt;56fa63b&lt;/code&gt;&lt;/a&gt;, ordinary &lt;code&gt;PutObject&lt;/code&gt; and &lt;code&gt;CopyObject&lt;/code&gt; requests could smuggle client-supplied &lt;code&gt;X-Minio-Replication-*&lt;/code&gt; headers into internal &lt;code&gt;X-Minio-Internal-*&lt;/code&gt; SSE and replication metadata. That mismatch between the stored metadata and the actual write path could leave the resulting object unreadable.&lt;/p&gt;&#xA;&lt;p&gt;The fix stops accepting replication-only metadata in the default extraction path, restores those fields solely inside flows explicitly authorized for &lt;code&gt;ReplicateObjectAction&lt;/code&gt; (&lt;code&gt;s3:ReplicateObject&lt;/code&gt;), and sanitizes &lt;code&gt;CopyObject&lt;/code&gt; request headers before any downstream header consumer runs.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-33419: LDAP STS Enumeration and the Throttling Chain</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-33419/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-33419/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released, followed by two rounds of hardening&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Complete correction:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-06-18T00-00-00Z&#34;&gt;RELEASE.2026-06-18T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commits:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/3b950f8fa8576639c813c7aaeb60d93f9968ace5&#34;&gt;&lt;code&gt;3b950f8&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/18b712d49a689b40edf4ee7052b4eb223d700c40&#34;&gt;&lt;code&gt;18b712d&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/9e10f6d9a03c7d9e356251d55290d78c153a1159&#34;&gt;&lt;code&gt;9e10f6d&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/f44110890bebc5a126fff532d562154669be6dcb&#34;&gt;&lt;code&gt;f441108&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/pgsty/silo/commit/5e40665ac&#34;&gt;&lt;code&gt;5e40665&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/issues/23&#34;&gt;pgsty/silo#23&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The original defect in &lt;code&gt;AssumeRoleWithLDAPIdentity&lt;/code&gt; was straightforward: LDAP STS returned distinct errors for &amp;ldquo;user does not exist&amp;rdquo; and &amp;ldquo;password is wrong,&amp;rdquo; creating an unauthenticated username oracle. Our first patch unified the external authentication failure response and added rate-limit buckets keyed by both source IP and username.&lt;/p&gt;&#xA;&lt;p&gt;Subsequent design reviews uncovered a deeper problem: naive success refunds, spoofable proxy headers, reservation accounting, and the shared username bucket itself turned the rate limiter into a targeted denial-of-service primitive. The final June design (&lt;a href=&#34;https://github.com/pgsty/silo/commit/5e40665ac&#34;&gt;&lt;code&gt;5e40665&lt;/code&gt;&lt;/a&gt;) removed the shared username bucket that enabled cross-origin account lockouts, retained the per-source-IP bucket, and formalized proxy IP attribution as an explicit deployment contract.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-33322: OIDC JWT Algorithm Confusion</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-33322/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-33322/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Released&lt;br&gt;&#xA;&lt;strong&gt;First containing release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-04-17T00-00-00Z&#34;&gt;RELEASE.2026-04-17T00-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Affected entry points:&lt;/strong&gt; &lt;code&gt;AssumeRoleWithWebIdentity&lt;/code&gt;, &lt;code&gt;AssumeRoleWithClientGrants&lt;/code&gt;&lt;br&gt;&#xA;&lt;strong&gt;Fix commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/d24f449e089123210af06c51ee92ea2d51404a31&#34;&gt;&lt;code&gt;d24f449&lt;/code&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/issues/22&#34;&gt;pgsty/silo#22&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The previous OIDC implementation in &lt;code&gt;internal/config/identity/openid&lt;/code&gt; placed the relying-party &lt;code&gt;client_secret&lt;/code&gt; into the JWT verification keyring while also accepting HMAC signing algorithms (&lt;code&gt;HS256&lt;/code&gt;, &lt;code&gt;HS384&lt;/code&gt;, &lt;code&gt;HS512&lt;/code&gt;). An attacker who obtained that &lt;code&gt;client_secret&lt;/code&gt; could therefore sign a forged ID token with HMAC and exchange it through STS (&lt;code&gt;AssumeRoleWithWebIdentity&lt;/code&gt; or &lt;code&gt;AssumeRoleWithClientGrants&lt;/code&gt;) for temporary S3 credentials.&lt;/p&gt;&#xA;&lt;p&gt;The final fix (&lt;a href=&#34;https://github.com/pgsty/silo/commit/d24f449e089123210af06c51ee92ea2d51404a31&#34;&gt;&lt;code&gt;d24f449&lt;/code&gt;&lt;/a&gt;) enforces asymmetric, JWKS-only verification and deliberately drops &lt;code&gt;HS256&lt;/code&gt;/&lt;code&gt;HS384&lt;/code&gt;/&lt;code&gt;HS512&lt;/code&gt; token support rather than keeping a configuration toggle that would reintroduce ambiguous trust semantics.&lt;/p&gt;</description>
      </item>
    <item>
        <title>CVE-2026-32285: The jsonparser Advisory That Required No Patch</title>
        <link>https://silo.pgsty.com/blog/security/cve-2026-32285/</link>
        <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2026-32285/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Closed without a code change&lt;br&gt;&#xA;&lt;strong&gt;GitHub issue:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/issues/26&#34;&gt;pgsty/silo#26&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Referenced upstream commit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/commit/c1a49490c78e9c3ebcad86ba0662319138ace190&#34;&gt;&lt;code&gt;c1a49490&lt;/code&gt;&lt;/a&gt; (&lt;a href=&#34;https://silo.pgsty.com/blog/security/cve-2025-62506/&#34;&gt;CVE-2025-62506&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;The initial assessment of &lt;code&gt;CVE-2026-32285&lt;/code&gt; assumed that the repository might still carry a vulnerable version of &lt;code&gt;github.com/buger/jsonparser&lt;/code&gt;, and the team briefly considered replacing the package or maintaining a local fork. Checking the advisory&amp;rsquo;s referenced upstream commit, the resolved Go module version, and actual symbol reachability changed the conclusion:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Public vulnerability feeds mislabeled &lt;code&gt;CVE-2026-32285&lt;/code&gt; as a &lt;code&gt;jsonparser&lt;/code&gt; issue while pointing to upstream commit &lt;a href=&#34;https://github.com/pgsty/silo/commit/c1a49490c78e9c3ebcad86ba0662319138ace190&#34;&gt;&lt;code&gt;c1a49490&lt;/code&gt;&lt;/a&gt;, which is the session-policy privilege-escalation fix for &lt;a href=&#34;https://silo.pgsty.com/blog/security/cve-2025-62506/&#34;&gt;CVE-2025-62506&lt;/a&gt; already included in every SILO release since &lt;code&gt;RELEASE.2025-12-03T12-00-00Z&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;For &lt;code&gt;github.com/buger/jsonparser&lt;/code&gt; itself, the repository already resolved &lt;code&gt;v1.1.2&lt;/code&gt;, which contains the upstream &lt;code&gt;jsonparser&lt;/code&gt; fixes, and &lt;code&gt;govulncheck&lt;/code&gt; found no reachable vulnerable symbol.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Instead of manufacturing a cosmetic dependency bump, we recorded the verification evidence and closed &lt;a href=&#34;https://github.com/pgsty/silo/issues/26&#34;&gt;pgsty/silo#26&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Silo 20260325 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260325/</link>
        <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260325/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-03-25 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-03-25T00-00-00Z&#34;&gt;RELEASE.2026-03-25T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This maintenance release bundles &lt;code&gt;mcli/mc&lt;/code&gt; into the Docker image, fixes an LDAP TLS configuration regression on &lt;code&gt;ldaps://&lt;/code&gt; connections, and pins security-patched versions of key dependencies.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bundle &lt;code&gt;mcli&lt;/code&gt; (and its &lt;code&gt;mc&lt;/code&gt; compatibility alias) into the Docker image with checksum verification so administrative CLI tools are available out of the box.&lt;/li&gt;&#xA;&lt;li&gt;Fix the LDAP TLS regression affecting &lt;code&gt;ldaps://&lt;/code&gt; deployments so custom root CAs and &lt;code&gt;MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY&lt;/code&gt; are properly honored.&lt;/li&gt;&#xA;&lt;li&gt;Remove inherited upstream CI/CD workflows that are no longer used in the community fork.&lt;/li&gt;&#xA;&lt;li&gt;Pin key dependencies to isolate upstream breaking changes and incorporate the security fixes below.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4394&#34;&gt;CVE-2026-24051&lt;/a&gt;: Pin &lt;code&gt;go.opentelemetry.io/otel/sdk v1.42.0&lt;/code&gt; to address the macOS &lt;code&gt;PATH&lt;/code&gt;-hijacking arbitrary code execution vulnerability.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4173&#34;&gt;CVE-2025-10543&lt;/a&gt;: Upgrade to &lt;code&gt;github.com/eclipse/paho.mqtt.golang v1.5.1&lt;/code&gt;, fixing incorrect MQTT packet encoding for oversized UTF-8 strings.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4134&#34;&gt;CVE-2025-58181&lt;/a&gt;: Upgrade to &lt;code&gt;golang.org/x/crypto v0.49.0&lt;/code&gt;, fixing unbounded memory consumption in &lt;code&gt;ssh&lt;/code&gt; GSSAPI authentication handling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/f2f9a40dce9597d5d1fa758b3316d41a86e73cff&#34;&gt;f2f9a40&lt;/a&gt;: add mcli/mc from pgsty/mc to Docker image&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/ce1c537eb1dd6c4efa1cf75cf5df0e2c489c947a&#34;&gt;ce1c537&lt;/a&gt;: fix: pin deps with breaking changes and fix LDAP TLS regression (#15)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/ee55e5391a5d5e4bd46d555a11b2215eb6ed836e&#34;&gt;ee55e53&lt;/a&gt;: remove upstream CI/CD workflows inherited from minio/minio&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>Silo 20260321 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260321/</link>
        <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260321/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-03-21 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-03-21T00-00-00Z&#34;&gt;RELEASE.2026-03-21T00-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This maintenance release is built around the Go 1.26.1 upgrade and a broad dependency refresh. Beyond stricter compiler and linter compatibility fixes, it also delivers the most substantial security dependency refresh in the current release line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Upgrade the build environment from Go &lt;code&gt;1.26.0&lt;/code&gt; to Go &lt;code&gt;1.26.1&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Refresh direct and indirect dependencies to converge on the newer toolchain.&lt;/li&gt;&#xA;&lt;li&gt;Fix linter and test issues exposed by the stricter Go 1.26.1 checks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4599&#34;&gt;CVE-2026-27137&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes incomplete email-constraint enforcement in &lt;code&gt;crypto/x509&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4600&#34;&gt;CVE-2026-27138&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes a &lt;code&gt;crypto/x509&lt;/code&gt; panic triggered by malformed certificates.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4601&#34;&gt;CVE-2026-25679&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes insufficient validation of IPv6 host literals in &lt;code&gt;net/url&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4602&#34;&gt;CVE-2026-27139&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes &lt;code&gt;FileInfo&lt;/code&gt; metadata escaping the &lt;code&gt;Root&lt;/code&gt; boundary in &lt;code&gt;os&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4603&#34;&gt;CVE-2026-27142&lt;/a&gt;: Go stdlib &lt;code&gt;1.26.0&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.1&lt;/code&gt; fixes missing URL escaping in &lt;code&gt;html/template&lt;/code&gt; for &lt;code&gt;meta refresh&lt;/code&gt; content.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4503&#34;&gt;CVE-2026-26958&lt;/a&gt;: &lt;code&gt;filippo.io/edwards25519&lt;/code&gt; &lt;code&gt;v1.1.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.2.0&lt;/code&gt; fixes incorrect or undefined &lt;code&gt;MultiScalarMult&lt;/code&gt; behavior.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4173&#34;&gt;CVE-2025-10543&lt;/a&gt;: &lt;code&gt;github.com/eclipse/paho.mqtt.golang&lt;/code&gt; &lt;code&gt;v1.5.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.5.1&lt;/code&gt; fixes incorrect MQTT packet encoding for oversized UTF-8 strings.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4394&#34;&gt;CVE-2026-24051&lt;/a&gt;: &lt;code&gt;go.opentelemetry.io/otel/sdk&lt;/code&gt; &lt;code&gt;v1.38.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.42.0&lt;/code&gt; fixes the macOS PATH-hijacking arbitrary code execution issue.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4762&#34;&gt;CVE-2026-33186&lt;/a&gt;: &lt;code&gt;google.golang.org/grpc&lt;/code&gt; &lt;code&gt;v1.77.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v1.79.3&lt;/code&gt; fixes authorization bypass caused by a missing leading slash in the HTTP/2 &lt;code&gt;:path&lt;/code&gt; pseudo-header.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/5abd9a80f66f6fe2812d2eded18961a65712eb9e&#34;&gt;5abd9a8&lt;/a&gt;: bump golang to 1.26.1 and update deps&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/377fc616d9c5944d9d0aff081089d2d0c4ebb12c&#34;&gt;377fc61&lt;/a&gt;: fix: satisfy stricter Go 1.26.1 linter checks&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>Silo 20260314 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260314/</link>
        <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260314/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-03-14 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-03-14T12-00-00Z&#34;&gt;RELEASE.2026-03-14T12-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This release switches the project to the community-maintained Console fork and performs a sizeable dependency refresh to establish the base for the later Go 1.26.x maintenance releases.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Switch to the community-maintained &lt;code&gt;georgmangold/console v1.9.1&lt;/code&gt; fork in place of the unmaintainable upstream Console dependency.&lt;/li&gt;&#xA;&lt;li&gt;Refresh a large portion of the direct and indirect dependency graph so the new Console and toolchain combination builds cleanly.&lt;/li&gt;&#xA;&lt;li&gt;Fix the &lt;code&gt;go vet&lt;/code&gt; format directive issue in &lt;code&gt;grid_test.go&lt;/code&gt; and adjust tests for the HTTP behavior changes in Go 1.26.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4116&#34;&gt;CVE-2025-47913&lt;/a&gt;: &lt;code&gt;golang.org/x/crypto&lt;/code&gt; &lt;code&gt;v0.37.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.46.0&lt;/code&gt; fixes a panic in &lt;code&gt;ssh/agent&lt;/code&gt; when handling malformed responses.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4134&#34;&gt;CVE-2025-58181&lt;/a&gt;: &lt;code&gt;golang.org/x/crypto&lt;/code&gt; &lt;code&gt;v0.37.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.46.0&lt;/code&gt; fixes unbounded memory consumption in &lt;code&gt;ssh&lt;/code&gt; GSSAPI authentication parsing.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2025-4135&#34;&gt;CVE-2025-47914&lt;/a&gt;: &lt;code&gt;golang.org/x/crypto&lt;/code&gt; &lt;code&gt;v0.37.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.46.0&lt;/code&gt; fixes a panic in &lt;code&gt;ssh/agent&lt;/code&gt; caused by malformed identity messages.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4440&#34;&gt;CVE-2025-47911&lt;/a&gt;: &lt;code&gt;golang.org/x/net&lt;/code&gt; &lt;code&gt;v0.39.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.48.0&lt;/code&gt; fixes quadratic parsing complexity in &lt;code&gt;html.Parse&lt;/code&gt; for crafted inputs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/vuln/GO-2026-4441&#34;&gt;CVE-2025-58190&lt;/a&gt;: &lt;code&gt;golang.org/x/net&lt;/code&gt; &lt;code&gt;v0.39.0&lt;/code&gt; -&amp;gt; &lt;code&gt;v0.48.0&lt;/code&gt; fixes an infinite parsing loop in &lt;code&gt;golang.org/x/net/html&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/68521b37f2697c79b7fe14676eaf687864a1cf26&#34;&gt;68521b3&lt;/a&gt;: add github ci/cd pipeline&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/00f3cf74fc4319f3d34c4e47c87ad39386318755&#34;&gt;00f3cf7&lt;/a&gt;: RELEASE.2026-03-14T12-00-00Z with go 1.26.0&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>Silo 20260214 Released</title>
        <link>https://silo.pgsty.com/blog/release/20260214/</link>
        <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20260214/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2026-02-14 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2026-02-14T12-00-00Z&#34;&gt;RELEASE.2026-02-14T12-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This early infrastructure-focused community release restores the embedded Console, introduces GitHub CI/CD, and lifts the Go baseline to 1.26.0, which also absorbs a batch of security fixes from the older toolchain generation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Restore the embedded Console and refresh the README to clarify the community fork position.&lt;/li&gt;&#xA;&lt;li&gt;Add GitHub CI/CD workflows as the base for automated builds and multi-platform delivery.&lt;/li&gt;&#xA;&lt;li&gt;Add quick links for docs, Docker, the GitHub repository, and installation through the &lt;code&gt;pig&lt;/code&gt; package manager.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;These issues were absorbed as part of the Go &lt;code&gt;1.25.5&lt;/code&gt; -&amp;gt; &lt;code&gt;1.26.0&lt;/code&gt; upgrade:&lt;/p&gt;</description>
      </item>
    <item>
        <title>MinIO Is Dead, Long Live MinIO</title>
        <link>https://silo.pgsty.com/blog/post/minio-resurrect/</link>
        <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-resurrect/</guid>
        <description>MinIO&amp;rsquo;s repo is officially archived and abandoned. And how AI Agents helped bring it back from the dead. This post explains how a community fork restores the admin console and ships binaries via CI/CD pipeline.</description>
      </item>
    <item>
        <title>Silo 20251203 Released</title>
        <link>https://silo.pgsty.com/blog/release/20251203/</link>
        <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/release/20251203/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; 2025-12-15 · &lt;strong&gt;Version:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2025-12-03T12-00-00Z&#34;&gt;RELEASE.2025-12-03T12-00-00Z&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the earliest traceable community release, establishing the community packaging and distribution baseline.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes&#34;&gt;Major Changes&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Build the community packaging flow around &lt;code&gt;minio/pkger&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Choose a maintenance-mode upstream MinIO baseline as the starting point for the community-maintained fork.&lt;/li&gt;&#xA;&lt;li&gt;Produce the first &lt;code&gt;apk&lt;/code&gt;, &lt;code&gt;deb&lt;/code&gt;, and &lt;code&gt;rpm&lt;/code&gt; artifacts for ongoing community releases.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fixed-cves&#34;&gt;Fixed CVEs&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Initial community release baseline; no delta CVE list against an earlier community version applies.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-commits&#34;&gt;Related Commits&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pgsty/silo/commit/d4cd4b433797e1cdcd2e46cc72df45b0897bdc0a&#34;&gt;d4cd4b4&lt;/a&gt;: RELEASE.2025-12-03T12-00-00Z with go 1.25.5&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      </item>
    <item>
        <title>MinIO Is Dead. Which Next?</title>
        <link>https://silo.pgsty.com/blog/post/minio-alternative/</link>
        <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-alternative/</guid>
        <description>MinIO just entered maintenance mode. What replaces it? Can RustFS step in? I tested the contenders so you don’t have to.</description>
      </item>
    <item>
        <title>MinIO is Dead</title>
        <link>https://silo.pgsty.com/blog/post/minio-is-dead/</link>
        <pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/post/minio-is-dead/</guid>
        <description>MinIO announces it is entering maintenance mode, the dragon-slayer has become the dragon – how MinIO transformed from an open-source S3 alternative to just another commercial software company</description>
      </item>
    <item>
        <title>CVE-2025-62506: Session-Policy Privilege Escalation</title>
        <link>https://silo.pgsty.com/blog/security/cve-2025-62506/</link>
        <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
        
        <guid>https://silo.pgsty.com/blog/security/cve-2025-62506/</guid>
        <description>&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Inherited and released&lt;br&gt;&#xA;&lt;strong&gt;First SILO community release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/pgsty/silo/releases/tag/RELEASE.2025-12-03T12-00-00Z&#34;&gt;RELEASE.2025-12-03T12-00-00Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Upstream fixed release:&lt;/strong&gt; &lt;a href=&#34;https://github.com/minio/minio/releases/tag/RELEASE.2025-10-15T17-29-55Z&#34;&gt;RELEASE.2025-10-15T17-29-55Z&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;GitHub advisory:&lt;/strong&gt; &lt;a href=&#34;https://github.com/advisories/GHSA-jjjj-jwhf-8rgr&#34;&gt;GHSA-jjjj-jwhf-8rgr&lt;/a&gt;&lt;br&gt;&#xA;&lt;strong&gt;Upstream fix:&lt;/strong&gt; &lt;a href=&#34;https://github.com/minio/minio/pull/21642&#34;&gt;minio/minio#21642&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A service account or STS account constrained by a restricted session policy could invoke an &amp;ldquo;own account&amp;rdquo; Admin API operation to create a child service account without the session-policy restriction. Because the policy check set &lt;code&gt;DenyOnly = true&lt;/code&gt; for own-account operations, any session policy that lacked an explicit &lt;code&gt;Deny&lt;/code&gt; rule allowed the call, and the newly created child service account inherited the broader permissions of the parent user.&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
