Elonn Docs Platform Documentation

Time Contract

Time is the personal calendar and task authority. It owns calendars, appointments, tasks, schedule views, recurrence, reminders, and calendar mirrors of objects owned by other domains.

A bare event is a Social event. A scheduled Time object is an appointment or calendar event; an actionable Time object is a task.

Ownership

Time owns:

  • calendars
  • appointments (VEVENT)
  • tasks (VTODO)
  • calendar slots and time boundaries
  • recurrence rules and occurrence expansion
  • reminder definitions (VALARM)
  • calendar object sources
  • calendar workspace payloads as compatibility presentation content
  • calendar mirrors of Social events
  • DAV integration through credentials issued by API

Boundaries:

  • Social owns Social event identity, visibility, RSVP, participants, and discussion.
  • Time owns the calendar entry or mirror used to render that Social event on calendars.
  • World owns composed object identity, effective permissions, relationships, placement, runtime routing, focus, and workspace composition.
  • Runtimes own panels, rails, markers, lists, meshes, interaction, and rendering.

Producer object route

World consumes Time object sources from:

GET /objects

Time returns:

Field Type Meaning
objects.appointments array Calendar event object sources
objects.tasks array Task object sources

This is the service-to-World route. It is not a runtime route. Runtimes do not call it.

Time object source

Time appointments and tasks follow the object source contract.

Field Type Meaning
source.service string time
source.resource_type string calendar_event or task
source.resource_id string Stable Time object id
object_type string calendar_event or task
title string Calendar event or task title
summary string Time, location, and calendar summary when available
state object Runtime-safe Time object state from the canonical calendar object
domain_permissions.can_view boolean Member may view the Time object
domain_permissions.can_update boolean Member may update Time-owned editable fields
domain_permissions.can_delete boolean Member may delete the Time object
domain_actions array open_time_object, update_time_object, and delete_time_object semantic actions
relationships array Empty unless Time owns a service-local relationship

Time object sources must not include panels, rails, docks, stacks, Surface ids, runtime URLs, or placement. World maps Time object sources into canonical World objects and World-routed actions.

Runtime routes through World

Runtimes use World URLs for visible Time behavior:

GET    /world/panels/time?view={day|week|month|agenda|tasks}&date={YYYY-MM-DD}&timezone={IANA timezone}
POST   /world/calendars
PATCH  /world/calendars/{id}
DELETE /world/calendars/{id}
POST   /world/time/objects
PATCH  /world/time/objects/{id}
DELETE /world/time/objects/{id}

World relays calendar workspace behavior to Time and composes returned content into the center-stack calendar surface. The transient panel bridge is not the calendar workspace.

Service routes

Time exposes service-level routes for calendar behavior:

GET    /events
POST   /events
GET    /events/{id}
PATCH  /events/{id}
DELETE /events/{id}
GET    /tasks
POST   /tasks
GET    /tasks/{id}
PATCH  /tasks/{id}
DELETE /tasks/{id}
POST   /integrations/social/events
GET    /objects

Runtimes do not call these routes directly. Social may use /integrations/social/events to push Social event mirrors into Time.

Social event mirrors

When a Social event has calendar relevance, Time stores a mirror with source metadata:

Field Meaning
source_service social
source_object_type event
source_object_id Social event id

The mirror lets Time render the event in calendars and schedule views. It does not transfer event ownership from Social to Time.

Mirror lifecycle:

  • Social creates or updates the mirror through Time when the Social event changes.
  • Time owns the calendar presentation fields for the mirror.
  • Social owns the event identity, visibility, RSVP, participants, and discussion fields.
  • Runtimes refresh through World after Time or Social writes; they do not call Social to resolve the mirror.

Edit authority

Calendar-only entries are edited through Time.

Social event mirrors are edited according to the field being changed:

Change Authority
Calendar display, reminder, calendar placement Time
Event title, summary, visibility, RSVP, participants, community context, discussion Social
Event time bounds for a Social event Social first; Time mirrors the result

Social mirrors reject Time or DAV edits to Social-owned fields. Calendar assignment, display color, local visibility, and alarms remain Time-owned and survive later Social synchronization.

Canonical calendar objects

Each Time calendar is a mixed CalDAV collection that may contain both VEVENT and VTODO objects. The canonical object stores the complete iCalendar payload plus indexed fields used for range, task, ownership, and source queries.

  • Appointments support start/end, all-day state, timezone, location, RRULE, recurrence exceptions, and VALARM.
  • Tasks support start, due date, completion, status, priority, RRULE, and VALARM.
  • Native Time APIs and CalDAV read and write the same canonical objects.
  • Push, email, and background alarm delivery are outside this milestone; reminder definitions still round-trip through Time and DAV.

Calendar workspace

The Time payload supplies view, anchor_date, range, timezone, calendars, appointments, tasks, editable-field metadata, and action URLs. Day, week, month, agenda, and tasks are distinct views with previous, next, and today navigation. Workspace refreshes preserve the selected view, anchor date, and timezone. Runtimes render the payload inside the durable surface_calendar; they must not substitute a transient panel or generic list.

CalDAV

Time exposes standards-based DAV collections externally at https://services.elonn.com/caldav/. Members authenticate with their normal Elonn email or username and account password; API remains the credential authority and Time never reads password hashes. /dav/ remains a compatibility alias on the Time host. Required behavior includes principal discovery, calendar home discovery, mixed VEVENT/VTODO collections, object CRUD, ETags, sync tokens, calendar-query, and calendar-multiget.

Runtime rules

  • Runtimes must call World, not Time, for visible calendar workspace state.
  • Runtimes must label Time-owned objects as calendar events or time events.
  • Runtimes must not call Social to resolve calendar mirrors.
  • Runtimes must treat source_service and source_object_type as ownership metadata, not as runtime routing instructions.
  • Runtimes do not consume GET /objects; World consumes it and translates the result.