zeroclaw-labs/zeroclaw · error · anyhow::Error

Cron job '{job_id}': shell_output_format is shell-only and c

Error message

Cron job '{job_id}': shell_output_format is shell-only and cannot be set on a '{job_type}' job

What it means

Error "Cron job '{job_id}': shell_output_format is shell-only and cannot be set on a '{job_type}' job" thrown in zeroclaw-labs/zeroclaw.

Source

Thrown at crates/zeroclaw-runtime/src/cron/store.rs:549

    }
    if let Some(uses_memory) = patch.uses_memory {
        job.uses_memory = uses_memory;
    }
    if let Some(shell_output_format) = patch.shell_output_format {
        // Config-owned (declarative) and non-shell (agent) jobs never store
        // this field: the gateway API already rejects both cases, but this
        // is the core boundary every caller of `update_job` goes through,
        // so it must reject them too rather than silently ignoring or
        // persisting a value execution never consumes.
        if job.source == "declarative" {
            anyhow::bail!(
                "Cron job '{job_id}': shell_output_format is owned by config.toml for a \
                 declarative job, not the database"
            );
        }
        if job.job_type != JobType::Shell {
            let job_type: &str = job.job_type.into();
            anyhow::bail!(
                "Cron job '{job_id}': shell_output_format is shell-only and cannot be set on a '{job_type}' job"
            );
        }
        job.shell_output_format = shell_output_format;
    }

    if schedule_changed {
        job.next_run = next_run_for_schedule(&job.schedule, Utc::now())?;
    }

    with_initialized_connection(config, |conn| {
        // Declarative jobs don't own `shell_output_format` — the config is the
        // canonical source, and `resolve_declarative_shell_output_format()` overlays
        // it on every read. Writing the synthesized (Wrapped) value back into the
        // column during an unrelated patch would overwrite whatever was stored
        // there (NULL, garbage, or a future value) with a value the DB doesn't
        // own. Omit the column from the UPDATE for declarative rows so the
        // non-owned shadow stays untouched.

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Only set shell_output_format on shell-type cron jobs.

When it happens

Trigger: Thrown at crates/zeroclaw-runtime/src/cron/store.rs:549 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/851a2eed862f7b51. Report an issue: GitHub.