fix(release-health): per-cadence report sinks, accept default catch-up window
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Build and Publish Container Image / build-and-push (push) Successful in 1m11s

The probe expected the daily fep_feedback_intake sink on all three
frontend-patterns definitions and required an explicit
catchup_window_seconds that live rows do not carry. It now checks each
cadence's own sink, and accepts an absent window, which resolves to the
catchup_latest 24h default (the schedule's catchup_window is still
checked). Closes ACTIVITY-WP-ADHOC-2026-10-19-T03.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 244572@bnt-lap001
Assistant-Session: 3b235e1a-ae45-4d0f-ae70-17a9bd78ece8
This commit is contained in:
tegwick 2026-10-20 00:36:24 +02:00
parent bbe2081a2e
commit b186746f4a
4 changed files with 43 additions and 9 deletions

View file

@ -15,8 +15,12 @@ FRONTEND = {
str(uuid5(NAMESPACE, f'frontend-patterns-{cadence}')): (cadence, cron)
for cadence, cron in [('daily', '0 2 * * *'), ('weekly', '0 3 * * 2'), ('monthly', '0 9 1 * *')]
}
SINK = {'type': 'state-hub-progress', 'event_type': 'fep_feedback_intake',
'author': 'activity-core', 'topic_id': 'fe2aaa78-9c20-4feb-b3d2-4fe0529572a3'}
SINKS = {
cadence: {'type': 'state-hub-progress', 'event_type': event_type,
'author': 'activity-core', 'topic_id': 'fe2aaa78-9c20-4feb-b3d2-4fe0529572a3'}
for cadence, event_type in [('daily', 'fep_feedback_intake'), ('weekly', 'fep_improvement_review'),
('monthly', 'fep_monthly_review')]
}
def definition_matches(row):
@ -29,12 +33,14 @@ def definition_matches(row):
and row.trigger_config.get('cron_expression') == cron
and row.trigger_config.get('timezone') == 'Europe/Berlin'
and row.trigger_config.get('misfire_policy') == 'catchup_latest'
and row.trigger_config.get('catchup_window_seconds') == 86400
# Absent means the catchup_latest default (24h, schedule_manager); the
# schedule's actual catchup_window is checked separately.
and row.trigger_config.get('catchup_window_seconds') in (None, 86400)
and row.trigger_config.get('jitter_seconds', 0) == 0
and isinstance(instructions, list) and len(instructions) == 1
and instructions[0].get('id') == f'frontend-patterns-{cadence}-report'
and instructions[0].get('model') == 'deterministic'
and instructions[0].get('report_sinks') == [SINK])
and instructions[0].get('report_sinks') == [SINKS[cadence]])
def expanded(ranges, minimum, maximum):