Timeline Module Guide
Timeline is the operational run-of-show module for Tov+.
Purpose
Timeline is the operational run-of-show module for Tov+.
It provides:
- occasion-level installation through the module platform
- event-level timeline enablement
- planner-managed timeline items with assignments and dependency links
- vendor-scoped schedule visibility for assigned work
- guest-safe summary items when an event explicitly enables them
Timeline is not a generic note list. It is the module that captures the ordered operational plan for an event.
Scope model
Timeline is installed once per occasion and enabled per event.
That means:
- the occasion installation defines the default timeline posture
- each event enablement decides whether guest-safe summary items may be exposed
- every timeline item belongs to exactly one event
- cross-event dependency links are not allowed
The current install config uses default_view_mode.
The current event enablement config uses guest_summary_visible.
Timeline item model
Each timeline item stores:
- occasion scope and event scope
- module installation and enablement ids
- title and optional description
starts_at- either
ends_at,duration_minutes, or both sort_order- operational status
- visibility classification
- optional owner actor
- optional location and notes
Statuses are:
scheduledin_progresscompletedblockedcancelled
Visibility values are:
internalassigned_vendorguest_summary
internal is planner-only operational detail. assigned_vendor is visible to authorized vendor contexts that are actually assigned to the item. guest_summary is the guest-safe public summary posture.
Assignment model
Timeline assignments attach actors to timeline items.
The baseline assignment roles are:
ownersupport
Assignments can target planner actors, vendor actors, and teams as long as the actor belongs to the same occasion. The server validates actor existence and occasion membership before writes are accepted.
The item-level owner_actor_id remains a convenience field for the primary owner. Assignment rows are the fuller multi-actor model.
Dependency model
Timeline supports explicit dependency edges between items within the same event.
The baseline dependency types are:
finish_to_startstart_to_start
Each dependency also stores offset_minutes.
Current behavior:
- predecessor items must already exist
- predecessor and successor must stay inside the same event
- self-dependencies are rejected
- cyclic graphs are rejected
Automatic rescheduling is not implemented in this task. The current implementation captures and validates the dependency graph so later tasks can build rescheduling or critical-path behavior on top of it.
Planner flow
Planner routes are:
GET /v1/occasions/:occasion_id/timelinePOST /v1/occasions/:occasion_id/timeline/itemsPATCH /v1/occasions/:occasion_id/timeline/items/:timeline_item_idDELETE /v1/occasions/:occasion_id/timeline/items/:timeline_item_id
The planner dashboard route is:
/occasions/:occasionId/timeline
The planner view supports:
- loading event-aware timeline items
- creating and editing timeline items
- setting timing, ordering, status, visibility, location, and notes
- assigning actors
- defining dependency links
- deleting timeline items
The page is intentionally form-first rather than a full gantt-style visualization. It is built to be operationally usable now while leaving room for richer timeline views later.
Vendor flow
Vendor route:
GET /v1/vendors/occasions/:occasion_id/timeline
Vendor app route:
/occasions/:occasionId/schedule
Vendor visibility rules:
- an active vendor actor context is required
- the vendor actor scope includes the active actor plus linked parent/child memberships
internalitems are always excluded- the vendor only sees items that have at least one assignment within that actor scope
- centralized authorization must still allow
resource:timeline_item:view
This gives vendors a practical working schedule without exposing the full planner operations surface.
Guest flow
Guest route:
GET /v1/guest/occasions/:occasion_slug/timeline
Guest app route:
/schedule
Guest visibility rules:
- the guest token must resolve to the same occasion
- the event must be accessible to that guest token
- Timeline must be enabled for that event
- the enablement must set
guest_summary_visible = true - the item visibility must be
guest_summary
Guests never receive internal or assigned_vendor items from this API.
Permissions and visibility
Planner management remains centralized. The baseline planner actions are:
timeline:listtimeline:createtimeline:updatetimeline:delete
Vendor item reads use:
resource:timeline_item:view
Timeline therefore follows the existing permission model instead of embedding access rules in frontend code.
Module-platform integration
Timeline is a real module definition in the shared registry.
It currently declares:
- occasion installation scope
- event enablement scope
- actor-domain dependency
- planner, vendor, and guest surfaces
- install and enablement config schemas
The server-side timeline queries require the installation to exist and, where relevant, require an event enablement record for the target event.