euparliamentmonitor 0.8.47 โ†’ 0.8.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +271 -862
  2. package/SECURITY.md +206 -115
  3. package/package.json +4 -3
  4. package/scripts/aggregator/analysis-aggregator.d.ts +34 -42
  5. package/scripts/aggregator/analysis-aggregator.js +69 -79
  6. package/scripts/aggregator/article-generator.d.ts +21 -17
  7. package/scripts/aggregator/article-generator.js +22 -86
  8. package/scripts/aggregator/article-html.js +15 -24
  9. package/scripts/aggregator/article-metadata.d.ts +17 -0
  10. package/scripts/aggregator/article-metadata.js +32 -3
  11. package/scripts/aggregator/artifact-order.js +19 -0
  12. package/scripts/aggregator/clean-artifact.js +6 -6
  13. package/scripts/aggregator/cli/index.d.ts +6 -0
  14. package/scripts/aggregator/cli/index.js +8 -0
  15. package/scripts/aggregator/cli/parse.d.ts +51 -0
  16. package/scripts/aggregator/cli/parse.js +253 -0
  17. package/scripts/aggregator/forward-statements-registry.js +506 -0
  18. package/scripts/aggregator/infra/github-urls.d.ts +38 -0
  19. package/scripts/aggregator/infra/github-urls.js +55 -0
  20. package/scripts/aggregator/manifest/index.d.ts +8 -0
  21. package/scripts/aggregator/manifest/index.js +5 -0
  22. package/scripts/aggregator/manifest/reader.d.ts +37 -0
  23. package/scripts/aggregator/manifest/reader.js +54 -0
  24. package/scripts/aggregator/manifest/resolver.d.ts +65 -0
  25. package/scripts/aggregator/manifest/resolver.js +120 -0
  26. package/scripts/aggregator/manifest/types.d.ts +78 -0
  27. package/scripts/aggregator/manifest/types.js +4 -0
  28. package/scripts/aggregator/markdown-renderer.js +12 -1
  29. package/scripts/aggregator/prior-run-diff.js +357 -0
  30. package/scripts/aggregator/runs/discover.d.ts +44 -0
  31. package/scripts/aggregator/runs/discover.js +84 -0
  32. package/scripts/aggregator/runs/grouping.d.ts +30 -0
  33. package/scripts/aggregator/runs/grouping.js +35 -0
  34. package/scripts/aggregator/runs/index.d.ts +7 -0
  35. package/scripts/aggregator/runs/index.js +9 -0
  36. package/scripts/aggregator/slug/index.d.ts +6 -0
  37. package/scripts/aggregator/slug/index.js +8 -0
  38. package/scripts/aggregator/slug/slug.d.ts +49 -0
  39. package/scripts/aggregator/slug/slug.js +57 -0
  40. package/scripts/constants/language-articles.js +14 -14
  41. package/scripts/generators/news-indexes.js +13 -24
  42. package/scripts/generators/political-intelligence/copy.d.ts +79 -0
  43. package/scripts/generators/political-intelligence/copy.js +449 -0
  44. package/scripts/generators/political-intelligence/data.d.ts +10 -0
  45. package/scripts/generators/political-intelligence/data.js +205 -0
  46. package/scripts/generators/political-intelligence/html.d.ts +21 -0
  47. package/scripts/generators/political-intelligence/html.js +450 -0
  48. package/scripts/generators/political-intelligence/icons.d.ts +32 -0
  49. package/scripts/generators/political-intelligence/icons.js +135 -0
  50. package/scripts/generators/political-intelligence/index.d.ts +19 -0
  51. package/scripts/generators/political-intelligence/index.js +8 -0
  52. package/scripts/generators/political-intelligence/markdown.d.ts +58 -0
  53. package/scripts/generators/political-intelligence/markdown.js +105 -0
  54. package/scripts/generators/political-intelligence/types.d.ts +69 -0
  55. package/scripts/generators/political-intelligence/types.js +4 -0
  56. package/scripts/generators/political-intelligence.d.ts +24 -111
  57. package/scripts/generators/political-intelligence.js +8 -1257
  58. package/scripts/generators/sitemap/copy.d.ts +75 -0
  59. package/scripts/generators/sitemap/copy.js +374 -0
  60. package/scripts/generators/sitemap/html.d.ts +61 -0
  61. package/scripts/generators/sitemap/html.js +314 -0
  62. package/scripts/generators/sitemap/index.d.ts +23 -0
  63. package/scripts/generators/sitemap/index.js +25 -0
  64. package/scripts/generators/sitemap/rss.d.ts +35 -0
  65. package/scripts/generators/sitemap/rss.js +55 -0
  66. package/scripts/generators/sitemap/xml-utils.d.ts +20 -0
  67. package/scripts/generators/sitemap/xml-utils.js +29 -0
  68. package/scripts/generators/sitemap/xml.d.ts +43 -0
  69. package/scripts/generators/sitemap/xml.js +316 -0
  70. package/scripts/generators/sitemap.d.ts +2 -77
  71. package/scripts/generators/sitemap.js +30 -959
  72. package/scripts/mcp/ep-mcp-client.d.ts +64 -2
  73. package/scripts/mcp/ep-mcp-client.js +190 -4
  74. package/scripts/mcp/ep-open-data-client.d.ts +265 -0
  75. package/scripts/mcp/ep-open-data-client.js +446 -0
  76. package/scripts/mcp/imf-mcp-client.d.ts +12 -0
  77. package/scripts/mcp/imf-mcp-client.js +44 -1
  78. package/scripts/templates/section-builders.d.ts +36 -0
  79. package/scripts/templates/section-builders.js +93 -9
  80. package/scripts/validate-analysis-completeness.js +218 -0
package/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ <!-- SPDX-FileCopyrightText: 2024-2026 Hack23 AB -->
2
+ <!-- SPDX-License-Identifier: Apache-2.0 -->
3
+
1
4
  <p align="center">
2
5
  <img src="https://hack23.com/icon-192.png" alt="Hack23 Logo" width="192" height="192">
3
6
  </p>
@@ -5,131 +8,101 @@
5
8
  <h1 align="center">๐Ÿ›๏ธ EU Parliament Monitor</h1>
6
9
 
7
10
  <p align="center">
8
- <strong>European Parliament Intelligence Platform</strong><br>
9
- <em>Monitor political activity with systematic transparency</em>
11
+ <strong>European Parliament Political Intelligence Platform</strong><br>
12
+ <em>๐Ÿง  Political intelligence ยท ๐Ÿ” Radical transparency ยท ๐Ÿ—ณ๏ธ Democratic accountability ยท ๐Ÿค– AI-generated news in 14 languages</em>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="https://euparliamentmonitor.com"><img src="https://img.shields.io/badge/๐ŸŒ_Live_Site-euparliamentmonitor.com-003399?style=for-the-badge&logoColor=FFCC00" alt="Live Site"/></a>
17
+ <a href="https://euparliamentmonitor.com/political-intelligence.html"><img src="https://img.shields.io/badge/๐Ÿง _Political_Intelligence-Hub-7B1FA2?style=for-the-badge" alt="Political Intelligence Hub"/></a>
18
+ <a href="https://euparliamentmonitor.com/sitemap.html"><img src="https://img.shields.io/badge/๐Ÿ—บ๏ธ_Site_Map-14_languages-0A66C2?style=for-the-badge" alt="Site Map"/></a>
10
19
  </p>
11
20
 
12
21
  <p align="center">
13
22
  <a href="#"><img src="https://img.shields.io/badge/Owner-CEO-0A66C2?style=for-the-badge" alt="Owner"/></a>
14
- <a href="#"><img src="https://img.shields.io/badge/Version-1.0-555?style=for-the-badge" alt="Version"/></a>
15
23
  <a href="#"><img src="https://img.shields.io/badge/Classification-Public-success?style=for-the-badge" alt="Classification"/></a>
16
- <a href="#"><img src="https://img.shields.io/badge/Review-Annual-orange?style=for-the-badge" alt="Review Cycle"/></a>
24
+ <a href="#"><img src="https://img.shields.io/badge/Pipeline-Aggregator_Era-2E7D32?style=for-the-badge" alt="Aggregator Era"/></a>
25
+ <a href="#"><img src="https://img.shields.io/badge/Review-Quarterly-orange?style=for-the-badge" alt="Review Cycle"/></a>
17
26
  </p>
18
27
 
19
- <table>
20
- <tr>
21
- <td width="120" align="center">
22
- <img src="https://img.shields.io/badge/EU-Parliament-003399?style=for-the-badge&logo=european-union&logoColor=FFCC00" width="80" alt="EU Parliament Monitor"/>
23
- <div>
24
- <a href="https://github.com/Hack23/euparliamentmonitor">
25
- <img src="https://img.shields.io/github/v/release/Hack23/euparliamentmonitor" alt="Release">
26
- </a>
27
- </div>
28
- <div>
29
- <a href="https://www.npmjs.com/package/euparliamentmonitor">
30
- <img src="https://img.shields.io/npm/v/euparliamentmonitor.svg" alt="npm version">
31
- </a>
32
- </div>
33
- </td>
34
- <td>
35
- <p><strong>European Parliament Intelligence Platform</strong> โ€” an automated multi-language news platform that monitors EU Parliament activities with 14-language support, covering plenary sessions, committee reports, propositions, and breaking news.</p>
36
- <div>
37
- <a href="https://scorecard.dev/viewer/?uri=github.com/Hack23/euparliamentmonitor">
38
- <img src="https://api.securityscorecards.dev/projects/github.com/Hack23/euparliamentmonitor/badge" alt="OpenSSF Scorecard">
39
- </a>
40
- <a href="https://www.bestpractices.dev/projects/12068">
41
- <img src="https://www.bestpractices.dev/projects/12068/badge" alt="OpenSSF Best Practices">
42
- </a>
43
- <a href="https://github.com/Hack23/euparliamentmonitor/attestations">
44
- <img src="https://slsa.dev/images/gh-badge-level3.svg" alt="SLSA 3">
45
- </a>
46
- <a href="https://github.com/Hack23/euparliamentmonitor/license">
47
- <img src="https://img.shields.io/github/license/Hack23/euparliamentmonitor" alt="License">
48
- </a>
49
- </div>
50
- <div>
51
- <a href="https://github.com/Hack23/euparliamentmonitor"><strong>๐Ÿ“‚ Repository</strong></a> โ€ข
52
- <a href="https://hack23.com/euparliamentmonitor-features.html"><strong>โœจ Features</strong></a> โ€ข
53
- <a href="https://hack23.com/euparliamentmonitor-docs.html"><strong>๐Ÿ“š Documentation</strong></a>
54
- </div>
55
- </td>
56
- </tr>
57
- </table>
58
-
59
28
  [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/euparliamentmonitor/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/euparliamentmonitor)
