BCPPlan.md

July 18, 2026 ยท View on GitHub

Hack23 Logo

๐Ÿ”„ EU Parliament Monitor โ€” Business Continuity Plan

๐Ÿ›ก๏ธ Classification-Driven Business Resilience for European Parliament Intelligence
๐ŸŽฏ Systematic Recovery Planning Through AWS S3 + CloudFront Static Site Architecture

Owner Version Effective Date Review Cycle

๐Ÿ“‹ Document Owner: CEO | ๐Ÿ“„ Version: 2.3 | ๐Ÿ“… Last Updated: 2026-05-30 (UTC) | ๐Ÿท๏ธ Platform Release: v0.9.26
๐Ÿ”„ Review Cycle: Semi-Annual | โฐ Next Review: 2026-11-30


๐Ÿ“š Architecture Documentation Map

DocumentFocusDescriptionDocumentation Link
Architecture๐Ÿ›๏ธ ArchitectureC4 model showing current system structureView Source
Future Architecture๐Ÿ›๏ธ ArchitectureC4 model showing future system structureView Source
Mindmaps๐Ÿง  ConceptCurrent system component relationshipsView Source
Future Mindmaps๐Ÿง  ConceptFuture capability evolutionView Source
SWOT Analysis๐Ÿ’ผ BusinessCurrent strategic assessmentView Source
Future SWOT Analysis๐Ÿ’ผ BusinessFuture strategic opportunitiesView Source
Data Model๐Ÿ“Š DataCurrent data structures and relationshipsView Source
Future Data Model๐Ÿ“Š DataEnhanced European Parliament data architectureView Source
Flowcharts๐Ÿ”„ ProcessCurrent data processing workflowsView Source
Future Flowcharts๐Ÿ”„ ProcessEnhanced AI-driven workflowsView Source
State Diagrams๐Ÿ”„ BehaviorCurrent system state transitionsView Source
Future State Diagrams๐Ÿ”„ BehaviorEnhanced adaptive state transitionsView Source
Security Architecture๐Ÿ›ก๏ธ SecurityCurrent security implementationView Source
Future Security Architecture๐Ÿ›ก๏ธ SecuritySecurity enhancement roadmapView Source
Threat Model๐ŸŽฏ SecuritySTRIDE threat analysisView Source
Classification๐Ÿท๏ธ GovernanceCIA classification & BCPView Source
CRA Assessment๐Ÿ›ก๏ธ ComplianceCyber Resilience ActView Source
Workflowsโš™๏ธ DevOpsCI/CD documentationView Source
Future Workflows๐Ÿš€ DevOpsPlanned CI/CD enhancementsView Source
Business Continuity Plan๐Ÿ”„ ResilienceRecovery planningView Source
Financial Security Plan๐Ÿ’ฐ FinancialCost & security analysisView Source
End-of-Life Strategy๐Ÿ“ฆ LifecycleTechnology EOL planningView Source
Unit Test Plan๐Ÿงช TestingUnit testing strategyView Source
E2E Test Plan๐Ÿ” TestingEnd-to-end testingView Source
Performance Testingโšก PerformancePerformance benchmarksView Source
Security Policy๐Ÿ”’ SecurityVulnerability reporting & security policyView Source

๐ŸŽฏ Purpose Statement

EU Parliament Monitor's business continuity framework demonstrates how systematic recovery planning directly enables both operational resilience and democratic transparency excellence. Our classification-driven continuity approach serves as both operational necessity and demonstration of enterprise-grade practices for an open-source European Parliament Intelligence Platform.

This plan ensures European Parliament monitoring and multi-language news generation (14 languages) can continue during and after disruptive events, based on the Classification Framework impact analysis and recovery requirements.

โ€” James Pether Sรถrling, CEO/Founder


๐Ÿ“Š Business Impact-Driven Recovery Framework

๐ŸŽฏ Business Impact Analysis Integration

Our business continuity planning is directly driven by the Classification Framework business impact analysis matrix:

