Skip to content

Add pipeline run-status observability and stale/catch-up UX#68

Open
Copilot wants to merge 7 commits into
mainfrom
copilot/add-pipeline-observability-status
Open

Add pipeline run-status observability and stale/catch-up UX#68
Copilot wants to merge 7 commits into
mainfrom
copilot/add-pipeline-observability-status

Conversation

Copilot AI commented May 8, 2026

Copy link
Copy Markdown
Contributor

GitHub scheduled runs can be delayed or skipped, but the app had no explicit signal for pipeline freshness vs generation degradation. This PR adds a first-class runStatus contract to published data and surfaces it in the PWA so stale schedules, source failures, and AI/provider degradation are distinguishable at a glance.

  • Published run-status contract in latest.{yaml,json}

    • Added runStatus with:
      • lastAttemptedRunAt, lastSuccessfulRunAt
      • status, sourceStatus, providerStatus
      • provider, briefingKind
      • sourceCount, failedSourceCount, generatedItemCount
      • optional providerFallbackReason
    • lastSuccessfulRunAt now persists across degraded runs (attempt time advances; success time only advances on fully ok runs).
  • Failure-domain separation

    • Classified run outcomes into explicit states (ok, degraded_sources, degraded_provider, degraded_provider_and_sources) so source ingestion issues and AI/provider issues are independently visible.
  • PWA source-health observability (non-noisy)

    • Added compact pipeline badge in the Source health card: Healthy, Source degraded, AI degraded, or Stale.
    • Added concise run metadata line (generated time, provider, item count).
    • Added catch-up guidance text when stale, pointing to manual News hourly workflow dispatch.
    • Introduced a stale threshold constant (2h30m) for delayed-schedule detection in UI.
  • Schema validation + tests

    • Extended generated-data validation to require runStatus shape and key fields.
    • Added/updated tests to cover:
      • runStatus presence and payload values in generated pipeline output
      • lastSuccessfulRunAt retention behavior on degraded runs
  • Documentation updates

    • Documented runStatus in architecture data model notes.
    • Added manual catch-up workflow path and lightweight stale-alert recommendation in GitHub Actions docs.
{
  "runStatus": {
    "status": "degraded_sources",
    "sourceStatus": "degraded",
    "providerStatus": "ok",
    "lastAttemptedRunAt": "2026-05-08T18:34:38Z",
    "lastSuccessfulRunAt": "2026-05-08T18:33:18Z",
    "provider": "fake",
    "briefingKind": "hourly",
    "sourceCount": 27,
    "failedSourceCount": 23,
    "generatedItemCount": 0
  }
}

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=5401 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.zq31aD --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,2026572827548887325,17519103329196878118,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,9347462671083340950,8788851952188572045,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --screenshot=/tmp/wazzup-ui.png --window-size=1366,900 REDACTED (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=5401 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.zq31aD --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,2026572827548887325,17519103329196878118,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,9347462671083340950,8788851952188572045,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --screenshot=/tmp/wazzup-ui.png --window-size=1366,900 REDACTED (dns block)
  • feeds.feedburner.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • github.blog
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • googleonlinesecurity.blogspot.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • info.linuxserver.io
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • krebsonsecurity.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=5401 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.zq31aD --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,2026572827548887325,17519103329196878118,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,9347462671083340950,8788851952188572045,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --screenshot=/tmp/wazzup-ui.png --window-size=1366,900 REDACTED (dns block)
  • rss.nytimes.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • thalpius.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • thehackernews.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • therecord.media
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.apple.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.autosport.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.bleepingcomputer.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.cisecurity.org
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.economist.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.engadget.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.espn.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.formula1.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.ft.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=network --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=5401 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.zq31aD --change-stack-guard-on-fork=enable --shared-files=network_parent_dirs_pipe:100,v8_context_snapshot_data:101 --field-trial-handle=3,i,2026572827548887325,17519103329196878118,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,9347462671083340950,8788851952188572045,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /usr/bin/chromium-browser chromium-browser --headless --disable-gpu --no-sandbox --screenshot=/tmp/wazzup-ui.png --window-size=1366,900 REDACTED (dns block)
  • www.motorsport.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.nba.com
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.nist.gov
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.racefans.net
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)
  • www.zandvoortsecourant.nl
    • Triggering command: /usr/bin/python3 python3 -m unittest discover -s tests (dns block)
    • Triggering command: /usr/bin/python3 python3 -m wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto (dns block)
    • Triggering command: /usr/bin/python3 python3 -m unittest tests.test_pipeline tests.test_pwa_assets tests.test_workflows (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI and others added 5 commits May 8, 2026 18:29
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/9fd0f67a-54cb-4233-9e04-b1c5fe35b1df

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/9fd0f67a-54cb-4233-9e04-b1c5fe35b1df

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/9fd0f67a-54cb-4233-9e04-b1c5fe35b1df

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Copilot AI changed the title [WIP] Add pipeline observability and catch-up status Add pipeline run-status observability and stale/catch-up UX May 8, 2026
Copilot AI requested a review from DevSecNinja May 8, 2026 18:35
@DevSecNinja DevSecNinja marked this pull request as ready for review May 8, 2026 18:50
@github-actions github-actions Bot added area/docs Documentation and ADRs area/frontend Static PWA assets, styling, service worker, and manifest area/data Generated data contracts, source config, fixtures, and retention area/backend Python ingestion, scoring, AI provider, and publisher code labels May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/backend Python ingestion, scoring, AI provider, and publisher code area/data Generated data contracts, source config, fixtures, and retention area/docs Documentation and ADRs area/frontend Static PWA assets, styling, service worker, and manifest

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: add pipeline observability and catch-up status

2 participants