Builtin functions should not have access to StepsContext
### Problem Builtin functions must implement a `Run` function that is registered at startup: ```go func Run(ctx context.Context, stepsCtx *runner.StepsContext) error ``` This is incorrect, as it gives each builtin access to steps that have run previously in a sequence of steps. Builtins should be isolated and not have visibility into the execution history of other steps. ### Expected Behavior The `Run` function should accept an interface type instead of a struct pointer: ```go func Run(ctx context.Context, stepsCtx SomeInterface) error ``` Care should be taken to only add methods to this interface that the builtin should have access to. ### Requirements - All expressions should be expanded in the `stepsCtx` passed to a builtin - A builtin should not be able to access previously run step results - The interface should expose only the minimal set of methods needed for builtin execution ### Implementation - Define a new interface type for the builtin context - Refactor the builtin function signature to use the interface instead of `*runner.StepsContext` - Ensure the interface does not expose methods that would allow access to other steps' results - Pre-expand all expressions before passing context to builtins
issue