chant operator
Synopsis
Section titled “Synopsis”chant operator [flags]chant operator status [flags]chant approve <op> <gate> [flags]Description
Section titled “Description”chant operator runs scheduled ticks for every discovered ConvergeOp locally — no Temporal server, no new state store. Coordination is a git-ref lease; tick state is a ledger fact on the chant/lifecycle orphan branch. See the Operator guide for the full design (pipeline vs converge ops, the lease, crash recovery, gate-as-fact).
chant approve is the sibling command that records a gate’s out-of-band resolution — the durable counterpart to a tick’s gated outcome.
Subcommands
Section titled “Subcommands”operator
Section titled “operator”Tick every discovered ConvergeOp, on --interval, until Ctrl-C.
chant operatorchant operator --env stagingchant operator --interval 30s --lease-ttl 2mchant operator --once| Flag | Default | Meaning |
|---|---|---|
--env <name> | all | Scope discovery to ConvergeOps declaring this environment (searchAttributes.Env) |
--interval <duration> | 60s | How often the daemon runs a round. Accepts the same duration syntax as an activity profile timeout (30s, 5m, 1h30m) |
--lease-ttl <duration> | 5m | How long an acquired lease is valid before another operator can reclaim it |
--once | off | Run a single round and exit, instead of looping. Exits non-zero if any op’s tick failed this round. What a cron job, CI step, systemd timer, or Kubernetes CronJob should pass — the daemon form (--once omitted) is for a machine that stays up |
Each round prints one line per discovered ConvergeOp:
operator: staging-converge@staging ticked=1 ok=trueoperator: prod-converge@prod skipped=1(lease-held:mac.local:4821:9f2c1a3b)A ConvergeOp’s own schedule (its Temporal cron field) is unrelated to --interval — it drives the durable TemporalSchedule resource chant build generates, not anything the operator reads back at discovery time. --interval is the operator daemon’s own, separate cadence.
operator status
Section titled “operator status”Print the last tick, outcome counts, and pending gates for every discovered ConvergeOp, read from the ledger alone — no daemon needs to be running.
chant operator statuschant operator status --env stagingchant operator status --json| Flag | Meaning |
|---|---|
--env <name> | Scope to ConvergeOps declaring this environment |
--json | Emit the same data as a JSON array instead of the human-readable form |
approve <op> <gate>
Section titled “approve <op> <gate>”Record a gate’s out-of-band resolution — the durable counterpart to a converge tick’s gated outcome (see the Operator guide’s Gate-as-fact section).
chant approve fountain-apply rollout-gatechant approve fountain-apply rollout-gate --actor alex --note "https://github.com/org/repo/pull/123"| Flag | Default | Meaning |
|---|---|---|
--actor <name> | $GITHUB_ACTOR / $GITLAB_USER_LOGIN / $USER | Who resolved the gate — recorded on the resolution fact |
--note <text> | — | Free-text context (e.g. a PR URL) recorded alongside the resolution |
Recording a resolution does not retroactively unblock the gated op’s own local dispatch — the local executor still refuses any Op containing a gate, unconditionally. Re-run it with --temporal, or let the merged PR the note points at carry the change itself.
See also
Section titled “See also”- Operator guide — the full design
chant run— the local executorchant operatorticks through- Converging Lifecycle — defining a
ConvergeOp