Scheduling
Facilities, services, resource assignments, conflicts, timeline UI, iCal, and the connector hook catalogue.
Overview
Signals scheduling is the system of record for demand and assignments. Crew capability matching and external crewing tools sit outside core — they integrate via the Plugin SDK hook catalogue, webhooks, and the resource-assignment API.
Surfaces
| Surface | Path / name | Permission / ability |
|---|---|---|
| Resource Timeline UI | /scheduling/timeline |
resource-assignments.access |
| Facilities API | /api/v1/facilities |
facilities:* |
| Services API | /api/v1/services |
services:* |
| Resource assignments API | /api/v1/resource-assignments |
resource-assignments:* |
| Unscheduled demand | GET /api/v1/resource-assignments/unscheduled |
resource-assignments:read |
| Conflicts API | /api/v1/scheduling-conflicts |
scheduling-conflicts:* |
| iCal feeds | signed /calendar/feed URLs |
signature required |
Resource types
Live polymorphic resource_type values: account (crew) and facility.
vehicle and dispatch_group are schema-reserved for a later fleet phase.
Connector columns
Assignments carry source (core or a plugin/connector id) and optional
external_reference (unique per source) for idempotent sync writes.
Plugin hooks (mandatory catalogue)
| Hook | Type | When |
|---|---|---|
assignment.creating |
Validator | Before persist — veto creation |
assignment.created |
Event | After create |
assignment.status_changed |
Event | confirm / start / complete / cancel |
conflict.detected |
Event | Conflict stored on write |
demand.unmet |
Event | Cancel leaves service shortfall |
assignment.query |
Filter | List / timeline read queries |
Webhook event names use the resource_assignment.* and scheduling_conflict.*
prefixes — see Webhooks. Hook registration details:
Plugin hooks.
Dashboard
The Scheduling conflicts widget (scheduling-overview) shows open conflict
counts, unmet demand, and top items linking to the Resource Timeline.