60
29
  [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12068/badge)](https://www.bestpractices.dev/projects/12068)
61
30
  [![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://github.com/Hack23/euparliamentmonitor/attestations)
62
- [![News Generation](https://github.com/Hack23/euparliamentmonitor/actions/workflows/news-generation.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/news-generation.yml)
63
- [![Test and Report](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml)
64
31
  [![License](https://img.shields.io/github/license/Hack23/euparliamentmonitor)](https://github.com/Hack23/euparliamentmonitor/blob/main/LICENSE)
65
32
  [![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue)](https://github.com/Hack23/ISMS-PUBLIC)
66
33
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/euparliamentmonitor)
67
34
 
68
- ## ๐Ÿ“ฆ Quick Start
35
+ [![News Generation](https://github.com/Hack23/euparliamentmonitor/actions/workflows/compile-agentic-workflows.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/compile-agentic-workflows.yml)
36
+ [![CodeQL](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml)
37
+ [![Test and Report](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml)
38
+ [![E2E Tests](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml)
39
+ [![Release](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml)
69
40
 
70
- ```bash
71
- npm install euparliamentmonitor
72
- ```
41
+ ---
73
42
 
74
- ```typescript
75
- import {
76
- EuropeanParliamentMCPClient,
77
- generateArticleHTML,
78
- scoreArticleQuality,
79
- ALL_LANGUAGES,
80
- } from 'euparliamentmonitor';
81
- ```
82
-
83
- **Key capabilities:**
84
- - ๐Ÿ›๏ธ **EU Parliament MCP Client** โ€” Connect to European Parliament open data via Model Context Protocol
85
- - ๐Ÿ“ฐ **News Generation** โ€” Generate multi-language articles (14 languages) from parliamentary data
86
- - ๐Ÿ” **Political Intelligence** โ€” Voting anomaly detection, coalition analysis, threat assessment
87
- - ๐Ÿ“Š **Article Quality** โ€” Score and validate generated content with comprehensive quality metrics
88
- - ๐ŸŒ **Multilingual** โ€” Full i18n support: EN, SV, DA, NO, FI, DE, FR, ES, NL, AR, HE, JA, KO, ZH
43
+ **Explore the live platform** โ€” [๐ŸŒ euparliamentmonitor.com](https://euparliamentmonitor.com) ยท [๐Ÿง  Political Intelligence Hub](https://euparliamentmonitor.com/political-intelligence.html) (methodology + artifact transparency, all 14 languages) ยท [๐Ÿ“Š Analysis & Reports](https://euparliamentmonitor.com/docs/) ยท [๐Ÿ—บ๏ธ Site Map](https://euparliamentmonitor.com/sitemap.html) (every page, every language) ยท [๐Ÿ“” API Reference](https://euparliamentmonitor.com/docs/api/)
89
44
 
90
- **Explore the live platform** โ€” [๐ŸŒ euparliamentmonitor.com](https://euparliamentmonitor.com) ยท [๐Ÿง  Political Intelligence Hub](https://euparliamentmonitor.com/political-intelligence.html) (methodology + artifact transparency, all 14 languages) ยท [๐Ÿ—บ๏ธ Site Map](https://euparliamentmonitor.com/sitemap.html) (every page, every language) ยท [๐Ÿ“” API Reference](https://euparliamentmonitor.com/docs/api/index.html)
45
+ ## ๐ŸŽฏ Why This Exists
91
46
 
92
- > ๐Ÿ“ฆ **About this package** โ€” `euparliamentmonitor` is the open-source TypeScript library powering [euparliamentmonitor.com](https://euparliamentmonitor.com), an automated **European Parliament transparency platform** that publishes daily AI-generated, *Economist-style* political-intelligence articles in 14 languages. The package bundles the **EU Parliament MCP client** (60+ open-data tools โ€” plenary sessions, committee reports, voting records, parliamentary questions, adopted texts, procedures, MEPs, declarations), the **deterministic article aggregator** (analysis-artifact โ†’ Markdown โ†’ HTML, with 14-language hreflang and shared site chrome), the **political-intelligence analytics** (voting-anomaly detection, coalition dynamics, MEP influence scoring, OSINT correlation), and the **multi-language renderer** with WCAG 2.1 AA accessibility, structured data, and SEO-ready sitemap generation. Designed for civic-tech, data-journalism, OSINT, and democratic-transparency use cases. ISO 27001 / NIST CSF 2.0 / CIS Controls v8.1 / GDPR / NIS2 / EU CRA aligned.
47
+ The European Parliament adopts laws that affect **450 million citizens** across 27 member states. Yet most of what happens in Brussels and Strasbourg โ€” committee dossiers, rapporteur appointments, coalition trade-offs, amendment battles, urgency files, trilogue dynamics โ€” remains effectively invisible to the public. Press coverage is sparse, fragmented across national outlets, and rarely connects the procedural dots.
93
48
 
94
- > Published with [npm provenance](https://docs.npmjs.com/generating-provenance-statements) for supply chain security. [SLSA Level 3](https://github.com/Hack23/euparliamentmonitor/attestations) build attestations included.
49
+ **EU Parliament Monitor turns the EP's own open data into auditable political intelligence โ€” and publishes it as readable news in 14 languages, every day, fully sourced.**
95
50
 
96
- ## ๐ŸŽฏ Status Badges
51
+ This repository is the open-source platform behind **[euparliamentmonitor.com](https://euparliamentmonitor.com)**: an AI-driven newsroom that monitors plenary sessions, committee work, motions, propositions, and forward-calendar events; produces *Economist-style* analytical articles backed by 51 structured analysis artifacts per run; and exposes **every** methodology, template, and analysis tree publicly so any reader, journalist, researcher, or NGO can verify the analysis behind the prose.
97
52
 
98
- ### Workflow Status
99
- [![News Generation](https://github.com/Hack23/euparliamentmonitor/actions/workflows/news-generation.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/news-generation.yml)
100
- [![CodeQL](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml)
101
- [![Test and Report](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml)
102
- [![Release](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml)
103
- [![E2E Tests](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml)
104
- [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/euparliamentmonitor/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/euparliamentmonitor)
53
+ | Pillar | What it means in this project |
54
+ |---|---|
55
+ | ๐Ÿง  **Political Intelligence** | Structured analytic techniques (ACH, SWOT/TOWS, PESTLE, scenario forecasting, devil's-advocate), Admiralty source grading, Words of Estimative Probability (WEP) bands, ICD-203 standards, and a 6-dimension political-threat framework โ€” applied daily to live EP data. |
56
+ | ๐Ÿ” **Radical Transparency** | Every article links back to the analysis run it was rendered from. Every artifact links to its methodology. Every methodology is published. No black box. |
57
+ | ๐Ÿ—ณ๏ธ **Democratic Accountability** | Public-data only. GDPR-clean. No personal profiling. Multi-language so a Finnish farmer, a Greek student, and a Polish journalist all get the same intelligence in their own language. |
58
+ | ๐Ÿค– **AI-Generated News** | 8 unified gh-aw agentic workflows + 1 translation workflow run autonomously, produce structured analysis, render deterministic HTML, and open publication-ready pull requests for human review. |
105
59
 
106
60
  ### Documentation & Reports
107
- [![API Docs](https://img.shields.io/badge/API-Documentation-blue?logo=javascript)](https://euparliamentmonitor.com/docs/api/index.html)
61
+ [![API Docs](https://img.shields.io/badge/API-Documentation-blue?logo=javascript)](https://euparliamentmonitor.com/docs/api/)
108
62
  [![Coverage](https://img.shields.io/badge/Coverage-82%25-green?logo=vitest)](https://euparliamentmonitor.com/docs/coverage/index.html)
109
63
  [![E2E Report](https://img.shields.io/badge/E2E-Report-purple?logo=playwright)](https://euparliamentmonitor.com/playwright-report/index.html)
110
64
  [![SLSA 3](https://img.shields.io/badge/SLSA-Level%203-brightgreen?logo=github)](https://github.com/Hack23/euparliamentmonitor/attestations)
65
+ ---
111
66
 
112
- ## ๐ŸŒ Live Site โ€” Explore the Platform
67
+ ## ๐ŸŒ Explore the Live Platform
113
68
 
114
- The published platform at **[euparliamentmonitor.com](https://euparliamentmonitor.com)** is the audience-facing companion to this npm package. Two hub pages give the fastest entry into the daily output and the underlying tradecraft:
69
+ The published site is the audience-facing companion to this npm/TypeScript package. **Two hub pages give the fastest entry point** โ€” bookmark them:
115
70
 
116
71
  <table>
117
72
  <tr>
118
- <td width="120" align="center" valign="top">
119
- <a href="https://euparliamentmonitor.com/political-intelligence.html"><img src="https://img.shields.io/badge/๐Ÿง -Political%20Intelligence-003399?style=for-the-badge&logoColor=FFCC00" alt="Political Intelligence Hub"/></a>
73
+ <td width="140" align="center" valign="top">
74
+ <a href="https://euparliamentmonitor.com/index.html"><img src="https://img.shields.io/badge/๐ŸŒ-Live_Site-003399?style=for-the-badge&logoColor=FFCC00" alt="Live Site"/></a>
75
+ </td>
76
+ <td>
77
+ <strong><a href="https://euparliamentmonitor.com/index.html">๐ŸŒ Live News Site โ€” euparliamentmonitor.com</a></strong><br>
78
+ Daily-updated front page with the latest <em>Breaking News</em>, <em>Week / Month Ahead</em>, <em>Week / Month in Review</em>, <em>Committee Reports</em>, <em>Plenary Votes &amp; Resolutions</em>, and <em>Legislative Procedures</em> articles. Every article is generated by an AI agent from live European Parliament MCP data, peer-reviewed against a 51-artifact analytical baseline, and published in <strong>14 languages</strong> (EN, SV, DA, NO, FI, DE, FR, ES, NL, AR, HE, JA, KO, ZH) with WCAG 2.1 AA accessibility, RTL support for Arabic and Hebrew, and JSON-LD <code>NewsArticle</code> structured data linking back to every source artifact.
79
+ </td>
80
+ </tr>
81
+ <tr>
82
+ <td width="140" align="center" valign="top">
83
+ <a href="https://euparliamentmonitor.com/political-intelligence.html"><img src="https://img.shields.io/badge/๐Ÿง -Political_Intelligence-7B1FA2?style=for-the-badge&logoColor=FFCC00" alt="Political Intelligence Hub"/></a>
120
84
  </td>
121
85
  <td>
122
86
  <strong><a href="https://euparliamentmonitor.com/political-intelligence.html">๐Ÿง  Political Intelligence Hub</a></strong><br>
123
- Audit-ready transparency layer behind every published article. Indexes the <strong>10-step AI-driven analysis protocol</strong>, the <strong>39 artifact templates</strong>, the per-artifact <strong>methodologies</strong> (BLUF, Admiralty WEP source-grading, SAT, Heuer's ACH, OSINT tradecraft), and links every run-level artifact under <code>analysis/daily/&lt;date&gt;/&lt;slug&gt;/</code> directly to GitHub so readers can <em>verify the analysis behind the prose</em>. Available in all 14 supported languages.
87
+ The audit-ready transparency layer behind every published article. A single, fully-linked index into <strong>17 methodologies</strong>, <strong>52 analysis templates</strong>, <strong>19 tradecraft references</strong>, and over <strong>170 daily analysis runs</strong> producing <strong>1,700+ structured artifacts</strong> โ€” including the <em>10-step AI-driven analysis protocol</em>, OSINT tradecraft standards (Admiralty / WEP / SAT / ACH), the political-threat framework, the political SWOT framework, and the per-artifact construction rules. Every link opens directly on GitHub so readers can <em>verify the analysis behind the prose</em>. Available in all 14 supported languages.
124
88
  </td>
125
89
  </tr>
126
90
  <tr>
127
- <td width="120" align="center" valign="top">
128
- <a href="https://euparliamentmonitor.com/sitemap.html"><img src="https://img.shields.io/badge/๐Ÿ—บ๏ธ-Site%20Map-0A66C2?style=for-the-badge&logoColor=FFCC00" alt="Site Map"/></a>
91
+ <td width="140" align="center" valign="top">
92
+ <a href="https://euparliamentmonitor.com/sitemap.html"><img src="https://img.shields.io/badge/๐Ÿ—บ๏ธ-Site_Map-0A66C2?style=for-the-badge&logoColor=FFCC00" alt="Site Map"/></a>
129
93
  </td>
130
94
  <td>
131
- <strong><a href="https://euparliamentmonitor.com/sitemap.html">๐Ÿ—บ๏ธ Site Map</a></strong><br>
132
- Human-readable index of <strong>every page</strong> on the platform โ€” landing pages, news articles, and technical documentation โ€” across all <strong>14 languages</strong> (EN, SV, DA, NO, FI, DE, FR, ES, NL, AR, HE, JA, KO, ZH). Best starting point for SEO crawlers, audience navigation, and discovering the latest articles. Companion to the machine-readable <code>sitemap.xml</code> and per-language <code>sitemap_&lt;lang&gt;.html</code> variants.
95
+ <strong><a href="https://euparliamentmonitor.com/sitemap.html">๐Ÿ—บ๏ธ Human-Readable Site Map</a></strong><br>
96
+ Index of <strong>every page</strong> on the platform โ€” landing pages, news articles, and technical documentation โ€” across all 14 languages. Best entry point for SEO crawlers, audience navigation, and discovering historical articles. Companion to the machine-readable <code>sitemap.xml</code> and per-language <code>sitemap_&lt;lang&gt;.html</code> variants.
97
+ </td>
98
+ </tr>
99
+ <tr>
100
+ <td width="140" align="center" valign="top">
101
+ <a href="https://euparliamentmonitor.com/docs/api/index.html"><img src="https://img.shields.io/badge/๐Ÿ“”-API_Reference-2E7D32?style=for-the-badge" alt="API Reference"/></a>
102
+ </td>
103
+ <td>
104
+ <strong><a href="https://euparliamentmonitor.com/docs/api/index.html">๐Ÿ“” TypeDoc API Reference</a></strong><br>
105
+ TypeDoc-generated reference for every public symbol in the <code>euparliamentmonitor</code> npm package โ€” the EP MCP client (60+ tools), the deterministic article aggregator, the 5-tier metadata resolver, and the multi-language renderer. Companion <a href="https://euparliamentmonitor.com/docs/coverage/index.html">๐Ÿ““ Test Coverage</a> and <a href="https://euparliamentmonitor.com/playwright-report/index.html">๐ŸŽญ E2E Report</a> dashboards are linked from the same documentation hub.
133
106
  </td>
134
107
  </tr>
135
108
  </table>
@@ -144,7 +117,7 @@ The published platform at **[euparliamentmonitor.com](https://euparliamentmonito
144
117
  - [๐Ÿ“— Security Flows](FLOWCHART.md) - Process flows with security controls
145
118
  - [๐Ÿ“™ Data Model](DATA_MODEL.md) - Data structures and API integration
146
119
  - [๐Ÿ“• Release Process](docs/RELEASE_PROCESS.md) - How to create releases
147
- - [๐Ÿ“” API Documentation](https://euparliamentmonitor.com/docs/api/index.html) - TypeDoc-generated API reference
120
+ - [๐Ÿ“” API Documentation](https://euparliamentmonitor.com/docs/api/) - TypeDoc-generated API reference
148
121
  - [๐Ÿ““ Test Coverage](https://euparliamentmonitor.com/docs/coverage/index.html) - Interactive coverage report
149
122
 
150
123
  **๐Ÿค– Agentic Pipeline:**
@@ -307,155 +280,130 @@ This project adheres to:
307
280
 
308
281
  EU Parliament Monitor maintains high code quality standards with comprehensive
309
282
  testing:
283
+ ---
310
284
 
311
- ### Code Quality
312
-
313
- - **ESLint**: Comprehensive linting with security, complexity, and documentation
314
- checks
315
- - **Prettier**: Consistent code formatting across all JavaScript files
316
- - **Pre-commit Hooks**: Automatic linting and formatting before every commit
317
- - **CI/CD Quality Gates**: Automated checks on every pull request
318
- - **TypeDoc/JSDoc**: Complete documentation for all functions
285
+ ## ๐Ÿง  The Political Intelligence Pipeline
319
286
 
320
- **Code Standards**: See [docs/CODE_STANDARDS.md](docs/CODE_STANDARDS.md) for
321
- detailed coding guidelines.
322
-
323
- ### Testing Infrastructure
324
-
325
- Comprehensive test suite with **Vitest** and **Playwright** covering all
326
- functionality:
327
-
328
- #### Unit & Integration Tests (Vitest)
329
-
330
- - **Unit Tests**: Article generation, MCP client, index/sitemap generation
331
- - **Integration Tests**: Full workflows, MCP integration, multi-language support
332
- - **Coverage**: โ‰ฅ80% line coverage, โ‰ฅ75% branch coverage
333
- - **Test Count**: 169+ tests covering critical paths
334
-
335
- ```bash
336
- # Run unit & integration tests
337
- npm test
287
+ Every article published on euparliamentmonitor.com is the deterministic render of an **analysis run** โ€” a directory under `analysis/daily/<YYYY-MM-DD>/<article-type>/` containing structured Markdown artifacts (drawn from a **51-template catalog**: 39 core mandatory + 12 extended optional) plus raw EP MCP / IMF / World Bank data payloads. The pipeline is split into five well-defined stages:
338
288
 
339
- # Run with coverage
340
- npm run test:coverage
341
-
342
- # Run tests in watch mode
343
- npm run test:watch
344
-
345
- # Run with UI (browser interface)
346
- npm run test:ui
289
+ ```mermaid
290
+ %%{init: {"theme":"dark","themeVariables":{"primaryColor":"#1565C0","primaryTextColor":"#fff","lineColor":"#90CAF9","fontFamily":"Inter, Helvetica, Arial, sans-serif"}}}%%
291
+ flowchart LR
292
+ A["๐Ÿ”ต Stage A<br/>EP MCP data collection<br/><i>60+ tools, IMF, World Bank</i>"] --> B["๐ŸŸฃ Stage B<br/>AI political intelligence<br/><i>51 artifacts ยท 2-pass review</i>"]
293
+ B --> C["๐ŸŸก Stage C<br/>Completeness gate<br/><i>line floors ยท WEP ยท Admiralty</i>"]
294
+ C --> D["๐ŸŸข Stage D<br/>Deterministic aggregator<br/><i>npm run generate-article</i>"]
295
+ D --> E["๐Ÿ”ท Markdown source<br/>news/*.en.md"]
296
+ D --> F["๐ŸŸข 14-language HTML<br/>news/*-{lang}.html"]
297
+ F --> G["๐ŸŸ  SEO indexes<br/>sitemap ยท RSS ยท JSON-LD"]
298
+ G --> H["๐ŸŸข S3 + CloudFront<br/>euparliamentmonitor.com"]
299
+ style A fill:#1565C0,color:#fff
300
+ style B fill:#7B1FA2,color:#fff
301
+ style C fill:#FFC107,color:#000
302
+ style D fill:#2E7D32,color:#fff
303
+ style E fill:#0288D1,color:#fff
304
+ style F fill:#2E7D32,color:#fff
305
+ style G fill:#FF9800,color:#000
306
+ style H fill:#2E7D32,color:#fff
347
307
  ```
348
308
 
349
- #### End-to-End Tests (Playwright)
350
-
351
- - **E2E Tests**: Complete user experience validation
352
- - **Cross-Browser**: Chromium, Firefox, WebKit
353
- - **Mobile Support**: Mobile Chrome, Mobile Safari
354
- - **Accessibility**: WCAG 2.1 AA compliance with axe-core
355
- - **Responsive Design**: Multiple viewport sizes
356
- - **Test Count**: 60+ E2E tests covering user journeys
357
-
358
- ```bash
359
- # Run E2E tests
360
- npm run test:e2e
361
-
362
- # Run with UI (interactive)
363
- npm run test:e2e:ui
309
+ **Critical architectural property:** AI agents author *analysis artifacts in Markdown* โ€” never HTML. TypeScript code under `src/aggregator/**` deterministically renders the committed artifacts into HTML. There is no AI-authored HTML step and no template-prose leakage. This is what makes the public output reproducible, auditable, and resistant to hallucination.
364
310
 
365
- # Run in headed mode (see browser)
366
- npm run test:e2e:headed
311
+ ๐Ÿ“– **Full pipeline reference:** [Article-Generation.md](Article-Generation.md) ยท [analysis/README.md](analysis/README.md) ยท [analysis/methodologies/ai-driven-analysis-guide.md](analysis/methodologies/ai-driven-analysis-guide.md)
367
312
 
368
- # View test report
369
- npm run test:e2e:report
370
- ```
313
+ ### ๐Ÿ“š The Methodology Library โ€” published, versioned, auditable
371
314
 
372
- **Testing Documentation**:
315
+ | Methodology | Purpose |
316
+ |---|---|
317
+ | ๐ŸŽฏ **[AI-Driven Analysis Guide](analysis/methodologies/ai-driven-analysis-guide.md)** | The canonical 10-step protocol every agentic run follows (Rules 1โ€“22 + Step 10.5 methodology reflection). |
318
+ | ๐Ÿ—‚๏ธ **[Artifact Catalog](analysis/methodologies/artifact-catalog.md)** | Master map: every artifact โ†’ methodology + template + depth floor + Mermaid diagram type. |
319
+ | ๐Ÿ”ฌ **[Per-Artifact Methodologies](analysis/methodologies/per-artifact-methodologies.md)** | 34 sections โ€” one per artifact type โ€” with construction rules and quality signals. |
320
+ | ๐Ÿ•ต๏ธ **[OSINT Tradecraft Standards](analysis/methodologies/osint-tradecraft-standards.md)** | ICD-203 standards ยท Admiralty source grades ยท Kent / WEP probability bands ยท SAT catalog ยท OSINT ethics. |
321
+ | ๐Ÿท๏ธ **[Political Classification Guide](analysis/methodologies/political-classification-guide.md)** | 7-dimension EP event classification (actors, stances, urgency, policy domain, risk surface). |
322
+ | โš–๏ธ **[Political Risk Methodology](analysis/methodologies/political-risk-methodology.md)** | Quantitative 5ร—5 Likelihood ร— Impact scoring adapted from the Hack23 ISMS. |
323
+ | ๐Ÿงฎ **[Political SWOT Framework](analysis/methodologies/political-swot-framework.md)** | Evidence-based SWOT/TOWS with โ‰ฅ80-word depth floor per quadrant item. |
324
+ | ๐Ÿ›ก๏ธ **[Political Threat Framework](analysis/methodologies/political-threat-framework.md)** | 5-framework integrated model: 6D Threat Landscape + Attack Trees + Kill Chain + Diamond + ICO Profiling. STRIDE explicitly rejected for political analysis. |
325
+ | ๐Ÿ”— **[Synthesis Methodology](analysis/methodologies/synthesis-methodology.md)** | Stage B.7 significance scoring โ†’ synthesis summary โ†’ stakeholder perspectives โ†’ coalition dynamics โ†’ executive brief. |
326
+ | ๐ŸŒ **[Strategic Extensions](analysis/methodologies/strategic-extensions-methodology.md)** | Scenario forecasts, ACH (Heuer), wildcards & black swans, comparative international, intelligence assessment. |
327
+ | ๐Ÿ—ณ๏ธ **[Electoral Domain Methodology](analysis/methodologies/electoral-domain-methodology.md)** | EP10/EP11 electoral context, coalition mathematics (361-seat threshold), voter segmentation. |
328
+ | ๐Ÿ“ **[Per-Document Methodology](analysis/methodologies/per-document-methodology.md)** | Atomic evidence-layer methodology for individual EP documents. |
329
+ | ๐Ÿงพ **[Structural Metadata Methodology](analysis/methodologies/structural-metadata-methodology.md)** | Provenance, `manifest.json`, cross-reference maps, GDPR Article 30 compliance. |
330
+ | โœ๏ธ **[Political Style Guide](analysis/methodologies/political-style-guide.md)** | The Economist-inspired tone, balance, attribution rules, multi-language considerations. |
331
+ | ๐Ÿ’ฐ **[IMF Indicator Mapping](analysis/methodologies/imf-indicator-mapping.md)** | IMF WEO/Fiscal Monitor/IFS/BOP/ER/PCPS โ†’ EP article-type primary economic source. |
332
+ | ๐ŸŒฑ **[World Bank Indicator Mapping](analysis/methodologies/worldbank-indicator-mapping.md)** | Non-economic World Bank Open Data indicators (health, education, environment, governance, innovation). |
333
+ | ๐Ÿ“ **[Reference Quality Thresholds](analysis/methodologies/reference-quality-thresholds.json)** | Per-artifact line-count floors enforced at the Stage-C completeness gate. |
373
334
 
374
- - [test/README.md](test/README.md) - Unit & integration tests
375
- - [e2e/README.md](e2e/README.md) - E2E testing guide
335
+ > ๐Ÿ” **Browse all 17 methodologies, 52 templates, 19 tradecraft references, and 1,700+ artifacts produced across 170+ daily analysis runs** on the [Political Intelligence Hub](https://euparliamentmonitor.com/political-intelligence.html).
376
336
 
377
- ## Custom Agents
337
+ ---
378
338
 
379
- EU Parliament Monitor includes **8 specialized GitHub Copilot custom agents** to
380
- streamline development:
339
+ ## ๐Ÿ“ฐ Live News Streams
381
340
 
382
- - ๐Ÿค– **[product-task-agent](.github/agents/product-task-agent.md)** - Product
383
- specialist for issue creation and coordination
384
- - ๐Ÿ“ฐ **[news-journalist](.github/agents/news-journalist.md)** - The
385
- Economist-style European Parliament reporting
386
- - ๐ŸŽจ **[frontend-specialist](.github/agents/frontend-specialist.md)** -
387
- HTML5/CSS3/WCAG 2.1 AA UI/UX expert
388
- - ๐Ÿ”„
389
- **[data-pipeline-specialist](.github/agents/data-pipeline-specialist.md)** -
390
- European Parliament MCP integration expert
391
- - โš™๏ธ **[devops-engineer](.github/agents/devops-engineer.md)** - CI/CD and GitHub
392
- Actions automation
393
- - ๐Ÿ”’ **[security-architect](.github/agents/security-architect.md)** - ISMS,
394
- GDPR, NIS2 compliance expert
395
- - ๐Ÿ“š **[documentation-architect](.github/agents/documentation-architect.md)** -
396
- C4 models and architecture docs
397
- - โœ… **[quality-engineer](.github/agents/quality-engineer.md)** - Testing,
398
- validation, and accessibility
341
+ **Eight unified gh-aw article workflows** plus a **14-language translation helper** run on precision schedules, autonomously generating *Economist-style* political intelligence and opening publication-ready pull requests. Every workflow follows the same Stage A โ†’ E contract documented in [Article-Generation.md](Article-Generation.md).
399
342
 
400
- **Usage Example**:
343
+ | Workflow | Article Type | Focus |
344
+ |----------|--------------|-------|
345
+ | ๐Ÿšจ **[news-breaking.md](.github/workflows/news-breaking.md)** | `breaking` | Rapid-response coverage of significant EP developments. |
346
+ | ๐Ÿ“‹ **[news-week-ahead.md](.github/workflows/news-week-ahead.md)** | `week-ahead` | Forward calendar, committee agenda, urgency-file outlook. |
347
+ | ๐Ÿ”ญ **[news-month-ahead.md](.github/workflows/news-month-ahead.md)** | `month-ahead` | 30-day strategic horizon and risk forecast. |
348
+ | ๐Ÿ“Š **[news-week-in-review.md](.github/workflows/news-week-in-review.md)** | `week-in-review` | Past-week retrospective intelligence (D-8 โ†’ D-36 reporting window). |
349
+ | ๐Ÿ“ˆ **[news-month-in-review.md](.github/workflows/news-month-in-review.md)** | `month-in-review` | Monthly retrospective with cross-run continuity analysis. |
350
+ | ๐Ÿ›๏ธ **[news-committee-reports.md](.github/workflows/news-committee-reports.md)** | `committee-reports` | Committee activity, rapporteur work, legislative-production analysis. |
351
+ | โš–๏ธ **[news-motions.md](.github/workflows/news-motions.md)** | `motions` | Plenary motions, resolutions, urgency files, political signals. |
352
+ | ๐Ÿ“œ **[news-propositions.md](.github/workflows/news-propositions.md)** | `propositions` | Legislative proposals and pipeline analysis. |
353
+ | ๐ŸŒ **[news-translate.md](.github/workflows/news-translate.md)** | translation helper | 14-language flush translation (manual dispatch only). |
401
354
 
402
- ```bash
403
- # Use product-task-agent to analyze repository and create improvement issues
404
- @product-task-agent analyze the multi-language support and create issues for any gaps
355
+ Each unified workflow runs Stages Aโ€“E **in a single 45-minute session** and produces exactly one PR containing both the analysis artifacts and the rendered HTML. The earlier split-pair `news-<type>-analysis.md` + `news-<type>-article.md` layout was retired in the April-2026 aggregator migration. See **[.github/workflows/README.md](.github/workflows/README.md)** for compile / lock-file / safe-output mechanics, and **[WORKFLOWS.md](WORKFLOWS.md)** for the full CI/CD catalog.
405
356
 
406
- # Use news-journalist to generate content
407
- @news-journalist create a week-ahead article for the upcoming plenary session
357
+ > ๐Ÿ“š **Prompt Library (`.github/prompts/`)** โ€” 10 bounded-context prompt files (`00-scope-and-ground-rules.md` โ†’ `09-troubleshooting.md`) shared across every workflow. The `npm run lint:prompts` drift-guard fails CI on banned patterns (`checkpoint pr`, `keep-alive`, `heartbeat`, `progressive safe output`, `push_repo_memory`).
408
358
 
409
- # Use frontend-specialist for UI improvements
410
- @frontend-specialist make the language switcher fully keyboard accessible
411
- ```
359
+ ---
412
360
 
413
- **Learn More**: See [Custom Agents Documentation](.github/agents/README.md) for
414
- detailed agent capabilities, usage patterns, and examples.
361
+ ## ๐Ÿค– Agent Catalog
415
362
 
416
- ## Languages Supported
363
+ EU Parliament Monitor uses a layered agent model: a small set of **product-domain agents** owns the news pipeline, while **infrastructure agents** maintain workflows, contributions, and CI hygiene.
417
364
 
418
- - **Nordic**: English (en), Swedish (sv), Danish (da), Norwegian (no), Finnish (fi)
419
- - **EU Core**: German (de), French (fr), Spanish (es), Dutch (nl)
420
- - **Middle East**: Arabic (ar), Hebrew (he)
421
- - **East Asia**: Japanese (ja), Korean (ko), Chinese (zh)
365
+ ### Product-domain agents (own the news critical path)
422
366
 
423
- ## Requirements
367
+ | Agent | Role |
368
+ |---|---|
369
+ | ๐Ÿ•ต๏ธ **[intelligence-operative](.github/agents/intelligence-operative.md)** | Senior political intelligence analyst โ€” applies ACH, SWOT, PESTLE, OSINT tradecraft, threat framework. Owns Stage-B analysis artifacts. |
370
+ | ๐Ÿ“ฐ **[news-journalist](.github/agents/news-journalist.md)** | The Economist-style EP reporting in 14 languages. Authors editorial prose only when analysis artifacts are signed off. |
371
+ | ๐Ÿ”„ **[data-pipeline-specialist](.github/agents/data-pipeline-specialist.md)** | EP MCP integration (60+ tools), data quality, voting-records fallback to EP Open Data Portal. |
372
+ | ๐ŸŽจ **[frontend-specialist](.github/agents/frontend-specialist.md)** | HTML5/CSS3, WCAG 2.1 AA accessibility, multi-language UI, RTL support. |
373
+ | โœ… **[quality-engineer](.github/agents/quality-engineer.md)** | Vitest + Playwright, HTML validation, accessibility testing, performance benchmarking. |
374
+ | โš™๏ธ **[devops-engineer](.github/agents/devops-engineer.md)** | gh-aw workflow compilation, GitHub Actions, S3/CloudFront deploy, MCP gateway. |
375
+ | ๐Ÿ“š **[documentation-architect](.github/agents/documentation-architect.md)** | C4 models, Mermaid diagrams, ARCHITECTURE.md, ADRs. |
376
+ | ๐Ÿ›ก๏ธ **security-architect** *(see [SECURITY.md](SECURITY.md))* | ISMS, GDPR, NIS2, EU CRA compliance โ€” reviews data classification of intelligence products. |
377
+ | ๐Ÿ“‹ **[product-task-agent](.github/agents/product-task-agent.md)** | Issue creation, ISMS tracking, capability-roadmap coordination. |
378
+ | ๐Ÿ“ฃ **[marketing-specialist](.github/agents/marketing-specialist.md)** | Privacy-first multi-language engagement, GDPR-compliant outreach. |
379
+ | ๐Ÿ’ผ **[business-development-specialist](.github/agents/business-development-specialist.md)** | Strategic planning, civic-tech partnerships, sustainable transparency models. |
424
380
 
425
- - **Node.js**: Version 25 or higher
426
- - **npm**: Version 10 or higher (comes with Node.js 25)
427
- - **Git**: For cloning the repository
381
+ ### Infrastructure agents (maintain workflows and CI hygiene)
428
382
 
429
- You can verify your Node.js version with:
430
- ```bash
431
- node --version # Should be v25.x.x or higher
432
- npm --version # Should be 10.x.x or higher
433
- ```
383
+ `agentic-workflows.agent.md`, `news-generation.agent.md`, `ci-cleaner.agent.md`, `contribution-checker.agent.md`, `create-safe-output-type.agent.md`, `custom-engine-implementation.agent.md`, `grumpy-reviewer.agent.md`, `interactive-agent-designer.agent.md`, `technical-doc-writer.agent.md`, `w3c-specification-writer.agent.md`. See [.github/agents/README.md](.github/agents/README.md).
434
384
 
435
- ## Installation
385
+ ---
436
386
 
437
- ### As an npm Package
387
+ ## ๐Ÿ“ฆ Quick Start (npm package)
438
388
 
439
389
  ```bash
440
390
  npm install euparliamentmonitor
441
391
  ```
442
392
 
443
- ### TypeScript / ES Module Usage
444
-
445
393
  ```typescript
446
394
  import {
447
- // MCP Client for EU Parliament data
395
+ // EP MCP client (60+ open-data tools)
448
396
  EuropeanParliamentMCPClient,
449
397
  getEPMCPClient,
450
- // Intelligence index (cross-article relationships)
451
- buildIndexFromEntries,
452
- findRelatedArticles,
453
- generateCrossReferences,
454
- // Article generation (aggregator pipeline)
398
+ // Article generation (deterministic aggregator pipeline)
455
399
  generateArticle,
456
400
  aggregateAnalysisRun,
457
401
  renderMarkdown,
458
- // Multi-language support (14 languages)
402
+ // Cross-article intelligence index
403
+ buildIndexFromEntries,
404
+ findRelatedArticles,
405
+ generateCrossReferences,
406
+ // Multi-language support (14 languages, RTL aware)
459
407
  ALL_LANGUAGES,
460
408
  LANGUAGE_NAMES,
461
409
  } from 'euparliamentmonitor';
@@ -465,737 +413,204 @@ import { EuropeanParliamentMCPClient } from 'euparliamentmonitor/mcp/ep-mcp-clie
465
413
  import type { ArticleCategory, LanguageCode } from 'euparliamentmonitor/types';
466
414
  ```
467
415
 
468
- ### From Source (Development)
469
-
470
- ```bash
471
- # Clone the repository
472
- git clone https://github.com/Hack23/euparliamentmonitor.git
473
- cd euparliamentmonitor
474
-
475
- # Install dependencies
476
- npm install
477
- ```
478
-
479
- ### Optional: European Parliament MCP Server
480
-
481
- For real EU Parliament data integration, install the MCP server:
482
-
483
- ```bash
484
- # Clone the MCP server repository
485
- git clone https://github.com/Hack23/European-Parliament-MCP-Server.git
486
- cd European-Parliament-MCP-Server
487
-
488
- # Install dependencies and build
489
- npm install
490
- npm run build
416
+ **Bundled capabilities:**
491
417
 
492
- # The server will be available at dist/index.js
493
- # You can install it globally or reference the path
494
- ```
418
+ - ๐Ÿ›๏ธ **EU Parliament MCP Client** โ€” 60+ tools covering plenary sessions, committee reports, voting records, parliamentary questions, adopted texts, procedures, MEPs, and declarations, with built-in fallback to the EP Open Data Portal `/api/v2/decision` endpoint when MCP returns empty voting payloads.
419
+ - ๐Ÿ“ฐ **Deterministic Article Aggregator** โ€” walks `manifest.json`, cleans each artifact, renders Markdown source + 14 HTML variants with full SEO chrome, JSON-LD `NewsArticle`, hreflang alternates, and `isBasedOn` provenance lists.
420
+ - ๐Ÿ” **Political Intelligence Analytics** โ€” voting-anomaly detection, coalition dynamics, MEP influence scoring, OSINT correlation (5-framework threat model).
421
+ - ๐ŸŒ **14-Language Renderer** โ€” EN, SV, DA, NO, FI, DE, FR, ES, NL, AR (RTL), HE (RTL), JA, KO, ZH โ€” with WCAG 2.1 AA accessibility and shared site chrome.
495
422
 
496
- Configure the MCP server path in environment variables:
423
+ > ๐Ÿ“ฆ **Provenance:** Published with [npm provenance](https://docs.npmjs.com/generating-provenance-statements) and [SLSA Level 3](https://github.com/Hack23/euparliamentmonitor/attestations) build attestations.
497
424
 
498
- ```bash
499
- export EP_MCP_SERVER_PATH="/path/to/European-Parliament-MCP-Server/dist/index.js"
500
- ```
425
+ ---
501
426
 
502
- **Note**: The MCP server is currently in development. News generation works
503
- without it using placeholder content.
427
+ ## ๐Ÿ”Œ Data Sources
504
428
 
505
- ## Usage
429
+ **Primary โ€” European Parliament MCP Server** ([Hack23/European-Parliament-MCP-Server](https://github.com/Hack23/European-Parliament-MCP-Server) v1.2.15+, fully operational):
506
430
 
507
- ### Generate News Articles
431
+ - ๐Ÿ—ณ๏ธ Plenary sessions, voting records, roll-call votes
432
+ - ๐Ÿ“œ Adopted texts, motions, resolutions, urgency files
433
+ - ๐Ÿ›๏ธ Committee meetings, reports, opinions, hearings
434
+ - ๐Ÿ‘ฅ MEPs (active, incoming, outgoing, homonym), declarations of financial interests
435
+ - โ“ Parliamentary questions (written/oral)
436
+ - ๐Ÿ“‚ Procedures, plenary documents, external documents, controlled vocabularies
437
+ - ๐Ÿ“Š Analytical tools: voting patterns, coalition dynamics, MEP influence, network analysis, sentiment tracker, early warning system, intelligence correlation
508
438
 
509
- Agentic workflows generate articles automatically. For manual article generation from an analysis run:
439
+ **Secondary โ€” public economic & social context:**
510
440
 
511
- ```bash
512
- # Render one article from a specific analysis run directory
513
- npm run generate-article -- --run analysis/daily/2025-01-01/breaking
441
+ - ๐Ÿ’ฐ **IMF** (primary economic source per the [IMF Indicator Mapping](analysis/methodologies/imf-indicator-mapping.md)) โ€” World Economic Outlook (WEO), Fiscal Monitor, International Financial Statistics (IFS), Balance of Payments (BOP), Exchange Rates, and Primary Commodity Price System (PCPS).
442
+ - ๐ŸŒฑ **World Bank Open Data** (non-economic only) โ€” health, education, environment, demographics, governance, innovation.
514
443
 
515
- # Regenerate EVERY committed analysis run in one pass (skips runs whose
516
- # manifest.json has no valid articleType; collision-suffixes same-date /
517
- # same-type runs with a sanitised runId)
518
- npm run generate-article:all
444
+ **Boundary:** Only **public** EP/IMF/World Bank data is used. No personal MEP profiling beyond public parliamentary roles. GDPR-clean by design.
519
445
 
520
- # Only regenerate runs from a given date onward
521
- npm run generate-article -- --all --since 2026-04-01
522
- ```
446
+ ---
523
447
 
524
- Each invocation writes:
525
-
526
- - `news/<slug>.en.md` โ€” aggregated Markdown (provenance block + 19-section
527
- ordered artifact set + Tradecraft References appendix + Analysis Index appendix)
528
- - `news/<slug>-<lang>.html` โ€” 14 language variants, each wrapped in the
529
- shared site chrome (stacked header with embedded language switcher,
530
- article-level Table of Contents sidebar, shared footer with live
531
- article-count stats)
532
-
533
- The aggregator lives under `src/aggregator/` โ€” see the
534
- [aggregator pipeline](ARCHITECTURE.md#aggregator-pipeline) section of the
535
- architecture doc for the full data flow.
536
-
537
- #### Editorial-highlight metadata resolver
538
-
539
- The `<title>` / `<meta description>` / Open Graph / Twitter / JSON-LD
540
- `NewsArticle` fields for every article are resolved by
541
- `src/aggregator/article-metadata.ts` through a 5-tier priority ladder:
542
-
543
- 1. **Manifest override** โ€” the Stage-B agent writes one of these keys in
544
- `manifest.json` when it has an editorial headline:
545
-
546
- ```jsonc
547
- {
548
- "articleType": "breaking",
549
- // String form โ€” applied to all 14 language variants (recommended
550
- // when only an English headline is available):
551
- "title": "Banking Union Breakthrough and Anti-Corruption Landmark",
552
- "description": "The plenary closes a six-year debate and triggers immediate criticism from two national delegations about implementation timelines.",
553
- // OR per-language form when translations already exist:
554
- "title": { "en": "โ€ฆ", "sv": "โ€ฆ", "de": "โ€ฆ" },
555
- "description": { "en": "โ€ฆ", "sv": "โ€ฆ" }
556
- }
557
- ```
558
-
559
- 2. **First artefact H1** โ€” the aggregator walks the manifest's ordered
560
- artefact list (`intelligence/synthesis-summary.md`,
561
- `executive-summary.md`, `breaking-news-analysis.md`, โ€ฆ) and promotes
562
- the first non-generic `# โ€ฆ` heading.
563
- 3. **Aggregated-markdown H1** โ€” any non-generic top-level heading in the
564
- rendered Markdown.
565
- 4. **First strong prose paragraph** โ€” with a tightened leak filter that
566
- blocks mermaid `%%{init}` blocks, `title โ€ฆ` directives, emoji-banner
567
- metadata, and `Analysis Date:` / `Classification:` / `Run:` / `Window:`
568
- / `Purpose:` / `BLUF (ICD-203):` style rows.
569
- 5. **Localized template** โ€” `*_TITLES(date)` from
570
- `src/constants/language-articles.ts` โ€” last resort when no editorial
571
- content exists at all.
572
-
573
- Downstream generators (`news-indexes.ts`, `sitemap.ts`, political-intelligence
574
- cards, RSS) call `extractArticleMeta()` in `src/utils/file-utils.ts`, which
575
- reads the `<head><title>` value (with the ` โ€” EU Parliament Monitor`
576
- suffix stripped) as the primary title, so the resolver's output
577
- propagates everywhere without separate code changes in each generator.
578
-
579
- #### Backport SEO metadata into existing articles
580
-
581
- `scripts/backport-article-seo.js` rewrites `<title>`, the meta
582
- description, Open Graph, Twitter, and JSON-LD `headline`/`description`
583
- for every already-rendered `news/*-<lang>.html` file by extracting the
584
- first editorial H1 and first strong prose paragraph from the article
585
- body itself. The rewrite is idempotent โ€” re-running over a backported
586
- file is a byte-identical no-op โ€” and the article body is never
587
- modified.
448
+ ## ๐Ÿ”’ Security & ISMS Compliance
588
449
 
589
- ```bash
590
- # Preview the change-set (dry-run is the default; prints a per-article-
591
- # type summary and up to 12 sample before/after diffs):
592
- node scripts/backport-article-seo.js
450
+ EU Parliament Monitor implements **security-by-design** under the [Hack23 ISMS](https://github.com/Hack23/ISMS-PUBLIC) framework.
593
451
 
594
- # Write changes:
595
- node scripts/backport-article-seo.js --apply
452
+ ### Project classification
596
453
 
597
- # Scope to a subset of article types:
598
- node scripts/backport-article-seo.js --apply --only breaking,motions
454
+ | Dimension | Level |
455
+ |---|---|
456
+ | Confidentiality | Public (Level 1) โ€” European Parliament open data only |
457
+ | Integrity | Medium (Level 2) โ€” accuracy critical for democratic transparency |
458
+ | Availability | Medium (Level 2) โ€” daily updates, 24h RTO |
459
+ | Strategic value | Democratic transparency, open civic-tech leadership |
599
460
 
600
- # Use a non-default news directory:
601
- node scripts/backport-article-seo.js --apply --dir news
602
- ```
461
+ ### Compliance frameworks
603
462
 
604
- After backporting, regenerate the downstream surfaces that depend on
605
- article metadata:
463
+ | Framework | Scope | Evidence |
464
+ |---|---|---|
465
+ | **ISO 27001:2022** | Information security management | [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) โ€” A.5.10, A.5.12, A.5.23, A.8.11, A.8.28 |
466
+ | **NIST CSF 2.0** | Identify ยท Protect ยท Detect ยท Respond ยท Recover | Compliance matrix in SECURITY_ARCHITECTURE.md |
467
+ | **CIS Controls v8.1** | Operational security best practices | CodeQL, Dependabot, npm audit, SBOM |
468
+ | **GDPR** | Data minimization, purpose limitation | Public-data-only boundary, no profiling |
469
+ | **NIS2** | Article 20, 21 cybersecurity risk management | [THREAT_MODEL.md](THREAT_MODEL.md) (STRIDE for software-security context) |
470
+ | **EU Cyber Resilience Act** | SBOM, vulnerability disclosure, Annex I/V | [CRA-ASSESSMENT.md](CRA-ASSESSMENT.md), SLSA provenance, [SECURITY.md](SECURITY.md) |
606
471
 
607
- ```bash
608
- node scripts/generators/news-indexes.js # 14 language index pages
609
- node scripts/generators/sitemap.js # 14 sitemap HTMLs + sitemap.xml + rss.xml
610
- ```
472
+ ### Key security controls
611
473
 
612
- ### Generate Indexes and Sitemap
474
+ - โœ… **Minimal attack surface** โ€” static site, no databases, no server-side execution
475
+ - โœ… **Same-origin JS bundle** โ€” all executable assets under `js/vendor/`, strict `script-src 'self'` CSP, no external CDN
476
+ - โœ… **Automated security** โ€” CodeQL SAST, Dependabot SCA, npm audit, OpenSSF Scorecard
477
+ - โœ… **Supply chain** โ€” SHA-pinned GitHub Actions, SBOM (SPDX), SLSA Level 3 attestations
478
+ - โœ… **Input validation** โ€” multi-layer XSS prevention, HTML sanitization, markdown-it with explicit plugin allowlist
479
+ - โœ… **Infrastructure** โ€” GitHub-hosted ephemeral runners, S3/CloudFront via OIDC `GithubWorkFlowRole`, HTTPS enforcement, `step-security/harden-runner` egress block
613
480
 
614
- ```bash
615
- # Generate per-run news index pages (consumed by the aggregator's
616
- # transparency footer and political-intelligence.html)
617
- npm run generate-news-indexes
618
-
619
- # Generate sitemap.xml, sitemap_<lang>.html, and political-intelligence_<lang>.html
620
- # (14 language-specific sitemap pages + 14 language-specific Political Intelligence
621
- # pages that index every methodology, template, and daily analysis run)
622
- npm run generate-sitemap
623
- ```
481
+ ๐Ÿ“‹ **Full security architecture:** [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) ยท [SECURITY.md](SECURITY.md) ยท [THREAT_MODEL.md](THREAT_MODEL.md) ยท [CLASSIFICATION.md](CLASSIFICATION.md)
624
482
 
625
- ### Local Development
483
+ ---
626
484
 
627
- ```bash
628
- # Serve the site locally
629
- npm run serve
485
+ ## ๐Ÿ› ๏ธ Local Development
630
486
 
631
- # Open http://localhost:8080 in your browser
632
- ```
487
+ ### Requirements
633
488
 
634
- #### Same-Origin JS Bundle (Mermaid + Chart.js + D3)
489
+ - **Node.js** 25 or higher
490
+ - **npm** 10 or higher (ships with Node.js 25)
491
+ - **Git**
635
492
 
636
- The static site loads **every** executable bundle from same-origin
637
- `js/vendor/` under a strict `script-src 'self'` CSP โ€” no external CDN. Vendored
638
- libraries are copied from `node_modules/` at build time:
493
+ ### From source
639
494
 
640
495
  ```bash
641
- npm run copy-vendor # writes js/vendor/{chart.umd.min.js,d3.min.js,โ€ฆ,mermaid/}
496
+ git clone https://github.com/Hack23/euparliamentmonitor.git
497
+ cd euparliamentmonitor
498
+ npm install
642
499
  ```
643
500
 
644
- The CI deploy workflow ([`deploy-s3.yml`](.github/workflows/deploy-s3.yml))
645
- runs `copy-vendor` before `aws s3 sync` and includes both `*.js` and `*.mjs`
646
- files (Mermaid 11 ships as code-split ESM under `js/vendor/mermaid/chunks/`).
647
- If you add a new diagram type to a template, no extra wiring is needed โ€” the
648
- chunk loader is part of the vendored bundle.
649
-
650
- #### Stage-C Analysis Validator
651
-
652
- Before opening an article PR, validate the analysis run completeness:
501
+ ### Build, lint, test, render
653
502
 
654
503
  ```bash
655
- npm run validate-analysis -- analysis/daily/<date>/<run-dir>
656
- ```
657
-
658
- The validator enforces per-artifact line floors, mandatory Mermaid diagrams,
659
- Admiralty/WEP/SAT/BLUF tradecraft signals, required H2 sections, and
660
- placeholder leakage. RED output โ‡’ Pass-3 the offending artifacts; never ship
661
- an article without a green gate. See
662
- [`.github/prompts/03-analysis-completeness-gate.md`](.github/prompts/03-analysis-completeness-gate.md).
663
-
664
- ## Project Structure
665
-
504
+ npm run build # TypeScript compilation
505
+ npm run lint # ESLint (TypeScript in src/)
506
+ npm run lint:prompts # gh-aw prompt drift-guard
507
+ npm run htmlhint # HTML validation
508
+ npm run test # Vitest unit + integration (169+ tests)
509
+ npm run test:coverage # Coverage report (โ‰ฅ80% line, โ‰ฅ75% branch)
510
+ npm run test:e2e # Playwright cross-browser E2E
511
+ npm run validate-analysis # Stage-C completeness gate
512
+ npm run generate-article -- --run analysis/daily/2026-04-24/breaking
513
+ npm run generate-article:all # batch regen every committed run
514
+ npm run generate-news-indexes # 14-language news index pages
515
+ npm run generate-sitemap # sitemap.xml + 14 sitemap_<lang>.html
516
+ npm run docs:generate # TypeDoc API docs + index
517
+ npm run serve # local static-site preview at :8080
666
518
  ```
667
- euparliamentmonitor/
668
- โ”œโ”€โ”€ .github/
669
- โ”‚ โ”œโ”€โ”€ agents/ # Custom GitHub Copilot agents
670
- โ”‚ โ”œโ”€โ”€ workflows/ # CI/CD workflow configurations
671
- โ”‚ โ””โ”€โ”€ release-drafter.yml # Release notes configuration
672
- โ”œโ”€โ”€ src/ # TypeScript source (compiles to scripts/)
673
- โ”‚ โ”œโ”€โ”€ constants/ # Language data, configuration
674
- โ”‚ โ”œโ”€โ”€ generators/ # News, index, sitemap generators
675
- โ”‚ โ”œโ”€โ”€ mcp/ # European Parliament MCP client
676
- โ”‚ โ”œโ”€โ”€ templates/ # HTML article templates
677
- โ”‚ โ”œโ”€โ”€ types/ # Shared TypeScript interfaces
678
- โ”‚ โ””โ”€โ”€ utils/ # File utilities, metadata
679
- โ”œโ”€โ”€ scripts/ # Compiled JavaScript output
680
- โ”‚ โ”œโ”€โ”€ constants/ # Compiled constants
681
- โ”‚ โ”œโ”€โ”€ generators/ # Compiled generators
682
- โ”‚ โ”œโ”€โ”€ mcp/ # Compiled MCP client
683
- โ”‚ โ”œโ”€โ”€ templates/ # Compiled templates
684
- โ”‚ โ”œโ”€โ”€ types/ # Compiled type definitions
685
- โ”‚ โ””โ”€โ”€ utils/ # Compiled utilities
686
- โ”œโ”€โ”€ news/ # Generated news articles
687
- โ”‚ โ””โ”€โ”€ metadata/ # Generation metadata
688
- โ”œโ”€โ”€ test/ # Vitest unit & integration tests
689
- โ”œโ”€โ”€ e2e/ # Playwright E2E tests
690
- โ”œโ”€โ”€ docs/ # Generated documentation
691
- โ”œโ”€โ”€ styles.css # Article styling
692
- โ”œโ”€โ”€ index-{lang}.html # Language-specific index pages
693
- โ”œโ”€โ”€ typedoc.json # TypeDoc configuration
694
- โ”œโ”€โ”€ tsconfig.json # TypeScript configuration
695
- โ”œโ”€โ”€ sitemap.xml # SEO sitemap with hreflang alternates
696
- โ”œโ”€โ”€ sitemap.html # Human-readable sitemap (English)
697
- โ”œโ”€โ”€ sitemap_{lang}.html # Per-language human-readable sitemaps
698
- โ”œโ”€โ”€ political-intelligence.html # Index of every methodology + template + daily analysis run
699
- โ”œโ”€โ”€ political-intelligence_{lang}.html # Localized political-intelligence pages
700
- โ””โ”€โ”€ package.json # Project dependencies
701
- ```
702
-
703
- ## CI/CD & Automation
704
-
705
- ### GitHub Actions Workflows
706
-
707
- The repository includes comprehensive GitHub Actions workflows for automation
708
- and quality assurance:
709
-
710
- #### ๐Ÿ“ฐ News Generation
711
-
712
- - **Schedule**: Runs daily at 06:00 UTC
713
- - **Manual Trigger**: Can be triggered manually with custom parameters
714
- - **Automatic Commit**: Commits and pushes generated articles automatically
715
- - **Workflow**: `.github/workflows/news-generation.yml`
716
-
717
- **Workflow Inputs:**
718
-
719
- - `article_types`: Comma-separated list of article types (default: `week-ahead`)
720
- - `languages`: Languages to generate (`en`, `eu-core`, `all`, or custom list)
721
- - `force_generation`: Force generation even if recent articles exist
722
-
723
- #### ๐Ÿท๏ธ PR Labeling
724
-
725
- - **Automatic**: Labels PRs based on file changes
726
- - **Configuration**: `.github/labeler.yml`
727
- - **Workflow**: `.github/workflows/labeler.yml`
728
- - **Setup**: Run `.github/workflows/setup-labels.yml` once to create all labels
729
-
730
- #### ๐Ÿ“ฆ Release Management
731
-
732
- - **Automated Release Notes**: Via Release Drafter
733
- - **Semantic Versioning**: Based on PR labels
734
- - **SBOM & Attestations**: Security compliance with artifact attestations
735
- - **Workflow**: `.github/workflows/release.yml`
736
- - **Configuration**: `.github/release-drafter.yml`
737
-
738
- #### ๐Ÿ”’ Security Scanning
739
-
740
- - **CodeQL**: Automated security analysis on push, PR, and weekly schedule
741
- - **OpenSSF Scorecard**: Supply chain security assessment (weekly, on branch protection changes)
742
- - **Dependabot**: Weekly dependency updates for npm and GitHub Actions
743
- - **Dependency Review**: Vulnerability scanning on pull requests
744
- - **Vulnerability Scanning**: Automated npm audit in PR validation
745
- - **Workflows**: `.github/workflows/codeql.yml`, `.github/workflows/scorecards.yml`, `.github/dependabot.yml`, `.github/workflows/dependency-review.yml`
746
-
747
- #### ๐Ÿ† Compliance & Quality
748
-
749
- - **REUSE Compliance**: License header verification (FSFE REUSE specification)
750
- - **SonarCloud Analysis**: Automatic server-side code quality, security vulnerabilities, and technical debt tracking
751
- - **SLSA Provenance**: Level 3 build attestations with SBOM generation on releases
752
- - **Workflows**: `.github/workflows/reuse.yml`, `.github/workflows/release.yml`
753
-
754
- #### โœ… Test & Validation
755
-
756
- - **HTML Validation**: Automated htmlhint checks
757
- - **Functional Tests**: News generation, index, and sitemap validation
758
- - **Security Checks**: npm audit for vulnerabilities
759
- - **Workflow**: `.github/workflows/test-and-report.yml`
760
519
 
761
- **๐Ÿ“Š Evidence:** See [Workflow Status Badges](#-status-badges) at top of README.
762
- ### Workflow Status Badges
520
+ ### Optional: live MCP integration
763
521
 
764
- **Core Workflows:**
522
+ By default the workflows run with `USE_EP_MCP=true`. To experiment locally with the [European Parliament MCP Server](https://github.com/Hack23/European-Parliament-MCP-Server):
765
523
 
766
- [![News Generation](https://github.com/Hack23/euparliamentmonitor/actions/workflows/news-generation.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/news-generation.yml)
767
- [![Test and Report](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml)
768
- [![E2E Tests](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml)
769
-
770
- **Security Workflows:**
771
-
772
- [![CodeQL](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml)
773
- [![OpenSSF Scorecard](https://github.com/Hack23/euparliamentmonitor/actions/workflows/scorecards.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/scorecards.yml)
774
- [![Dependency Review](https://github.com/Hack23/euparliamentmonitor/actions/workflows/dependency-review.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/dependency-review.yml)
775
-
776
- **Compliance Workflows:**
777
-
778
- [![REUSE Compliance](https://github.com/Hack23/euparliamentmonitor/actions/workflows/reuse.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/reuse.yml)
779
- [![SLSA Provenance](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml)
780
-
781
- ### Manual Release Process
782
-
783
- To create a new release:
784
-
785
- 1. Go to **Actions** โ†’ **Release** workflow
786
- 2. Click **Run workflow**
787
- 3. Enter version (e.g., `v1.0.0`)
788
- 4. Select if pre-release
789
- 5. The workflow will:
790
- - Run validation and tests (169 unit tests, E2E tests)
791
- - Generate API documentation (TypeDoc)
792
- - Generate test coverage reports (Vitest HTML)
793
- - Generate E2E test reports (Playwright)
794
- - Create documentation index
795
- - Commit documentation to main branch
796
- - Generate SBOM and attestations (SLSA Level 3)
797
- - Create GitHub release with artifacts
798
- - Update release notes automatically
799
-
800
- **๐Ÿ”’ ISMS Evidence:**
801
- - [Release Workflow](.github/workflows/release.yml) - Complete automation
802
- - [SLSA Attestations](https://github.com/Hack23/euparliamentmonitor/attestations) - Build provenance
803
- - [Release Process Guide](docs/RELEASE_PROCESS.md) - Step-by-step documentation
804
-
805
- ### Documentation as Code
806
-
807
- Every release automatically generates comprehensive documentation:
808
-
809
- | Documentation | Description | Link |
810
- |--------------|-------------|------|
811
- | **API Documentation** | TypeDoc-generated API reference from TypeScript source | [View Docs](https://hack23.github.io/euparliamentmonitor/docs/api/) |
812
- | **Test Coverage** | Interactive Vitest coverage reports (82%+) | [View Coverage](https://hack23.github.io/euparliamentmonitor/docs/coverage/) |
813
- | **E2E Test Reports** | Playwright test results with screenshots | [View Report](https://hack23.github.io/euparliamentmonitor/playwright-report/) |
814
- | **Documentation Index** | Beautiful hub linking all reports | [View Index](https://hack23.github.io/euparliamentmonitor/docs/) |
815
-
816
- **๐Ÿ“‹ How It Works:**
817
- 1. Release workflow runs all tests
818
- 2. Generates API docs with TypeDoc
819
- 3. Copies coverage reports to `docs/`
820
- 4. Creates documentation index page
821
- 5. Commits everything to `main` branch
822
- 6. Documentation is version-controlled and traceable
823
-
824
- **๐ŸŽฏ Run Locally:**
825
524
  ```bash
826
- npm run docs:generate # Generate all documentation
827
- npm run docs:api # Generate API docs only
828
- npm run docs:index # Generate index page
525
+ git clone https://github.com/Hack23/European-Parliament-MCP-Server.git
526
+ cd European-Parliament-MCP-Server && npm install && npm run build
527
+ export EP_MCP_SERVER_PATH="$(pwd)/dist/index.js"
528
+ # or use the gateway helper:
529
+ source scripts/mcp-setup.sh
829
530
  ```
830
531
 
831
- **๐Ÿ”’ ISMS Compliance:**
832
- - Documentation-as-code follows [Hack23 ISMS Secure Development Policy ยง3.2](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md#32-architecture-documentation)
833
- - All releases include complete documentation evidence
834
- - Documentation committed to repository for full auditability
835
-
836
- ### Setting Up Labels
837
-
838
- First-time setup requires running the label creation workflow:
839
-
840
- 1. Go to **Actions** โ†’ **Setup Repository Labels**
841
- 2. Click **Run workflow**
842
- 3. Wait for completion
843
- 4. Labels will be automatically applied to future PRs
844
-
845
- ## Configuration
846
-
847
- ### Language Presets
848
-
849
- - `en` - English only
850
- - `eu-core` - English, German, French, Spanish, Dutch
851
- - `nordic` - English, Swedish, Danish, Norwegian, Finnish
852
- - `all` - All 14 supported languages
853
-
854
- ### Article Types
855
-
856
- - `week-ahead` - Preview of upcoming parliamentary events
857
- - `committee-reports` - Committee activity analysis (coming soon)
858
- - `propositions` - Legislative proposals analysis (coming soon)
859
- - `motions` - Parliamentary motions analysis (coming soon)
860
- - `breaking` - Breaking news coverage (coming soon)
861
-
862
- ## Contributing
863
-
864
- We welcome contributions from developers, journalists, translators, and security researchers!
865
-
866
- ### How to Contribute
867
-
868
- Please read our comprehensive [Contributing Guide](CONTRIBUTING.md) for:
869
- - Development workflow and setup instructions
870
- - Code quality requirements and testing standards
871
- - Pull request process and review guidelines
872
- - Security best practices and ISMS compliance
873
- - Multi-language contribution guidelines
874
-
875
- ### Code of Conduct
876
-
877
- This project adheres to the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [conduct@hack23.com](mailto:conduct@hack23.com).
878
-
879
- ### Security
880
-
881
- If you discover a security vulnerability, please follow our [Security Policy](SECURITY.md) for responsible disclosure. **Do not** report security issues through public GitHub issues.
882
-
883
- ### Contributors
532
+ Set `USE_EP_MCP=false` to disable MCP and fall back to placeholder/test data.
884
533
 
885
- See [AUTHORS.md](AUTHORS.md) for a list of contributors who have helped make this project possible.
886
- Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines on:
534
+ ---
887
535
 
888
- - Code quality requirements (ESLint, Prettier, JSDoc)
889
- - Testing requirements (80% line coverage, 75% branch coverage)
890
- - Security requirements (input validation, XSS prevention, dependency scanning)
891
- - Commit message format (conventional commits)
892
- - Pull request process
893
-
894
- **Security-Critical Contributions**: All security-related changes must align with [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) and [Hack23 ISMS Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md).
895
-
896
- ## Security Policy
897
-
898
- For security vulnerability reporting and disclosure process, please see [SECURITY.md](SECURITY.md).
899
-
900
- **Responsible Disclosure**:
901
- - Report vulnerabilities privately via GitHub Security Advisories
902
- - 48-hour acknowledgment, 7-day validation, 30-day remediation for critical issues
903
- - Public recognition for security researchers (unless anonymity requested)
904
-
905
- ## Badge Maintenance
906
-
907
- ### Maintaining Security Badge Status
908
-
909
- EU Parliament Monitor maintains security excellence through continuous compliance with OpenSSF best practices:
910
-
911
- #### OpenSSF Scorecard (Target: โ‰ฅ7.0)
912
-
913
- **Current Optimizations**:
914
- - โœ… Branch protection on `main` branch
915
- - โœ… Required code review for pull requests
916
- - โœ… SHA-pinned GitHub Actions
917
- - โœ… CodeQL SAST enabled
918
- - โœ… Dependabot alerts enabled
919
- - โœ… SECURITY.md present
920
- - โœ… No dangerous workflow patterns
921
-
922
- **Monitoring**: View current score at [OpenSSF Scorecard Dashboard](https://scorecard.dev/viewer/?uri=github.com/Hack23/euparliamentmonitor)
923
-
924
- #### CII Best Practices (Target: Passing โ†’ Silver โ†’ Gold)
925
-
926
- **Requirements Met**:
927
- - โœ… Public version control (GitHub)
928
- - โœ… Public issue tracker (GitHub Issues)
929
- - โœ… LICENSE file (Apache-2.0)
930
- - โœ… CONTRIBUTING.md with clear guidelines
931
- - โœ… CODE_OF_CONDUCT.md
932
- - โœ… SECURITY.md with vulnerability reporting
933
- - โœ… Documentation in README
934
- - โœ… Automated testing (Vitest + Playwright, โ‰ฅ80% coverage)
935
- - โœ… Static analysis (CodeQL, ESLint)
936
- - โœ… Dependency scanning (Dependabot, npm audit)
937
-
938
- **Registration**: Complete questionnaire at [CII Best Practices](https://bestpractices.coreinfrastructure.org/)
939
-
940
- #### SLSA Level 3 (Status: โœ… Implemented)
941
-
942
- **Provenance Generation**:
943
- - โœ… Automated on releases via `.github/workflows/release.yml`
944
- - โœ… Build attestations using `actions/attest-build-provenance@v2`
945
- - โœ… SBOM generation using SPDX format
946
- - โœ… Artifacts uploaded to GitHub Releases
947
-
948
- **Verification**: View attestations at `https://github.com/Hack23/euparliamentmonitor/attestations/`
949
-
950
- #### FOSSA License Compliance
951
-
952
- **Setup Required**:
953
- 1. Sign up at [FOSSA](https://fossa.com/)
954
- 2. Connect GitHub repository
955
- 3. Configure license policy (Apache-2.0 compatible only)
956
-
957
- **Badge**: Updates automatically after scan completion
958
-
959
- #### REUSE Compliance (Status: โœ… Implemented)
960
-
961
- **Compliance Verification**:
962
- - โœ… `.reuse/dep5` covers all files without headers
963
- - โœ… Apache-2.0 license applied to all project files
964
- - โœ… Copyright notices: "2024-2026 Hack23 AB"
965
-
966
- **Workflow**: Runs on push, pull requests, and weekly via `.github/workflows/reuse.yml`
967
-
968
- ### ISMS Policy References
969
-
970
- This project adheres to [Hack23 ISMS](https://github.com/Hack23/ISMS-PUBLIC) policies:
971
-
972
- | Policy | Relevance | Implementation |
973
- |--------|-----------|----------------|
974
- | [**Open Source Policy**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Open_Source_Policy.md) | Security badge requirements, governance artifacts | All badges, docs, REUSE compliance |
975
- | [**CRA Conformity Assessment Process**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CRA_Conformity_Assessment_Process.md) | EU Cyber Resilience Act compliance | [CRA-ASSESSMENT.md](CRA-ASSESSMENT.md) |
976
- | [**Secure Development Policy**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md) | Development security standards | SECURITY_ARCHITECTURE.md, SAST/SCA/DAST |
977
- | [**Threat Modeling Policy**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Threat_Modeling.md) | Threat analysis requirements | STRIDE analysis in THREAT_MODEL.md |
978
- | [**Vulnerability Management**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Vulnerability_Management.md) | Remediation SLAs | SECURITY.md disclosure timeline |
979
- | [**Classification Framework**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) | Data classification | Public/Medium/Medium (L1/L2/L2) |
980
- | [**Incident Response Plan**](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Incident_Response_Plan.md) | Security incident procedures | Linked in SECURITY.md |
981
-
982
- ### Compliance Frameworks
983
-
984
- EU Parliament Monitor aligns with multiple compliance frameworks:
985
-
986
- | Framework | Controls | Evidence |
987
- |-----------|----------|----------|
988
- | **ISO 27001** | A.12.6.1 (Vulnerability Management), A.14.2.8 (Security Testing) | CodeQL, Dependabot, npm audit |
989
- | **NIST CSF 2.0** | Identify, Protect, Detect, Respond, Recover | SECURITY_ARCHITECTURE.md compliance matrix |
990
- | **CIS Controls v8.1** | 18.3 (Remediate Vulnerabilities), 2.7 (Allowlisting) | Automated scanning, SBOM |
991
- | **GDPR** | Data Protection by Design | European Parliament open data (public) |
992
- | **NIS2** | Article 20, 21 (Cybersecurity Risk Management) | Threat model, security controls |
993
- | **EU Cyber Resilience Act** | SBOM, Vulnerability Disclosure, Annex I/V | [CRA-ASSESSMENT.md](CRA-ASSESSMENT.md), SLSA provenance, SECURITY.md |
994
-
995
- ## ๐Ÿค– AI-Disrupted News Generation & Agentic Intelligence
996
-
997
- > *"While traditional newsrooms debate whether AI will replace journalists,
998
- > EU Parliament Monitor quietly deployed 8 autonomous AI agents that generate
999
- > investigative political intelligence in 14 languages before most reporters
1000
- > have finished their morning coffee. The future of parliamentary journalism
1001
- > didn't send a memo โ€” it opened a pull request."*
1002
-
1003
- The EU Parliament Monitor doesn't just report on European Parliament activity โ€” it **autonomously generates deep political intelligence** at machine speed, with editorial quality that would make legacy news desks nervous. Every article is researched, written, localized, and prepared for publication by AI agents that operate by default on live European Parliament data via the [MCP Server](https://github.com/Hack23/European-Parliament-MCP-Server) (46 tools, real-time data), with transparent fallback to placeholder/test data when live access is unavailable as described above. The agents automatically generate content and open publication-ready pull requests; publication to the site occurs when a human reviews and merges those PRs.
1004
-
1005
- ### ๐Ÿ“ฐ Agentic News Generation Architecture
1006
-
1007
- **8 autonomous news workflows** run on precision schedules, each powered by a dedicated GitHub Copilot agentic workflow that fetches live EP data (with documented fallback behavior), generates Economist-style analysis, and opens publication-ready pull requests across all 14 languages:
1008
-
1009
- ```mermaid
1010
- graph LR
1011
- subgraph "๐Ÿ“… Daily Cycle (Mon-Fri)"
1012
- CR["๐Ÿ›๏ธ Committee Reports<br/>04:00 UTC"]
1013
- PR["๐Ÿ“œ Propositions<br/>05:00 UTC"]
1014
- MO["โš–๏ธ Motions<br/>06:00 UTC"]
1015
- end
1016
-
1017
- subgraph "๐Ÿ“† Weekly Cycle"
1018
- WA["๐Ÿ“‹ Week Ahead<br/>Fri 07:00 UTC"]
1019
- WR["๐Ÿ“Š Weekly Review<br/>Sat 09:00 UTC"]
1020
- end
1021
-
1022
- subgraph "๐Ÿ“… Monthly Cycle"
1023
- MA["๐Ÿ”ญ Month Ahead<br/>1st 08:00 UTC"]
1024
- MR["๐Ÿ“ˆ Monthly Review<br/>28th 10:00 UTC"]
1025
- end
1026
-
1027
- subgraph "๐ŸŽ›๏ธ On-Demand"
1028
- AG["๐Ÿš€ Article Generator<br/>Manual Dispatch"]
1029
- end
1030
-
1031
- MCP["๐Ÿ”Œ EP MCP Server<br/>46 Tools ยท Live Data"]
1032
-
1033
- MCP --> CR & PR & MO & WA & WR & MA & MR & AG
1034
-
1035
- style CR fill:#1a5276,color:#fff
1036
- style PR fill:#1a5276,color:#fff
1037
- style MO fill:#1a5276,color:#fff
1038
- style WA fill:#117a65,color:#fff
1039
- style WR fill:#117a65,color:#fff
1040
- style MA fill:#7d3c98,color:#fff
1041
- style MR fill:#7d3c98,color:#fff
1042
- style AG fill:#b9770e,color:#fff
1043
- style MCP fill:#c0392b,color:#fff
1044
- ```
1045
-
1046
- | Workflow | Schedule | Focus | Output |
1047
- |----------|----------|-------|--------|
1048
- | ๐Ÿ›๏ธ **Committee Reports** | Monโ€“Fri 04:00 UTC | Committee decisions & activities | 14 language articles |
1049
- | ๐Ÿ“œ **Propositions** | Monโ€“Fri 05:00 UTC | Legislative proposals analysis | 14 language articles |
1050
- | โš–๏ธ **Motions** | Monโ€“Fri 06:00 UTC | Motions & resolutions analysis | 14 language articles |
1051
- | ๐Ÿ“‹ **Week Ahead** | Fridays 07:00 UTC | Upcoming parliamentary preview | 14 language articles |
1052
- | ๐Ÿ“Š **Weekly Review** | Saturdays 09:00 UTC | Past week retrospective | 14 language articles |
1053
- | ๐Ÿ”ญ **Month Ahead** | 1st of month 08:00 UTC | Strategic monthly outlook | 14 language articles |
1054
- | ๐Ÿ“ˆ **Monthly Review** | 28th of month 10:00 UTC | Monthly retrospective analysis | 14 language articles |
1055
- | ๐Ÿš€ **Article Generator** | Manual dispatch | Multi-type article generation | Configurable |
1056
-
1057
- ### ๐Ÿง  The Intelligence Stack
536
+ ## ๐Ÿ“š Documentation Hub
1058
537
 
1059
- The platform combines **8 core news-pipeline AI agents** (from a catalog of 22+ specialized agents), **39+ TypeScript source modules**, **21 CI/CD workflows**, and **46 MCP data tools** into a fully autonomous political intelligence pipeline:
538
+ | Topic | Document |
539
+ |---|---|
540
+ | ๐ŸŒ **Live site** | [euparliamentmonitor.com](https://euparliamentmonitor.com) ยท [Political Intelligence Hub](https://euparliamentmonitor.com/political-intelligence.html) ยท [Site Map](https://euparliamentmonitor.com/sitemap.html) |
541
+ | ๐Ÿ›๏ธ **Architecture** | [ARCHITECTURE.md](ARCHITECTURE.md) ยท [FUTURE_ARCHITECTURE.md](FUTURE_ARCHITECTURE.md) ยท [DATA_MODEL.md](DATA_MODEL.md) ยท [FLOWCHART.md](FLOWCHART.md) ยท [STATEDIAGRAM.md](STATEDIAGRAM.md) ยท [MINDMAP.md](MINDMAP.md) |
542
+ | ๐Ÿ“ฐ **Article generation** | [Article-Generation.md](Article-Generation.md) โ€” end-to-end pipeline reference |
543
+ | ๐Ÿง  **Analysis chain** | [analysis/README.md](analysis/README.md) ยท [analysis/methodologies/](analysis/methodologies/) ยท [analysis/templates/README.md](analysis/templates/README.md) |
544
+ | ๐Ÿค– **Agentic pipeline** | [.github/agents/README.md](.github/agents/README.md) ยท [.github/skills/README.md](.github/skills/README.md) ยท [.github/prompts/README.md](.github/prompts/README.md) ยท [.github/workflows/README.md](.github/workflows/README.md) ยท [WORKFLOWS.md](WORKFLOWS.md) |
545
+ | ๐Ÿ›ก๏ธ **Security & compliance** | [SECURITY.md](SECURITY.md) ยท [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) ยท [THREAT_MODEL.md](THREAT_MODEL.md) ยท [CLASSIFICATION.md](CLASSIFICATION.md) ยท [CRA-ASSESSMENT.md](CRA-ASSESSMENT.md) |
546
+ | ๐Ÿ’ผ **Business** | [SWOT.md](SWOT.md) ยท [BCPPlan.md](BCPPlan.md) ยท [FinancialSecurityPlan.md](FinancialSecurityPlan.md) ยท [End-of-Life-Strategy.md](End-of-Life-Strategy.md) |
547
+ | ๐Ÿงช **Testing** | [UnitTestPlan.md](UnitTestPlan.md) ยท [E2ETestPlan.md](E2ETestPlan.md) ยท [test/README.md](test/README.md) ยท [e2e/README.md](e2e/README.md) |
548
+ | ๐Ÿš€ **Release process** | [docs/RELEASE_PROCESS.md](docs/RELEASE_PROCESS.md) ยท [SLSA Attestations](https://github.com/Hack23/euparliamentmonitor/attestations) |
549
+ | ๐Ÿ“” **Generated docs** | [API Reference](https://euparliamentmonitor.com/docs/api/index.html) ยท [Coverage](https://euparliamentmonitor.com/docs/coverage/index.html) ยท [E2E Report](https://euparliamentmonitor.com/playwright-report/index.html) |
1060
550
 
1061
- ```mermaid
1062
- graph TB
1063
- subgraph "๐Ÿค– 8 Core News Pipeline Agents"
1064
- A1["๐Ÿ“ฐ News Journalist<br/><i>Economist-style reporting</i>"]
1065
- A2["๐Ÿ”„ Data Pipeline<br/><i>MCP integration</i>"]
1066
- A3["๐ŸŽจ Frontend<br/><i>WCAG 2.1 AA</i>"]
1067
- A4["โœ… Quality Engineer<br/><i>Testing & validation</i>"]
1068
- A5["๐Ÿ”’ Security Architect<br/><i>ISMS compliance</i>"]
1069
- A6["๐Ÿ“š Documentation<br/><i>C4 & architecture</i>"]
1070
- A7["โš™๏ธ DevOps Engineer<br/><i>CI/CD automation</i>"]
1071
- A8["๐Ÿ“‹ Product Task<br/><i>Issue management</i>"]
1072
- end
1073
-
1074
- subgraph "โš™๏ธ 21 CI/CD Workflows"
1075
- W1["8 News Generation"]
1076
- W2["5 Security & Compliance"]
1077
- W3["2 Testing"]
1078
- W4["2 Release & Deploy"]
1079
- W5["4 Automation & Infra"]
1080
- end
1081
-
1082
- subgraph "๐Ÿ“Š Data Layer"
1083
- MCP["๐Ÿ”Œ EP MCP Server<br/>46 Tools"]
1084
- TS["๐Ÿ“ฆ 39+ TypeScript Modules"]
1085
- L14["๐ŸŒ 14 Languages"]
1086
- end
1087
-
1088
- A1 --> W1
1089
- A2 --> MCP
1090
- A7 --> W2 & W3 & W4
1091
- W1 --> TS --> L14
1092
-
1093
- style A1 fill:#2e86c1,color:#fff
1094
- style A2 fill:#2e86c1,color:#fff
1095
- style A3 fill:#2e86c1,color:#fff
1096
- style A4 fill:#2e86c1,color:#fff
1097
- style A5 fill:#2e86c1,color:#fff
1098
- style A6 fill:#2e86c1,color:#fff
1099
- style A7 fill:#2e86c1,color:#fff
1100
- style A8 fill:#2e86c1,color:#fff
1101
- style W1 fill:#1a5276,color:#fff
1102
- style W2 fill:#7d3c98,color:#fff
1103
- style W3 fill:#117a65,color:#fff
1104
- style W4 fill:#b9770e,color:#fff
1105
- style MCP fill:#c0392b,color:#fff
1106
- style TS fill:#1c2833,color:#fff
1107
- style L14 fill:#117a65,color:#fff
1108
- ```
551
+ ---
1109
552
 
1110
- ### ๐Ÿš€ Future Advance: AI Evolution Roadmap (2026โ€“2037)
553
+ ## ๐Ÿš€ Future: AI Evolution Roadmap (2026โ€“2037)
1111
554
 
1112
- > *"We're not just keeping up with AI โ€” we're building the editorial infrastructure
1113
- > for the era when machines understand parliamentary procedure better than most MEPs."*
555
+ > *"We're not just keeping up with AI โ€” we're building the editorial infrastructure for the era when machines understand parliamentary procedure better than most MEPs."*
1114
556
 
1115
- The platform evolves through six phases from agentic news generation to AGI-enhanced transformative democracy. Full details in **[Future Mindmap](FUTURE_MINDMAP.md)** and **[Future Workflows](FUTURE_WORKFLOWS.md)**.
557
+ Six-phase roadmap from current agentic news generation to AGI-enhanced transformative democracy, with human oversight maintained at every level.
1116
558
 
1117
559
  ```mermaid
1118
560
  timeline
1119
561
  title EU Parliament Monitor โ€” AI Evolution Roadmap
1120
562
  section Phase 1 (2026)
1121
- Agentic News : 8 autonomous workflows
563
+ Agentic News : 8 unified workflows
1122
564
  : 14-language generation
1123
- : MCP data integration
1124
- : Economist-style analysis
565
+ : Deterministic aggregator
566
+ : 51-artifact analysis catalog
1125
567
  section Phase 2 (2027)
1126
568
  Predictive Analytics : Voting outcome prediction
1127
569
  : Legislative impact forecasting
1128
570
  : Cross-party coalition detection
1129
- : Automated trend analysis
1130
571
  section Phase 3 (2028โ€“2029)
1131
572
  Multi-Modal Intelligence : Video plenary analysis
1132
573
  : Real-time debate tracking
1133
574
  : Infographic auto-generation
1134
- : Autonomous content pipelines
1135
575
  section Phase 4 (2030โ€“2031)
1136
576
  Near-Expert Analysis : 50+ parliament coverage
1137
577
  : Expert-level policy briefs
1138
578
  : Predictive governance models
1139
- : Universal language support
1140
579
  section Phase 5 (2032โ€“2033)
1141
580
  Global Coverage : 100+ parliaments
1142
581
  : Pre-AGI capabilities
1143
- : Real-time policy impact
1144
582
  : Cross-jurisdiction analysis
1145
583
  section Phase 6 (2034โ€“2037)
1146
584
  AGI Era : Transformative democracy
1147
585
  : 195 national legislatures
1148
- : Policy prediction before proposal
1149
586
  : Human oversight maintained
1150
587
  ```
1151
588
 
1152
- ### ๐Ÿค– Phase 6: AGI Era & Transformative Democracy (2034โ€“2037)
1153
-
1154
- When AGI or near-AGI systems become available, the platform architecture is designed to scale responsibly:
589
+ ๐Ÿ“˜ **[FUTURE_MINDMAP.md](FUTURE_MINDMAP.md)** โ€” capability evolution & system vision ยท ๐Ÿ“— **[FUTURE_WORKFLOWS.md](FUTURE_WORKFLOWS.md)** โ€” CI/CD evolution & automation roadmap
1155
590
 
1156
- | Capability | Description |
1157
- |-----------|-------------|
1158
- | ๐Ÿค– **Autonomous Analysis** | AGI-powered real-time political intelligence across all 195 national legislatures |
1159
- | ๐ŸŒ **Universal Language Support** | Every UN language supported natively โ€” no translation pipeline, native generation |
1160
- | ๐Ÿ“Š **Predictive Governance** | Policy impact prediction *before* legislation is proposed โ€” anticipatory intelligence |
1161
- | โš–๏ธ **Ethical AI Governance** | Human oversight maintained regardless of AI capability level โ€” democratic safeguards hardcoded |
1162
- | ๐Ÿ›ก๏ธ **Democratic Safeguards** | Platform architecture prevents weaponization or manipulation โ€” transparency by design |
591
+ ---
1163
592
 
1164
- ### ๐Ÿ“ˆ AI Model Evolution Strategy
593
+ ## ๐Ÿค Community & Contributing
1165
594
 
1166
- **Assumptions:** Major AI model upgrades annually, competitors (OpenAI, Google, Meta, EU sovereign AI) evaluated at each release. Architecture accommodates potential paradigm shifts (quantum AI, neuromorphic computing).
595
+ EU Parliament Monitor welcomes contributions from **developers, journalists, translators, political scientists, OSINT analysts, accessibility experts, and security researchers**.
1167
596
 
1168
- Projected workflow counts below include all CI/CD workflow definitions, agentic workflow sources, and planned variants across the platform. The 2026 baseline (~44) builds on the current 21 deployed `.yml` workflows + 8 agentic `.md` sources (29 today) plus planned security, localization, and data-pipeline additions.
597
+ | Resource | Purpose |
598
+ |---|---|
599
+ | **[CONTRIBUTING.md](CONTRIBUTING.md)** | Development workflow, code standards, contribution guidelines |
600
+ | **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** | Contributor Covenant 2.1 community standards |
601
+ | **[SECURITY.md](SECURITY.md)** | Vulnerability disclosure (48h ack ยท 7d validation ยท 30d remediation for criticals) |
602
+ | **[AUTHORS.md](AUTHORS.md)** | Recognition of project contributors |
603
+ | **[LICENSE](LICENSE)** | Apache License 2.0 |
1169
604
 
1170
- | Year | Projected Workflow Definitions | AI Model | Key Capability |
1171
- |------|-------------------------------|----------|----------------|
1172
- | **2026** | 44โ€“50 | Opus 4.7โ€“4.9 | ๐ŸŸข Agentic news generation |
1173
- | **2027** | 50โ€“55 | Opus 5.x | ๐Ÿ”ต Predictive analytics |
1174
- | **2028** | 55โ€“65 | Opus 6.x | ๐ŸŸฃ Multi-modal content |
1175
- | **2029** | 65โ€“75 | Opus 7.x | ๐ŸŸ  Autonomous pipeline |
1176
- | **2030** | 75โ€“85 | Opus 8.x | ๐Ÿ”ด Near-expert analysis |
1177
- | **2031โ€“2033** | 85โ€“100 | Opus 9โ€“10.x / Pre-AGI | โšช Global coverage |
1178
- | **2034โ€“2037** | 100โ€“120+ | AGI / Post-AGI | โญ Transformative platform |
605
+ **Channels:** GitHub Issues (bug reports / features) ยท GitHub Discussions (Q&A) ยท [security@hack23.com](mailto:security@hack23.com) (vulnerabilities) ยท [conduct@hack23.com](mailto:conduct@hack23.com) (Code of Conduct)
1179
606
 
1180
- ```mermaid
1181
- %%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1a5276', 'primaryTextColor': '#fff', 'lineColor': '#2e86c1', 'secondaryColor': '#117a65'}}}%%
1182
- xychart-beta
1183
- title "Projected Workflow Definitions & Variants (2026โ€“2037)"
1184
- x-axis ["2026", "2027", "2028", "2029", "2030", "2031", "2032", "2033", "2034", "2035", "2036", "2037"]
1185
- y-axis "Workflow definitions & variants" 0 --> 130
1186
- bar [44, 53, 60, 70, 80, 88, 94, 100, 105, 110, 115, 120]
1187
- line [44, 53, 60, 70, 80, 88, 94, 100, 105, 110, 115, 120]
1188
- ```
1189
-
1190
- ### ๐Ÿ“š Detailed Roadmap Documentation
607
+ **Governance compliance:** โœ… OpenSSF Best Practices ยท โœ… Hack23 ISMS aligned ยท โœ… Public repository with transparent decision-making ยท โœ… REUSE-compliant license headers ยท โœ… Conventional commits
1191
608
 
1192
- | Document | Focus | Coverage |
1193
- |----------|-------|----------|
1194
- | ๐Ÿ“˜ **[Future Mindmap](FUTURE_MINDMAP.md)** | Capability evolution & system vision | 2026โ€“2037 AI/ML roadmap, multi-parliament expansion, API ecosystem |
1195
- | ๐Ÿ“— **[Future Workflows](FUTURE_WORKFLOWS.md)** | CI/CD evolution & automation roadmap | Security hardening, performance optimization, AGI-ready pipelines |
609
+ ---
1196
610
 
1197
- ## License
611
+ ## ๐Ÿ“ License
1198
612
 
613
+ ```
1199
614
  Copyright 2024-2026 Hack23 AB
1200
615
 
1201
616
  Licensed under the Apache License, Version 2.0 (the "License");
@@ -1203,20 +618,14 @@ you may not use this file except in compliance with the License.
1203
618
  You may obtain a copy of the License at
1204
619
 
1205
620
  http://www.apache.org/licenses/LICENSE-2.0
621
+ ```
1206
622
 
1207
- Unless required by applicable law or agreed to in writing, software
1208
- distributed under the License is distributed on an "AS IS" BASIS,
1209
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1210
- See the License for the specific language governing permissions and
1211
- limitations under the License.
1212
-
1213
- See [LICENSE](LICENSE) file for full details.
623
+ See [LICENSE](LICENSE) for the full text.
1214
624
 
1215
- ## Credits
625
+ ---
1216
626
 
1217
- This project is based on the news generation implementation from
1218
- [Hack23/riksdagsmonitor](https://github.com/Hack23/riksdagsmonitor).
627
+ ## ๐Ÿ™ Credits
1219
628
 
1220
- ## Author
629
+ The news-generation foundation builds on the [Hack23/riksdagsmonitor](https://github.com/Hack23/riksdagsmonitor) Swedish Parliament monitor. Sister projects in the Hack23 transparency portfolio: [European-Parliament-MCP-Server](https://github.com/Hack23/European-Parliament-MCP-Server) (EP data MCP) ยท [cia](https://github.com/Hack23/cia) (Swedish Parliament intelligence, Java/Spring) ยท [ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC) (security policies).
1221
630
 
1222
- Hack23 AB - Intelligence Operations Team
631
+ **Maintained by:** Hack23 AB โ€” Intelligence Operations Team