"S3-compatible" is doing an enormous amount of work in most storage docs. In practice it usually means GET, PUT, and a list call behave the way you expect. The things that actually break integrations are further down: multipart upload edge cases, conditional headers, and whether a list issued right after a write includes the object. Hippius has been solid for me on the basic path, but I ended up reading source to find out what happens to the parts of an aborted multipart and whether they are billed. That belongs in a table in the docs, not in a reading exercise.
