diff --git a/.github/workflows/watchdog-stuck-jobs.yml b/.github/workflows/watchdog-stuck-jobs.yml index 75ecdb5372..39d4577983 100644 --- a/.github/workflows/watchdog-stuck-jobs.yml +++ b/.github/workflows/watchdog-stuck-jobs.yml @@ -312,7 +312,16 @@ jobs: # CEST and sits an hour earlier in local terms under CET. LIVENESS_HOURS=10 HOUR=$(date -u +%-H) - if (( HOUR >= 17 && HOUR <= 21 )); then + # A manually disabled daily-regen is a deliberate pause (e.g. while a + # sequential backfill owns the rate limit), not a starved schedule: + # its cron does not tick at all, so the gap grows without bound, and + # `gh workflow run` on a disabled workflow fails with HTTP 422 — which + # under `set -e` takes the whole scan down after A and B already ran. + REGEN_STATE=$(gh api "repos/${GH_REPO}/actions/workflows/daily-regen.yml" \ + --jq '.state' 2>/dev/null || echo unknown) + if [[ "$REGEN_STATE" != "active" ]]; then + echo "::notice::daily-regen liveness: workflow state is '${REGEN_STATE}', not active — rescue skipped" + elif (( HOUR >= 17 && HOUR <= 21 )); then echo "::notice::daily-regen liveness: inside/adjacent to quiet window (UTC hour $HOUR) — check skipped" else # --branch main: schedule runs (and rescue dispatches) live on the diff --git a/CHANGELOG.md b/CHANGELOG.md index f6d315e1cd..e8b772cb82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,12 @@ aggregate instead: an italic *Catalog* line at the end of the version section an reads as "tried repeatedly, must be a genuine capability gap". It now names the counted failures and the window. Three pairs written off under the old wording on 2026-08-24 succeeded on the very next dispatch (#10627). +- **A disabled `daily-regen` no longer fails every watchdog scan** — the watchdog's + cron-liveness rescue read the growing silence of a manually disabled schedule as + starvation and tried to dispatch it; GitHub answers `workflow_dispatch` on a disabled + workflow with HTTP 422, so the scan step died under `set -e` after sections A and B had + already run, and the run reported failure. The rescue now checks the workflow's state + first and skips with a notice when it is not `active` (#10540). - **Image structured data carries the licensing fields Google recommends** — Search Console flagged every implementation page's `ImageObject` for missing `creator`, `copyrightNotice`, `creditText`, and `acquireLicensePage`. The bot-page JSON-LD now