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.
- At least **1 regime-change branch** when any tripwire from §2 is armed.

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.

This bullet makes the regime-change branch conditional (“when any tripwire from §2 is armed”), but scenario-forecast.md §0 defines a regime-change branch as mandatory in long-horizon mode. Align the prompt wording with the template/spec so agents don’t follow conflicting requirements.

Suggested change
- At least **1 regime-change branch** when any tripwire from §2 is armed.
- Mandatory **regime-change branch**; use tripwires from §2 to define and monitor the branch.

Copilot uses AI. Check for mistakes.
- 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 headings matching /^###\\s+Scenario\\s+\\d+[:—]/m in the artifact. Activated for articleTypes listed above (electoralOverlay===true OR scenarioMaxHorizonMonths>=36 in article-horizons registry)."

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 longHorizonScenarioGate.note regex description doesn’t match the implementation: countScenarios() accepts alphanumeric IDs (A–Z, 0–9) and uses a global multiline match, but the note says it only counts \d+ and implies a single match. Please update the note so it accurately reflects the validator’s actual heading pattern.

Suggested change
"note": "Enforced by scripts/validate-analysis-completeness.js countScenarios(). Counts headings matching /^###\\s+Scenario\\s+\\d+[:—]/m in the artifact. Activated for articleTypes listed above (electoralOverlay===true OR scenarioMaxHorizonMonths>=36 in article-horizons registry)."
"note": "Enforced by scripts/validate-analysis-completeness.js countScenarios(). Counts all headings matching /^###\\s+Scenario\\s+[A-Z0-9]+[:—]/gm in the artifact. Activated for articleTypes listed above (electoralOverlay===true OR scenarioMaxHorizonMonths>=36 in article-horizons registry)."

Copilot uses AI. Check for mistakes.
},
"mermaidRequired": [
"classification/impact-matrix.md",
"classification/forces-analysis.md",
Expand Down
59 changes: 57 additions & 2 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 @@ -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 7 structure fields (including `**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 tagged with its active horizons (7d / 30d / 90d / 12m / term-end / EP-election)

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 template now adds a required **Horizons:** field, but the checklist still says “all 7 structure fields (including **Horizons:**)”. With Horizons added, the card template appears to have 8 fields (Category, Horizons, Description, Current State, Thresholds, Monitoring Method, Scenario Linkage, Historical Context). Update the checklist (and any earlier “7 fields” wording) so the required field count is consistent with the template.

Suggested change
- [ ] Each indicator has all 7 structure fields (including `**Horizons:**` tag)
- [ ] Multi-Horizon Decay Table present in §Multi-Horizon Decay Table
- [ ] Every indicator tagged with its active horizons (7d / 30d / 90d / 12m / term-end / EP-election)
- [ ] Each indicator has all 8 structure fields (including required `**Horizons:**`)
- [ ] Multi-Horizon Decay Table present in §Multi-Horizon Decay Table
- [ ] Every indicator has the `**Horizons:**` field populated with its active horizons (7d / 30d / 90d / 12m / term-end / EP-election)

Copilot uses AI. Check for mistakes.
- [ ] 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