Riksdagsmonitor Intelligence Platform โ€” API Documentation - v1.0.47
    Preparing search index...

    Hack23 Logo

    ๐Ÿ“… End-of-Life Strategy โ€” Riksdagsmonitor

    ๐Ÿ”„ Technology Lifecycle Management for Static Intelligence Platform
    ๐Ÿ“ฆ Node.js 26 Active โ€ข โญ๏ธ Node.js 26 LTS Promotion October 2026 โ€ข โšก Future-Ready Architecture

    Owner Version Effective Date Review Cycle

    ๐Ÿ“‹ Document Owner: CEO | ๐Ÿ“„ Version: 1.5 | ๐Ÿ“… Last Updated: 2026-05-28 (UTC)
    ๐Ÿ”„ Review Cycle: Annual | โฐ Next Review: 2027-05-28
    ๐Ÿข Owner: Hack23 AB (Org.nr 5595347807) | ๐Ÿท๏ธ Classification: Public


    Riksdagsmonitor is a static HTML5/CSS3 website deployed to AWS CloudFront + S3 (primary) and GitHub Pages (disaster recovery), built with Vite, tested with Vitest and Cypress, and powered by Node.js 26. The platform provides Swedish Parliament transparency through interactive Chart.js and D3.js visualisations across 14 languages.

    โšก Upgrade Note (July 2026): The toolchain migration to TypeScript 7 has started. The project now runs the TypeScript 6 compatibility package (typescript) side-by-side with a TypeScript 7 RC toolchain (typescript-7) so the build can validate the next compiler without breaking existing workflows. Node.js 26 remains the current runtime and will be promoted to LTS in October 2026; a Node.js 27 nightly compatibility CI job (continue-on-error: true) tracks the next-generation release. See the Node.js Migration Roadmap for the full plan.

    This document defines the technology lifecycle management strategy โ€” covering the current stack, Node.js release schedule evolution, dependency EOL timelines, and migration plans โ€” to ensure stability, compatibility, and security throughout the project's operational life.

    This strategy should be read alongside the Business Continuity Plan, Financial Security Plan, and Architecture Documentation for full technical and business context.


    Primary Goal: Maintain Riksdagsmonitor on a supported, secure technology stack by proactively tracking dependency lifecycles and planning migrations before components reach end-of-life.

    Key Principles:

    • Upgrade to new Node.js Current versions promptly; LTS promotion happens in-place (no second migration needed)
    • Keep build tooling (Vite, Vitest, TypeScript) on latest stable versions
    • Maintain zero known critical/high vulnerabilities via automated scanning
    • Plan major migrations 12 months before dependency EOL dates
    • Ensure the static output (HTML/CSS/JS) remains browser-compatible for 5+ years

    The current Node.js release schedule is 10 years old, created during the io.js merger. A decade of usage data now shows:

    • Odd-numbered releases see minimal adoption โ€” most users wait for Long-Term Support
    • The odd/even distinction confuses newcomers and many organisations skip odd releases entirely
    • Volunteer sustainability โ€” Node.js is maintained primarily by volunteers; managing security releases across four or five active release lines has become difficult to sustain, as each additional line increases backporting complexity

    By reducing concurrent release lines, the project can focus on better supporting the releases people actually use while making the schedule more predictable for enterprises.

    Starting with Node.js 27.x, the Node.js project is moving from two major releases per year to one (see nodejs/Release#1113 for full background). Key changes:

    AspectOld Model (โ‰ค26.x)New Model (โ‰ฅ27.x)
    Major releases2 per year (April + October)1 per year (April)
    LTS promotionEven-numbered only (October)Every release becomes LTS (October)
    Odd/even distinctionOdd = Current-only, Even = LTSNo distinction โ€” all releases get LTS
    Version numberingSequentialAligned to calendar year (27 in 2027, 28 in 2028)
    Alpha channelN/A6-month alpha phase (Octโ€“Mar) with semver-major changes
    Alpha versioningN/ASemver prerelease format (e.g., 27.0.0-alpha.1)
    Total support window~36 months (LTS only)36 months from first Current release to EOL
    PhaseDurationDescription
    Alpha6 months (Oct โ†’ Mar)Early testing, semver-major changes allowed. Versioning: X.0.0-alpha.N
    Current6 months (Apr โ†’ Oct)Stabilisation, bug fixes
    LTS30 months (Oct โ†’ Apr+30mo)Long-term support with security fixes
    EOLโ€”No further support

    For users who already only upgrade to LTS versions, little changes beyond version numbering. LTS support windows remain similar, and now every release becomes LTS.

    • Simplified upgrade planning: Every Node.js release becomes LTS, eliminating the need to skip odd-numbered versions
    • Annual upgrade cadence: Plan one major Node.js upgrade per year (April release, adopt after October LTS promotion)
    • Alpha testing in CI: Integrate Node.js alpha releases into the CI matrix to catch compatibility issues early โ€” this is critical since alpha is the only window to report bugs before they affect LTS users
    • Reduced concurrent support lines: Fewer active Node.js versions means clearer migration targets and less upgrade pressure
    • Library author responsibility: As a consumer of npm packages, we benefit when library authors test against alpha versions; we should also test our own build tooling compatibility early

    To proactively catch Node.js compatibility issues, Riksdagsmonitor will adopt the following alpha testing approach:

    CI MatrixTriggerFailure Policy
    Node.js LTS (current)Every push, PRโŒ Blocking โ€” must pass
    Node.js CurrentEvery push, PRโŒ Blocking โ€” must pass
    Node.js Alpha (next)Weekly scheduledโš ๏ธ Non-blocking โ€” issues logged, not gating

    This allows early detection of breaking changes in Node.js alpha while keeping production deployments stable on LTS.


    CategoryTechnologyCurrent VersionEOL DateReplacement Path
    RuntimeNode.js 2626.xApril 2029 (Maintenance end)Node.js 27 LTS (2027)
    Package ManagernpmBundled with Node.jsFollows Node.jsFollows Node.js upgrades
    LanguageTypeScript6.0.3Active (quarterly releases)Track latest stable
    Build ToolVite8.0.14ActiveTrack latest major
    Transpilertsx4.22.3ActiveTrack latest stable
    CategoryTechnologyCurrent VersionEOL DateReplacement Path
    Unit TestingVitest4.1.7Active (follows Vite)Track with Vite major versions
    E2E TestingCypress15.16.0ActiveTrack latest stable
    Coverage@vitest/coverage-v84.1.7ActiveTrack with Vitest
    DOM Simulationhappy-dom20.9.0ActiveTrack latest stable
    CategoryTechnologyCurrent VersionEOL DateReplacement Path
    ChartingChart.js4.5.1ActiveTrack latest stable
    Chart Annotationschartjs-plugin-annotation3.1.0ActiveFollows Chart.js
    Data VisualisationD3.js7.9.0ActiveTrack latest major
    CSV ParsingPapaParse5.5.3ActiveTrack latest stable
    JSON ValidationAjv8.20.0ActiveTrack latest stable
    JSON Formatsajv-formats3.0.1ActiveFollows Ajv
    CategoryTechnologyCurrent VersionEOL DateReplacement Path
    LintingESLint10.4.1ActiveTrack latest major
    HTML LintingHTMLHint1.9.2ActiveTrack latest stable
    Dead Codeknip6.14.2ActiveTrack latest stable
    API DocsTypeDoc0.28.19ActiveTrack latest stable

    TypeScriptRelease DateStatusSupport Until
    6.0.3Mar 2026โœ… Active โ€” in useUntil 7.0 release (~12 months)
    5.9.xFeb 2026Previous stableLimited โ€” security patches only
    5.8.xDec 2025End of lifeโŒ No support

    Note: TypeScript 6.0 is a major release with breaking changes including deprecated baseUrl option (still functional, silenced via ignoreDeprecations: "6.0"), stricter module resolution in bundler mode, and removal of implicit global namespace. The project uses @typescript-eslint 8.60.0 which supports typescript >=4.8.4 <6.1.0.

    1. Upgrade to new patch versions immediately โ€” bug fixes only, no breaking changes.
    2. Upgrade to new minor versions within 2 weeks โ€” validate tsc --noEmit, ESLint, and all tests pass.
    3. Upgrade to new major versions within 1 month โ€” major versions may require code changes and @typescript-eslint compatibility updates.
    4. Never use TypeScript versions unsupported by @typescript-eslint โ€” this would disable type-aware linting.
    TriggerActionTimeline
    New patch release (e.g., 6.0.3)Update package.json, run full CIWithin 1 week
    New minor release (e.g., 6.1.0)Verify @typescript-eslint compatibility firstWithin 2 weeks
    New major release (e.g., 7.0.0)Full compatibility assessment, dedicated PRWithin 1 month
    @typescript-eslint drops supportUpgrade @typescript-eslint or pin TypeScriptWithin 24 hours

    MilestoneDateStatus
    Node.js 24 Current ReleaseApril 2025โœ… Adopted
    Node.js 24 LTS PromotionOctober 2025โœ… Production deployment
    Node.js 24 โ†’ 25 MigrationMarch 2026โœ… Completed
    Node.js 25 โ†’ 26 MigrationMay 2026โœ… Completed (this release)

    Node.js 26 is the last release under the old two-per-year schedule. It releases as "Current" in April 2026 and will be promoted to LTS in October 2026 โ€” no additional migration will be needed at that point, as the project will already be on Node.js 26.

    Strategy: Stay on Node.js 26 from Current through LTS in-place โ€” no additional upgrade step required at October 2026 LTS promotion.

    MilestoneDateStatus
    Node.js 26 Current ReleaseApril 2026โœ… Available
    Riksdagsmonitor upgrade to 26May 2026โœ… Completed (this release)
    Node.js 26 LTS PromotionOctober 2026โณ No migration needed โ€” will transition in-place
    Node.js 26 Active LTS EndOctober 2027Begin evaluating Node.js 27
    Node.js 26 Maintenance EndApril 2029Must be off Node.js 26

    Completed upgrade checklist (for Node.js 26):

    • [x] Validate TypeScript native type-stripping (process.features.typescript === "strip") still works
    • [x] Confirm all 43+ workflows pass on Node.js 26 (blocking CI jobs)
    • [x] Verify GitHub Actions ubuntu-26.04 runners include Node.js 26
    • [x] Update all node-version: '25' โ†’ '26' across all workflow YAML and markdown files
    • [x] Update package.json engines.node from >=25 to >=26
    • [x] Update .nvmrc from 25 to 26
    • [x] Update skills documentation (./github/skills/**SKILL.md) code examples
    • [x] Update documentation (End-of-Life-Strategy.md, WORKFLOWS.md, FUTURE_WORKFLOWS.md, README.md, TESTING.md)
    • [x] Add Node.js 27 nightly CI compatibility job (continue-on-error: true)

    Node.js 27 is the first release under the new one-per-year schedule where every release becomes LTS.

    MilestoneDateAction
    Node.js 27 Alpha PhaseOctober 2026 โ€“ March 2027Add alpha to CI matrix
    Node.js 27 Current ReleaseApril 2027Evaluate compatibility
    Node.js 27 LTS PromotionOctober 2027Plan migration from Node.js 26
    Migration WindowOct 2027 โ€“ Mar 2028Upgrade riksdagsmonitor to Node.js 27
    Node.js 27 EOL~April 2030Plan next migration
    MilestoneDateAction
    Node.js 28 Alpha PhaseOctober 2027 โ€“ March 2028Add alpha to CI matrix
    Node.js 28 Current ReleaseApril 2028Evaluate compatibility
    Node.js 28 LTS PromotionOctober 2028Plan migration from Node.js 27
    Migration WindowOct 2028 โ€“ Mar 2029Upgrade riksdagsmonitor to Node.js 28
    Node.js 28 EOL~April 2031Plan next migration
    gantt
    title Node.js Lifecycle & Riksdagsmonitor Migration Plan
    dateFormat YYYY-MM
    axisFormat %Y-%m

    section Node.js 24 (completed)
    Active LTS :done, n24lts, 2025-10, 2026-03
    Migration Off 24 :done, m24, 2026-03, 2026-03

    section Node.js 25 (interim โ€” completed)
    Current (interim) :done, n25curr, 2025-10, 2026-04
    Riksdagsmonitor on 25:done, rm25, 2026-03, 2026-04

    section Node.js 26 (last old-model โ€” LTS)
    Current :n26curr, 2026-04, 2026-10
    Active LTS :n26lts, 2026-10, 2027-10
    Maintenance :n26maint, 2027-10, 2029-04
    Riksdagsmonitor on 26:active, rm26, 2026-04, 2027-10

    section Node.js 27 (new model โ€” first annual LTS)
    Alpha (27.0.0-alpha.x):n27alpha, 2026-10, 2027-04
    Current :n27curr, 2027-04, 2027-10
    LTS :n27lts, 2027-10, 2030-04
    Riksdagsmonitor on 27 :rm27, 2027-10, 2030-04

    section Node.js 28 (new model)
    Alpha (28.0.0-alpha.x):n28alpha, 2027-10, 2028-04
    Current :n28curr, 2028-04, 2028-10
    LTS :n28lts, 2028-10, 2031-04
    Riksdagsmonitor on 28 :rm28, 2028-10, 2031-04

    PriorityCategoryCadenceAutomation
    ๐Ÿ”ด CriticalSecurity patches (CVE)Within 48 hoursDependabot auto-merge
    ๐ŸŸก HighMajor framework updates (Vite, Vitest)Within 2 weeksDependabot PR + manual review
    ๐ŸŸข MediumMinor/patch dependency updatesWeeklyDependabot grouped PRs
    โšช LowDev-only tooling updatesMonthlyDependabot grouped PRs
    • Dependabot: Automated dependency vulnerability alerts and PRs
    • CodeQL: Static analysis for JavaScript/TypeScript security issues
    • GitHub Secret Scanning: Prevent credential leaks
    • npm audit: Integrated into CI pipeline
    • knip: Dead code and unused dependency detection

    Riksdagsmonitor outputs static HTML5, CSS3, and ES2020+ JavaScript. Browser support targets:

    BrowserMinimum VersionEOL Consideration
    Chrome90+Evergreen (auto-updates)
    Firefox90+Evergreen (auto-updates)
    Safari15+Tied to macOS/iOS versions
    Edge90+Chromium-based, evergreen

    Vite Build Target: The Vite build configuration ensures output is compatible with modern browsers. The static output continues to function independently of the Node.js build tooling version.

    ComponentCurrentMaintenance Strategy
    GitHub Actions runnersubuntu-26.04Pinned; update when next LTS image releases
    Action versionsSHA-pinnedUpdate via Dependabot
    step-security/harden-runnerSHA-pinnedUpdate via Dependabot
    Node.js in CInode-version: '26'Update with each Node.js migration

    RiskLikelihoodImpactMitigation
    Node.js 26 reaches EOL before Node.js 27 upgradeVery LowMediumNode.js 27 upgrade planned when it reaches Current (Oct 2027); automated process ready
    Node.js 26 breaking changesLowMediumTest on Node.js 26 RC in CI matrix before it releases
    Vite major breaking changesMediumMediumPin to major version, test upgrades in branch
    Chart.js/D3.js API deprecationLowMediumAbstraction layer isolates visualisation logic
    Cypress major breaking changesMediumLowE2E tests are supplementary; can temporarily skip
    npm ecosystem supply chain attackLowHighSHA-pinned actions, SRI hashes, Dependabot alerts
    Browser API deprecation affecting static outputVery LowLowES2020+ features are stable and widely supported
    TypeScript major upgrade breaks buildLowMediumTest with tsc --noEmit, lint, and full test suite before merging
    @typescript-eslint drops TypeScript version supportMediumHighMonitor peer dependency ranges; pin TypeScript if needed
    MigrationComplexityEstimated EffortRisk Level
    Node.js 24 โ†’ 25Very Low< 1 day๐ŸŸข Very Low
    Node.js 25 โ†’ 26 (โœ… completed)Very Low< 1 day๐ŸŸข Very Low
    Node.js 26 โ†’ 27 (new schedule)Low1โ€“2 days๐ŸŸข Low
    Vite 8 โ†’ next majorMedium2โ€“5 days๐ŸŸก Medium
    TypeScript 5 โ†’ 6Low< 1 day๐ŸŸข Very Low (completed)
    TypeScript 6 โ†’ 7Lowโ€“Medium1โ€“3 days๐ŸŸข Low
    Chart.js 4 โ†’ 5Medium3โ€“5 days๐ŸŸก Medium
    D3.js 7 โ†’ 8Medium3โ€“7 days๐ŸŸก Medium

    Riksdagsmonitor is a continuously maintained platform with no planned end-of-life. However, the project would enter EOL status if:

    1. All maintainers cease activity and no successors are appointed
    2. Core dependencies (Node.js, Vite, Chart.js, D3.js) all simultaneously reach EOL with no migration path
    3. Browser standards fundamentally change, making the static HTML/CSS/JS output non-functional
    4. The Riksdag (Swedish Parliament) ceases to exist or provide public data

    In any EOL scenario:

    • The static website will remain accessible on GitHub Pages indefinitely (read-only)
    • All source code will remain available under Apache 2.0 license
    • Data archives will be preserved in the repository
    • A final release will be tagged with EOL notice

    The ongoing maintenance strategy aligns with Hack23 AB's ISMS-PUBLIC framework to ensure systematic security management throughout the platform lifecycle.

    ๐Ÿ›ก๏ธ ISMS Policy๐Ÿ”ง Maintenance Activity๐Ÿ“‹ Implementation
    Change ManagementNode.js LTS migration planning
    Major dependency upgrades
    Risk-assessed transition with testing
    Documented migration path via PRs
    Vulnerability ManagementAutomated security patching
    Dependency updates via Dependabot
    Weekly vulnerability scans
    48-hour patch SLA for critical issues
    Asset RegisterEOL tracking for dependencies
    Technology stack monitoring
    Documented component lifecycle (this document)
    Replacement planning for EOL tech
    Business Continuity PlanPlatform availability during transitions
    Rollback procedures
    Dual deployment (AWS + GitHub Pages)
    Tested recovery procedures
    Secure Development PolicySecurity testing during upgrades
    Supply chain verification
    CodeQL, npm audit, SLSA attestation
    SHA-pinned GitHub Actions

    Security Assurance:



    ๐Ÿ“‹ Document Control:
    โœ… Approved by: James Pether Sรถrling, CEO
    ๐Ÿ“ค Distribution: Public
    ๐Ÿท๏ธ Classification: Confidentiality: PublicIntegrity: ModerateAvailability: Standard
    ๐Ÿ“… Effective Date: 2026-05-28
    โฐ Next Review: 2027-05-28
    ๐ŸŽฏ Framework Compliance: ISO 27001NIST CSF 2.0CIS Controls


    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

    AssetPreservation strategyRationale
    analysis/imf/indicators-inventory.jsonArchived in final analysis/ snapshot; mirrored to Internet ArchiveSchema documents what we cached
    analysis/imf/data-dictionary.mdArchived; mirroredReproducibility of vintage interpretation
    analysis/imf/agentic-integration.mdArchived; mirroredReproducibility of integration pattern
    Vintage-tagged IMF cache (analysis/daily/*/economic-data.json)Preserved in full in archival snapshotProvenance integrity โ€” never delete
    economicProvenance blocks in articlesPreserved (immutable)Article-level audit trail
    SHA-256 cache pin indexPreservedIntegrity verification post-sunset

    The IMF data licence (attribution required, redistribution permitted) survives platform sunset. Archived IMF-cached data may be redistributed by successor projects provided the IMF attribution remains intact.

    Future maintainers inheriting Riksdagsmonitor receive:

    1. The vintage-tagged IMF cache (full historical depth at sunset moment)
    2. The scripts/imf-*.ts runtime (reusable in any TypeScript context)
    3. The IMF integration playbook (agentic-integration.md)
    4. The IMF threat model (THREAT_MODEL.md ยงIMF + FUTURE_THREAT_MODEL.md ยงIMF)

    This enables a successor to either continue IMF integration immediately or migrate to a different economic-data provider (with full provenance for the data they inherit).

    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

    OpenSSF Best PracticesOpenSSF ScorecardISO 27001:2022NIST CSF 2.0CIS Controls v8.1Apache 2.0

    ๐Ÿ—ณ๏ธ Empower citizens ยท ๐Ÿ” Strengthen democratic accountability ยท ๐Ÿ•ต๏ธ Illuminate the political process

    ยฉ 2008โ€“2026 Hack23 AB (Org.nr 559534-7807) ยท Maintainer: James Pether Sรถrling, CISSP CISM