Transactions can create PartPlant records. I don’t have a good memory of which ones, but they are there. For example, the bug with RMAs:
The bug isn’t the PartPlant record getting created automatically. The bug was no PartCost record.
Personally I block this in a functional way by blocking transactions for zero standard cost (with some exceptions, long story). But that only makes sense for std. costing, of course.