Bounds Schema

FieldTypeRequiredDescription
profilestringYes-
booking_daily_maxnumberYesMaximum new events booked per day
booking_duration_maxnumberYesMaximum duration of a single event
lookahead_days_maxnumberYesMaximum number of days into the future an event can be booked

Key order: profile, booking_daily_max, booking_duration_max, lookahead_days_max

Context Schema (local only)

FieldTypeRequiredDescription
allowed_calendarsstringNoComma-separated list of calendar names the agent may access
allowed_attendeesstringNoComma-separated list of allowed attendee email addresses
allowed_domainsstringNoComma-separated list of allowed attendee domains (e.g. acme.com,partner.org)

Key order: allowed_calendars, allowed_attendees, allowed_domains

Full Definition

{
  "id": "github.com/humanagencyprotocol/hap-profiles/calendar@0.4",
  "name": "Calendar",
  "version": "0.4",
  "description": "Calendar authority — governs calendar access: reading, drafting, and booking events",
  "boundsSchema": {
    "keyOrder": [
      "profile",
      "booking_daily_max",
      "booking_duration_max",
      "lookahead_days_max"
    ],
    "fields": {
      "profile": {
        "type": "string",
        "required": true
      },
      "booking_daily_max": {
        "type": "number",
        "required": true,
        "displayName": "Daily booking limit",
        "description": "Maximum new events booked per day",
        "unit": "count",
        "boundType": {
          "kind": "cumulative_count",
          "window": "daily"
        }
      },
      "booking_duration_max": {
        "type": "number",
        "required": true,
        "displayName": "Max event duration",
        "description": "Maximum duration of a single event",
        "unit": "minutes",
        "boundType": {
          "kind": "per_transaction",
          "of": "duration"
        }
      },
      "lookahead_days_max": {
        "type": "number",
        "required": true,
        "displayName": "Max lookahead",
        "description": "Maximum number of days into the future an event can be booked",
        "unit": "days",
        "boundType": {
          "kind": "per_transaction",
          "of": "lookahead"
        }
      }
    }
  },
  "contextSchema": {
    "keyOrder": [
      "allowed_calendars",
      "allowed_attendees",
      "allowed_domains"
    ],
    "fields": {
      "allowed_calendars": {
        "type": "string",
        "required": false,
        "displayName": "Allowed calendars",
        "description": "Comma-separated list of calendar names the agent may access",
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      },
      "allowed_attendees": {
        "type": "string",
        "required": false,
        "displayName": "Allowed attendees",
        "format": "email",
        "description": "Comma-separated list of allowed attendee email addresses",
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      },
      "allowed_domains": {
        "type": "string",
        "required": false,
        "displayName": "Allowed domains",
        "format": "domain",
        "description": "Comma-separated list of allowed attendee domains (e.g. acme.com,partner.org)",
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      }
    }
  },
  "executionContextSchema": {
    "fields": {
      "duration": {
        "source": "declared",
        "description": "Duration of the event in minutes",
        "required": true,
        "constraint": {
          "type": "number",
          "enforceable": [
            "max"
          ]
        }
      },
      "lookahead": {
        "source": "declared",
        "description": "Days from now the event is scheduled",
        "required": true,
        "constraint": {
          "type": "number",
          "enforceable": [
            "max"
          ]
        }
      },
      "allowed_calendars": {
        "source": "declared",
        "description": "Calendar being used (checked against authorized calendars)",
        "required": false,
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      },
      "allowed_attendees": {
        "source": "declared",
        "description": "Attendee addresses from this event (checked against authorized attendees)",
        "required": false,
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      },
      "allowed_domains": {
        "source": "declared",
        "description": "Unique attendee domains from this event (checked against authorized domains)",
        "required": false,
        "constraint": {
          "type": "string",
          "enforceable": [
            "subset"
          ]
        }
      },
      "booking_count_daily": {
        "source": "cumulative",
        "cumulativeField": "_count",
        "window": "daily",
        "description": "Running daily booking count (resolved from execution log)",
        "required": true,
        "constraint": {
          "type": "number",
          "enforceable": [
            "max"
          ]
        }
      }
    }
  },
  "requiredGates": [
    "bounds",
    "intent",
    "commitment",
    "decision_owner"
  ],
  "ttl": {
    "default": 86400,
    "max": 31536000
  },
  "retention_minimum": 7776000
}