❓ Interpellation Debates
July 10, 2026 · View on GitHub
Generates deep political intelligence analysis and renders the HTML article in all 14 supported languages for interpellation debates 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)
What this workflow does
- Article type:
interpellations - Analysis subfolder:
analysis/daily/$ARTICLE_DATE/interpellations/ - Aggregated markdown:
analysis/daily/$ARTICLE_DATE/interpellations/article.md(produced byscripts/aggregate-analysis.ts) - Per-language Markdown: ❌ none.
article.<lang>.mdis a forbidden artefact (see06-article-generation.md §Step 2); non-English HTML is rendered via the localized executive-brief cascade inmergeLocalizedWithEnglish. - Rendered HTML:
news/$ARTICLE_DATE-interpellations-{en,sv,da,no,fi,de,fr,es,nl,ar,he,ja,ko,zh}.html— always all 14 (produced byscripts/render-articles.ts --lang all) - 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-translateworkflow runs on a separate track and handles only executive-brief markdown translations (executive-brief_<lang>.md); it does not back-fillarticle.<lang>.md.
Time budget
🟡 Plan to call
safeoutputs___create_pull_requestby agent minute 42 (hard deadline 45) to reserve job-level headroom for setup variance and the safe-outputs runner. See00-base-contract.md §Session timingand07-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=deepdefault 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. Reservecomprehensivefor manualworkflow_dispatchbackfills.
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 (see .github/copilot-instructions.md §AI FIRST Quality Principle). One PR per run. If agent minute 42 arrives without staging, stop remaining work, run the aggregator + renderer on whatever artifacts exist, commit, and call safeoutputs___create_pull_request — a partial PR beats losing the run to Timer A. Translation under-coverage is acceptable: the renderer composes English article.md body with the localized executive-brief overlay.
Inputs
article_date— override date (defaults to today)force_generation— regenerate even if today's content exists; also forces analysis re-runanalysis_depth—standard|deep(default) |comprehensive
Note: there is no
languagesinput. Every run produces all 14 language HTML files. Translation depth-of-quality scales with the time budget (see the table above).
Run-mode selection
At the start of every run, the pre-flight check in 03-data-download.md detects whether analysis/daily/$ARTICLE_DATE/interpellations/ already contains all 23 required artifacts:
- No analysis found → run the full pipeline (download → Pass 1 → Pass 2 → gate → aggregate → render → PR).
- Analysis found → enter improvement-mode (see
04-analysis-pipeline.md §Improvement-mode path); extend existing artifacts, run Pass 2 + gate, then aggregate + render + PR.
Repeated runs for the same $ARTICLE_DATE always use the same analysis folder when force_generation=false.
File-write contract
🛠 Write every analysis artifact (
analysis/daily/$DATE/$SUB/*.md,documents/*.md, JSON sidecars,methodology-reflection.mdre-run deltas) with theedittool.cat <<'QUOTED_EOF' > fileis a Tier-2 fallback only — ASCII-only, no code fences / Mermaid /$/ backticks /EOFmarkers, < 200 lines, and only afteredithas failed for a non-content reason. Banned foranalysis/daily/**writes:python3,node -e,sed -i,echo … > file,tee file, unquoted heredocs (<<EOF) — sole exception: the pre-flight scaffold in03-data-download.md(env-var refs and short literals only, no agent-generated content). The aggregator (scripts/aggregate-analysis.ts) and renderer (scripts/render-articles.ts) are the only writers forarticle.mdandnews/*.html. See01-bash-and-shell-safety.md§File creation & overwrite strategy.
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.