feat(ingestion-monitoring): bronze freshness runtime — CronWorkflow + driver alerts#1356
Draft
dzarlax wants to merge 2 commits into
Draft
feat(ingestion-monitoring): bronze freshness runtime — CronWorkflow + driver alerts#1356dzarlax wants to merge 2 commits into
dzarlax wants to merge 2 commits into
Conversation
added 2 commits
June 17, 2026 10:59
…trap-detector, driver notifications Runtime/alerting half of bronze source freshness (EPIC constructorfabric#1321, closes constructorfabric#949). Sits on top of the per-source freshness declarations from constructorfabric#1346: - dbt-source-freshness-check CronWorkflow (daily, parses sources.json) - driver-based notifications (webhook/zulip/slack/teams/email) - freshness-trap-detect.py runtime trap detector - ingestion-monitoring domain PRD/DESIGN/FEATURE + operator runbook Thresholds owned by the per-source declarations, not this PR. Signed-off-by: Alexey Panfilov <alexey.panfilov@constructor.tech>
The PRD/DESIGN/FEATURE/MONITORING docs described the original cohesive design (inherited +freshness in dbt_project.yml, env_var-driven thresholds, lint-bronze-freshness.py CI). That model was dropped in favor of the split agreed with QA: - declarations + literal per-source thresholds owned by the connector schemas (EPIC constructorfabric#1321/constructorfabric#1322 — PR constructorfabric#1346 + PR SharedQA#1), coverage counted by the QA dbt_coverage.py gate - this PR owns runtime/alerting only (CronWorkflow, parser, trap detector, driver notifications) Also folds in the empirically-verified false-green finding (windowed vendor-analytics connectors must anchor on a business-date column, not _airbyte_extracted_at) and corrects cyberfabric -> constructorfabric refs. Signed-off-by: Alexey Panfilov <alexey.panfilov@constructor.tech>
dzarlax
force-pushed
the
feat/ingestion-freshness-runtime
branch
from
June 17, 2026 08:59
60f4a29 to
e072ad4
Compare
mitasovr
approved these changes
Jun 19, 2026
mitasovr
marked this pull request as draft
July 13, 2026 11:04
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What
The runtime / alerting half of bronze source-freshness monitoring — the operational counterpart to the per-source declarations that landed in #1346. Adds a new
ingestion-monitoringdomain.dbt-source-freshness-checkCronWorkflow — runsdbt source freshness --select source:*daily at 13:00 UTC (past every connector's 02:00–11:00 UTC sync window + 2h grace), parsestarget/sources.json, logs each breaching source withmax_loaded_at+ lag, and flips the workflow to Failed only onerror/runtime error(warn stays green, still printed + emitted in the payload).webhook/zulip/slack/teams/email, selected viaingestion.freshness.notification.driver; every credential read from a Secret viasecretKeyRef(never rendered into manifests / Argo UI).freshness-trap-detect.py) — advisory-only spotter for the full-reemit / windowed-refetch pattern dbt's own freshness can't see (exactly the false-green class that drove the per-source business-date anchoring in test(data): source freshness on all bronze connectors (#1322) #1346).ingestion-monitoringdomain + an operator runbook (src/ingestion/MONITORING.md).Relationship to the declaration half
This PR does not own thresholds or
loaded_at_field— those are literal per source in each connector'sschema.yml(#1346 / EPIC #1321). The cron reads whatever the sources declare; it only schedules the check and acts on the verdict. Sequencing was agreed with QA on #1346: declarations land first, this sits on top.Notes
freshness-trap-detect.py, aningestion.freshness.*Helm block (+ schema), and docs. No existing behavior changes.dbt source freshnesshas not been run end-to-end against a populated warehouse from this branch; the helm template renders and the YAML/schema validate. First real run is the verification step.Closes #949. Refs #1321 (EPIC), #1322. Depends on #1346 (merged).