![]()
๐ก๏ธ Dual-Deployment Resilience Framework
๐ฏ Enterprise-Grade Availability Through Geographic Redundancy
๐ Document Owner: CEO | ๐ Version: 1.3 | ๐
Last Updated: 2026-05-28 (UTC)
๐ Review Cycle: Quarterly | โฐ Next Review: 2026-08-28
๐ Classification: Public
Riksdagsmonitor's business continuity framework demonstrates how geographic redundancy and automated failover directly enable operational resilience and service availability. Our dual-deployment strategy serves as both operational necessity and technical demonstration of enterprise-grade reliability principles.
This plan is designed to maintain the riksdagsmonitor.com platform during infrastructure disruptions through AWS multi-region deployment (primary) and GitHub Pages disaster recovery (standby), targeting 99.998% availability under normal operating conditions, with CloudFront origin failover typically completing in under 60 seconds and DNS/Route 53 failover (including health checks and DNS propagation) completing within approximately 15 minutes during full-region incidents.
โ James Pether Sรถrling, CEO/Founder
Riksdagsmonitor provides public political transparency services requiring high availability but tolerating brief disruptions:
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#1565C0",
"primaryTextColor": "#0d47a1",
"lineColor": "#1565C0",
"secondaryColor": "#4CAF50",
"tertiaryColor": "#FF9800"
}
}
}%%
graph TB
subgraph BIA["๐ Business Impact Analysis"]
FINANCIAL[๐ฐ Financial Impact<br/>No direct revenue loss]
OPERATIONAL[โ๏ธ Operational Impact<br/>Service unavailable]
REPUTATIONAL[๐ค Reputational Impact<br/>Public trust in transparency]
CIVIC[๐๏ธ Civic Impact<br/>Democratic accountability]
end
subgraph RECOVERY["๐ Recovery Requirements"]
RTO["โฐ RTO Target<br/>< 30 seconds origin failover<br/>< 15 minutes DNS failover"]
RPO["๐พ RPO Target<br/>< 15 minutes<br/>near-zero effective RPO (S3 replication lag)"]
AVAILABILITY["๐ Availability Target<br/>99.998%<br/>โ10.5 minutes (~631 seconds) downtime/year"]
end
subgraph DEPLOYMENT["๐ Deployment Strategy"]
PRIMARY[โ๏ธ AWS Primary<br/>CloudFront + S3 Multi-Region]
DR[๐ GitHub Pages DR<br/>Standby Deployment]
FAILOVER[๐ Automatic Failover<br/>Route 53 Health Checks]
end
FINANCIAL --> RTO
OPERATIONAL --> RTO
REPUTATIONAL --> RPO
CIVIC --> AVAILABILITY
RTO --> PRIMARY
RPO --> PRIMARY
AVAILABILITY --> PRIMARY
PRIMARY --> FAILOVER
DR --> FAILOVER
style BIA fill:#1565C0,color:#ffffff
style RECOVERY fill:#FF9800,color:#000000
style DEPLOYMENT fill:#4CAF50,color:#000000
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#1565C0",
"primaryTextColor": "#0d47a1",
"lineColor": "#1565C0",
"secondaryColor": "#4CAF50",
"tertiaryColor": "#FF9800"
}
}
}%%
graph TB
subgraph ROUTE53["๐ Route 53 DNS"]
DNS[๐ก DNS Service<br/>Health Checks Every 30s]
HEALTHCHECK[โ๏ธ Health Checker<br/>Tests CloudFront Endpoint]
end
subgraph PRIMARY["โ๏ธ AWS Primary (Active)"]
CF["๐ CloudFront CDN<br/>600+ PoPs<br/>Automatic Origin Failover"]
S3_US[๐พ S3 us-east-1<br/>Primary Origin<br/>Versioning Enabled]
S3_EU["๐พ S3 eu-west-1<br/>Replica Origin<br/>Asynchronous Replication (<15 min RPO)"]
CF -->|Primary| S3_US
CF -->|Failover on 5xx errors| S3_EU
S3_US -.->|Replication| S3_EU
end
subgraph DR["๐ GitHub Pages (Standby)"]
GH["๐ GitHub Pages<br/>Default branch (root)<br/>Automated Deployment"]
end
USERS[๐ฅ Users] -->|DNS Query| DNS
HEALTHCHECK -->|Monitor| CF
DNS -->|"Healthy: Return CloudFront alias/hostname"| USERS
DNS -.->|"3 Failed Checks (~90s detection)<br/>+ DNS TTL/propagation (up to ~15 min total)"| USERS
USERS -->|"HTTPS/TLS 1.3"| CF
USERS -.->|"HTTPS/TLS 1.3 (DR)"| GH
style ROUTE53 fill:#1565C0,color:#ffffff
style PRIMARY fill:#4CAF50,color:#000000
style DR fill:#FF9800,color:#000000
These are business continuity design objectives, not contractual guarantees. Availability figures are based on underlying cloud provider SLAs and documented reliability targets.
| Component | Provider SLA | Failover Mechanism | Target RTO | Target RPO | Notes |
|---|---|---|---|---|---|
| ๐ CloudFront | 99.9% (AWS SLA) | Origin failover | < 30 seconds | โ 0 minutes | Cache may serve slightly stale content during failover |
| ๐พ S3 us-east-1 | 99.99% (AWS SLA) | Multi-region replica | < 30 seconds | < 15 minutes | S3 cross-region replication typically completes within minutes; static content allows near-zero effective RPO |
| ๐พ S3 eu-west-1 | 99.99% (AWS SLA) | Primary failback | < 30 seconds | < 15 minutes | Replication lag possible; static content minimizes data loss impact |
| ๐ Route 53 | 100% (AWS SLA) | Health check failover (30s ร 3 checks) | 15 minutes | โ 0 minutes | Includes health check detection (90s) + DNS TTL propagation (~14 min) |
| ๐ GitHub Pages | 99.9% (target; no formal SLA) | Route 53 automated DNS failover | 15 minutes | Up to last deployment | Static content served via Route 53 health-check based DNS failover; RPO = time since last successful GitHub Actions deploy |
| ๐ฏ Combined | Design target โ 99.998% | Automated multi-layer | < 30 seconds (objective) | < 15 minutes for static content (objective) | Theoretical calculation assuming largely independent failures |
Disclaimer: These are business continuity design objectives based on AWS published SLAs (CloudFront 99.9%, S3 99.99%, Route 53 100%) and GitHub public reliability targets. The combined 99.998% availability is a theoretical design target assuming largely independent failures. Actual end-to-end availability may be lower in practice. RPO values reflect S3 cross-region replication characteristics (typically < 15 minutes) and static content deployment timing; actual RPO may vary.
๐ Detection:
๐ Recovery Procedure:
โ Validation:
๐ Detection:
๐ Recovery Procedure:
โ Validation:
๐ Detection:
๐ Recovery Procedure:
โ Validation:
๐ Detection:
๐ Recovery Procedure:
โ Validation:
๐ Detection:
๐ Recovery Procedure:
โ Validation:
๐จโ๐ผ CEO (James Pether Sรถrling) - Business Continuity Coordinator
๐ง Technical Recovery (CEO as Technical Lead)
| ๐ค Role | ๐ Primary Contact | ๐ Backup Method | โฐ Response Time |
|---|---|---|---|
| ๐จโ๐ผ CEO/Coordinator | ๐ฑ Mobile phone | ๐ง Email + SMS | < 15 minutes |
| โ๏ธ AWS Support | ๐ Enterprise Portal | ๐ Phone support | < 15 minutes |
| ๐ GitHub Support | ๐ Enterprise Portal | ๐ง Email | < 1 hour |
| ๐ Route 53 Operations | โ๏ธ AWS Console | ๐ฑ Mobile app | < 5 minutes |
| ๐ Monitoring Alerts | ๐ง Email + ๐ฑ SMS | ๐ฌ Chat/IM | Real-time |
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#1565C0",
"primaryTextColor": "#0d47a1",
"lineColor": "#1565C0",
"secondaryColor": "#4CAF50",
"tertiaryColor": "#FF9800"
}
}
}%%
graph TD
INCIDENT[๐จ Service Disruption Detected] --> CHECK_CF{CloudFront<br/>Accessible?}
CHECK_CF -->|No| MANUAL_DNS[๐ Manual DNS Failover<br/>to GitHub Pages<br/>RTO: 2 minutes]
CHECK_CF -->|Yes| CHECK_S3{S3 Origins<br/>Accessible?}
CHECK_S3 -->|us-east-1 No| AUTO_FAILOVER[โก Automatic Origin Failover<br/>to eu-west-1<br/>RTO: < 30 seconds]
CHECK_S3 -->|Both No| ROUTE53_FAILOVER[โ๏ธ Route 53 Health Check<br/>DNS Failover<br/>RTO: 15 minutes]
CHECK_S3 -->|Yes| CHECK_HEALTH{Health Check<br/>Passing?}
CHECK_HEALTH -->|No| INVESTIGATE[๐ Investigate Root Cause<br/>Application Error?<br/>Configuration Issue?]
CHECK_HEALTH -->|Yes| FALSE_ALARM[โ
False Alarm<br/>Monitor and Document]
MANUAL_DNS --> VERIFY[โ
Verify Service Restored]
AUTO_FAILOVER --> VERIFY
ROUTE53_FAILOVER --> VERIFY
INVESTIGATE --> VERIFY
VERIFY --> DOCUMENT[๐ Incident Documentation<br/>Post-Event Analysis]
style INCIDENT fill:#FF9800,color:#000000
style MANUAL_DNS fill:#1565C0,color:#ffffff
style AUTO_FAILOVER fill:#4CAF50,color:#000000
style ROUTE53_FAILOVER fill:#1565C0,color:#ffffff
style VERIFY fill:#4CAF50,color:#000000
| Test Type | Frequency | Scope | Success Criteria |
|---|---|---|---|
| โก Origin Failover Test | Quarterly | CloudFront โ S3 eu-west-1 | Failover < 30 seconds, no data loss |
| ๐ DNS Failover Test | Semi-Annual | Route 53 โ GitHub Pages | Failover within 15 minutes, content identical |
| ๐ Failback Test | Quarterly | Return to primary infrastructure | Clean restoration, no errors |
| ๐ Monitoring Alert Test | Monthly | CloudWatch, Route 53 health checks | Alerts delivered within 5 minutes |
| ๐ Recovery Runbook Test | Quarterly | Execute documented procedures | All steps executable, documentation accurate |
| ๐ Security Incident Drill | Annual | AWS account compromise scenario | Credentials revoked, service restored on DR |
Quarterly Origin Failover Test:
Semi-Annual DNS Failover Test:
| Metric | Target | Current Status | Trend |
|---|---|---|---|
| ๐ฏ Availability | 99.998% | 99.999% (YTD) | โ Exceeding |
| โก Origin Failover RTO | < 30 seconds | 18 seconds (last test) | โ On track |
| ๐ DNS Failover RTO | 15 minutes | 14 minutes (last test) | โ On track |
| ๐พ Data Synchronization | 0 RPO | 0 seconds (real-time) | โ On track |
| ๐งช BCP Testing | Quarterly | Last tested 2026-02 | โ Current |
| ๐ Monitoring Coverage | 100% | 100% (all endpoints) | โ Complete |
Note: The "Current Status" values in this table are illustrative planning examples. Actual operational metrics are monitored via AWS CloudWatch, Route 53 health check logs, and GitHub Pages status, and documented in operational runbooks.
As CEO/Founder is the sole employee, traditional business continuity teams are not possible. Riksdagsmonitor implements automated infrastructure resilience + comprehensive documentation:
Capabilities:
| Control Type | Implementation | Effectiveness |
|---|---|---|
| ๐ค Automated Failover | CloudFront origin failover (< 30s), Route 53 DNS failover (15 min) | Eliminates manual recovery for primary scenarios |
| ๐ Documentation | Complete runbooks in BCPPlan.md, ARCHITECTURE.md, SECURITY_ARCHITECTURE.md | Enables recovery by any technical professional |
| ๐ Infrastructure-as-Code (Planned) | AWS static site and DNS infrastructure to be codified in Terraform/CloudFormation (see FUTURE_SECURITY_ARCHITECTURE.md) | Future-state: fully reproducible infrastructure from version-controlled IaC |
| ๐ Comprehensive Monitoring | CloudWatch, Route 53 health checks, automated alerts | Real-time detection and notification |
| ๐พ Geographic Redundancy | Multi-region S3 (us-east-1 + eu-west-1), GitHub Pages standby | No single point of failure |
โน๏ธ Alignment notice: WORKFLOWS.md, FUTURE_SECURITY_ARCHITECTURE.md and THREAT_MODEL.md are pending update to fully align with the dual-deployment continuity model and current primary hosting described in this BCPPlan. If there is any conflict regarding the current hosting/deployment architecture, this BCPPlan is the authoritative source.
This section provides detailed, step-by-step incident response playbooks for the three highest-probability incident scenarios for Riksdagsmonitor. All playbooks follow the PICERL framework: Preparation, Identification, Containment, Eradication, Recovery, Lessons Learned.
Playbook ID: IR-PB-001
Version: 1.0
Owner: James Pether Sรถrling, CEO
Last Reviewed: 2026-02-25
This playbook activates when any of the following are detected:
| Signal | Detection Method | Severity Indicator |
|---|---|---|
| Unexpected content changes in production | GitHub Actions diff in deploy log | HIGH if unauthorized |
| Unauthorized Git commits to main branch | GitHub audit log alert | CRITICAL |
| Branch protection bypass detected | GitHub security event | CRITICAL |
| Anomalous content detected by user report | User email to security@hack23.com | HIGH |
| SLSA attestation failure | GitHub Actions security job | HIGH |
| Unexpected language content injection | HTMLHint content validation | MEDIUM |
| Severity | Criteria | Response Time | Escalation |
|---|---|---|---|
| P1 - Critical | Unauthorized content in production, branch protection bypass, SLSA attestation failure | 15 minutes to containment | Immediate personal notification to CEO |
| P2 - High | Suspected tampering unconfirmed, anomalous content flagged | 1 hour to investigation | Alert within 30 minutes |
| P3 - Medium | Minor unexpected changes, validation warnings | 4 hours to resolution | Standard ISMS notification |
PHASE 1: DETECT (0-15 minutes for P1)
security-incidentPHASE 2: TRIAGE (15-30 minutes for P1)
Settings > Security > Audit log
Filter: Action = "repo.create_actions_secret" or "git.push" or "protected_branch"
PHASE 3: CONTAIN (30-60 minutes for P1)
git log --oneline -20 # Identify last known good commit
git revert HEAD...<last-good-sha> # Revert to good state
git push origin main # Trigger redeploy
PHASE 4: ERADICATE (1-4 hours)
PHASE 5: RECOVER (4-24 hours)
PHASE 6: POST-INCIDENT (Within 72 hours)
Subject: [Riksdagsmonitor] Security Incident Report - Content Integrity
Incident: Potential content tampering detected
Date/Time: [UTC timestamp]
Severity: [P1/P2/P3]
Status: [Investigating / Contained / Resolved]
Summary:
We detected [brief description]. Our investigation found [findings].
Actions Taken:
1. [Action taken]
2. [Action taken]
Impact:
Content was [not affected / affected for X minutes] between [time] and [time].
Preventive Measures:
[Measures implemented to prevent recurrence]
Contact: security@hack23.com
# Step 1: Identify good commit
git log --oneline --graph --all | head -30
# Step 2: Verify content of last known good commit
git show <good-sha>:index.html | sha256sum
# Step 3: Create revert commit (preserves history)
git revert --no-commit <bad-sha>..<HEAD>
git commit -m "security: revert content tampering incident [IR-PB-001]"
# Step 4: Push and trigger redeploy
git push origin main
# Step 5: Verify production content
curl -s https://riksdagsmonitor.com/ | sha256sum
Playbook ID: IR-PB-002
Version: 1.0
Owner: James Pether Sรถrling, CEO
Last Reviewed: 2026-02-25
| Signal | Detection Method | Severity |
|---|---|---|
| GitHub Actions MCP job failure | Workflow notification email | HIGH |
| riksdag.se API returning 5xx errors | Pipeline error log | HIGH |
| IMF upstream unavailable (data.imf.org / api.imf.org 5xx, DNS, or TLS error) | scripts/imf-client.ts retry-exhausted log | LOW (optional enrichment โ graceful fallback to cached analysis/data/imf/ snapshots) |
| API timeout after 30s | MCP client timeout log | MEDIUM |
| Data staleness alert (>48h) | Automated staleness checker | MEDIUM |
| Amazon Bedrock API unavailable | GitHub Actions job failure | HIGH |
| Zero articles generated for 3+ days | Manual monitoring check | HIGH |
| CIA platform export unavailable | Dashboard shows stale data | MEDIUM |
| Severity | Criteria | Response Time |
|---|---|---|
| P1 - Critical | Complete MCP pipeline down, 0 data updates for 24+ hours | 1 hour |
| P2 - High | Partial data failure, degraded content generation, 12-24 hour gap | 4 hours |
| P3 - Medium | Single source unavailable, minor staleness, pipeline flaky | 24 hours |
PHASE 1: DETECT AND VERIFY
news-generation.ymlPHASE 2: TRIAGE
cia-data/ directory has recent dataPHASE 3: CONTAIN / GRACEFUL DEGRADATION
index.html to show data freshness warningcia-data/ cache# Temporarily comment out schedule trigger in workflow YAML
# on:
# schedule:
# - cron: '0 1 * * *'
PHASE 4: INVESTIGATE AND RESTORE
npm run test:mcpPHASE 5: RESTORE SERVICE
workflow_dispatch to verify pipeline worksPHASE 6: POST-INCIDENT
Subject: [Riksdagsmonitor] Service Notification - Data Pipeline Status
Status: [Investigating / Degraded / Restored]
Affected: Automated news generation and/or data dashboard updates
Date: [UTC date]
Current Status:
The automated data pipeline is [description].
Content published before [timestamp] remains accurate.
Expected Resolution:
[ETA or "Awaiting external provider recovery"]
Data Freshness:
Most recent data: [timestamp]
Best available data is displayed with staleness indicator.
Updates: Follow https://github.com/Hack23/riksdagsmonitor/issues
Playbook ID: IR-PB-003
Version: 1.0
Owner: James Pether Sรถrling, CEO
Last Reviewed: 2026-02-25
| Signal | Detection Method | Severity |
|---|---|---|
| Anomalous political content in generated articles | Human review gate | CRITICAL |
| SHA-256 hash mismatch for CIA data export | Integrity check in pipeline | HIGH |
| JSON schema validation failure from unexpected fields | Data validation log | HIGH |
| Statistics that contradict known parliamentary data | Quality scoring below threshold | HIGH |
| Dramatic unexpected change in voting statistics | Anomaly detection | HIGH |
| LLM output contains factually incorrect political claims | Human review | MEDIUM |
| Unexpected HTML injection in article content | HTMLHint detection | MEDIUM |
| Severity | Criteria | Response Time |
|---|---|---|
| P1 - Critical | Confirmed false political information published and live | 15 minutes to takedown |
| P2 - High | Suspected data poisoning, anomalous content caught by review | 1 hour investigation |
| P3 - Medium | Data anomaly detected, not yet published | 4 hours analysis |
PHASE 1: DETECT
cia-data/ directoryPHASE 2: TRIAGE
# Check raw API response data
cat cia-data/raw-export.json | jq '.["votingStats"]'
# Compare with previous good data
git diff HEAD~1 -- cia-data/
# Check MCP tool call logs in GitHub Actions
# Navigate: Actions > run-id > news-generation > step-logs
PHASE 3: CONTAIN
# Revert to last clean version
git revert HEAD --no-commit
git commit -m "security: quarantine poisoned content [IR-PB-003]"
git push origin main
mkdir -p cia-data/quarantine/$(date +%Y%m%d)
cp cia-data/*.json cia-data/quarantine/$(date +%Y%m%d)/
PHASE 4: VALIDATE SOURCE DATA
npm run fetch:cia-data # Fetch fresh data
npm run validate:data # Run validation suite
npm run validate:schema -- --input cia-data/export.json
PHASE 5: ERADICATE
PHASE 6: RECOVER
PHASE 7: POST-INCIDENT
## Data Poisoning Incident RCA - [DATE]
**Incident ID:** IR-PB-003-[YYYYMMDD]
**Severity:** [P1/P2/P3]
**Detection Time:** [UTC]
**Containment Time:** [UTC]
**Resolution Time:** [UTC]
### Timeline
| Time (UTC) | Event |
|------------|-------|
| [time] | Anomaly first detected by [method] |
| [time] | [Action taken] |
### Root Cause
[Describe the root cause: LLM hallucination / API corruption / supply chain]
### Attack Vector (if malicious)
[Describe how attacker introduced false data]
### Impact Assessment
- Content affected: [list of files/articles]
- Time live: [duration if published]
- User exposure: [estimated unique users who may have seen false content]
### Remediation Steps Taken
1. [Step taken]
2. [Step taken]
### Preventive Measures Implemented
1. [Control enhancement]
2. [Control enhancement]
### Lessons Learned
[Key takeaways for future incident prevention]
| Measure | Implementation | Status |
|---|---|---|
| Human review gate for all AI-generated content | Mandatory PR review before merge | Active |
| Quality score threshold (0.8/1.0) | LLM self-evaluation before translation | Active |
| SHA-256 integrity hashing | Every article and data file | Active |
| JSON schema validation | Multi-stage data validation pipeline | Active |
| Anomaly detection for statistical outliers | Numeric range validation | Active |
| Source data cross-reference | Manual spot-check quarterly | Planned |
| LLM output factual verification | Citation requirement in prompts | Planned 2027 |
| Automated fact-checking against Riksdag.se | Selenium scraper validation | Planned 2028 |
| Playbook | ID | P1 Response | P2 Response | Primary Action | Evidence |
|---|---|---|---|---|---|
| Content Tampering | IR-PB-001 | 15 min contain | 1 hr contain | git revert + credential rotation | GitHub audit + SHA-256 |
| MCP Outage | IR-PB-002 | 1 hr restore | 4 hr restore | Graceful degrade + pipeline fix | Actions logs + status pages |
| Data Poisoning | IR-PB-003 | 15 min takedown | 1 hr quarantine | Quarantine + source validation | Data diff + cross-ref |
๐ Document Control:
โ
Approved by: James Pether Sรถrling, CEO
๐ค Distribution: Public
๐ท๏ธ Classification:
๐
Effective Date: 2026-05-28
โฐ Next Review: 2026-08-28
๐ฏ Framework Compliance:
Effective: 2026-04-24 ยท Authoritative hub:
analysis/imf/README.mdยทanalysis/imf/agentic-integration.mdยทanalysis/imf/indicators-inventory.jsonยทanalysis/imf/data-dictionary.mdยท.github/aw/ECONOMIC_DATA_CONTRACT.md
| Asset | Criticality | RTO | RPO | Fallback |
|---|---|---|---|---|
| IMF Datamapper REST | STANDARD | 24h | N/A | Last cached vintage in analysis/imf/ |
| IMF SDMX 3.0 endpoint | STANDARD | 24h | N/A | Last cached vintage; cross-source SCB for SE-specific |
IMF cache (analysis/imf/ + analysis/daily/*/economic-data.json) | HIGH | 4h | N/A | Re-fetch from IMF on next workflow run |
| Scenario | Trigger | Detection | Response |
|---|---|---|---|
| IMF-BCP-01 IMF API outage <24h | HTTP 5xx persistent | Workflow log + retry budget exhausted | Serve last cached vintage; annotate articles "cache fallback"; auto-recover on resolution |
| IMF-BCP-02 IMF API outage >24h | HTTP 5xx persistent โฅ24h | News-* workflow runs fail with stale-vintage error | Open issue; escalate to editorial; switch to SCB for SE-specific GDP/CPI; pause look-ahead workflows |
| IMF-BCP-03 WEO vintage cycle skip | Apr WEO not published | imf-fetch.ts --healthcheck reports stale vintage | Annotate articles with last vintage + advisory; do not block publishing |
| IMF-BCP-04 IMF Datamapper schema breaking change | CI integration test fails | tests/imf-client.test.ts red on schedule | Pin client to last-known-good schema; emergency hotfix per Change Management policy |
| IMF-BCP-05 IMF licence change (attribution rule modified) | Notification on imf.org | Manual monitoring quarterly | Update article footer template; backfill existing articles |
| IMF-BCP-06 IMF rate-limit tightening | HTTP 429 spike | Rate-limit metric alarm | Reduce concurrency; expand cache TTL; communicate to article authors |
The IMF-primary, WB-residue, SCB-Sweden split is itself a BCP control: a single-provider outage degrades but does not break the platform. Look-ahead article workflows degrade gracefully because:
Canonical rule. Every economic claim in a Riksdagsmonitor article cites an IMF dataflow first; World Bank citations are reserved for governance, environment and social residue (the classes IMF does not publish). SCB is the Swedish-specific ground truth layer. See ECONOMIC_DATA_CONTRACT.md v2.1 for the banned-phrase list and vintage discipline (>6 mo โ annotation).
| ๐ Platforms | ๐ฆ Open-Source Projects | ๐ก๏ธ Governance & Standards |
|---|---|---|
| ๐ณ๏ธ Riksdagsmonitor โ Swedish Parliament intelligence ๐ช๐บ EU Parliament Monitor โ European coverage ๐ต๏ธ Citizen Intelligence Agency โ political-data engine ๐ Hack23 AB โ corporate site ๐ฐ Hack23 Blog โ engineering & policy ๐ผ Hack23 on LinkedIn | ๐ณ๏ธ Hack23/riksdagsmonitor ๐ต๏ธ Hack23/cia ๐ช๐บ Hack23/euparliamentmonitor ๐ Hack23/european-parliament-mcp โ Hack23/cia-compliance-manager ๐ฅ Hack23/black-trigram ๐ Hack23/homepage | ๐ก๏ธ Hack23 ISMS-PUBLIC โ public ISMS ๐ Information Security Policy ๐ค AI Policy ๐งช Secure Development Policy ๐ฏ Threat Modeling Policy โ ๏ธ Vulnerability Management ๐ท๏ธ Classification Framework |
๐ณ๏ธ Empower citizens ยท ๐ Strengthen democratic accountability ยท ๐ต๏ธ Illuminate the political process
ยฉ 2008โ2026 Hack23 AB (Org.nr 559534-7807) ยท Maintainer: James Pether Sรถrling, CISSP CISM