When we made the prefab system we wanted to try something different. We wanted to think of prefabs more like interfaces, where you'd expose only certain properties and objects to be accessed and edited externally.
Turns out that was all a load of shit. So we overhauled it to work like everyone would expect. Now when you drop a prefab into a scene you'll see all the GameObjects like you would expect. You'll be able to modify that instance of it, and apply changes back to the prefab, or revert those changes back to the prefab values.
You don't have to do anything to migrate to the new system, existing prefabs, prefab variables and prefab instances will automatically convert to the new system. Once you save a prefab or scene, contained prefab instances will be written to the disk in the new format.
In addition you can now also specify the transform of prefab roots.
With my Unity prefabs I tend to give them a dedicated script on the root object that controls any configurable properties for that prefab.
So maybe a good compromise solution here would be to add a prefab setting that locks all configuration for any prefab setting except the root object and its scripts and their properties. So you can still move it around or scale or rotate it or configure any properties on any script on the root.
This would be more of a developer control to indicate intent. Like controlling code styling. A dev could still go into the prefab itself and turn it off.
Once I'm done with work, I'll go back to making games in s&box. All that's left is standalone export in Steam and private server code, and this summer is sure to be wonderful 💪