horizon-pir-rollforward.md

May 3, 2026 Β· View on GitHub

Hack23 Logo

πŸ” Horizon PIR Roll-Forward Template

πŸ“‹ Supplementary β€” Captures PIR Genealogy Across Long-Horizon Runs
🧭 Quarter / Year / Cycle β€” Never Blocking, Always Recommended

Owner Version Effective Date Classification

πŸ“‹ Document Owner: CEO | πŸ“„ Version: 1.0 | πŸ“… Last Updated: 2026-05-01 (UTC) 🏒 Owner: Hack23 AB (Org.nr 559534-7807) | 🏷️ Classification: Public

πŸ“Œ Template instructions: Produce for news-quarter-ahead, news-year-ahead, news-election-cycle runs whenever an immediate predecessor exists. Save as analysis/daily/${ARTICLE_DATE}/${DOC_TYPE}/horizon-pir-rollforward.md. Supplementary β€” never blocking on its own; if absent the workflow MUST add a <!-- horizon-pir-rollforward: skipped β€” <reason> --> comment in methodology-reflection.md.

✨ What to produce: A genealogical record of every Priority Intelligence Requirement (PIR) carried forward from the predecessor run, plus every PIR newly created in this run, plus every PIR archived (resolved or obsoleted). Wired into scripts/roll-forward-pirs.ts.


πŸ“ Template Contract β€” every fill of this template MUST satisfy this row.

SlotValue
Owning methodologyper-artifact-methodologies.md
Owning gate checkSupplementary (long-horizon) β€” see 05-analysis-gate.md
Required inputspredecessor run PIR ledger; roll-forward-pirs.ts
Horizon bandmixed (quarter/year/cycle) (per scripts/horizon-context.ts)
Output familyOperational Supplementary
Aggregation order28 of 30 in canonical order (see scripts/render-lib/aggregator/order.ts)
Reader Intelligence Guiderow generated from horizon-pir-rollforward.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.

πŸ”„ Tradecraft Context

ElementValue
MethodologyPIR roll-forward (intelligence-cycle continuity); replaces inline PIR-roll-forward prose previously scattered through intelligence-assessment.md and methodology-reflection.md
Primary inputPredecessor pir-status.json (most recent same-type folder) + current run's pir-status.json
OwnerWorkflow author + scripts/roll-forward-pirs.ts
TriggerLong-horizon workflow with immediate predecessor (within lookbackDays per registry)
AudienceInternal continuity; auditors verifying analytic discipline

1 β€” Predecessor Manifest

Predecessor folder: analysis/daily/<YYYY-MM-DD>/<subfolder>/
Predecessor pir-status.json: <SHA-256 of file content>
Days since predecessor: <NN>

If no predecessor exists, this section reads:

First long-horizon run for this subfolder type. PIR genealogy starts at this run.

2 β€” PIR Genealogy Table

PIR IDFirst seenStatus (this run)OriginSuccessorNotes
PIR-1-coalition-stability2024-09-13activeinheritedβ€”Continued from predecessor, evidence updated
PIR-7-democratic-norms2023-04-12activeinherited (cycle-spanning)β€”Marked inheritsCycle: true
PIR-23-pension-reform2026-05-01newthis runβ€”Created in response to BP 2027 leak
PIR-15-energy-policy2024-12-15archivedinheritedPIR-15bResolved by EnergiΓΆverenskommelsen 2.0
………………

Status taxonomy: active | archived | superseded | dormant | provisional.

Origin taxonomy: inherited | inherited (cycle-spanning) | this run | revived.


3 β€” PIR Coverage Map

For each PIR carried forward, indicate which artifacts in this run engage with it:

PIR IDintelligence-assessment.mdforward-indicators.mdscenario-analysis.mdrisk-assessment.mdcycle-trajectory.md (cycle only)
PIR-1-coalition-stabilityβœ…βœ…βœ…βœ…βœ…
PIR-7-democratic-normsβœ…βœ…β€”βœ…βœ…
(one row per active PIR)……………

A PIR not engaged in any artifact is a Pass-2 rewrite trigger (it should either be archived or actively addressed).

PIR genealogy graph

