forward-indicators.md

May 3, 2026 · View on GitHub

Hack23 Logo

🔭 Forward Indicators Template

📊 Actionable Watchlist of Dated Triggers That Will Update the Analysis
🎯 Leading Indicators · Threshold Rules · Confidence Labels · Ownership

Owner Version Effective Date Classification

📋 Document Owner: CEO | 📄 Version: 2.0 | 📅 Last Updated: 2026-05-01 (UTC) 🏢 Owner: Hack23 AB (Org.nr 559534-7807) | 🏷️ Classification: Public

📌 Template instructions: Produce on every run as a required deliverable, with at least the minimum indicator count for the article type's horizon band (see §Horizon Bands below). Save as analysis/daily/${ARTICLE_DATE}/${DOC_TYPE}/forward-indicators.md or, for review cycles, at analysis/weekly/${ISO_WEEK}/forward-indicators.md.

✨ What to produce: A single, authoritative watchlist — each indicator named, dated, threshold-defined, and tied to the downstream analysis it will update. Every indicator must be measurable from public MCP data.


📐 Template Contract — every fill of this template MUST satisfy this row.

SlotValue
Owning methodologyper-artifact-methodologies.md
Owning gate checkCheck 8 (Family D — ≥ 10 dated indicators) — see 05-analysis-gate.md
Required inputssibling Family A + scenario-analysis.md
Horizon bandmixed (T+72h…T+90d) (per scripts/horizon-context.ts)
Output familyFamily D — Electoral & Domain
Aggregation order7 of 30 in canonical order (see scripts/render-lib/aggregator/order.ts)
Reader Intelligence Guiderow generated from forward-indicators.md (see scripts/render-lib/aggregator/reader-guide.ts)
Canonical evidence anchor| claim | evidence (dok_id / vote / MP intressent_id / primary-source URL) | retrieved_at | confidence | — every analytical claim row uses this schema.

Cross-reference: README.md §Template ↔ Methodology ↔ Gate-Check Matrix.

🧭 Horizon Bands

Registry-driven rendering: This template is a single file. The forwardIndicatorHorizons array in article-types.json drives which bands render for a given article type. Existing morning runs (week-ahead and shorter) produce the same output structure as before — back-compat is preserved.

Band Schema (conditional on horizonDays)

The forwardIndicatorHorizons array in article-types.json defines the exact band set per article type. The election band is always present as the terminal anchor. The pattern below shows how bands accumulate as the forecast horizon extends:

ConditionActive bands
horizonDays = 0 (single-type, tier-c)72h · week · month · election
horizonDays = 7 (week-ahead)72h · week · month · quarter · election
horizonDays = 30 (month-ahead)72h · week · month · quarter · year · election
horizonDays = 90 (quarter-ahead)week · month · quarter · year · election
horizonDays = 365 (year-ahead)month · quarter · year · cycle · election
horizonDays >= 1460 (election-cycle)quarter · year · cycle · election

WEP-Degradation Ladder (per-band ceiling)

As the forecast horizon extends, epistemic certainty decreases. The Words of Estimative Probability (WEP) ceiling degrades accordingly:

BandLabelWEP ceilingRationale
T+72h72 hoursvery likely / very unlikelyNear-term; high confidence from scheduled events
T+7dweeklikely / unlikelyShort-term; most parliamentary triggers known
T+30dmonthlikely / unlikelyMedium-term; some uncertainty in scheduling
T+90dquarterroughly even / about evenExtended; multiple intervening variables
T+365dyearroughly even (mandatory unless ≥3 corroborated sources)Long-range; structural uncertainty dominates
T+1460dcycleroughly even / unlikely / very unlikely; never likely/very likely without ≥3 cycle-aged sourcesUltra-long; scenario-driven only

Minimum Indicator Counts (per article type)

Article typeMin indicatorsBands
Week-ahead (horizonDays=7)672h, week, month, quarter, election
Month-ahead (horizonDays=30)872h, week, month, quarter, year, election
Quarter-ahead (horizonDays=90)10week, month, quarter, year, election
Year-ahead (horizonDays=365)12month, quarter, year, cycle, election
Election-cycle (horizonDays>=1460)15quarter, year, cycle, election

Note: Single-type and tier-c-aggregation articles (morning runs, evening analysis) use the 4-band schema (72h / week / month / election) with a floor of 6 indicators. The election band is always present as the terminal anchor across all article types.


🔄 Tradecraft Context