graph TB
    subgraph BIA["๐Ÿ“Š Business Impact Analysis"]
        DEMOCRATIC[๐Ÿ›๏ธ Democratic Impact<br/>Transparency Disruption]
        OPERATIONAL[โš™๏ธ Operational Impact<br/>Platform Availability]
        REPUTATIONAL[๐Ÿค Reputational Impact<br/>Public Trust]
        TECHNICAL[๐Ÿ’ป Technical Impact<br/>Service Degradation]
    end
    
    subgraph RECOVERY["๐Ÿ”„ Recovery Prioritization"]
        CRITICAL[๐Ÿ”ด Critical Recovery<br/>RTO โ‰ค 2 hours]
        HIGH[๐ŸŸ  High Priority<br/>RTO 2-4 hours]
        MEDIUM[๐ŸŸก Medium Priority<br/>RTO 4-24 hours]
        STANDARD[๐ŸŸข Standard Recovery<br/>RTO > 24 hours]
    end
    
    subgraph BUSINESS["๐Ÿข Platform Functions"]
        CORE[๐Ÿ—๏ธ Core Platform<br/>Static Site Serving]
        NEWS[๐Ÿ“ฐ News Generation<br/>14-Language Pipeline]
        DATA[๐Ÿ“ก EP Data Integration<br/>MCP Server Connection]
        CI[โš™๏ธ CI/CD Pipeline<br/>Build & Deploy]
    end
    
    DEMOCRATIC --> CRITICAL
    OPERATIONAL --> HIGH
    REPUTATIONAL --> MEDIUM
    TECHNICAL --> HIGH
    
    CRITICAL --> CORE
    HIGH --> CORE
    HIGH --> NEWS
    MEDIUM --> DATA
    STANDARD --> CI
    
    style BIA fill:#1565C0,color:#fff
    style RECOVERY fill:#FF9800,color:#fff
    style BUSINESS fill:#4CAF50,color:#fff

๐Ÿ“ˆ Business Impact Thresholds

Business Function๐Ÿ›๏ธ Democratic Impactโš™๏ธ Operational Impact๐Ÿค Reputational Impact๐Ÿ’ป Technical Impact๐ŸŽฏ Recovery Priority
๐ŸŒ Static Site ServingHigh โ€” Citizens lose access to EP intelligenceCritical โ€” Complete outageHigh โ€” Public trust impactCritical โ€” Full failure๐Ÿ”ด Critical (RTO: 2h)
๐Ÿ“ฐ News GenerationHigh โ€” Multi-language coverage haltedHigh โ€” No new contentMedium โ€” Stale contentHigh โ€” Pipeline failure๐ŸŸ  High (RTO: 4h)
๐Ÿ“ก EP Data IntegrationMedium โ€” Existing content still availableMedium โ€” No fresh dataLow โ€” Limited visibilityMedium โ€” API connection lost๐ŸŸก Medium (RTO: 24h)
โš™๏ธ CI/CD PipelineLow โ€” Existing site unaffectedMedium โ€” Delayed updatesLow โ€” Internal onlyMedium โ€” Build delays๐ŸŸข Standard (RTO: 72h)

๐Ÿ“Š Classification-Based Recovery Requirements

Based on CLASSIFICATION.md analysis:

๐Ÿท๏ธ Dimension๐Ÿ“Š Level๐Ÿ“‹ Justification
Confidentiality๐ŸŸข PublicAll EP data is publicly available open data
Integrity๐ŸŸก ModerateNews content accuracy matters for democratic transparency
Availability๐ŸŸก StandardStatic site with CDN caching provides inherent resilience

โฑ๏ธ Recovery Targets

Recovery targets are defined per asset class since the platform decomposes cleanly into independent static/publish assets.

๐ŸŽฏ AssetRTORPO๐Ÿ“‹ Rationale
Static site (AWS S3 + CloudFront)1 hour0 (versioned S3 bucket)deploy-s3.yml re-run from main rebuilds the site; versioned bucket preserves point-in-time content
npm package (@hack23/euparliamentmonitor)4 hours0 (immutable publish)Republishable from git tag via release workflow; npm provenance + SLSA 3 attestations are re-generatable
News generation pipeline24 hours24 hoursNext scheduled agentic run (breaking / week / month / committee / motions / propositions) recovers output; stale analysis replaced on next cadence
Source repository (GitHub)15 minutes0 (distributed VCS)GitHub-native availability + mirrors on every contributor clone
GitHub Pages fallback path2 hours0Documented failover runbook; main already serves the identical static artifacts

โฑ๏ธ Aggregate Platform Targets

๐ŸŽฏ Metric๐Ÿ“Š Target๐Ÿ“‹ Rationale
RTO (aggregate platform)2 hoursPrimary static-serving restoration bound โ€” critical BIA threshold
RPO (aggregate platform)0 minutesGit repository + versioned S3 preserve full history
MTTR (Mean Time to Repair)2 hoursAutomated CI/CD pipeline rebuild via deploy-s3.yml
MTPD (Max Tolerable Period of Disruption)72 hoursAfter 3 days, democratic monitoring impact becomes significant
SDO (Service Delivery Objective)95% availabilityMonthly target for AWS S3 + CloudFront service
WRT (Work Recovery Time)30 minutesTime to validate restored content integrity across 14 languages
NBD (Normal Business Day)N/A (24/7 operations)No business-day distinction; recovery procedures identical at all times

๐Ÿ—๏ธ Architecture Resilience

Static Site Architecture Advantages

EU Parliament Monitor's static site architecture (HTML5/CSS3 on AWS S3 + CloudFront, per ADR-002) provides inherent business continuity advantages:

