Hmm, I think it always worked like this. Template just substitute code. If the code where you have template can't access some thing... then it's an error.
It also is an error if template calls a private proc:
proc b() = # private b
echo "hi"
tempalte a*() = # public a
b()
Run
Calling a() in another module will not work because b() is private.
