-
-
Notifications
You must be signed in to change notification settings - Fork 6
[Look-Ahead §5] scenario-forecast long-horizon-mode + forward-indicators multi-horizon decay #1593
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
df180fe
66948d7
5c6fc3c
6df6f00
9b63272
d806763
bd6c381
f1acdf9
7eb8442
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -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.", | ||||||
|
||||||
| "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
AI
May 1, 2026
There was a problem hiding this comment.
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.
| "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)." |
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -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 | ||||||||||||||
|
|
@@ -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:** | ||||||||||||||
|
|
@@ -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
|
||||||||||||||
| - [ ] Every indicator tagged with its active horizons (7d / 30d / 90d / 12m / term-end / EP-election) | ||||||||||||||
|
||||||||||||||
| - [ ] 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) |
There was a problem hiding this comment.
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 §0defines 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.