graph TB
    subgraph "Primary Infrastructure (AWS)"
        GH[GitHub Repository] --> GA[GitHub Actions CI/CD]
        GA -->|S3 Sync + CF Invalidation| AWS[AWS S3 + CloudFront CDN]
        AWS --> U[End Users โ€” 14 Languages]
    end
    
    subgraph "Data Sources"
        EP[European Parliament MCP Server] --> GA
        EP --> |Public API| NS[News Generation Scripts]
        NS --> GH
    end
    
    subgraph "Recovery Options"
        GH --> |git clone| LB[Local Backup]
        GH --> |fork| FR[Fork Recovery]
        AWS --> |CDN Cache| CC[Cached Content]
        GH --> |deploy| ALT[Alternative Hosting<br/>GitHub Pages/Cloudflare/Netlify]
    end
    
    style GH fill:#e3f2fd
    style AWS fill:#c8e6c9
    style CC fill:#fff9c4
    style ALT fill:#f3e5f5
๐Ÿ›ก๏ธ Resilience Feature๐Ÿ“‹ Implementationโœ… Status
No Server DependenciesPure static HTML/CSS/JSโœ… Active
Git-Based BackupFull history in distributed VCSโœ… Active
CDN DistributionAWS CloudFront global CDNโœ… Active
Automated RebuildGitHub Actions CI/CD pipelineโœ… Active
Multi-Language Content14 languages pre-generatedโœ… Active
Portable ArtifactsStatic files deployable to any hostโœ… Active

๐Ÿ” Critical Function Identification

graph TB
    subgraph "Democratic Transparency Functions"
        A[EU Parliament Monitor] --> B[Multi-Language News]
        A --> C[MEP Activity Tracking]
        A --> D[Committee Reports]
        A --> E[Voting Records]
        A --> F[Legislative Pipeline]
        A --> G[Breaking News]
    end

    subgraph "Technical Components"
        B -.-> B1["AWS S3 + CloudFront Hosting - Primary"]
        B -.-> B2[14-Language HTML Generation]
        B -.-> B3["GitHub Pages Hosting - Fallback"]
        C -.-> C1[EP MCP Server Integration]
        C -.-> C2[Data Processing Pipeline]
        D -.-> D1[Committee Document Fetching]
        E -.-> E1[Roll-Call Vote Analysis]
        F -.-> F1[Procedure Tracking]
        G -.-> G1[Feed Data Processing]
    end

    subgraph "Criticality Ranking"
        B1 -.-> CR1[Critical: Platform availability]
        B2 -.-> CR2[High: Content generation]
        C1 -.-> CR3[Medium: Data freshness]
        D1 -.-> CR4[Medium: Report updates]
        E1 -.-> CR5[Medium: Vote analysis]
        G1 -.-> CR6[High: Breaking coverage]
    end

    classDef critical fill:#D32F2F,stroke:#B71C1C,stroke-width:2px,color:#ffffff
    classDef high fill:#FF9800,stroke:#F57C00,stroke-width:2px,color:#000000
    classDef medium fill:#FFC107,stroke:#FFA000,stroke-width:2px,color:#000000

    class B1,CR1 critical
    class B2,G1,CR2,CR6 high
    class C1,D1,E1,CR3,CR4,CR5 medium

๐Ÿ“Š Business Impact-Driven Decision Matrix

flowchart TD
    INCIDENT[๐Ÿšจ Service Disruption<br/>Event Detected] --> ASSESS[๐Ÿ“Š Business Impact<br/>Assessment]
    
    ASSESS --> DEMOCRATIC{๐Ÿ›๏ธ Democratic<br/>Impact Level?}
    ASSESS --> OPERATIONAL{โš™๏ธ Operational<br/>Impact Level?}
    ASSESS --> TECHNICAL{๐Ÿ’ป Technical<br/>Impact Level?}
    
    DEMOCRATIC -->|Critical/High| IMMEDIATE[โšก Immediate Response<br/>โ‰ค 30 minutes]
    OPERATIONAL -->|Critical| IMMEDIATE
    TECHNICAL -->|Critical| IMMEDIATE
    
    DEMOCRATIC -->|Medium| URGENT[๐Ÿ”„ Urgent Response<br/>โ‰ค 4 hours]
    OPERATIONAL -->|High| URGENT
    TECHNICAL -->|High| URGENT
    
    OPERATIONAL -->|Medium/Low| STANDARD[๐Ÿ“… Standard Response<br/>โ‰ค 24 hours]
    TECHNICAL -->|Low| STANDARD
    
    IMMEDIATE --> CRITICAL_RECOVERY[๐Ÿ”ด Critical Recovery<br/>Full Resources<br/>AWS S3 + CF Rebuild]
    URGENT --> HIGH_RECOVERY[๐ŸŸ  High Priority Recovery<br/>Debug & Fix Pipeline]
    STANDARD --> NORMAL_RECOVERY[๐ŸŸข Normal Recovery<br/>Scheduled Maintenance]

    classDef incident fill:#D32F2F,stroke:#B71C1C,stroke-width:3px,color:#ffffff
    classDef assessment fill:#FF9800,stroke:#F57C00,stroke-width:2px,color:#ffffff
    classDef decision fill:#2196F3,stroke:#1565C0,stroke-width:2px,color:#ffffff
    classDef immediate fill:#D32F2F,stroke:#B71C1C,stroke-width:2px,color:#ffffff
    classDef urgent fill:#FF9800,stroke:#F57C00,stroke-width:2px,color:#ffffff
    classDef standard fill:#4CAF50,stroke:#2E7D32,stroke-width:2px,color:#ffffff

    class INCIDENT incident
    class ASSESS assessment
    class DEMOCRATIC,OPERATIONAL,TECHNICAL decision
    class IMMEDIATE immediate
    class URGENT urgent
    class STANDARD standard
    class CRITICAL_RECOVERY,HIGH_RECOVERY,NORMAL_RECOVERY standard

