···3232 expires_after: Optional[timedelta] = None
3333 """If set, the label effect has a timed expiration, which means that the reason will expire after this time."""
34343535- # delay_action_by: Optional[timedelta] = None
3636- # """If set, the propagation of the effect to the upstream (if configured via LabelsService.after_add or LabelsService.after_remove) will be delayed."""
3535+ delay_action_by: Optional[timedelta] = None
3636+ """Osprey can be configured to respond to this duration downstream to delay when a label is applied and/or causes an effect"""
37373838 dependent_rule: Optional[RuleT] = None
3939 """If set, the effect will only be applied if the dependent rule evaluates to true."""
···4141 # that a better abstraction would be to have any sort of "external impact" come
4242 # from verdicts, which were created to be an output (whereas labels were created
4343 # to simply store state, thus making label webhooks a leaky abstraction)
4444- # delay_action_by: Optional[TimeDeltaT] = None
4545- # """Optional: Delays a label action by a specified `TimeDeltaT` time."""
4444+ # NOTE(@elijaharita): this is being re-added because removing it breaks backwards compatibility.
4545+ delay_action_by: Optional[TimeDeltaT] = None
4646+ """Optional: Delays a label action by a specified `TimeDeltaT` time if Osprey is configured to."""
4647 apply_if: Optional[RuleT] = None
4748 """Optional: Conditions that must be met for the label mutation to succeed."""
4849 expires_after: Optional[TimeDeltaT] = None
···5556 status=status,
5657 name=arguments.label.value,
5758 expires_after=TimeDeltaT.inner_from_optional(arguments.expires_after),
5858- # delay_action_by=TimeDeltaT.inner_from_optional(arguments.delay_action_by),
5959+ delay_action_by=TimeDeltaT.inner_from_optional(arguments.delay_action_by),
5960 dependent_rule=arguments.apply_if,
6061 # NOTE: This is fairly significant, if this call node has an `apply_if` ast, but
6162 # the resolved apply_if is None, that means that the evaluation of the rule failed.