Skip to content
Merged
17 changes: 13 additions & 4 deletions .github/prompts/11-forward-projection.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,22 @@ Read every artifact word-by-word. Apply the AI-First Quality Principle
For `term-outlook` and `election-cycle` (where
`SCENARIO_MAX_MONTHS ≥ 36`), [`scenario-forecast.md`](../../analysis/templates/scenario-forecast.md)
opens its long-horizon-mode header — see
[`strategic-extensions-methodology.md`](../../analysis/methodologies/strategic-extensions-methodology.md)
for the appendix. ≥ 6 scenarios are mandatory, including at least one
regime-change branch when any tripwire from §2 is armed.
[`scenario-forecast.md §0`](../../analysis/templates/scenario-forecast.md#0️⃣-long-horizon-mode)
for the full specification. Key requirements in long-horizon mode:

- **≥ 6 scenarios** are mandatory (enforced by Stage-C validator on `term-outlook`/`election-cycle`).
- Mandatory **EP-election outcome branch** with three sub-paths: centre-right majority, centre-left majority, fragmented coalition.
- Mandatory **regime-change branch**; use tripwires from §2 to define and monitor the branch.
- At least **2 wildcard/black-swan branches**.
- Per-scenario WEP confidence band **drawn from the decay table** at [`forward-projection-methodology.md §3`](../../analysis/methodologies/forward-projection-methodology.md#3-wep-decay-table) — this is the **single source of truth** for horizon-conditional WEP numbers; do not copy the table into `scenario-forecast.md`.

**Forward indicators in long-horizon mode:** [`forward-indicators.md`](../../analysis/templates/forward-indicators.md) includes a **Multi-Horizon Decay Table** (§Multi-Horizon Decay Table) that maps every indicator type to the horizons at which it retains predictive signal. Ensure every indicator card carries a `**Horizons:**` tag so monitoring plans retire indicators at their decay horizon. Canonical WEP decay numbers are in [`forward-projection-methodology.md §3`](../../analysis/methodologies/forward-projection-methodology.md#3-wep-decay-table) — `forward-indicators.md` references but does not duplicate them.

## 6 · Cross-References

- [`forward-projection-methodology.md`](../../analysis/methodologies/forward-projection-methodology.md) — protocol authority.
- [`forward-projection-methodology.md`](../../analysis/methodologies/forward-projection-methodology.md) — **protocol authority and canonical WEP decay table (§3)**.
- [`scenario-forecast.md §0`](../../analysis/templates/scenario-forecast.md#0️⃣-long-horizon-mode) — long-horizon-mode specification.
- [`forward-indicators.md §Multi-Horizon Decay Table`](../../analysis/templates/forward-indicators.md#-multi-horizon-decay-table) — horizon tags per indicator type.
- [`02-analysis-protocol.md`](02-analysis-protocol.md) — 2-pass iterative improvement.
- [`03-analysis-completeness-gate.md`](03-analysis-completeness-gate.md) — Stage-C gate definition.
- [`04-article-generation.md`](04-article-generation.md) — how the artifacts in §1 land in the rendered article.
8 changes: 7 additions & 1 deletion analysis/methodologies/reference-quality-thresholds.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,13 @@
"date": "2026-04-18"
},
"structuralRequirements": {
"note": "Structural contracts enforced by scripts/validate-analysis-completeness.js. mermaidRequired = artifacts that MUST contain at least one Mermaid block (in addition to the directory-based default for intelligence/, classification/, risk-scoring/, threat-assessment/). readerBlockRequired = artifacts that MUST contain a Reader Briefing / 'For Citizens' / 'Plain Language' section. sourceDiversityRequired = artifacts that MUST cite at least one EP MCP tool reference OR carry an evidence table (markdown table with a Source / Evidence / Reference header column, e.g. a 'Data Sources & Provenance' block); the validator accepts either signal. requiredSections = artifact -> array of H2 substrings that MUST appear (case-insensitive substring match). Added 2026-04 alongside template v2.0 enrichment of impact-matrix, forces-analysis, actor-mapping, political-capital-risk, actor-threat-profiles, legislative-disruption, legislative-velocity-risk, consequence-trees.",
"note": "Structural contracts enforced by scripts/validate-analysis-completeness.js. mermaidRequired = artifacts that MUST contain at least one Mermaid block (in addition to the directory-based default for intelligence/, classification/, risk-scoring/, threat-assessment/). readerBlockRequired = artifacts that MUST contain a Reader Briefing / 'For Citizens' / 'Plain Language' section. sourceDiversityRequired = artifacts that MUST cite at least one EP MCP tool reference OR carry an evidence table (markdown table with a Source / Evidence / Reference header column, e.g. a 'Data Sources & Provenance' block); the validator accepts either signal. requiredSections = artifact -> array of H2 substrings that MUST appear (case-insensitive substring match). Added 2026-04 alongside template v2.0 enrichment of impact-matrix, forces-analysis, actor-mapping, political-capital-risk, actor-threat-profiles, legislative-disruption, legislative-velocity-risk, consequence-trees. longHorizonScenarioGate = article types whose intelligence/scenario-forecast.md MUST contain >= 6 scenario headings (### Scenario N pattern); activated when electoralOverlay===true or scenarioMaxHorizonMonths>=36. Added 2026-05 alongside scenario-forecast.md template v1.3.",

Copilot AI May 1, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The structuralRequirements note says the long-horizon scenario gate is “activated when electoralOverlay===true or scenarioMaxHorizonMonths>=36”, but the implementation in scripts/validate-analysis-completeness.js activates it when manifest.articleType is in longHorizonScenarioGate.articleTypes. Suggest updating this note to reflect the actual activation criteria (manifest articleType), or readers may assume registry fields affect enforcement.

Suggested change
"note": "Structural contracts enforced by scripts/validate-analysis-completeness.js. mermaidRequired = artifacts that MUST contain at least one Mermaid block (in addition to the directory-based default for intelligence/, classification/, risk-scoring/, threat-assessment/). readerBlockRequired = artifacts that MUST contain a Reader Briefing / 'For Citizens' / 'Plain Language' section. sourceDiversityRequired = artifacts that MUST cite at least one EP MCP tool reference OR carry an evidence table (markdown table with a Source / Evidence / Reference header column, e.g. a 'Data Sources & Provenance' block); the validator accepts either signal. requiredSections = artifact -> array of H2 substrings that MUST appear (case-insensitive substring match). Added 2026-04 alongside template v2.0 enrichment of impact-matrix, forces-analysis, actor-mapping, political-capital-risk, actor-threat-profiles, legislative-disruption, legislative-velocity-risk, consequence-trees. longHorizonScenarioGate = article types whose intelligence/scenario-forecast.md MUST contain >= 6 scenario headings (### Scenario N pattern); activated when electoralOverlay===true or scenarioMaxHorizonMonths>=36. Added 2026-05 alongside scenario-forecast.md template v1.3.",
"note": "Structural contracts enforced by scripts/validate-analysis-completeness.js. mermaidRequired = artifacts that MUST contain at least one Mermaid block (in addition to the directory-based default for intelligence/, classification/, risk-scoring/, threat-assessment/). readerBlockRequired = artifacts that MUST contain a Reader Briefing / 'For Citizens' / 'Plain Language' section. sourceDiversityRequired = artifacts that MUST cite at least one EP MCP tool reference OR carry an evidence table (markdown table with a Source / Evidence / Reference header column, e.g. a 'Data Sources & Provenance' block); the validator accepts either signal. requiredSections = artifact -> array of H2 substrings that MUST appear (case-insensitive substring match). Added 2026-04 alongside template v2.0 enrichment of impact-matrix, forces-analysis, actor-mapping, political-capital-risk, actor-threat-profiles, legislative-disruption, legislative-velocity-risk, consequence-trees. longHorizonScenarioGate = article types whose intelligence/scenario-forecast.md MUST contain >= 6 scenario headings (### Scenario N pattern); activated for manifest.articleType values listed in longHorizonScenarioGate.articleTypes. Added 2026-05 alongside scenario-forecast.md template v1.3.",

Copilot uses AI. Check for mistakes.
"longHorizonScenarioGate": {
"articleTypes": ["term-outlook", "election-cycle"],
"minScenarios": 6,
"artifact": "intelligence/scenario-forecast.md",
"note": "Enforced by scripts/validate-analysis-completeness.js countScenarios(). Counts all headings matching /^###\\s+Scenario\\s+[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*\\s*[:—]/gm in the artifact (supports hyphenated IDs like A-24; underscores excluded). Activated for manifest.articleType values listed in articleTypes above."
},
"mermaidRequired": [
"classification/impact-matrix.md",
"classification/forces-analysis.md",
Expand Down
61 changes: 58 additions & 3 deletions analysis/templates/forward-indicators.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,49 @@

---

## 🕐 Multi-Horizon Decay Table

**Canonical decay numbers live in [`forward-projection-methodology.md §3`](../methodologies/forward-projection-methodology.md#3-wep-decay-table).** The table below shows *which indicator types remain predictively useful at each horizon* — it does NOT replicate WEP probability values. Always read `forward-projection-methodology.md §3` as the authoritative source for the numbers themselves.

Each indicator is tagged with the horizons at which it retains meaningful predictive signal (`✅ active`) vs. the horizons where it has decayed beyond utility (`⬜ decayed`).

```markdown
## Multi-Horizon Decay Table

> WEP decay values are sourced from: [forward-projection-methodology.md §3](../methodologies/forward-projection-methodology.md#3-wep-decay-table).
> Do NOT duplicate or override those numbers here.

| Indicator Type | Example | T+7d | T+30d | T+90d | T+12m | T+term-end | T+EP-election |
|---|---|:---:|:---:|:---:|:---:|:---:|:---:|
| **Procedural / calendar** | Committee vote date, rapporteur deadline, trilogue round | ✅ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ |
| **Coalition cohesion** | EPP/S&D alignment rate on roll-call votes | ✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ |
| **Legislative pipeline** | Procedure stage, report adoption, trilogue conclusion | ✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ |
| **Policy-position shift** | MEP speech-content pivot, amendment filing pattern | ✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ |
| **National-government change** | Election results, coalition formation in MS | ⬜ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **Macro-economic signal** | IMF WEO growth revision, fiscal-deficit threshold | ⬜ | ✅ | ✅ | ✅ | ✅ | ✅ |
| **EP-group composition drift** | Defection rate, new-member absorption pace | ⬜ | ⬜ | ✅ | ✅ | ✅ | ✅ |
| **Presidential/Commission cycle** | Commission WP priorities, DG-level reshuffles | ⬜ | ⬜ | ✅ | ✅ | ✅ | ✅ |
| **Electoral/polling signal** | Eurobarometer party-preference trend, national polling | ⬜ | ⬜ | ⬜ | ✅ | ✅ | ✅ |
| **Spitzenkandidaten declared** | Lead-candidate announcement, party-congress endorsement | ⬜ | ⬜ | ⬜ | ✅ | ✅ | ✅ |
| **Seat-projection model** | EP seat arithmetic based on national polls | ⬜ | ⬜ | ⬜ | ⬜ | ✅ | ✅ |
| **Treaty-revision / IGC signal** | IGC announcement, Art. 48 TEU trigger | ⬜ | ⬜ | ⬜ | ⬜ | ✅ | ✅ |

**Legend:** ✅ active (indicator retains predictive signal) | ⬜ decayed (signal below useful threshold at this horizon)
```

### Per-indicator horizon tagging

When populating Section 3 (Indicator Detail Cards), **tag every indicator** with its active horizons using the `**Horizons:**` field (see card template in §3). This allows monitoring plans to silently retire indicators at their decay horizon rather than reporting stale signals.

**Horizon tag examples:**
- `rapporteur-deadline` → horizons: `7d / 30d`
- `EPP-S&D alignment rate` → horizons: `7d / 30d / 90d`
- `Spitzenkandidaten declared candidates` → horizons: `12m / term-end / EP-election`
- `Eurobarometer party-preference trend` → horizons: `12m / term-end / EP-election`
- `National-government election result` → horizons: `30d / 90d / 12m / term-end / EP-election`

---

## 📋 Header Block

```markdown
Expand Down Expand Up @@ -42,7 +85,7 @@

## 📊 Section 2 — Indicator Master Table

**Required:** ≥10 indicators with all 7 structure fields.
**Required:** ≥10 indicators with all 8 structure fields.

```markdown
## Indicator Inventory
Expand Down Expand Up @@ -72,6 +115,9 @@

**Category:** Political | Institutional | Policy | Electoral | External | Crisis

**Horizons:** {comma-separated list from: 7d / 30d / 90d / 12m / term-end / EP-election}
*(See Multi-Horizon Decay Table above for decay rules; canonical WEP bands per horizon in [forward-projection-methodology.md §3](../methodologies/forward-projection-methodology.md#3-wep-decay-table))*

**Description:** {What this indicator measures and why it matters}

**Current State:**
Expand Down Expand Up @@ -243,15 +289,24 @@ graph TB
## ✅ Quality Checklist

- [ ] ≥10 indicators defined
- [ ] Each indicator has all 7 structure fields
- [ ] Each indicator has all 8 structure fields (including required `**Horizons:**` tag)
- [ ] Multi-Horizon Decay Table present in §Multi-Horizon Decay Table
Comment on lines +292 to +293

Copilot AI May 1, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The checklist now asserts “8 structure fields” due to the new **Horizons:** tag, but earlier in the template Section 2 still says “≥10 indicators with all 7 structure fields”. Please update the earlier requirement text and/or the master table header guidance so the template is internally consistent about the expected field count.

Copilot uses AI. Check for mistakes.
- [ ] Every indicator has the `**Horizons:**` field populated with its active horizons (7d / 30d / 90d / 12m / term-end / EP-election)
- [ ] Indicator categories balanced across Political/Institutional/Policy/Electoral/External/Crisis
- [ ] Dashboard Mermaid shows all indicators with status
- [ ] Scenario linkage explicit for each indicator
- [ ] Alert protocol defined with escalation triggers
- [ ] EP MCP tool mapping complete
- [ ] Historical context provided for key indicators
- [ ] Thresholds evidence-based, not arbitrary
- [ ] WEP bands referenced from [`forward-projection-methodology.md §3`](../methodologies/forward-projection-methodology.md#3-wep-decay-table) — NOT duplicated here

## 🔗 Cross-References

- [`../methodologies/forward-projection-methodology.md §3`](../methodologies/forward-projection-methodology.md#3-wep-decay-table) — **canonical WEP decay table** and horizon lattice (single source of truth)
- [`scenario-forecast.md §0`](scenario-forecast.md) — long-horizon mode requirements; EP-election branches that this indicator set must support
- [`../methodologies/electoral-domain-methodology.md §Part 6`](../methodologies/electoral-domain-methodology.md#part-6--forward-indicators-forward-indicatorsmd) — full methodology for this artifact

---

*Template version 1.0 — EU Parliament Monitor Forward Indicators*
*Template version 1.1 — EU Parliament Monitor Forward Indicators*
Loading
Loading