Input_pos always reverts to encoder position, even in closed-loop control with real Iq — firmware 0.5.5, v3.6-56V

Setting axis.controller.input_pos to any value (tested 5.0, 999.0, 3.0) has no lasting effect — reading it back milliseconds later always shows a value nearly identical to axis.encoder.pos_estimate, not the value I set.

Confirmed:

  • current_state = 8 (genuine closed-loop, confirmed via CAN heartbeat byte too)
  • axis.motor.current_control.Iq_measured shows real, non-zero current (~1A) — motor is actively holding, not idle
  • axis.controller.config.control_mode = 3 (position control)
  • axis.controller.config.input_mode = 1 (passthrough)
  • circular_setpoints = False
  • No errors (dump_errors clean)
  • Reproduced from a completely fresh Python script (not just odrivetool session)
  • Reproduced after a full hardware power cycle (not just USB reconnect)
  • Reproduced identically on both axis0 and axis1
  • Confirmed via candump that no external CAN device is sending Set_Input_Pos — ruling out bus interference

axis.controller.pos_setpoint shows the same behavior — tracks pos_estimate, not my commanded input_pos.

What could cause input_pos to be silently overridden/ignored despite the axis being armed and drawing real current?