| name |
News: Monthly Review |
| description |
Generates monthly review retrospective articles and renders HTML in all 14 supported languages in a single agentic run via executive-brief cascade. Runs on 28th of each month. |
| strict |
false |
| imports |
../prompts/00-base-contract.md |
../prompts/01-bash-and-shell-safety.md |
../prompts/02-mcp-access.md |
../prompts/03-data-download.md |
../prompts/04-analysis-pipeline.md |
../prompts/05-analysis-gate.md |
../prompts/06-article-generation.md |
../prompts/07-commit-and-pr.md |
../prompts/ext/tier-c-aggregation.md |
|
| true |
| schedule |
workflow_dispatch |
|
| inputs |
| article_date |
force_generation |
analysis_depth |
| description |
required |
Article date (YYYY-MM-DD) for manual backfills. Defaults to today when omitted or scheduled. |
false |
|
| description |
type |
required |
default |
Force generation even if recent articles exist |
boolean |
false |
false |
|
| description |
required |
default |
Analysis depth for AI iterations (standard=1-2 iterations, deep=2-3 iterations, comprehensive=3+ iterations). Controls SWOT complexity, stakeholder count, and dashboard charts. |
false |
deep |
|
|
|
|
| permissions |
| contents |
issues |
pull-requests |
actions |
discussions |
security-events |
read |
read |
read |
read |
read |
read |
|
| timeout-minutes |
60 |
| concurrency |
| group |
cancel-in-progress |
gh-aw-news-monthly-review-${{ inputs.article_date || 'today' }} |
false |
|
| features |
|
| runtimes |
|
| network |
| allowed |
node |
playwright |
github |
defaults |
docker.io |
registry-1.docker.io |
auth.docker.io |
production.cloudflare.docker.com |
riksdag-regering-ai.onrender.com |
data.riksdagen.se |
|
riksdagen.se |
|
regeringen.se |
|
g0v.se |
api.scb.se |
|
scb-mcp.onrender.com |
api.imf.org |
data.imf.org |
|
dataservices.imf.org |
datamarketplace.imf.org |
api.worldbank.org |
data.worldbank.org |
datahelpdesk.worldbank.org |
governance.worldbank.org |
|
|
europarl.europa.eu |
ec.europa.eu |
eur-lex.europa.eu |
data.europa.eu |
|
digital-strategy.ec.europa.eu |
economy-finance.ec.europa.eu |
|
|
statskontoret.se |
|
lagradet.se |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bra.se |
hack23.com |
|
hack23.github.io |
riksdagsmonitor.com |
|
riksdagsmonitor.hack23.com |
riksdagsmonitor.pages.dev |
euparliamentmonitor.com |
|
ciacompliancemanager.com |
|
blacktrigram.com |
|
raw.githubusercontent.com |
|
|
| mcp-servers |
| riksdag-regering |
scb |
world-bank |
|
| container |
entrypoint |
entrypointArgs |
allowed |
node:26-alpine |
npx |
-y |
@jarib/pxweb-mcp@2.0.0 |
--url |
|
|
|
|
| container |
entrypoint |
entrypointArgs |
allowed |
node:26-alpine |
npx |
|
|
|
|
| tools |
| startup-timeout |
timeout |
github |
agentic-workflows |
bash |
edit |
web-fetch |
cache-memory |
180 |
120 |
|
true |
true |
|
|
| key |
retention-days |
news-${{ github.workflow }}-${{ inputs.article_date || 'today' }} |
14 |
|
|
| safe-outputs |
| threat-detection |
allowed-domains |
max-patch-size |
max-patch-files |
create-pull-request |
add-comment |
|
riksdag-regering-ai.onrender.com |
data.riksdagen.se |
|
riksdagen.se |
|
regeringen.se |
|
g0v.se |
api.scb.se |
|
scb-mcp.onrender.com |
api.imf.org |
data.imf.org |
|
dataservices.imf.org |
datamarketplace.imf.org |
api.worldbank.org |
data.worldbank.org |
datahelpdesk.worldbank.org |
governance.worldbank.org |
|
|
europarl.europa.eu |
ec.europa.eu |
eur-lex.europa.eu |
data.europa.eu |
|
digital-strategy.ec.europa.eu |
economy-finance.ec.europa.eu |
|
|
statskontoret.se |
|
lagradet.se |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bra.se |
hack23.com |
|
hack23.github.io |
riksdagsmonitor.com |
|
riksdagsmonitor.hack23.com |
riksdagsmonitor.pages.dev |
euparliamentmonitor.com |
|
ciacompliancemanager.com |
|
blacktrigram.com |
|
raw.githubusercontent.com |
|
10240 |
100 |
| labels |
draft |
expires |
max |
if-no-changes |
fallback-as-issue |
protected-files |
agentic-news |
analysis-data |
|
false |
14d |
1 |
warn |
true |
|
|
|
|
| steps |
| name |
uses |
with |
News pre-warm & pre-flight (composite) |
./.github/actions/news-prewarm |
| imf-sdmx-subscription-key |
${{ secrets.IMF_SDMX_SUBSCRIPTION_KEY }} |
|
|
|
| engine |
| id |
model |
copilot |
claude-sonnet-4.6 |
|
Generates deep political intelligence analysis and renders the HTML article in all 14 supported languages for monthly political intelligence review (Tier-C aggregation — reads sibling analyses across the reporting window and applies period multipliers from ext/tier-c-aggregation.md) in one single agentic run. The dedicated news-translate workflow runs on a separate track and translates executive-brief.md markdown into 13 language siblings (executive-brief_<lang>.md)
- Article type:
monthly-review
- Analysis subfolder:
analysis/daily/$ARTICLE_DATE/monthly-review/
- Aggregated markdown:
analysis/daily/$ARTICLE_DATE/monthly-review/article.md (produced by scripts/aggregate-analysis.ts)
- Rendered HTML:
news/$ARTICLE_DATE-monthly-review-{en,sv,da,no,fi,de,fr,es,nl,ar,he,ja,ko,zh}.html — always all 14 languages (produced by scripts/render-articles.ts)
- Single-run model: one run does download → analysis Pass 1 + 2 → gate → aggregate → render (14 languages) → ONE PR. There is no separate "article run" and no inter-workflow dispatch. The
news-translate workflow runs on a separate track and handles only executive-brief markdown translations (executive-brief_<lang>.md); it does not back-fill article.<lang>.md.
🟡 Plan to call safeoutputs___create_pull_request by agent minute 42 (hard deadline 45) to reserve job-level headroom for setup variance and the safe-outputs runner. See 00-base-contract.md §Session timing and 07-commit-and-pr.md §Deadline enforcement.
AI-FIRST within the 60-minute budget: Pass 2 is still mandatory. Scheduled runs should honor the configured analysis_depth=deep default instead of pre-emptively downgrading scope. Prefer scope compression over iteration skipping only if runtime risk emerges — reduce the download/manifest scope if needed, but maintain 1:1 per-document coverage and always perform a full read-back-and-improve Pass 2 on whatever artifacts exist. Reserve comprehensive for manual workflow_dispatch backfills.
Single run (produces all 23 analysis artifacts + aggregated article.md + 14 HTML files, target ~42 agent minutes in a 60-min job):
| Minutes |
Phase |
Module |
| 0–3 |
MCP pre-warm + pre-flight check |
02 / 03 |
| 3–6 |
Download data + catalogue |
03 |
| 6–18 |
Analysis Pass 1 (methodology read + per-doc analyses + all 23 artifacts: Family A 9 + B 2 + C 5 + D 7) |
04 |
| 18–36 |
Analysis Pass 2 (read-back + improvements on all 22 text files; extended slot reclaims the 8 min freed by removing per-language Markdown translation — see TRANSLATION_GUIDE.md §News articles are translated out-of-band) |
04 |
| 36–38 |
Analysis Gate (checks 1–11 + post-aggregate Check 12 below) |
05 |
| 38–40 |
scripts/aggregate-analysis.ts → article.md, then scripts/validate-article.ts (post-aggregate Check 12: banned phrases, citation density, economicProvenance ≤ 6 mo) |
06 |
| 40–42 |
scripts/render-articles.ts --lang all → all 14 HTML files |
06 |
| 42–43 |
Stage analysis + article.md + news/*.html, commit, ONE safeoutputs___create_pull_request — HARD DEADLINE agent minute 45 |
07 |
Use the full budget for AI-FIRST iteration; do not finish early with shallow output (see .github/copilot-instructions.md §AI FIRST Quality Principle). Never open a second PR within a run — there is no second PR. If you reach agent minute 42 without staging, stop all remaining work, run the aggregator + renderer on whatever artifacts exist, commit, and call safeoutputs___create_pull_request immediately — a partial-but-delivered PR is infinitely better than losing the run to Timer A. Translation under-coverage is acceptable as a partial state: non-English HTML is rendered via the localized executive-brief cascade, and the renderer composes English article.md body with executive-brief_.md overlay.
article_date — override date (defaults to today)
force_generation — regenerate even if today's content exists; also forces analysis re-run
analysis_depth — standard | deep (default) | comprehensive
Note: there is no languages input. Every run produces all 14 language HTML files. Translation depth-of-quality scales with the time budget (see the table above).
At the start of every run, the pre-flight check in 03-data-download.md detects whether analysis/daily/$ARTICLE_DATE/monthly-review/ already contains all 23 required artifacts:
- No analysis found → run the full pipeline (download → Pass 1 → Pass 2 → gate → aggregate → render → PR).
- Analysis found → skip download / Pass 1 / Pass 2 / gate, re-load the analysis into context, run aggregate + render, and open the PR.
Repeated runs for the same $ARTICLE_DATE always use the same analysis folder when force_generation=false.
All other rules (bash format, AWF shell safety, MCP access, download pipeline, analysis methodology & gate, aggregate + render, commit & PR policy) live in the imported modules.