Ulsav Docs

Event Status

The five state dimensions an Event carries, the values each uses, and who may trigger each transition

An Event has no single status field. It has five dimensions that move independently, and a page that shows one of them labelled "status" is showing a projection, not the whole state.

DimensionValuesNatureControlled by
Publicationdraft, published, archivedStoredOrganizer
Schedulescheduled, postponed, cancelled, completedStoredOrganizer
Salesscheduled, open, paused, closedDerived, with one stored pause flagPublication, moderation, schedule, the pause flag, and time
Visibilitypublic, unlisted, privateStoredOrganizer
Moderationactive, under_review, suspended, bannedStoredUlsav platform

Pass sale state is a separate derived value. It is covered under Sales.

Publication

createpublish (validated)deletearchivedraftpublishedarchived
Diagram source
stateDiagram-v2
  [*] --> draft: create
  draft --> published: publish (validated)
  draft --> [*]: delete
  published --> archived: archive
  • Drafts are private work. A draft is organizer-visible only. Only a draft can be deleted.
  • Publishing is a gate. It requires validation and records a published revision (Publishing rules).
  • There is no unpublish. A published Event never returns to draft.
  • Archiving hides, it does not delete. An archived Event keeps its Registrations, Orders, and revisions. Organizer lists exclude archived Events unless the request asks for that status explicitly, and public reads treat them as absent.

Archiving is accepted on any published Event that is not suspended or banned, not only one that has ended or been cancelled. The schedule dimension is unchanged by the archive.

Schedule

postponerescheduleresumereschedulepostpone againcancelcancelcompletescheduledpostponedcancelledcompleted
Diagram source
stateDiagram-v2
  [*] --> scheduled
  scheduled --> postponed: postpone
  scheduled --> scheduled: reschedule
  postponed --> scheduled: resume
  postponed --> postponed: reschedule
  postponed --> postponed: postpone again
  scheduled --> cancelled: cancel
  postponed --> cancelled: cancel
  scheduled --> completed: complete
  cancelled --> [*]
  completed --> [*]
  • Completed is explicit and late. complete is an organizer action and is refused until the Event end has passed. Nothing completes an Event automatically, and there is no grace period.
  • Cancellation is irreversible. It stops sales, invalidates admission, and creates refund obligations described in Cancellation.
  • Postponement keeps every Registration and Order. It records a postponed revision and a public notice. It does not open a refund window and does not queue a buyer notification.
  • Rescheduling is a dedicated workflow. reschedule replaces the Event dates, the complete EventSession plan, and any submitted Pass sale windows in one transaction. It records a rescheduled revision and a public notice.

There is no transition from completed or cancelled back into scheduled. A repeat edition is a new Event, usually in the same EventSeries.

Sales

Two derived values answer different questions.

The Event's sales state is derived from its stored lifecycle and the pause flag:

StateWhen it applies
closedPublication is not published, the Event is suspended or banned, or the schedule is cancelled or completed
pausedThe Event's stored salesPaused flag is set
scheduledThe Event is published, not moderated or paused, and now is before the start
openThe Event is published, not moderated or paused, and now is at or after the start

A Pass has four sale states, and it never stores any of them. They are derived from its sale window and whether it is still active:

StateWhen it applies
scheduledThe Pass is active and the sale window has not opened yet
on_saleThe Pass is active and now is inside the window
endedThe Pass is active and the window has closed
cancelledThe Pass is inactive

cancelled on a Pass is not an organizer transition. The only way a Pass becomes inactive today is Event cancellation, which deactivates every Pass of that Event.

There is no separate "sold out" state and no "paused" Pass state. Selling stops for two other reasons:

  • The Event sales are paused. That is one stored flag on the Event, not a state per Pass.
  • Capacity is exhausted. Checkout refuses the Order; the Pass itself still reads on_sale.

Three consequences follow.

  • A cancelled or archived Event cannot sell, whatever its Passes say.
  • A suspended or banned Event cannot sell and cannot be mutated.
  • Pausing stops new checkouts only. It does not cancel anything already paid.

Visibility

  • public is listed in discovery and included in the sitemap.
  • unlisted is reachable by direct URL but absent from discovery and the sitemap.
  • private is absent from public reads for everyone outside the Organization.

The default is public, and Event visibility covers the rest. Private is not an invitation system: no viewer authorization exposes a private Event through the public API.

Moderation

Moderation is Ulsav-controlled and separate from every organizer dimension. under_review is informational; suspended and banned override sales and mutation capability.

The rule that matters: moderation does not rewrite organizer lifecycle history. A suspended Event is still published, still has its schedule, and returns to exactly the state it held once the suspension is lifted.

Transitions and authority

TransitionTriggerAuthority
Create a draftOrganizer actionevents.create
Draft to publishedOrganizer action, after validationevents.publish
Published content editOrganizer actionevents.update; only the freely editable fields are accepted
Sales pause or resumeOrganizer actionevents.update
Schedule change (reschedule)Organizer actionevents.update
Scheduled or postponed to postponedOrganizer actionevents.update
Postponed to scheduledOrganizer action with a new scheduleevents.update
Scheduled or postponed to cancelledOrganizer actionevents.update; irreversible
Scheduled or postponed to completedOrganizer action after the Event endevents.update
Published to archivedOrganizer action at any timeevents.update
Any to suspended or bannedUlsav platform reviewPlatform only; never assignable to an Organization

The catalog contains an events.cancel capability, but no operation checks it. Event cancellation checks events.update.

Reading state correctly

Three habits prevent most misreadings.

  • Do not infer saleability from publication. A published Event whose Pass windows have all passed is unsellable.
  • Do not infer admission from schedule. Admission also needs a confirmed Registration, active Participants, an accepting checkpoint, and passing requirements.
  • Do not treat a derived value as something to set. If a Pass shows scheduled when you expect it on sale, change the window or the Event state.

On this page