Judging from your statements I see that having a flag for content::item::new and content::revision::new seems out of discussion.
Next question: Is it possible to tweak db_transaction to *not* execute yet another db_transaction if you are already in a db_transaction block. After all, when I am in a db_transaction I want to reroll everything if it fails at one point and not each transaction separately.
Maybe this would get around the behaviour I have seen sometimes (as in not reproduceable, but often enough for me to notice) that a content::item is generated even though the surrounding transaction fails.
Last but not least, before I change it, is there a general concern about keeping ::new or ::edit functions atomic in transactions. What I wonder is, shouldn't I add the flag to e.g. project::new, so when I call project::new in a transaction at least project::new will not execute yet another transaction. I never thought about this in detail, but at the moment I think it should not be much of an issue. But maybe I am wrong (after all you are adamant that it is a bad idea in content::item::new, so maybe the logic applied there applies everywhere else).
And I am aware that the "flag" is only a cure for the symptoms, not for the disease itself.