Add expiration settings for approved approvals

Description

Add the ability to set an expiration date for approved approvals. This allows organizations to ensure that approvals are periodically reviewed and renewed, supporting compliance requirements and governance policies.

Background

Currently, once an approval is granted, it remains valid indefinitely. Many organizations need approvals to have a limited validity period - for example, access permissions that must be renewed annually, or document approvals that need periodic re-certification.

This feature introduces Decision Validity (Valid Until) - the date until which an approved decision remains valid. This is separate from the existing Voting Deadline, which controls how long approvers have to cast their votes.

Features

Flexible Validity Configuration

  • Set a specific expiration date, or define a relative period (e.g., 6 months from approval date)

  • Choose whether the validity period counts from when the approval process started or when it was approved

  • Configure defaults at global, definition, and individual approval levels

Actions When Validity Expires

  • Automatically restart the approval process using the same definition version

  • Launch a new approval using the latest definition version

  • Run custom steps specifically designed for expiration handling

Managing Validity Dates

  • View the validity expiration date on pending and approved approvals

  • Edit the validity date directly from the approvals list or approval detail view

  • Approval authors and administrators can modify validity dates

Approval History

  • When an approval is restarted due to expiration, it's linked to the original approval

  • Clear indication that an approval was restarted because the previous one expired

Notifications

  • Email notifications when an approval's validity expires

Default Behavior

The default validity period is 6 months. Administrators can adjust this default and set maximum limits at the global and definition levels.

Thanks to this, we’ll gain the ability to create approval workflows that support actions triggered after the approval expires.

I also unified the date + time + offset selects across the app with info about user’s current timezone. They should be also checked - delegation form, api key form etc.

Info for docs, and also to notify clients about status and naming changes:

Approval Expiration & Status Changes

What changed

Previously, Approval Path had a single expiration concept — Approval Expiration — a deadline set when starting an approval. When this deadline passed, the approval received an "Expired" secondary badge regardless of whether voting was still in progress or had already finished.

This release introduces Approval Validity — a separate concept that controls how long an approved approval remains valid. To accommodate this cleanly, we restructured how expiration works.

There are now two distinct time-based settings:

1. Approval Decision Deadline

This replaces the old "Approval Expiration" setting. It controls how long approvers have to cast their votes.

  • Can be configured at three levels: Global settings, Definition, and per approval (at creation time)

  • When the deadline passes on an in-progress approval, voting closes and the approval moves to a new Incomplete status

  • If the approval was already approved or rejected before the deadline, nothing happens — the decision stands

2. Approval Validity Expiration

This is a new setting that controls how long an approved approval remains valid.

  • Can also be configured at three levels: Global settings, Definition, and per approval (at creation time)

  • A "Valid until" date is assigned to approved approvals based on the configured validity period

  • When the validity date passes, the approval receives an Expired badge

  • After decision expires, expiration actions can be triggered such as restart the approval or run expiration steps

Key change: The old "Expired" badge (which meant the voting deadline passed) has been replaced by the Incomplete status. "Expired" now exclusively means the approval's validity period has ended.

Migration

Existing approvals that were previously "In Progress + Expired" (voting deadline had passed) have been automatically migrated to the Incomplete status.

Notifications

  • Incomplete: When an approval becomes incomplete, a notification is sent informing approval originator that the decision deadline has passed.

  • Expired: When an approved decision's validity expires, a separate notification is sent indicating the approval may need to be renewed.