servo.ecdl_steady_lock maintains the existing owner-controlled PZT PI, slow TEC centering and configured current feedforward. The owner validates current PI configuration, target capture, output bounds, leases and watchdogs.
Optical quality is reported independently of frequency tracking. The card does not contain a hidden current-window search; use the explicit midpoint or adjustment task. Optional recovery contains the configured v2 relative-current route, stable-history criteria and return confirmation settings.
A hop freezes the latest stable pre-hop frequency in the current target epoch. The same directed-current route runs for standalone and steady recovery. Return frequency, optical quality and PI capture remain separate checks. Returning to the observed frequency does not authorize PI enable outside the current target capture range.
Foreground target changes, sweeps and operating-point moves invalidate obsolete references. Finite adjustment trials retain their own measured checkpoint. Missing observations do not authorize output changes; owner freshness and outage behavior apply. Uncertain writes, owner faults and lost ownership are not retried. Cancellation follows owner-verified hold and lease cleanup.
Current target, tolerance, TEC settings and execution timing use their existing validated runtime controls. There is no lifetime recovery-attempt limit or automatic re-arm trim. Retired map-artifact/reference controls, mapped_recovery_max_attempts and rearm_trim produce a migration error even if explicitly null. Review and configure v2 recovery parameters instead.
Implementation: ecdl_steady.py, recovery_stationary.py, recovery_procedure.py.