Make each operation a functional interface compatible with specific operation context. Single render method should be present.
Abandon additional context/operation abstraction level. There is no need to distinguish between base attributed operation and exposed operation api. To hide attribute set from operation context we can just make it as internal. We loose ability to iterate over attributes from client code, but in fact we should not have this possibility as long as this part should be only managed by engine.
render
method should be present.