Skip to content

Catch a Stopped Watch Schedule

llms.txt lists every page for an agent
Optional: hand this page to your coding agentThe steps work by hand too.
Show the whole prompt
Read https://intentius.io/chant/guide/overdue-scheduled-ops/.
Check that this repository's pull-request pipeline runs `chant components pr-plan` with `--forge`, and that on GitHub its `plan-note` job has `actions: read`. If it does not, regenerate the pipeline with the command in its header and open a pull request with it.
Never deploy to a real cloud account or shared environment (with `chant run`, `chant components` or a platform's own CLI), approve (a pull request review, `chant approve` or `chant run approve`), override a policy denial (`chant approve policy-override`), or merge; never cut or publish a release (`chant release cut --yes` or `chant release publish`), push or delete a `ci/*` tag (`chant ci tick` pushes them), or change the value of an existing flag; never touch `.chant/allowed_signers` or `chant/lifecycle`.

A scheduled watch or reconcile Op can stop running with no error anywhere. GitHub turns a scheduled workflow off after 60 days with no activity in the repository, and on GitLab the job runs only from a pipeline schedule that someone created. Since a stopped job cannot report itself, the pull-request plan reports it (#4289).

chant components pr-plan with --forge checks every Op it discovers that has a schedule and the Watch or Reconcile label (packages/core/src/op/schedule-overdue.ts:48). WatchOp and ReconcileOp set those labels (packages/core/src/op/composites/watch-op.ts:80, packages/core/src/op/composites/reconcile-op.ts:80).

The plan skips an Op unless the checkout holds the file chant run --generate wrote for it (packages/core/src/op/schedule-overdue.ts:146), so Ops that chant operator or another scheduler runs are left alone.

ForgePipeline fileWhat the forge is asked
GitHub.github/workflows/<op>.yml, or <member>-<op>.yml in a workspace memberThe workflow’s state, and its newest schedule and workflow_dispatch runs
Forgejo.forgejo/workflows/<op>.yml, or <member>-<op>.ymlThe repository’s runs, kept to that workflow’s schedule and workflow_dispatch events
GitLabThe root *.gitlab-ci.yml whose rules test $CHANT_SCHEDULED_OP == "<op>"The active pipeline schedules that set CHANT_SCHEDULED_OP to the Op, and their last pipelines

The paths come from packages/core/src/op/schedule-overdue.ts:69 and :73. The forge calls are in packages/core/src/pr-forge.ts:814 (GitHub and Forgejo) and :1046 (GitLab).

The plan counts the fires of the Op’s cron in UTC since the job last ran (packages/core/src/op/cron.ts:158). When no run is on record, it counts from the commit that added the pipeline file. Two fires or more is overdue (packages/core/src/op/schedule-overdue.ts:110), while one late or dropped run is not.

Each overdue Op adds a line to the plan note (packages/core/src/pr-loop.ts:584), such as:

Warning: Op `drift-watch` is overdue: its schedule `0 6 * * *` has fired at least twice and its last run was on 2026-10-18. GitHub has turned the workflow off (disabled_inactivity). Turn it on again under Actions.

The job log gets the same line. Chant 0.124.41 and newer also list the Ops in the report’s overdue field (packages/core/src/pr-loop.ts:393). A workspace member’s note is posted for an overdue Op even when the change reaches none of its components (packages/core/src/cli/handlers/pr.ts:455).

The warning never fails the plan, and when the forge refuses the call the job log says so and the Op gets no verdict (packages/core/src/op/schedule-overdue.ts:151).

  • GitHub: the generated plan-note job asks for actions: read (lexicons/github/src/components/generate-pipeline.ts:356). The plan job holds no forge token since #4295, so pr-post in the note job runs the check, with the Ops read at the target branch’s commit. A pipeline generated before chant 0.124.41 lacks it, so regenerate it with the command in its header.
  • Forgejo: the job token reads the repository’s runs.
  • GitLab: listing pipeline schedules needs an access token with the read_api scope, which the job token lacks. Set CHANT_GITLAB_TOKEN or GITLAB_TOKEN, which --forge gitlab reads before CI_JOB_TOKEN (packages/core/src/pr-forge.ts:1232).
  • GitHub: turn the workflow on again under Actions, or run it once by hand.
  • GitLab: add a pipeline schedule with the Op’s cron and the variable CHANT_SCHEDULED_OP set to the Op’s name.
  • Forgejo: check that Actions is on and a runner is up, then run the workflow by hand.

The next plan after a run sees it and drops the warning.

chant