FieldValue
F3EAD stageAnalyze / Disseminate (forward-looking watchlist drives next collection cycle)
PIRsevery indicator ties to one or more standing PIRs — name them per indicator
Admiralty floorA1 for measurable MCP-sourced thresholds; B2 acceptable for derived composite indicators
SATs usedIndicators & Signposts; Key Assumptions Check; Outside-In Thinking
ICD 203 standards applieduncertainty, alternative analysis, consistency/change, customer relevance

See political-style-guide.md for canonical F3EAD / PIR catalog / Admiralty Code / ICD 203 / WEP / SATs definitions.


📋 Watchlist Context

FieldValue
Watchlist IDFWI-YYYY-MM-DD-NNN
GeneratedYYYY-MM-DD HH:MM UTC
Scopee.g., week 17 / month 2026-04 / run-specific
Indicator countN
Overall Confidence🟩 HIGH

🧭 Indicator Dashboard

⚠️ Illustrative example below — the Gantt milestones, indicator IDs, thresholds, and deadlines are drawn from a worked 2026 scenario. Replace every milestone, date, indicator, threshold, and owner with run-specific values before publishing. Do not treat this example as an actual monitoring commitment.

gantt
    title Forward-indicator timeline
    dateFormat YYYY-MM-DD
    section Parliamentary
    FiU48 chamber vote (FI-01)         :milestone, 2026-04-24, 0d
    CU13 chamber vote (FI-02)          :milestone, 2026-04-29, 0d
    FöU proposition tabling (FI-03)    :milestone, 2026-05-12, 0d
    section Polling
    Q2 SIFO release (FI-04)            :milestone, 2026-06-30, 0d
    Novus mid-month (FI-05)            :milestone, 2026-07-15, 0d
    section Macro
    SCB PR0101 May (FI-06)             :milestone, 2026-06-12, 0d
    IMF WEO update (FI-07)             :milestone, 2026-07-22, 0d
    section External
    EU Commission response (FI-08)     :milestone, 2026-05-15, 0d

🗂️ Indicator Register

#IndicatorMeasurable viaTrigger thresholdDeadlineOwner (analysis file)Confidence
FI-01FiU48 chamber vote outcomesearch_voteringar(bet=FiU48)Coalition unanimity or ≥ 1 Avstår2026-04-24risk-assessment.md R1🟦 VERY HIGH
FI-02CU13 chamber vote outcomesearch_voteringar(bet=CU13)Any close result (< 10-vote margin)2026-04-29risk-assessment.md R3🟩 HIGH
FI-03FöU defence proposition tablingget_propositionerTabled or delayed2026-05-12threat-analysis.md T2🟩 HIGH
FI-04Q2 2026 SIFO releasePublished by Kantar SifoGovernment-bloc gap ≥ −6 pp2026-06-30election-2026-analysis.md🟩 HIGH
FI-05Novus mid-JulyPublished by NovusConsistency with FI-04 direction2026-07-15scenario-analysis.md🟩 HIGH
FI-06SCB PR0101 May CPIscb query_table PR0101Pump-price index ↓ ≥ 3 %2026-06-12voter-segmentation.md S1🟦 VERY HIGH
FI-07IMF WEO July updatetsx scripts/imf-fetch.tsSweden GDP revision2026-07-22comparative-international.md🟩 HIGH
FI-08EU Commission communication on fuel-tax cutCommission press roomAny formal letter / opening of review2026-05-15risk-assessment.md R2🟧 MEDIUM
FI-09SD public posture on fuel-tax sunsetsearch_anforanden(parti=SD)Any ambiguity signalRollingcoalition-mathematics.md🟧 MEDIUM
FI-10Skatteverket guidance publicationSkatteverket sitePublication date2026-05-30implementation-feasibility.md D2🟩 HIGH

🧪 Indicator Detail — Example (repeat per FI)

FI-01 — FiU48 chamber vote outcome

AttributeValue
Monitoring methodMCP call search_voteringar(bet=FiU48, rm=2025/26)
What a "positive" signal meansUnanimous government-bloc Ja → confirms coalition discipline claim
What a "negative" signal meansAny coalition MP Avstår or Nej → coalition fracture signal
Who changes?risk-assessment.md R1 score; devils-advocate.md ACH hypothesis H3; synthesis-summary.md §Finding 1
FallbackIf vote delayed, re-check 2026-04-25, 2026-04-28
Confidence🟦 VERY HIGH — Riksdag voting records are primary-source public data

🔁 Update Rules

RuleWhen it fires
Auto-rerunAny indicator reaches its deadline
Re-scoreIndicator threshold is breached
PromoteIndicator exceeds threshold for 2 consecutive observations → risk register upgrade
RetireIndicator passes deadline without breach → archive with observation note

