Update 2013-12-07-dont-fear-directives-in-angular-dot-js.markdown

The default scope settings for a directive is false = it inherits its parent scope.

Your code works cause ngRepeat directive has its scope setting set to true = it creates a new scope that inherits from parent scope, but it is no isolated. If it would be isolated you would not, for example, be able to use textSize in the gear directive without either sending it in as an attribute (@) value or looking it up through parentScope.