I guess passing the Bucket as an object rather than a reference is what's throwing me. Because, really, the Filesystem just needs a Bucket identifier to map a key to a file. Right?

Maybe this would help clarify: where would you implement stuff like quotas? Within the provider, before yielding a Bucket? Within the Filesystem, presumably by emitting a declaration of intent into the Bucket and checking the response? Or somewhere else entirely?