The item becomes public if there a two fields for Title and not when there are three or more, but … an exception is thrown when I remove a field. I guess it’s because metadata() lock the field while I use it.

In BeforeSave, the record we are modifying still doesn’t have the changes in the form (if the user added a field, it won’t detect it).
And in AfterSave, the record is up to date but we can’t change the public attribute anymore …

This kinda works but not really because if I am going to edit an item to add a field, it will say that I miss a field even though I added one in the form.