Trying to understand Ash Field Policy Behaviour

What policies would you write for private fields? If a field policy fails, the value is hidden, so you would not have a way to use them in a LiveView for example. If the field policy would ever pass(meaning a user should be shown the value), then the field should be marked public to indicate that.

Unfortunately, we can’t control what is done inside of a liveview with private fields, and hiding them is generally not desired for the reason you mentioned (using for internal purposes). But in api interfaces we have more control and so private fields are never shown and public fields are shown when their field policy passes.

It might be a footgun that field policies only cover reads, but it’s stated in the documentation and even cursory testing would highlight that fact.

Field policies are not necessary for writing, and that is best expressed as regular policies because any forbidden write is forbidden in its entirety while field policies pass/fail allowing a “partial read”. This is the reason for them being separate and being grouped by the relevant fields.