Part of #1075. Depends on #1090 (Phase 1).
Stages
base.py, composite.py, sequence.py, exec.py, agent.py, agent_runner.py
What
- Change
StageProtocol abstract signature in base.py to run(self, gremlin: Gremlin) -> Outcome.
- Change every concrete
run(self, state: State) to run(self, gremlin: Gremlin).
- Inside each body, replace every
state.X with gremlin.state.X.
- Drop
from gremlins.executor.state import State from each file.
Callsite change in _collect_stages: state.make_runner(stage) → pass gremlin directly; make_runner assigns gremlin.state then calls await stage.run(gremlin).
Files
gremlins/stages/base.py
gremlins/stages/composite.py
gremlins/stages/sequence.py
gremlins/stages/exec.py
gremlins/stages/agent.py
gremlins/stages/agent_runner.py
gremlins/executor/gremlin.py (make_runner update)
Tests
Suite passes. No behavioral change — gremlin.state.X forwards identically to the old state.X.
Part of #1075. Depends on #1090 (Phase 1).
Stages
base.py,composite.py,sequence.py,exec.py,agent.py,agent_runner.pyWhat
StageProtocolabstract signature inbase.pytorun(self, gremlin: Gremlin) -> Outcome.run(self, state: State)torun(self, gremlin: Gremlin).state.Xwithgremlin.state.X.from gremlins.executor.state import Statefrom each file.Callsite change in
_collect_stages:state.make_runner(stage)→ passgremlindirectly;make_runnerassignsgremlin.statethen callsawait stage.run(gremlin).Files
gremlins/stages/base.pygremlins/stages/composite.pygremlins/stages/sequence.pygremlins/stages/exec.pygremlins/stages/agent.pygremlins/stages/agent_runner.pygremlins/executor/gremlin.py(make_runner update)Tests
Suite passes. No behavioral change —
gremlin.state.Xforwards identically to the oldstate.X.