RUDPClient/openspec/changes/archive/2026-04-06-stabilize-send-i.../specs/client-send-interval-stabil.../spec.md

1.9 KiB

client-send-interval-stabilization Specification

Purpose

Define that the client send interval is protected from oscillation when the server tick offset hovers near zero, ensuring steady-rate input submission without frame-to-frame cadence jitter.

Requirements

Requirement: Send interval correction uses hysteresis dead-band

The controlled-client send interval corrector SHALL apply a dead-band threshold before adjusting _sendInterval, so that minor server tick offset fluctuations near zero do not cause the send cadence to toggle between values.

Scenario: No correction within dead-band

  • WHEN _currentTickOffset is between -2 and +2 ticks (inclusive)
  • THEN _sendInterval is not changed
  • THEN the previously active send interval is preserved

Scenario: Slow drift correction below threshold

  • WHEN _currentTickOffset stays within the dead-band for an extended period
  • THEN _sendInterval remains stable at its current value
  • THEN no oscillation occurs regardless of offset sign changes within the band

Scenario: Correction applies outside dead-band

  • WHEN _currentTickOffset exceeds +2 (client ahead of server)
  • THEN _sendInterval is set to 0.048f to send slightly faster
  • WHEN _currentTickOffset is below -2 (client behind server)
  • THEN _sendInterval is set to 0.052f to send slightly slower

Requirement: Send interval stabilizes after offset crosses threshold

Once the offset exits the dead-band and triggers a correction, subsequent corrections SHALL only occur when the offset crosses the threshold again in the opposite direction, preventing rapid re-correction.

Scenario: Correction latches until opposite threshold

  • WHEN offset triggers a correction to 0.048f (offset > +2)
  • THEN further offset increases within the same sign do not re-trigger correction
  • THEN the send interval stays at 0.048f until offset crosses back below +2 then exceeds -2