After developing a bit with vibe, I got the impression that diet files are no stand alone entities. They don't present some interface or a method signature so that it is obvious how to use them. So in my understanding they are meant to be reused together with their instantiating context. So the diet template basically is a part of the struct/class/function that instantiates it and you reuse it by instantiating that struct/class and set some parameters for example (or call the method with different parameters).

What I don't understand is, if there is this strong coupling between the diet template and the instantiating context, why bother passing template parameters and not making the template a mixin with access to everything the class/struct/function has access to?

To me it seems to be unnecessary cumbersome to pass every little needed variable to the diet template and to import many things twice (once in the D source code and once in the diet template) for apparently no good reason. Because the template depends on the instantiating context already and also in a non clear way if you just look at the diet code.

What are the reasons for the current behaviour? Am I using things the wrong way?

Is my view that a diet template is basically a part of the instantiating context, that just happens to be in a different file, correct?
And if so, could we make it behave more like that? I would volunteer for this.