%%{init: {"theme":"dark","themeVariables":{"primaryColor":"#1565C0","primaryTextColor":"#ffffff","lineColor":"#FFBE0B","secondaryColor":"#7B1FA2","tertiaryColor":"#2E7D32","fontFamily":"Inter, Helvetica, Arial, sans-serif"}}}%%
flowchart LR
    PRED["πŸ“‚ Predecessor run<br/>pir-status.json"]:::pred
    THIS["πŸ“‚ This run<br/>pir-status.json"]:::this

    subgraph ACTIVE["🟒 Active (carried forward)"]
        A1["PIR-1 Β· Coalition stability<br/>inherited"]:::active
        A2["PIR-7 Β· Democratic norms<br/>inherited (cycle-spanning)"]:::cycle
    end
    subgraph NEW["🟑 New (this run)"]
        N1["PIR-23 Β· Pension reform<br/>created"]:::new
    end
    subgraph ARCHIVED["⚫ Archived"]
        Z1["PIR-15 Β· Energy policy<br/>resolved β†’ PIR-15b"]:::archived
    end

    PRED --> A1
    PRED --> A2
    PRED --> Z1
    THIS --> A1
    THIS --> A2
    THIS --> N1
    Z1 -.superseded-by.-> N1

    classDef pred fill:#1565C0,color:#ffffff
    classDef this fill:#7B1FA2,color:#ffffff
    classDef active fill:#2E7D32,color:#ffffff,stroke:#FFBE0B,stroke-width:2px
    classDef cycle fill:#00897B,color:#ffffff,stroke:#FFBE0B,stroke-dasharray:4 3
    classDef new fill:#FFBE0B,color:#000000,stroke:#FF006E,stroke-width:2px
    classDef archived fill:#616161,color:#ffffff

Colour coding: 🟦 predecessor run Β· 🟣 this run Β· 🟒 active inherited PIR Β· 🟒-dashed cycle-spanning PIR (inheritsCycle: true, teal #00897B) Β· 🟑 newly-created PIR Β· ⚫ archived PIR. Solid edges encode PIR provenance; dotted edges encode supersession (PIR-X β†’ PIR-X+1). The graph must contain at least one node per row of the genealogy table above.


4 β€” Newly Created PIRs

For each PIR created in this run:

### PIR-NN-<short-name>
- **Created:** <YYYY-MM-DD>
- **Owner artifact:** <e.g. risk-assessment.md>
- **Question:** <single sentence β€” what intelligence question is this PIR designed to answer?>
- **Confidence required to retire:** <HIGH/MEDIUM/LOW + evidence type>
- **Inherits cycle:** true | false (defaults false; only set true if the PIR is constitutional, demographic, or geopolitical in nature)
- **Obsolescence date:** <YYYY-MM-DD or "indefinite β€” cycle-spanning">
- **First evidence:** <dok_id or URL>

5 β€” Archived PIRs

For each PIR archived in this run:

PIR IDArchived reasonSuccessor (if any)Final WEP / confidenceFinal evidence
…resolved / obsoleted / superseded / cycle-rollover………

6 β€” Cycle-Rollover Special Case

When .github/prompts/ext/cycle-rollover.md is active (within Β± 30 days of an election anchor), this template includes an additional section:

### Cycle-Rollover Manifest
- Closing cycle: 2022-2026
- Opening cycle: 2026-2030
- Inherited PIRs (cycle-spanning): <count>
- Archived PIRs (cycle-bounded): <count>
- New PIRs (opening cycle baseline): <count>
- Carry-forward artifacts written to: analysis/cycles/2022-2026/

Outside the Β± 30-day window, this section is omitted.


7 β€” Pass-2 Self-Audit

  • Predecessor manifest populated (or first-run note present)
  • PIR genealogy table covers every PIR in current pir-status.json
  • PIR coverage map indicates which artifacts engage with each PIR
  • Every newly-created PIR has all 7 fields populated
  • Every archived PIR has reason + final WEP
  • Cycle-rollover section present iff within Β± 30 days of an election anchor

8 β€” Filename + Aggregator

Canonical filename horizon-pir-rollforward.md. Aggregator section title: "Horizon PIR Roll-Forward". Loaded only by long-horizon workflows (week / month / quarter / year / cycle aheads).