I would define `run`, `plan` methods in `Middleware` to call `pass *args` by default. It'll allows to remove this condition and the interface of `Middleware` will be more clearly defined.