Appearance
Scheduling engine
Who this is for: Developers and advanced admins
What you'll achieve: Understand materialise → recompute → publish
Implementation lives in packages/domain (especially engine.ts) and is invoked from apps/web day services.
Pipeline
mermaid
flowchart LR
Template[Weekly template] --> Materialise[Materialise]
Materialise --> Absences[Apply absences]
Absences --> Gaps[Find gaps]
Gaps --> Score[Score candidates]
Score --> Propose[Propose revision]
Propose --> Publish[Explicit publish]
Publish --> Notify[Notification rules]- Materialise — copy template slots/assignments into a day revision
- Apply absences — remove unavailable people
- Find gaps — unmet headcount / lead / capability requirements
- Score candidates — duty tiers, grade priority, capabilities, fairness heuristics
- Propose — write a draft revision with explanations
- Publish — lock revision; fire notifications
Hard rules (product)
- Engine output is a proposal — never auto-publish
- Last-resort placements must remain visible and explainable
- Audit trail records publish and material config changes
Same-day ops
Recording an absence triggers a propose recompute. Duty leads review on Today and publish. See Recording absences.
Tests
bash
pnpm testDomain unit tests cover constraint and scoring behaviour.
Related
- Today board
docs/SYSTEM_PLAN.md§10
