You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: alert when the nightly or its triage post is missing - #726
The nightly run posts to #camunda-hub-nightly-test-results every night, and so does the triage that follows it. If the Slack step fails, the run turns red. But if a run never starts (a disabled schedule, a GitHub outage) or hangs, nothing posts and nothing is red, so a missing post goes unnoticed until someone notices the quiet channel. This PR adds a morning check that looks for exactly that and posts one alert.
What to look at
.github/workflows/hub-nightly-post-check.yml (new): runs daily at 04:30 UTC, after the nightly (02:00) and its triage have finished. Same structure as the gap digest: Vault Slack token, a script, and the fail-if-slack-failed step at the end. A manual run is a dry run by default.
scripts/triage/hub-nightly-post-check.ts (new): reads today's runs (UTC) of nightly-camunda-hub.yml and triage-camunda-hub-nightly.yml and decides what is wrong. It reports:
the scheduled nightly did not start today, is still running, or ended as anything but success or failure. A manual nightly does not stand in for it;
the triage for that nightly did not run, is still running, or ended as anything but success. A manual triage, or the triage of a manual nightly, does not count.
.github/workflows/triage-camunda-hub-nightly.yml: one line, run-name: Triage of nightly <id>. It puts the nightly's run id in the triage run's title, so the check can tell which nightly each triage run belongs to (the list API does not return the triggering run). Nothing else in that workflow changes.
The alert goes to #camunda-hub-nightly-test-results, pings hub-medic, links the run and the nightly cookbook. It posts nothing when both ran.
tests/triage/hub-nightly-post-check.test.ts (new) and two lines added to tests/request-validation/slack-failure-marks-run-failed.test.ts, so the new workflow gets the same Slack-failure and dry-run checks as the others.
AGENTS.md: a short paragraph describing the check.
What changed
A new scheduled check, plus the run title on the triage workflow. No other change to the nightly or the triage.
Judgement calls:
A nightly whose tests failed is healthy: a red nightly still posts. For the triage only success is healthy, because the digest is its post: skipped (its job has an if), neutral, failure and cancelled all mean no digest.
It does not read Slack, so it cannot tell that a post failed to arrive when the run succeeded. It catches runs that did not happen, did not finish or did not do their job. A failed Slack step is already a red run.
Details
I ran tests/triage and tests/request-validation with CONFIG=camunda-hub (the default config's pinned-spec check fails in my environment): 678 tests pass. Biome is clean and tsc on the tests passes.
I could not run the workflow itself here. A first manual run (dry run by default) will show what it would post. I looked at the real history of both workflows: every night for the last 30 days has one schedule run of the nightly and one workflow_run run of the triage, both completed.
Triage runs started before this merges have the old title. If it merges between 02:00 and 04:30 UTC, that morning's check reports a missing triage. Merge before 02:00 or after 04:30 UTC to avoid it.
A run that never starts or hangs posts nothing and is not red. A daily check at 04:30 UTC
looks at today's nightly and triage runs and posts one alert, pinging hub-medic, when one
is missing, stuck or ended without finishing.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3526HsTZMmihMi94p34Pr
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution. You have signed the CLA already but the status is still pending? Let us recheck it.
… success is healthy for it
- skipped and neutral conclusions are no longer treated as healthy
- a manual or earlier triage run cannot hide a missing automatic digest
- link the existing cookbook, not a heading that only exists in #711
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3526HsTZMmihMi94p34Pr
Extend workflow-wiring invariant to cover the dry-run token guard
.github/workflows/hub-nightly-post-check.yml:47
The new manual dry-run token guard is omitted from the existing workflow-wiring invariant in tests/request-validation/slack-failure-marks-run-failed.test.ts:151-160; that test currently covers only the gap digest and coverage report. Add hub-nightly-post-check to that it.each list so removing this guard cannot silently make a dry run depend on Vault.
…uard in the wiring test
- a manual nightly run on some branch could replace the scheduled run and give a false "triage missing" alert
- add hub-nightly-post-check to the dry-run token guard invariant
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3526HsTZMmihMi94p34Pr
The triage workflow's run title now carries the id of the nightly it triages, and the post check
only counts a triage run whose title names the scheduled nightly. A manual nightly on main also
triggers a triage, and its digest must not hide a missing scheduled one.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3526HsTZMmihMi94p34Pr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In plain words
The nightly run posts to
#camunda-hub-nightly-test-resultsevery night, and so does the triage that follows it. If the Slack step fails, the run turns red. But if a run never starts (a disabled schedule, a GitHub outage) or hangs, nothing posts and nothing is red, so a missing post goes unnoticed until someone notices the quiet channel. This PR adds a morning check that looks for exactly that and posts one alert.What to look at
.github/workflows/hub-nightly-post-check.yml(new): runs daily at 04:30 UTC, after the nightly (02:00) and its triage have finished. Same structure as the gap digest: Vault Slack token, a script, and thefail-if-slack-failedstep at the end. A manual run is a dry run by default.scripts/triage/hub-nightly-post-check.ts(new): reads today's runs (UTC) ofnightly-camunda-hub.ymlandtriage-camunda-hub-nightly.ymland decides what is wrong. It reports:.github/workflows/triage-camunda-hub-nightly.yml: one line,run-name: Triage of nightly <id>. It puts the nightly's run id in the triage run's title, so the check can tell which nightly each triage run belongs to (the list API does not return the triggering run). Nothing else in that workflow changes.#camunda-hub-nightly-test-results, pingshub-medic, links the run and the nightly cookbook. It posts nothing when both ran.tests/triage/hub-nightly-post-check.test.ts(new) and two lines added totests/request-validation/slack-failure-marks-run-failed.test.ts, so the new workflow gets the same Slack-failure and dry-run checks as the others.AGENTS.md: a short paragraph describing the check.What changed
A new scheduled check, plus the run title on the triage workflow. No other change to the nightly or the triage.
Judgement calls:
successis healthy, because the digest is its post:skipped(its job has anif),neutral,failureandcancelledall mean no digest.Details
tests/triageandtests/request-validationwithCONFIG=camunda-hub(the default config's pinned-spec check fails in my environment): 678 tests pass. Biome is clean andtscon the tests passes.schedulerun of the nightly and oneworkflow_runrun of the triage, both completed.🤖 Generated with Claude Code
https://claude.ai/code/session_01G3526HsTZMmihMi94p34Pr