Since 1 December 2020 all S3 GET, PUT, LIST and DELETE operations are strongly consistent in every Region, at no extra cost and with no performance penalty. The old rules about read-after-write only for new objects, and the retry-a-404 workarounds built around them, are obsolete. LIST is strongly consistent too, so a listing issued immediately after a PUT includes the new key.
What is still eventually consistent is bucket-level configuration. Bucket policies, ACLs, CORS rules, lifecycle rules, replication configuration and public access block settings propagate asynchronously, and a request made right after the change can be evaluated against the previous configuration.
Integration tests that write a bucket policy and then assert that a request is denied are the usual victims, and they fail intermittently rather than consistently. Retry those assertions with backoff instead of concluding the policy did not apply.