Given the above, I propose building a system with the following design objectives:
These are contradictory goals. Current techniques do not completely automate compiler generation (and it's hard to imagine how they could). As you approach full automation, predictability goes down as more and sophisticated analyses and inferences are required.
In any cogen where the input and output languages are equal (see layers), there is a trade-off between exposing more operations for static evaluation by making this language lower level, and weakening the partial evaluation (or requiring analysis to reconstruct lost information), and reducing the final quality of code.
These conflicts have a very familiar feel to them; they are typical of any intermediate language design.