Skip to content

fix: retry Copilot CLI failures in News hourly briefing generation#116

Draft
Copilot wants to merge 6 commits into
mainfrom
copilot/fix-github-actions-job-failure
Draft

fix: retry Copilot CLI failures in News hourly briefing generation#116
Copilot wants to merge 6 commits into
mainfrom
copilot/fix-github-actions-job-failure

Conversation

Copilot AI commented May 21, 2026

Copy link
Copy Markdown
Contributor

The Generate briefing state job was failing because a Copilot CLI curation error aborted the scheduled pipeline. This change makes Copilot-backed briefing generation retry transient CLI execution failures, then fail with diagnostics instead of publishing deterministic fake-provider content.

  • Root cause

    • CopilotCliCurationProvider raised on non-zero Copilot CLI exits in GitHub Actions.
    • CopilotCliSummaryProvider had the same runtime CLI failure mode.
  • Behavior change

    • Retry Copilot CLI subprocess execution before failing.
    • If all retry attempts fail, propagate an actionable error with captured stdout/stderr diagnostics so the next scheduled/watchdog run can pick it up.
    • Malformed Copilot curation or summary outputs now fail validation instead of falling back to deterministic fake content.
    • The fake provider remains available for explicit AI_PROVIDER=fake runs and missing-token setup fallback.
  • Code changes

    • Added shared Copilot CLI retry handling.
    • Updated curation and summary providers to use retry-then-fail behavior for runtime failures.
    • Removed deterministic fake-provider fallback for malformed Copilot curation and summary outputs.
    • Updated documentation to describe the retry/fail behavior.
  • Regression coverage

    • Added focused tests for curation runtime retry/failure behavior and diagnostic preservation.
    • Added focused tests for summary runtime retry/failure behavior and diagnostic preservation.
    • Updated invalid-output tests to assert validation failures instead of fake fallback.

Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/f3f2c1a6-a8eb-4a20-92ba-f562e9163b2e

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix failing GitHub Actions job 'Generate briefing state' Handle Copilot CLI runtime failures in News hourly briefing generation May 21, 2026
Copilot AI requested a review from DevSecNinja May 21, 2026 09:58
@DevSecNinja DevSecNinja changed the title Handle Copilot CLI runtime failures in News hourly briefing generation fix: handle Copilot CLI runtime failures in News hourly briefing generation May 21, 2026
@DevSecNinja

Copy link
Copy Markdown
Owner

@copilot I don't want to use the fake provider as a fallback. What else can we do? Catch & retry? Just fail with an error so that the watchdog will pick it up next time?

Copilot AI and others added 4 commits May 21, 2026 14:25
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/8cf0349d-d3f8-4484-9586-ce6d58b41e81

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/8cf0349d-d3f8-4484-9586-ce6d58b41e81

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/8cf0349d-d3f8-4484-9586-ce6d58b41e81

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>
Agent-Logs-Url: https://github.com/DevSecNinja/wazzup/sessions/8cf0349d-d3f8-4484-9586-ce6d58b41e81

Co-authored-by: DevSecNinja <14926452+DevSecNinja@users.noreply.github.com>

Copilot AI commented May 21, 2026

Copy link
Copy Markdown
Contributor Author

@copilot I don't want to use the fake provider as a fallback. What else can we do? Catch & retry? Just fail with an error so that the watchdog will pick it up next time?

Implemented retry-then-fail instead of fake fallback in 6ddd3c2. When copilot-cli is selected, curation/summary runtime failures retry twice, malformed outputs fail validation, and the workflow exits with diagnostics so the next scheduled/watchdog run can pick it up.

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:

  • fd.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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (dns block)
  • huggingface.co
    • 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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (dns block)
  • openai.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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (dns block)
  • www.omarknows.ai
    • 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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (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 wazzup.pipeline --fixture-dir tests/fixtures --force-briefing auto t@users.noreply.-c (dns block)

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

Copilot AI changed the title fix: handle Copilot CLI runtime failures in News hourly briefing generation fix: retry Copilot CLI failures in News hourly briefing generation May 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants