I don't necessarily want logs in the same place as data since generally on a prod site I like them to be written to a seperate device from where the content repository data is, but otherwise I agree its a good idea to isolate the instance specific data from the codebase.
Another pet peeve is the existence of the directories in cvs.
I hate seeing:
? content-repository-content-files/10
? content-repository-content-files/11
...
? content-repository-content-files/99
? log/error.log
? log/error.log.000
...
etc.
when I do a cvs update.
I don't see how you could enforce #3 without a serious overhall of the code though.
It would be good if it were possible to have the code
on a read only partition which argues against having the data directory in the same place as the code.
I like having the content repository and the webserver tmp dir on the same partition so that uploads are just renames
(and for the anal that partition could be noexec).