๐Ÿ”„ Business Continuity Scenarios

Scenario 1: AWS S3 + CloudFront Outage

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactSite temporarily unavailable across all 14 languages
ProbabilityLow (99.9% SLA)
RecoveryAutomatic upon AWS service restoration; GitHub Pages as fallback
MitigationCDN caching preserves recent content; deploy to alternative host if extended

Scenario 2: CI/CD Pipeline Failure

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactNews generation paused; existing content remains served
ProbabilityMedium
RecoveryDebug workflow, trigger manual rebuild
MitigationExisting content remains available; manual deployment as fallback

Scenario 3: European Parliament Data Source Unavailable

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactNew content generation paused
ProbabilityLow
RecoveryResume when EP API/MCP Server restored
MitigationExisting news articles remain accessible in all 14 languages

Scenario 4: Repository Corruption

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactSource code unavailable
ProbabilityVery Low
RecoveryRestore from forks, local clones, or GitHub support
MitigationDistributed Git provides multiple copies; static site still served

Scenario 5: Security Incident (Supply Chain Attack)

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactCompromised dependency introduced to build
ProbabilityLow
RecoveryRoll back to known-good commit; audit dependencies
MitigationSHA-pinned GitHub Actions; Dependabot security alerts; CodeQL scanning

Scenario 6: EP MCP Server Breaking Change

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactNews generation produces errors or empty content
ProbabilityLow (Hack23-maintained)
RecoveryUpdate EP MCP client code to match new API; server reports uniform {status:"unavailable", items:[]} envelope allowing graceful skip
MitigationMCP abstraction layer (src/mcp/ep-mcp-client.ts); mcp-retry.ts exponential backoff; uniform unavailable envelope

