Composite DSL

The composite DSL lets you write rules that combine multiple conditions to modify meeting class priorities at runtime.

What is the composite DSL

By default, meeting class priority is a static number you set in the dashboard. The composite DSL lets you write conditional priority rules that adjust that number based on context:

  • "Add +20 priority to recruiting interviews in May"
  • "Cap external_customer_call at priority 60 during code freeze"
  • "Block all bookings outside working hours regardless of priority"

Rules are evaluated in order of their priority field (lower number = evaluated first).

Syntax

composite/<rule-name>
  when: <condition>
  then: <modifier>

Example:

- name: may_recruiting_boost
  when:
    class: recruiting_interview
    month: [5]
  then:
    priority_add: 20

- name: freeze_cap
  when:
    class: external_customer_call
    tag: code_freeze
  then:
    priority_max: 60

Priority modifiers

ModifierEffect
priority_add: NAdd N to the class's base priority
priority_set: NOverride the priority to exactly N
priority_max: NCap the priority at N (can only lower, never raise)
reject: trueUnconditionally reject any request matching the condition

Modifiers are applied in order. If multiple rules match, their effects stack (except reject which short-circuits).

Example rules

Protect focus time during deep work hours:

- name: protect_focus_blocks
  when:
    class: focus_block
    hour_range: [9, 12]
  then:
    priority_add: 30

Block all bookings on a specific date:

- name: company_holiday
  when:
    date: '2026-07-04'
  then:
    reject: true
    reason: 'Company holiday — no bookings'

Evaluation order

  1. Hard constraints (working hours, sacred meetings) — evaluated first, cannot be overridden
  2. Composite DSL rules — evaluated in ascending priority order
  3. Base class priority — used if no composite rule modifies it

If a composite rule produces reject: true, processing stops immediately and the audit row records rule_fired: <rule-name>.