Great questions! The protocol
does have suggested app-agnostic moderation primitives (see
https://atproto.com/guides/labels,
https://atproto.com/guides/creating-a-labeler). That's the basis of how Bluesky's own moderation works under the hood. There's also Bluesky-specific tools and APIs like Ozone (
https://atproto.com/guides/using-ozone), but they build on top of those primitives.
Of course, nothing stops an app from doing moderation differently and not using any of that. This is more for better composability and interoperability.