Scenario 7: IMF Economic Data Outage

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactIMF is the sole authoritative source for economic / fiscal / monetary / trade / FDI / exchange-rate / banking-soundness context. When dataservices.imf.org is unavailable, the agent must (a) attempt the cached analysis/daily/<date>/<run>/cache/imf/*.json path first, (b) if no cache exists, mark the economic-context artifact as IMF Source: knowledge-only (which Stage-C blocks), and (c) defer the article to a later run when IMF recovers.
ProbabilityLowโ€“Medium (IMF SDMX 3.0 is generally stable; transient SDMX-XML 503s are observed during scheduled IMF maintenance windows)
RecoveryAutomatic on IMF recovery โ€” re-run the workflow; the cached probe JSON is reused for back-fill on subsequent same-day runs. Stage-C imf-cache:missing / imf-source:knowledge-only issues block article PR creation until IMF data is present. The legacy WB IMF requirement fallback is retired.
Mitigation(a) Single-source IMF surface (IMFMCPClient SDMX 3.0 with WEO + FM 5-year forecasts) with per-call cache writes to cache/imf/*.json; (b) per-source IMF_API_BASE_URL / IMF_API_TIMEOUT_MS overrides; (c) analysis/methodologies/imf-indicator-mapping.md ยง7 vintage rules so an article can use last-known-good cached data with explicit vintage; (d) Stage-C validate-analysis-completeness.js enforces IMF presence and rejects WB economic indicator codes (NY.GDP.*, FP.CPI.*, SL.UEM.*, โ€ฆ) and "World Bank โ€ฆ GDP/inflation/โ€ฆ" prose claims inside intelligence/economic-context.md.

Scenario 8: GitHub Actions / Agentic Runner Outage

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactAll 15 agentic news workflows blocked (breaking, week-ahead/in-review, month-ahead/in-review, quarter-ahead/in-review, year-ahead/in-review, term-outlook, election-cycle, committee-reports, motions, propositions, translate fan-out); deployment paused
ProbabilityLow
RecoveryManual local runs possible via npm run generate-article:all + npm run generate-news-indexes; push generated artifacts directly to main for deploy-s3.yml to pick up when runners recover
Mitigation15 agentic workflows compiled into deterministic .lock.yml via gh aw compile --validate (pinned GH_AW_VERSION: v0.77.3) โ€” locally reproducible; static build fully scriptable

Scenario 9: Copilot / Claude / Codex Quota Exhaustion

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactAI-First 2-pass analysis + article authorship stalls; pre-translation gate (validate-analysis-completeness.js) blocks fan-out
ProbabilityMedium (metered Copilot billing)
RecoverySwap engine: field in workflow frontmatter (Copilot โ†” Claude โ†” Codex); if all AI engines unavailable, human-author English source and trigger news-translate directly
MitigationEngine-agnostic gh-aw frontmatter; quality thresholds in analysis/methodologies/reference-quality-thresholds.json enforce minimums regardless of engine

Scenario 10: AWS S3 / CloudFront Extended Outage (Primary Hosting)

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactPrimary euparliamentmonitor.com CDN unavailable
ProbabilityVery Low (99.9% AWS SLA)
RecoveryActivate GitHub Pages fallback per runbooks/github-pages-failover.md; repoint DNS CNAME if extended
MitigationStatic artifacts in main are host-agnostic; GitHub Pages deploy path preserved; identical content served

Scenario 11: gh-aw Toolchain Break (v0.77.3 Incompatibility)

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
Impact.lock.yml compilation fails or produces incorrect runtime; agentic workflows error during compile-gate
ProbabilityLow
RecoveryPin to known-good GH_AW_VERSION in .github/workflows/compile-agentic-workflows.yml; rollback via git revert; if rollback insufficient, convert affected workflow to traditional YAML with human-author mode
MitigationPinned version in infra workflow; .lock.yml artifacts versioned in git; sibling repos (Hack23/cia, Hack23/homepage) provide cross-reference for upgrade regression

Scenario 12: npm Registry Outage or Package Tampering

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactConsumers of @hack23/euparliamentmonitor npm package blocked; or dependency install fails in CI
ProbabilityVery Low
RecoveryGitHub Packages mirror available via package namespace; verify SLSA Level 3 provenance attestation via gh attestation verify; if tampering suspected, rotate publishing OIDC identity and republish from tag
MitigationPublished with provenance + SLSA 3 attestations; npm ci + package-lock.json locks dependency graph; Dependabot surfaces supply-chain alerts

Scenario 13: Compromised Maintainer Credential

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactPotential unauthorized push, workflow edit, or release
ProbabilityLow
RecoveryRevoke compromised token; review audit log; rotate OIDC trust relationships (AWS S3 deploy role); revert any suspicious commits
MitigationBranch protection + required reviews on main; OIDC federation (no long-lived AWS keys); GitHub 2FA mandatory; SHA-pinned actions

Scenario 14: MCP-Borne Data Poisoning

๐Ÿ“‹ Aspect๐Ÿ“Š Detail
ImpactHostile EP MCP response injects misleading content or tries to bypass validator gates
ProbabilityVery Low (Hack23-maintained)
RecoveryscanHtmlForFallbackLeaks + FALLBACK_TEMPLATE_PATTERNS gate in validate-analysis-completeness.js aborts the PR; reference thresholds (intelligence/mcp-reliability-audit.md โ‰ฅ200 words / breaking โ‰ฅ385) catch low-signal content; human review on every agentic PR
MitigationPre-translation validator gate scans all EN sources before fan-out; reference quality thresholds in analysis/methodologies/reference-quality-thresholds.json; 5-layer gh-aw security (AWF firewall, Docker sandbox, safe-output constraints, JSONL audit, lock file compilation)

๐Ÿšจ Incident Response Procedures

Phase 1: Immediate Response (0-30 minutes)

Assessment and Safety:

  1. ๐Ÿ›ก๏ธ Safety First: Ensure no security compromise in progress
  2. ๐Ÿ“Š Impact Assessment: Determine scope using criticality matrix above
  3. ๐Ÿšจ Alert: Create GitHub Issue tagged incident
  4. ๐Ÿ“‹ Documentation: Begin incident logging with timestamps

Initial Actions:

  • Check GitHub Status for platform issues
  • Verify repository integrity (git log, branch protection status)
  • Verify AWS S3 sync and CloudFront invalidation status (deploy-s3 workflow)
  • Check GitHub Pages fallback deployment status
  • Assess which of the 14 language versions are affected

Phase 2: Short-Term Recovery (30 min โ€“ 2 hours for critical static-site serving; up to 4 hours for non-critical/high-priority functions)

For critical static-site availability (primary S3/CloudFront or GitHub Pages fallback), full restoration must occur within 2 hours (the documented RTO). The broader 2โ€“4 hour window applies only to non-critical or high-priority supporting functions (e.g., news content generation, auxiliary automation).

Operational Continuity:

  1. ๐ŸŒ If AWS S3/CloudFront: Check S3 bucket status, CloudFront distribution health; failover to GitHub Pages fallback
  2. โš™๏ธ If CI/CD: Debug and fix the workflow, then redeploy by rerunning the last successful deploy-s3 workflow run from the GitHub Actions UI or by pushing a no-op commit to the main branch in accordance with change-control rules
  3. ๐Ÿ“ก If Data Source: Existing content serves users, monitor EP API status
  4. ๐Ÿ“ฆ If Repository: Restore from fork or local clone
  5. ๐Ÿ”’ If Security: Isolate affected components, roll back to known-good state

Critical System Procedures:

  • Static site: If AWS S3 + CloudFront experiences an extended outage (>30 minutes), perform a GitHub Pages fallback using the current static site layout, or deploy from local build to an alternative CDN, following the dedicated runbook: GitHub Pages Failover.
  • Build pipeline: Run npm run build locally, push static assets directly
  • Source repository: Restore from contributor forks (distributed backup)

Phase 3: Full Recovery (4-24 hours)

Sustained Operations:

  1. โœ… Verify all 14 language versions are serving correctly (5,231 HTML articles in news/)
  2. ๐Ÿงช Run full test suite (npm run lint && npm run test) โ€” 5,933+ Vitest tests across 153 test files
  3. ๐Ÿ“ฐ Re-run affected agentic workflows to regenerate news + indexes + sitemap (npm run build / npm run generate-article:all / npm run generate-news-indexes / npm run generate-sitemap)
  4. ๐Ÿ” Validate E2E tests pass (npm run test:e2e) โ€” Playwright + axe-core WCAG 2.1 AA
  5. ๐Ÿ“‹ Document incident and lessons learned in GitHub Issue

Phase 4: Recovery Normalization (24-72 hours)

Return to Normal Operations:

  1. โœ… System fully restored and validated
  2. ๐Ÿ“Š Post-incident review conducted
  3. ๐Ÿ“‹ BCP updated with improvements
  4. ๐Ÿงช Schedule follow-up testing
  5. ๐Ÿ“ข Communicate resolution to stakeholders

๐Ÿ›ก๏ธ Supplier Dependency Matrix

Supplier/ServiceService TypeCriticalityBackup StrategyRecovery Time
AWS S3 + CloudFrontStatic Site HostingCriticalGitHub Pages fallback; alternative CDN (Cloudflare/Netlify)1โ€“2 hours
GitHub RepositorySource Code StorageCriticalLocal clones, contributor forks15 minutes
GitHub ActionsCI/CD + gh-aw RuntimeHighManual local build + deploy4 hours
GitHub Copilot BusinessAI inference via gh awHighEngine switch (Claude / Codex) in workflow frontmatter; human fallback30 minutes
EP MCP Server (european-parliament-mcp-server@1.4.0)EU Parliament DataHighUniform unavailable envelope + mcp-retry.ts backoff; existing articles continue to serveN/A (graceful degrade)
World Bank MCP (worldbank-mcp@1.0.1)Biannual WDI data โ€” non-economic indicators (health, education, social, environment, demographics, defence, agriculture, innovation, governance)MediumArticle continues without WB cross-refs; non-economic claims relax to "data unavailable for current vintage" with explicit caveatN/A (graceful degrade)
IMF REST (SDMX 3.0, native IMFMCPClient)WEO + FM forecasts (sole authoritative economic source)HighCached cache/imf/*.json reused on transient outage; if no cache and live IMF down, Stage-C blocks article (imf-cache:missing); IMF_API_TIMEOUT_MS configurable.Defer article to next run
npm RegistryDependency + PublishHighGitHub Packages mirror; npm cache + npm ci; SLSA 3 attestations verifiable2 hours
gh-aw toolchain (v0.77.3)Agentic workflow compilerHighPinned version; rollback via git; sibling repos as cross-reference4 hours
GitHub DependabotSecurity ScanningMediumManual npm audit; CodeQLLow priority
GitHub CodeQLSAST ScanningMediumESLint security plugin fallbackLow priority

๐Ÿ’พ Data Backup Strategy

Source Code Backup:

  • GitHub repository with full commit history
  • Contributor forks provide distributed backup
  • Local development clones on team workstations
  • Git shallow clones recoverable via git fetch --unshallow

Generated Content Backup:

  • All generated HTML in news/ directory committed to Git
  • 14-language article archive in repository
  • AWS CloudFront caches the primary static site path (S3-backed)
  • GitHub Pages CDN caches fallback deployment if activated
  • Static files portable to any alternative host

Configuration Backup:

  • All CI/CD configuration version-controlled (.github/workflows/)
  • MCP configuration in .github/copilot-mcp.json
  • Build configuration in package.json, tsconfig.json, eslint.config.js
  • No secrets in repository โ€” all via GitHub Secrets/Environment

Infrastructure as Code:

  • Primary: AWS S3 + CloudFront static hosting managed via GitHub Actions (deploy-s3 workflow)
  • CloudFront distribution, S3 bucket policies and DNS managed via code/automation (no unmanaged click-ops)
  • Fallback: GitHub Pages deployment path reserved as a secondary publishing option; if activated, the configuration and procedure MUST be documented and, when automated, expressed as a version-controlled workflow in .github/workflows/
  • Emergency exception: If GitHub Pages Settings โ†’ Pages configuration must be changed manually during an incident, the change MUST be documented in the incident log (who/when/what/why) and, after resolution, either codified into automation or reverted back to the documented default configuration (primary S3 + CloudFront path)
  • All steady-state infrastructure and CI/CD configuration is declarative and version-controlled; any emergency console changes are temporary and either codified or rolled back

๐Ÿงช DR Testing & Runbooks

Recovery Runbook Index

Runbooks live in runbooks/ and are invoked by the Incident Response Procedures above. All runbooks are version-controlled, Markdown-only, and executable by any maintainer with standard repository push + AWS OIDC access.

RunbookTriggerTarget Asset
runbooks/github-pages-failover.mdAWS S3/CloudFront outage >30 min (Scenario 10)Static site
runbooks/agentic-workflow-rollback.md (planned)gh-aw toolchain break (Scenario 11)Workflow runtime
runbooks/ai-engine-switch.md (planned)Copilot/Claude/Codex quota exhaustion (Scenario 9)AI inference
runbooks/mcp-degraded-mode.md (planned)EP / WB / IMF outage (Scenarios 3, 6, 7)Data pipeline
runbooks/npm-republish.md (planned)npm tampering or attestation failure (Scenario 12)Package supply chain

DR Drill Schedule

Quarterly exercises validate recovery procedures without production impact:

QuarterDrillSuccess Criterion
Q1 each yearGitHub Pages failover dry-run (Scenario 10)Fallback site live within 2 h; all 14 languages verified
Q2 each yearLocal build + deploy without GitHub Actions (Scenarios 8 + 11)Full site rebuilt locally; artifacts match CI output
Q3 each yearMCP degraded-mode test (Scenarios 3 + 6 + 7)Agentic workflow completes with fallback economic context via WBโ†”IMF IMF requirement
Q4 each yearnpm republish + provenance verification (Scenario 12)gh attestation verify succeeds; SLSA 3 attestation validated

Responsibility & Escalation

RolePrimaryBackupEscalation
Incident CommanderMaintainer on-callCEO (James Pether Sรถrling)Hack23 AB CEO
Recovery ExecutorMaintainer with AWS OIDC + GitHub writeCEOโ€”
CommunicationsCEOMaintainerPublic GitHub Status / Issues
Post-Mortem OwnerIncident CommanderCEOSecurity reviews documented in ISMS

๐Ÿ“ฃ Communication Plan

StakeholderNotification MethodTimeframe
CEOGitHub Issue @mention, EmailImmediate
Development TeamGitHub Issue, PR commentsWithin 15 minutes
ContributorsGitHub Issue (public)Within 1 hour
Users/PublicGitHub Status, Repository READMEAs needed

๐Ÿงช Testing & Maintenance

ActivityFrequencyMethod
BCP ReviewSemi-annually (or after major incident)Document review and update
Recovery ValidationMonthlyGitHub Actions pipeline validates full rebuild
Backup VerificationMonthlyVerify git clone produces working site
Contact VerificationQuarterlyVerify all contact information current
Test Suite HealthPer commitAutomated via CI (5,933+ Vitest unit/integration tests across 153 files + Playwright+axe-core E2E)
Dependency SecurityDailyAutomated via Dependabot + CodeQL

๐Ÿ“‹ ISO 22301:2019 Business Continuity Management Alignment

EU Parliament Monitor BCP aligns with ISO 22301:2019 (Business Continuity Management) key clauses:

ISO 22301 ClauseRequirementImplementationStatus
4.1Understanding organizational contextDemocratic transparency mission, GitHub-hostedโœ…
4.2Interested parties needsEuropean citizens, researchers, MEPs, mediaโœ…
5.1Leadership commitmentCEO document ownership and approvalโœ…
6.1Risk assessmentTHREAT_MODEL.md STRIDE analysisโœ…
6.2Business continuity objectivesRTO โ‰ค 2h, RPO = 0, MTPD โ‰ค 72hโœ…
7.5Documented informationThis BCP, SECURITY_ARCHITECTURE.md, WORKFLOWS.mdโœ…
8.2Business impact analysis (BIA)CLASSIFICATION.md CIA triad analysis + impact matrixโœ…
8.3Business continuity strategyStatic site + Git backup + CDN + alternative hostingโœ…
8.4Business continuity plans and proceduresThis document + recovery runbooksโœ…
8.5Exercise and testingGitHub Actions pipeline validates recovery monthlyโœ…
8.6Evaluation of business continuity docsSemi-annual review cycleโœ…
9.1Monitoring, measurement, analysisAWS CloudFront + S3 health monitoring; GitHub Pages fallback monitoringโœ…
10.1Nonconformity and corrective actionGitHub Issues for incident trackingโœ…
10.2Continual improvementQuarterly threat model reviewโœ…

ISO 22301 Alignment: โœ… Substantially Compliant โ€” All 14 applicable clauses addressed


๐Ÿ”„ NIST CSF 2.0 Recovery Function Alignment

SubcategoryDescriptionImplementationStatus
RC.RP-01Recovery plan executed per planGitHub Actions manual trigger + runbooksโœ…
RC.RP-02Recovery plan validated before incidentMonthly pipeline test runsโœ…
RC.RP-03Recovery activities meet recovery objectivesRTO/RPO validated in test exercisesโœ…
RC.RP-04Critical functions restored per RTO< 4h rebuild validated via CI timingโœ…
RC.RP-05Integrity of restored assets verifiedHTML validation + test suite post-recoveryโœ…
RC.CO-03Recovery activities communicatedGitHub Issues, SECURITY.md proceduresโœ…
RC.CO-04Lessons learned from incidents documentedPost-incident review requirementโœ…
RC.IM-01Recovery plans updated after exercisesBCP semi-annual review cycleโœ…
RC.IM-02Incident management improvementsGitHub Issues retrospective processโœ…

NIST CSF 2.0 RC Function: โœ… 9/9 subcategories addressed


๐Ÿ“Š Framework Compliance Summary

FrameworkStandardBCP AlignmentEvidence
ISO 22301:2019Business Continuity Management14/14 clausesThis document
ISO 27001:2022 A.5.29Information security during disruptionRecovery proceduresSECURITY_ARCHITECTURE.md
ISO 27001:2022 A.5.30ICT readiness for business continuityStatic site + GitThis document
NIST CSF 2.0 RCRecover function9/9 subcategoriesThis document
CIS Controls v8.1 #11Data recoveryGit-based backup strategyBCPPlan.md + WORKFLOWS.md
NIS2 Art.21(2)(c)Business continuityRTO/RPO definedThis document
GDPR Art.32Availability of systemsAWS S3 + CloudFront high-availability SLAArchitecture design
EU CRA Annex I ยง2Security update capabilityAutomated CI/CD pipelineWORKFLOWS.md

๐Ÿ“ˆ BCP Maturity Roadmap

gantt
    title EU Parliament Monitor BCP Maturity Roadmap
    dateFormat YYYY-MM
    section Phase 1: Foundation (Complete)
    BCP Documentation                   :done, 2025-01, 2025-03
    AWS S3 + CloudFront Pilot Setup (pre-ADR eval) :done, 2025-01, 2025-02
    Automated CI/CD Pipeline            :done, 2025-02, 2025-03
    
    section Phase 2: Enhancement (Complete)
    Multi-Language Content (14 langs)  :done, 2025-03, 2025-06
    Comprehensive Test Suite (5933+ tests) :done, 2025-06, 2026-01
    Security Scanning Integration      :done, 2025-09, 2026-01
    Enhanced BCP v2.0                  :done, 2026-02, 2026-04
    
    section Phase 3: Optimization (Current)
    Alternative Hosting Runbook        :done, 2026-02, 2026-03
    gh-aw Agentic Workflows (10 news)  :done, 2026-02, 2026-04
    Dual Economic Data (WB + IMF)      :done, 2026-03, 2026-04
    Quarterly DR Drills                :active, 2026-04, 2026-12
    Automated Recovery Testing         :2026-06, 2026-09
    
    section Phase 4: Maturity
    Multi-CDN Failover Configuration   :2026-10, 2027-01
    Continuous Resilience Monitoring   :2027-01, 2027-06
    Annual BCP Audit & Improvement     :2027-06, 2027-09

๐Ÿ” ISMS Policies

๐Ÿ›๏ธ Project Documentation


๐Ÿ“‹ Document Control:
โœ… Approved by: James Pether Sรถrling, CEO
๐Ÿ“ค Distribution: Public
๐Ÿท๏ธ Classification: Confidentiality: Public Integrity: Moderate Availability: Standard
๐ŸŽฏ Framework Compliance: ISO 27001 NIST CSF 2.0 CIS Controls