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
The liveness oracle added by #3179 / PR #3189 counts a Health 68 run that compared nothing as
evidence that Health 68 is alive. That is the same failure mode #3179 was filed to end — 23 days of
silence reading as health — reconstructed in the mechanism built to detect it.
and _latest_executable_run returns the newest run whose conclusion is in that set. But the workflow_run debounce added to .github/workflows/health-68-consumer-sync-drift.yml skips the
comparison steps while the job still concludes success. Read live on 2026-08-24:
So a repository in which Health 68 executes the comparison never again — only debouncing — is
reported healthy by the checker, and no FYI comment is posted on issue #2210. The blocking quantity
("hours since the last run") and the drainable quantity ("hours since the last actual comparison") are
different numbers, and only the first is measured or reported.
The debounce compounds it. The jq selector in .github/workflows/health-68-consumer-sync-drift.yml picks the newest prior run whose conclusion is success, failure or timed_out — which includes its own no-op runs — so the 30-minute clock
resets on nothing happening. It is not latched shut (a job-level skipped conclusion breaks the
chain, and a comparison did run at 11:26), but the interval it enforces drifts with trigger volume
rather than tracking the last comparison.
Related, and cheap to fix in the same change: #3179's Implementation Notes specified an optional live
probe that "fails against live state today; that standing failure is the acceptance signal for the
fix", skipping only when no token is present. What shipped in tests/workflows/test_health_68_liveness.py:52 also requires RUN_LIVE_HEALTH_68_PROBE=1, so the
probe never runs in CI even where a token exists — confirmed as one of the four skips in a full tests/workflows run.
Full trace: Code/Audits/Workflows/2026-08-24-implementation-verification.md.
Scope
Make "did Health 68 compare?" an observable, asserted quantity: .github/workflows/health-68-consumer-sync-drift.yml (emit an outcome the API can read), scripts/check_durable_tracker_liveness.py (read it instead of the job conclusion), and the two test
files that gate them.
Do NOT remove the daily schedule: trigger from .github/workflows/health-68-consumer-sync-drift.yml.
Do NOT add a second liveness auditor. scripts/check_durable_tracker_liveness.py is the tool;
extend it.
Do NOT add any human approval, review, label, or queue step. The sweep stays FYI-only and must never
open or close a gate.
Do NOT make the checker's failure block a merge or fail the Health 71 job; continue-on-error on
that step is deliberate.
Do NOT reclassify a debounced run as a failure. It is a correct no-op; it is simply not evidence of
execution.
A scaffolded stub, a TODO, a renamed file, or a test that passes without exercising the change does NOT count as done and is a failure of this issue.
Tasks
Add a step-level marker to .github/workflows/health-68-consumer-sync-drift.yml that records whether the comparison ran, for example a job output compared=true|false set beside the existing drift_failed output.
Change _latest_executable_run in scripts/check_durable_tracker_liveness.py to accept a per-tracker require_step name and select the newest run whose named step conclusion is not skipped, falling back to the job conclusion when no require_step is configured.
Add require_step: Compare consumer repos to templates to the health-68-consumer-sync-drift.yml entry in config/durable_tracker_liveness.yml.
Report both numbers in the checker output and in the tracker comment body written by scripts/check_durable_tracker_liveness.py: hours since the newest run, and hours since the newest run that actually compared.
Change the debounce selector in .github/workflows/health-68-consumer-sync-drift.yml so it measures the age of the last run that COMPARED, not the last run that concluded successfully.
Remove the RUN_LIVE_HEALTH_68_PROBE term from the skipif in tests/workflows/test_health_68_liveness.py so the live probe skips only on a missing GH_TOKEN or GITHUB_TOKEN, with the reason naming the missing variable.
Add test_liveness_ignores_runs_whose_comparison_step_was_skipped to tests/workflows/test_durable_tracker_liveness.py using the monkeypatch pattern already in that file.
Acceptance Criteria
Named test gate:python3 -m pytest tests/workflows/test_durable_tracker_liveness.py::test_liveness_ignores_runs_whose_comparison_step_was_skipped -q exits 0. It must feed the checker two runs — one success with the comparison step skipped, one older success with it success — and assert the reported age is measured from the OLDER run.
Second named gate:python3 -m pytest tests/workflows/test_health_68_liveness.py::test_consumer_drift_detector_debounces_workflow_run -q exits 0 and asserts the debounce selector reads a comparison marker rather than the bare run conclusion.
Deliberate break: delete the require_step line from config/durable_tracker_liveness.yml; python3 -m pytest tests/workflows/test_durable_tracker_liveness.py -q must FAIL naming the new test. Restore it; it must pass. Quote both transcripts as raw pytest output in the PR body.
Second deliberate break: re-add RUN_LIVE_HEALTH_68_PROBE to the skipif in tests/workflows/test_health_68_liveness.py; a test asserting the skip condition names only the token variables must FAIL, then pass on revert. Quote both transcripts as raw pytest output.
python3 scripts/check_durable_tracker_liveness.py --json prints, for health-68-consumer-sync-drift.yml, both an age since the newest run and an age since the newest comparing run.
python3 -m pytest tests/workflows -q exits 0, and the count of skipped tests does not increase.
actionlint .github/workflows/health-68-consumer-sync-drift.yml reports no findings.
No approval step, review gate, label handoff, or queue is introduced anywhere in the diff.
Why
The liveness oracle added by #3179 / PR #3189 counts a Health 68 run that compared nothing as
evidence that Health 68 is alive. That is the same failure mode #3179 was filed to end — 23 days of
silence reading as health — reconstructed in the mechanism built to detect it.
scripts/check_durable_tracker_liveness.py:302declares:and
_latest_executable_runreturns the newest run whoseconclusionis in that set. But theworkflow_rundebounce added to.github/workflows/health-68-consumer-sync-drift.ymlskips thecomparison steps while the job still concludes
success. Read live on 2026-08-24:Sampled across five recent runs, only two actually compared:
So a repository in which Health 68 executes the comparison never again — only debouncing — is
reported healthy by the checker, and no FYI comment is posted on issue #2210. The blocking quantity
("hours since the last run") and the drainable quantity ("hours since the last actual comparison") are
different numbers, and only the first is measured or reported.
The debounce compounds it. The
jqselector in.github/workflows/health-68-consumer-sync-drift.ymlpicks the newest prior run whose conclusion issuccess,failureortimed_out— which includes its own no-op runs — so the 30-minute clockresets on nothing happening. It is not latched shut (a job-level
skippedconclusion breaks thechain, and a comparison did run at 11:26), but the interval it enforces drifts with trigger volume
rather than tracking the last comparison.
Related, and cheap to fix in the same change: #3179's Implementation Notes specified an optional live
probe that "fails against live state today; that standing failure is the acceptance signal for the
fix", skipping only when no token is present. What shipped in
tests/workflows/test_health_68_liveness.py:52also requiresRUN_LIVE_HEALTH_68_PROBE=1, so theprobe never runs in CI even where a token exists — confirmed as one of the four skips in a full
tests/workflowsrun.Full trace:
Code/Audits/Workflows/2026-08-24-implementation-verification.md.Scope
Make "did Health 68 compare?" an observable, asserted quantity:
.github/workflows/health-68-consumer-sync-drift.yml(emit an outcome the API can read),scripts/check_durable_tracker_liveness.py(read it instead of the job conclusion), and the two testfiles that gate them.
Non-Goals
away on purpose.
schedule:trigger from.github/workflows/health-68-consumer-sync-drift.yml.scripts/check_durable_tracker_liveness.pyis the tool;extend it.
open or close a gate.
continue-on-erroronthat step is deliberate.
execution.
does NOT count as done and is a failure of this issue.
Tasks
.github/workflows/health-68-consumer-sync-drift.ymlthat records whether the comparison ran, for example a job outputcompared=true|falseset beside the existingdrift_failedoutput._latest_executable_runinscripts/check_durable_tracker_liveness.pyto accept a per-trackerrequire_stepname and select the newest run whose named step conclusion is notskipped, falling back to the job conclusion when norequire_stepis configured.require_step: Compare consumer repos to templatesto thehealth-68-consumer-sync-drift.ymlentry inconfig/durable_tracker_liveness.yml.scripts/check_durable_tracker_liveness.py: hours since the newest run, and hours since the newest run that actually compared..github/workflows/health-68-consumer-sync-drift.ymlso it measures the age of the last run that COMPARED, not the last run that concluded successfully.RUN_LIVE_HEALTH_68_PROBEterm from theskipifintests/workflows/test_health_68_liveness.pyso the live probe skips only on a missingGH_TOKENorGITHUB_TOKEN, with the reason naming the missing variable.test_liveness_ignores_runs_whose_comparison_step_was_skippedtotests/workflows/test_durable_tracker_liveness.pyusing the monkeypatch pattern already in that file.Acceptance Criteria
python3 -m pytest tests/workflows/test_durable_tracker_liveness.py::test_liveness_ignores_runs_whose_comparison_step_was_skipped -qexits 0. It must feed the checker two runs — onesuccesswith the comparison stepskipped, one oldersuccesswith itsuccess— and assert the reported age is measured from the OLDER run.python3 -m pytest tests/workflows/test_health_68_liveness.py::test_consumer_drift_detector_debounces_workflow_run -qexits 0 and asserts the debounce selector reads a comparison marker rather than the bare run conclusion.require_stepline fromconfig/durable_tracker_liveness.yml;python3 -m pytest tests/workflows/test_durable_tracker_liveness.py -qmust FAIL naming the new test. Restore it; it must pass. Quote both transcripts as raw pytest output in the PR body.RUN_LIVE_HEALTH_68_PROBEto theskipifintests/workflows/test_health_68_liveness.py; a test asserting the skip condition names only the token variables must FAIL, then pass on revert. Quote both transcripts as raw pytest output.python3 scripts/check_durable_tracker_liveness.py --jsonprints, forhealth-68-consumer-sync-drift.yml, both an age since the newest run and an age since the newest comparing run.python3 -m pytest tests/workflows -qexits 0, and the count of skipped tests does not increase.actionlint .github/workflows/health-68-consumer-sync-drift.ymlreports no findings.