Static Documentation

Calendar

Version latest · Updated 2026-06-04
Interactive docs View on GitHub

Calendar#

Open:

Calendar

The calendar shows on-call duty calculated from rotations, rotation layers, layer member periods, restrictions and overrides.

Views#

The first calendar view helps users understand the current schedule across visible teams.

Typical usage:

  • see all available teams for the current week;
  • open one team schedule;
  • switch to month view for a specific team;
  • verify rotation handoff times;
  • verify layer restrictions;
  • verify member start dates;
  • verify overrides.

What the calendar uses#

The calendar takes into account:

  • enabled rotations;
  • enabled rotation layers;
  • layer member periods;
  • member order;
  • member starts_at;
  • member ends_at;
  • rotation type;
  • rotation interval and duration;
  • handoff time;
  • timezone;
  • layer restrictions;
  • overrides.

Historical schedule behavior#

IncidentRelay keeps historical layer membership periods.

When a user is removed from a layer, the current membership period is closed with ends_at.

Past shifts are still shown.

Future shifts are calculated without that user.

When the same user is added again, IncidentRelay creates a new membership period.

Example:

2026-06-01 09:00  Ivan added
2026-06-05 12:00  Ivan removed
2026-06-10 09:00  Ivan added again

Calendar behavior:

before 2026-06-05 12:00     Ivan may appear
2026-06-05 to 2026-06-10    Ivan does not appear
after 2026-06-10 09:00      Ivan may appear again

Future member starts#

A layer member can have starts_at in the future.

The member appears in the layer configuration immediately, but the calendar does not use that user until starts_at.

This is useful when a new engineer should join the rotation next week or after onboarding.

Troubleshooting#

If the calendar looks wrong, check:

  • The rotation is enabled.
  • The layer is enabled.
  • The layer has open member periods.
  • Member positions are correct.
  • Member starts_at is not in the future.
  • Member ends_at is not already reached.
  • Handoff time and timezone are correct.
  • Layer restrictions match the expected time window.
  • Overrides do not replace the expected user.
  • The user has access to the team through group and team membership.