jdx/mise · error
agent ' ' `start_calendar_interval` must not be empty
Error message
agent '{agent_name}' `start_calendar_interval` must not be empty What it means
Thrown when `start_calendar_interval` is provided as a list and that list is empty. launchd cannot schedule anything from an empty array of calendar intervals, so the library rejects it during validation. Providing the key at all signals intent to schedule, so an empty list is a configuration error rather than a no-op.
Solutions
- Add at least one calendar interval object to the list, each with at least one field (e.g. `[{ minute = 0, hour = 3 }]`).
- If scheduling should be disabled, remove the `start_calendar_interval` key entirely.
- Check any template/tooling that generates the list to ensure at least one interval is emitted or the key is omitted.
Example fix
# before
[agents.backup.system]
start_calendar_interval = []
# after
[agents.backup.system]
start_calendar_interval = [{ minute = 0, hour = 3 }] Defensive patterns
Strategy: validation
Validate before calling
function validateIntervals(intervals) {
if (Array.isArray(intervals) && intervals.length === 0) {
throw new Error('start_calendar_interval must not be empty');
}
} Type guard
function nonEmptyIntervals(v) {
return Array.isArray(v) && v.length > 0 ? v : null;
} Prevention
- Omit start_calendar_interval entirely when no schedule is desired.
- Ensure template generators either emit >=1 interval or drop the key.
- Lint agent configs for empty arrays.
When it happens
Trigger: Declaring `start_calendar_interval = []` (an empty multiple-interval list) in an agent's system configuration; programmatically building the intervals array and leaving it with zero entries.
Common situations: Templated configs where the intervals list is generated from variables that resolved to nothing; users removing all list entries intending to disable scheduling; copy-paste of a multi-entry example with entries deleted.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- agent ' ' `start_calendar_interval` must set at least one…
- agent ' ' `start_calendar_interval. ` must be between and
- agent ' ' `queue_directories` must not contain empty entries
- agent ' ' cannot set both `keep_alive` and…
- agent ' ' must set a non-empty `program
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/194cf48fe9c3fc72.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/launchd.rs:191
{
bail!("agent '{agent_name}' `start_calendar_interval` must set at least one field");
}
validate_range(agent_name, "minute", self.minute, 0, 59)?;
validate_range(agent_name, "hour", self.hour, 0, 23)?;
validate_range(agent_name, "day", self.day, 1, 31)?;
validate_range(agent_name, "weekday", self.weekday, 0, 7)?;
validate_range(agent_name, "month", self.month, 1, 12)?;
Ok(())
}
}
impl LaunchdCalendarIntervals {
fn validate(&self, agent_name: &str) -> Result<()> {
match self {
Self::Single(interval) => interval.validate(agent_name),
Self::Multiple(intervals) => {
if intervals.is_empty() {
bail!("agent '{agent_name}' `start_calendar_interval` must not be empty");
}
for interval in intervals {
interval.validate(agent_name)?;
}
Ok(())
}
}
}
}
fn validate_range(
agent_name: &str,
field: &str,
value: Option<u8>,
min: u8,
max: u8,
) -> Result<()> {
if let Some(value) = valueView on GitHub (pinned to 533346cc37)