📅 This-Week Watch Window

DayIndicatorAction
2026-04-22FI-01 prepPre-load search_voteringar query
2026-04-24FI-01Record outcome, rerun dependent analyses
2026-04-25FI-09Check SD spokesperson statements
2026-04-29FI-02Record outcome

🧭 Cross-File Impact Map

graph LR
    FI01["🗓️ FI-01<br/>FiU48 vote"] --> RA["⚠️ risk-assessment.md"]
    FI01 --> DA["😈 devils-advocate.md"]
    FI01 --> SYN["🧩 synthesis-summary.md"]
    FI04["🗓️ FI-04<br/>Q2 SIFO"] --> EL["🗳️ election-2026-analysis.md"]
    FI04 --> SCN["🔮 scenario-analysis.md"]
    FI06["🗓️ FI-06<br/>SCB PR0101"] --> VS["🫂 voter-segmentation.md"]
    FI08["🗓️ FI-08<br/>EU Commission"] --> CI["🌍 comparative-international.md"]

    style FI01 fill:#FF9800,color:#FFFFFF
    style FI04 fill:#7B1FA2,color:#FFFFFF
    style FI06 fill:#1565C0,color:#FFFFFF
    style FI08 fill:#C2185B,color:#FFFFFF
    style RA fill:#D32F2F,color:#FFFFFF
    style DA fill:#FFC107,color:#000000
    style SYN fill:#4CAF50,color:#FFFFFF
    style EL fill:#4CAF50,color:#FFFFFF
    style SCN fill:#7B1FA2,color:#FFFFFF
    style VS fill:#4CAF50,color:#FFFFFF
    style CI fill:#1565C0,color:#FFFFFF

📎 Sources

SourceUse
riksdag-regering MCPVoteringar, anföranden, dokument, kalenderhändelser
scb MCPCPI, pump-price index, labour statistics
imf (scripted)Macro-fiscal updates
world-bank MCPGovernance / comparator indicators
Kantar Sifo, Novus, DemoskopPublic polling
EU Commission press roomState-aid communications

Document Control


✅ Pass-2 Self-Audit Checklist (v4.4 — required)

Purpose: AI-FIRST principle requires a Pass-2 read-back-and-improve. After producing this artifact in Pass 1, re-read it end-to-end and verify each item below. Document any remediation in methodology-reflection.md §"Pass-2 audit log". Any unchecked ❌ box at the end of Pass 2 forces a Pass-3 rewrite of the affected section.

  • Tradecraft anchors honoured — F3EAD stage matches the artifact's role; PIRs declared in the §Tradecraft Context block are actually addressed in the body; Admiralty grades attached to every external source; WEP band + ODNI confidence on every probabilistic judgement.
  • Source diversity floor met — at least the minimum number of independent MCP sources required by the artifact's tradecraft block are cited; single-source claims are explicitly labelled [SINGLE-SOURCE — corroboration pending].
  • Evidence specificity — every quantified claim cites a dok_id (Riksdag), an SCB / IMF dataflow code, or a named external source with date; no "according to data" / "studies show" hand-waves.
  • Named-actor discipline — every political claim names ≥ 1 person (party + role + dated act/quote) or labels the absence ([diffuse — no named actor]).
  • Counter-narrative present — at least one explicit competing hypothesis, dissent quote, or framed objection appears in the body; "no opposition recorded" is itself a finding to label, not silence.
  • Election 2026 lens applied — the §"Election 2026 Implications" subsection (or equivalent) addresses electoral salience, coalition pressure, and forward indicators; not boilerplate.
  • No illustrative content shipped as fact — every [REQUIRED] placeholder is filled OR removed; every Example: block is clearly fenced or removed; no fabricated dok_id, vote count, or quote leaks into the final artifact.
  • Cross-references resolve — every [link](file.md) in this artifact points to a file that exists in the run folder (analysis/daily/$ARTICLE_DATE/$SUBFOLDER/) or to a methodology / template under analysis/.
  • Mermaid renders — every fenced ```mermaid block parses (no missing class definitions, no orphan nodes, no >40-node graphs that overflow viewport on mobile).
  • Indicator-count floor — total indicators ≥ minimum for the article type's horizon band (6 week / 8 month / 10 quarter / 12 year / 15 cycle); WEP ceiling respected per band; no indicator assigned a probability above its band's WEP ceiling.
  • Line-floor check — artifact length ≥ the per-artifact floor in reference-quality-thresholds.json; shorter artifacts trigger Pass-2 rewrite, never a [truncated] note.