diff --git a/.claude/projects/2026-07-04-i7-program-avslutning/brief.md b/.claude/projects/2026-07-04-i7-program-avslutning/brief.md
new file mode 100644
index 0000000..10f8b8a
--- /dev/null
+++ b/.claude/projects/2026-07-04-i7-program-avslutning/brief.md
@@ -0,0 +1,123 @@
+---
+type: trekbrief
+brief_version: "2.2"
+created: 2026-07-04
+task: "I7 — program-avslutning ingest: README/extending.md-finpuss (MAF) + felles norsk statusrapport"
+slug: i7-program-avslutning
+project_dir: .claude/projects/2026-07-04-i7-program-avslutning/
+research_topics: 0
+research_status: skipped
+auto_research: false
+interview_turns: 3
+source: interview
+framing: preserve
+phase_signals:
+ - phase: research
+ effort: high
+ model: opus
+ - phase: plan
+ effort: high
+ model: opus
+ - phase: execute
+ effort: high
+ model: opus
+ - phase: review
+ effort: high
+ model: opus
+---
+
+# Task: I7 — program-avslutning (ingest): dokumentasjon + felles statusrapport
+
+> Generated by `/trekbrief` on 2026-07-04.
+> This brief is the contract between requirements and planning. `/trekplan`
+> reads it to produce the implementation plan. Every decision in the plan must
+> trace back to content in this brief.
+
+## TL;DR
+
+- I7 lukker ingest-programmet: finpuss `README.md` + `docs/extending.md` (MAF-stacken) og skriv **én felles norsk statusrapport** (bevist/ikke-bevist + verifiseringslogg) som dekker begge stacker.
+- **Framing: preserve** — planlagt siste steg (§I7) i den frosne, godkjente ingest-sesjonsplanen; ingen scope-endring.
+- Bindende: **ærlighets-regelen** (målbilde §11 «Stack-mapping (ærlighets-avgrenset)» + §0) — dokumentér KUN det koden gjør. D7-omtale avgrenset til CSV+SQL; HTTP/MCP kun pekere; ingen live-kilde-påstand.
+- Docs-økt: ingen produksjonskode, ingen D7-repo-commit (polyrepo-grense), null modell-spend.
+
+## Intent
+
+Ingest-programmet (I1–I6) bygde og load-bearing-testet ingest-laget på tvers av begge stacker: den framework-nøytrale spec-en i commons, CSV/filkatalog og SQL på begge repo (bit-identiske golden-uttrekk fra delt spec), og HTTP/MCP demonstrert som extension point MAF-only mot lokal mock. I7 er det planlagte avslutningssteget: gjøre dokumentasjonen sannferdig og komplett, og produsere én ærlig norsk statusrapport av hva programmet faktisk beviste — og hva det ikke beviste. Motivasjonen er tillit: rammeverket publiseres på Forgejo for alle som har MAF, og en artefakt som overselger (antyder at D7 har HTTP/MCP-støtte, eller at en live-kilde er integrert) eroderer tilliten operatøren lever av. Ærlighets-regelen (målbilde §11 «Stack-mapping (ærlighets-avgrenset)» — som eksplisitt sier «HTTP/MCP demonstrert som extension point KUN på MAF-siden» og «Ingen live-kilde forekommer noensinne i programmet»; scope-ærlighet i §0) er den bindende føringen — den skriptede offline-simuleringen beviser rørlegging og deterministisk ryggrad, ikke levende LLM-atferd, og rapporten må si nettopp det.
+
+## Goal
+
+Når I7 er ferdig: (1) `README.md` + `docs/extending.md` i DETTE repoet (MAF-stacken) er finpusset slik at all D7-omtale er strengt avgrenset til det D7 faktisk har (CSV + SQL); HTTP/MCP omtales KUN som MAF-demonstrert extension point / D7-krok-peker, aldri som D7-kapabilitet. (2) Én felles norsk program-statusrapport bor i `docs/rapport/` og dekker BEGGE stacker i hybrid form — kort leder-/executive-sammendrag øverst (for KI-seksjon/ledelse), så en teknisk verifiseringslogg-seksjon under (hver påstand → kommando/kilde), med en eksplisitt «bevist / ikke bevist»-inndeling. (3) Ingen artefakt i repoet påstår mer enn koden gjør. Begge suiter er verifisert offline (MAF grønn; D7 read-only — rødt/ikke-kjørbart rapporteres som «ikke bevist», ikke fikset her).
+
+## Non-Goals
+
+- **Ingen endring i D7-søskenrepoet** (`portfolio-optimiser-claude`) fra denne økta — polyrepo-grense. Søskenets README/`extending.md` gjøres i søskenets EGEN økt, drevet av dets egen STATE. (D7-suiten verifiseres her kun read-only og siteres.)
+- **Ingen egen D7-lokal statusrapport** — operatør valgte «én felles rapport her».
+- **Ingen produksjonskode / ingen TDD** — ren docs-økt (Iron Law gjelder produksjonskode, ikke dokumentasjon).
+- **Ingen spec-/commons-endring** — spec er frossen, PULL-ONLY.
+- **Ingen S12/release** — uavhengig av ingest-programmet, eget klarsignal.
+- **Ingen endring i `okf.py` / `shared/`** — framework-nøytral kjerne forblir urørt.
+- **Ingen påstand om live-kilde-integrasjon eller D7 HTTP/MCP-støtte** noe sted.
+
+## Constraints
+
+- **Språk:** statusrapporten på **norsk** (docs-språkregel: forretnings-/leder-docs norsk); `README.md` forblir **engelsk** (utvikler-vendt).
+- **Ærlighets-regel (målbilde §11 + §0; CLAUDE.md framework-/simulering-invariant):** dokumentér kun det koden gjør; skriptet offline-sim beviser plumbing, ikke levende LLM-atferd.
+- **Commons PULL-ONLY** — aldri subtree push.
+- **Offline, null modell-spend** (D6 kostnadsdisiplin) — ingen nettverk, ingen nøkkel.
+- **Modell:** Opus 4.8 xhigh alle faser/subagenter; **aldri Fable 5** (stående global regel).
+
+## Preferences
+
+- Named markdown-lenker til lokale filer (`[navn](file:///absolutt/sti)`) per CLAUDE.md communication-pattern.
+- Referér eksisterende docs (`docs/rapport/2026-07-03-sammenligningsrapport.md`, målbilde, sesjonsplan) framfor å duplisere innhold.
+- Rapporten skal tåle å bli lest av noen som ikke kjenner koden — men uten salgsspråk (KTG-verifiseringsplikt: ingen «fullt ut», «uten unntak»).
+
+## Non-Functional Requirements
+
+- MAF-repoets suite grønn offline: `uv run pytest` → 0 failed, uten nøkkel/nettverk (baseline: 237 passed / 4 skipped).
+- `uv run ruff check .` og `uv run mypy src` exit 0 i MAF-repoet.
+- D7-søskensuiten grønn offline — verifisert read-only + sitert (ingen commit der).
+
+## Success Criteria
+
+- **SC1 — Ingen overselgende artefakt (grep-gate):** `grep -rniE '(d7|claude[- ]?sdk).{0,60}(http|mcp)' README.md docs/` gjennomgått manuelt → hvert treff er enten (a) eksplisitt «MAF-only / demonstrert extension point», eller (b) en ren D7-krok-peker (`create_sdk_mcp_server`) — INGEN treff påstår D7 HTTP/MCP-*støtte*. I tillegg: `grep -rniE '(live|produksjon|production).{0,30}(kilde|source|integrasjon|integration)' README.md docs/rapport/ docs/extending.md` → ingen påstand om live-kilde-integrasjon.
+- **SC2 — Statusrapport eksisterer og har rett form:** `docs/rapport/2026-07-04-program-statusrapport-ingest.md` finnes og inneholder (a) executive-sammendrag, (b) eksplisitt «bevist / ikke bevist»-seksjon, (c) verifiseringslogg-seksjon.
+- **SC3 — Hver påstand er sporet:** hver rad i rapportens verifiseringslogg har enten en kjørbar kommando ELLER en fil-/commit-sitering (ingen ubelagte påstander). Sjekkes ved gjennomlesning: 0 påstander uten kilde.
+- **SC4 — MAF-suite grønn offline:** `uv run pytest` exit 0, 0 failed (uten nøkkel/nettverk).
+- **SC5 — Lint/type rent:** `uv run ruff check .` exit 0 og `uv run mypy src` exit 0.
+- **SC6 — D7-suite grønn offline (read-only, sitert):** i `/Users/ktg/repos/portfolio-optimiser-claude`: `uv run pytest` exit 0 offline, forutsatt repoet er `uv sync`-et — ellers skiller rapporten eksplisitt «suite rød» fra «kunne ikke kjøres offline». Kjørt read-only og sitert i rapporten; INGEN commit i søsknet. Hvis rød/ikke-kjørbar: flagges som «ikke bevist», ikke fikset her.
+
+## Research Plan
+
+No external research needed — the codebase and this brief contain sufficient context for planning. (Operatør bekreftet: alt kildemateriale er internt — kode, git-historikk, eksisterende docs. Ingen nye teknologi-/bibliotekvalg.)
+
+## Open Questions / Assumptions
+
+- **[ASSUMPTION]** D7-søskenrepoets suite er for tiden grønn offline. I7 verifiserer dette read-only og siterer det; hvis rødt, rapporteres det som «ikke bevist» framfor å fikses her (søsknets egen økt eier fikser). SC6 dekker dette.
+- **[ASSUMPTION]** Eksisterende `sammenligningsrapport.md` (2026-07-03) dekker stack-sammenligningen; den nye I7-rapporten er program-avslutnings-rapporten (bevist/ikke-bevist på tvers av I1–I7) som REFERERER, ikke duplisererer, sammenligningsrapporten.
+- **[ASSUMPTION]** README/`extending.md` trenger «finpuss», ikke omskriving — I6 la allerede http-familien + D7-peker i `extending.md`. Planfasen bekrefter faktisk delta ved å lese begge filene først.
+
+## Prior Attempts
+
+None — fresh task. I7 er det planlagte siste steget i ingest-sesjonsplanen; I1–I6 er levert (se STATE.md-loggen og git-historikk).
+
+## Metadata
+
+- **Created:** 2026-07-04
+- **Interview turns:** 3
+- **Auto-research opted in:** no
+- **Source:** trekbrief interview
+
+---
+
+## How to continue
+
+Manual (default):
+
+```bash
+# No research topics — go straight to planning:
+/trekplan --project .claude/projects/2026-07-04-i7-program-avslutning
+
+# Then execute:
+/trekexecute --project .claude/projects/2026-07-04-i7-program-avslutning
+```
diff --git a/.claude/projects/2026-07-04-i7-program-avslutning/plan.md b/.claude/projects/2026-07-04-i7-program-avslutning/plan.md
new file mode 100644
index 0000000..32ee52d
--- /dev/null
+++ b/.claude/projects/2026-07-04-i7-program-avslutning/plan.md
@@ -0,0 +1,286 @@
+# I7 — Program-avslutning (ingest): dokumentasjon + felles statusrapport
+
+> **Plan quality: APPROVE_WITH_NOTES** — plan-critic ga REVISE (73/C) pre-revisjon på 1 blocker
+> (README real-source-overclaim); blocker + alle 2 major/4 minor adressert (se Revisions). Scope-
+> guardian ALIGNED (0 creep). Post-revisjon utførbar.
+>
+> Generated by trekplan v5.9.1 on 2026-07-04 — `plan_version: 1.7`
+
+## Context
+
+Ingest-programmet (I1–I6) er levert: den framework-nøytrale spec-en i commons, file/CSV (I2/I3)
+og SQL (I4/I5) på begge stacker med bit-identiske golden-uttrekk, og HTTP demonstrert som
+extension point MAF-only mot lokal mock (I6). I7 er det planlagte avslutningssteget (sesjonsplan
+§I7): gjøre dokumentasjonen sannferdig og lukke programmet med én ærlig norsk statusrapport av
+hva som er bevist — og ikke bevist. Motivasjonen er tillit (brief Intent): rammeverket publiseres
+på Forgejo for alle som har MAF, og en artefakt som overselger eroderer tilliten. Bindende føring
+er ærlighets-regelen (målbilde §11 «Stack-mapping (ærlighets-avgrenset)» + §0). Ground-truth-
+utforsking avdekket at README-status er STALE («ingest specified but not yet implemented») og at
+en presis to-akset «live»-distinksjon må inn i rapporten (live data-kilde vs live modell-kjøring).
+
+## Architecture Diagram
+
+```mermaid
+graph TD
+ subgraph "I7 — docs-only, MAF-repo + felles rapport"
+ R[README.md
fiks stale ingest-status] -->|honest status| OUT[Ingen overselgende artefakt]
+ E[docs/extending.md
skjerp D7-grense: CSV+SQL bygget,
HTTP/MCP MAF-only + peker] -->|SC1 grep-gate| OUT
+ REP[docs/rapport/2026-07-04-
program-statusrapport-ingest.md
NY: exec-sammendrag + bevist/ikke-bevist
+ verifiseringslogg] -->|SC2/SC3| OUT
+ EV[Evidens read-only:
pytest/ruff/mypy MAF · D7-suite · D7 S10-live-run] -.cites.-> REP
+ end
+ style REP fill:#2d5,color:#000
+ style EV fill:#eee,color:#000
+```
+
+## Codebase Analysis
+
+- **Tech stack:** Python ≥3.10, MAF, `uv`, pytest/ruff/mypy. Docs i markdown.
+- **Key patterns:** ærlighets-avgrenset dokumentasjon (målbilde §0/§11); named markdown-lenker;
+ norsk for leder-/forretningsdocs, engelsk for README/utviklerdocs (docs-språkregel).
+- **Relevant files (verifisert under utforsking):**
+ - `README.md` — Status-blokka (linje 9–13) sier «The ingest layer (real data sources) is
+ specified but **not yet implemented**»; linje 90–92 sier «will materialize» (futurum). Begge
+ STALE etter I1–I6.
+ - `docs/extending.md` — har allerede http-familien (linje 55–101) + D7-MCP-peker
+ (`create_sdk_mcp_server`, linje 92–101) fra I6. D7-grensa kan skjerpes (eksplisitt «CSV+SQL
+ bygget; HTTP/MCP MAF-only demo, ikke shipped D7-connector»).
+ - `docs/rapport/2026-07-03-sammenligningsrapport.md` — eksisterende stack-sammenligning
+ (refereres, dupliseres ikke).
+ - `docs/plan/2026-07-03-sesjonsplan-ingest.md` (§I7) + `docs/plan/2026-07-03-maalbilde-ingest-lag.md`
+ (§0/§11) — kilder for scope + ærlighets-regel.
+- **Reusable code:** ingen kode — docs-økt. Gjenbruker eksisterende rapport-mønster
+ (sammenligningsrapporten) + verifiseringslogg-formen fra KTG-verifiseringsplikten.
+- **External tech (researched):** ingen (brief: 0 research-topics).
+- **Recent git activity:** I6 lukket på `72cb15f` (review WARN akseptert). I1–I6-commits
+ `e4ee8bd..696f19a` (CSV/SQL/HTTP + golden + load-bearing). Ren tree ved oppstart.
+
+### D7-søsken-fakta (read-only, grunner rapporten — INGEN skriving/commit der)
+
+- `/Users/ktg/repos/portfolio-optimiser-claude/README.md` sier: **programmets ene budsjetterte
+ live *modell*-kjøring (S10) er utført + validert 2026-07-03** (linje 13, 76, 121–125), og at
+ http-kilden er «an optional extension point, **not built in** [...] this repo ships no network
+ connector and no live-source integration» (linje 114–118). D7 har CSV+SQL-connectorer (I3/I5).
+- D7 har **ingen `docs/rapport/`-mappe** → bekrefter «én felles rapport her» (brief-valg).
+
+## Implementation Plan
+
+Docs-økt: ingen tester (`Test first` utelatt), `Verify` er konkrete grep/kjør-kommandoer. TDD
+Iron Law gjelder produksjonskode, ikke dokumentasjon (brief Non-Goal).
+
+### Step 1: Fiks stale ingest-status i README (specified→implementert, uten overclaim)
+
+- **Files:** `README.md`
+- **Changes:** Oppdater Status-blokka (linje 9–13): erstatt «The ingest layer (real data sources)
+ is specified but not yet implemented» med en formulering som skiller **kapabilitet-implementert**
+ fra **kjørt-mot-ekte-kilde**: ingest-laget er implementert — file/CSV og SQL på begge stacker
+ (bit-identiske golden-uttrekk fra delt spec), HTTP som **MAF-only demonstrert extension point mot
+ en lokal mock** — og **kun øvd mot committede fixtures/golden; ingen bundle er materialisert fra
+ en live-kilde**. Behold «no live-model run yet» for MAF-siden (fortsatt sant — offline skriptet
+ sim). **(BLOCKER-fiks, plan-critic):** linje 90–92 — IKKE endre «will materialize» til et bart
+ «materializes … today» (det ville motsi «hand-curated today» og overselge: bundelene er fortsatt
+ hand-curated, connectorene har kun kjørt mot fixtures). Skriv i stedet en reconciled, ærlig
+ setning: de medfølgende eksemplene er hand-curated; ingest-laget som materialiserer en bundle fra
+ en kilde (file/CSV + SQL, HTTP som MAF-only demonstrert extension point) via et deterministisk,
+ schema-validert manifest FØR loopen er **implementert og øvd mot committede fixtures — ingen
+ bundle er ennå materialisert fra en live-kilde**. Ikke rør Karpathy/OKF-seksjonene. Ingen påstand
+ om at D7 har HTTP/MCP. Sibling-presiseringen «file/CSV and SQL mirror the MAF stack» er valgfri —
+ ta den KUN med hvis den ikke trigger Step 1s egen `(claude).{0,40}(http|mcp)`-grep (den gjør den
+ ikke: ingen http/mcp-nærhet).
+- **Reuses:** eksisterende Status-blockquote-stil i `README.md`; ærlighets-formuleringen fra
+ `docs/extending.md` linje 88–90 («local mock — no live source»).
+- **Verify:** `grep -c "not yet implemented" README.md` → `0`; `grep -c "local mock" README.md`
+ → `≥1`; `grep -niE '(d7|claude).{0,40}(http|mcp).{0,20}(support|støtte|built)' README.md` →
+ ingen treff som påstår D7 HTTP/MCP-støtte. **Honesty-gate (major, plan-critic):**
+ `grep -niE '(materializ|materialiser)[^.]{0,40}(real|live|ekte)[^.]{0,20}(source|kilde)' README.md`
+ → ingen treff som påstår materialisering fra ekte/live kilde som gjort; gjennomlesning bekrefter
+ «no bundle … materialized from a live source»-klausulen er til stede (kapabilitet ≠ live-bruk).
+- **On failure:** revert — `git checkout -- README.md`
+- **Checkpoint:** `git commit -m "docs(i7): refresh stale README ingest status — implemented (CSV+SQL both stacks, HTTP MAF-only demo)"`
+- **Manifest:**
+ ```yaml
+ manifest:
+ expected_paths:
+ - README.md
+ min_file_count: 1
+ commit_message_pattern: "^docs\\(i7\\): refresh stale README ingest status"
+ bash_syntax_check: []
+ forbidden_paths:
+ - docs/extending.md
+ must_contain:
+ - path: README.md
+ pattern: "local mock"
+ ```
+
+### Step 2: Skjerp D7-grensa i extending.md (CSV+SQL bygget; HTTP/MCP MAF-only + peker)
+
+- **Files:** `docs/extending.md`
+- **Changes:** I «D7 sibling hook»-underseksjonen (linje 92–101), gjør grensa eksplisitt per
+ målbilde §11: D7 bygde **file/CSV og SQL**-connectorene (speiler I3/I5); **HTTP/MCP er
+ demonstrert KUN på MAF-siden** mot lokal mock, og `create_sdk_mcp_server` er en **dokumentert
+ krok** en deployer ville brukt — **ikke en shipped D7-connector**; ingen D7-HTTP-økt planlagt.
+ Legg til «MAF-only» eksplisitt der HTTP/MCP nevnes for D7. Ikke endre http-manifest-avsnittene
+ (linje 55–90) — de er korrekte fra I6.
+- **Reuses:** eksisterende D7-hook-avsnitt (linje 92–101); målbilde §11-formuleringen verbatim
+ som kilde.
+- **Verify:** `grep -c "MAF-only" docs/extending.md` → `≥1`;
+ `grep -niE 'D7.{0,30}(built|shipped|implement).{0,20}(http|mcp)' docs/extending.md` → ingen
+ treff som påstår D7 bygde HTTP/MCP.
+- **On failure:** revert — `git checkout -- docs/extending.md`
+- **Checkpoint:** `git commit -m "docs(i7): sharpen D7 boundary in extending.md — CSV+SQL built, HTTP/MCP MAF-only"`
+- **Manifest:**
+ ```yaml
+ manifest:
+ expected_paths:
+ - docs/extending.md
+ min_file_count: 1
+ commit_message_pattern: "^docs\\(i7\\): sharpen D7 boundary"
+ bash_syntax_check: []
+ forbidden_paths:
+ - README.md
+ must_contain:
+ - path: docs/extending.md
+ pattern: "MAF-only"
+ - path: docs/extending.md
+ pattern: "create_sdk_mcp_server"
+ ```
+
+### Step 3: Skriv felles norsk program-statusrapport (hybrid, verifiseringslogg)
+
+- **Files:** `docs/rapport/2026-07-04-program-statusrapport-ingest.md` (new file)
+- **Changes:** Skriv rapporten på norsk i hybrid form:
+ 1. **Executive-sammendrag** (KI-seksjon/ledelse): hva ble bygget (ingest-lag på begge stacker),
+ hva er bevist, hva gjenstår — kort, uten salgsspråk.
+ 2. **Bevist / ikke bevist** (ærlighets-regel, målbilde §11). MÅ inneholde den **to-aksede
+ «live»-distinksjonen**: (a) **live data-KILDE** (http mot ekte endpoint) — ALDRI gjort,
+ ingen stack; «første live kilde»-gaten ukonsumert. (b) **live MODELL-kjøring** (ekte LLM) —
+ IKKE på MAF (offline skriptet sim beviser plumbing + deterministisk ryggrad, ikke levende
+ LLM-atferd), **DONE én gang på D7 (S10, budsjettert, validert 2026-07-03)**. Per connector:
+ CSV+SQL bevist begge stacker (golden bit-identisk); HTTP MAF-only demo mot mock; MCP kun
+ dokumentert krok.
+ 3. **Verifiseringslogg**: tabell der HVER påstand → kjørbar kommando ELLER fil-/commit-sitering.
+ Kjør og fang faktisk output for: MAF-suite (`uv run pytest`), `uv run ruff check .`,
+ `uv run mypy src`, SC1-grep-gaten, og D7-suite **read-only** i søsknet
+ (`cd /Users/ktg/repos/portfolio-optimiser-claude && uv run pytest`; skill «suite rød» fra
+ «kunne ikke kjøres offline» hvis ikke `uv sync`-et). Siter D7 S10-live-run fra D7s egen
+ README (read-only). Referér `sammenligningsrapport.md` (ikke dupliser).
+ - Ingen salgsspråk (KTG-verifiseringsplikt): unngå «fullt ut», «uten unntak». Named
+ markdown-lenker til lokale filer.
+- **Reuses:** rapport-mønster fra `docs/rapport/2026-07-03-sammenligningsrapport.md`;
+ verifiseringslogg-formen fra KTG-global «Verifiseringsplikt».
+- **Verify:** fila finnes;
+ `grep -c "Verifiseringslogg" docs/rapport/2026-07-04-program-statusrapport-ingest.md` → `≥1`;
+ `grep -ciE "ikke bevist" docs/rapport/2026-07-04-program-statusrapport-ingest.md` → `≥1`;
+ `grep -niE '(live)[^.]{0,40}(kilde|source|integrasjon)' docs/rapport/2026-07-04-program-statusrapport-ingest.md`
+ → hvert treff er negasjon («ingen live-kilde»), ingen påstand om live-kilde-integrasjon;
+ gjennomlesning: 0 rader i verifiseringsloggen uten kommando/kilde. **SC5 per-steg (minor):** kjør
+ og fang `uv run ruff check .` (exit 0) + `uv run mypy src` (exit 0) her, siter faktiske exit-koder
+ i loggen (ikke bare i ende-til-ende-sjekken).
+- **On failure:** revert — `git checkout -- docs/rapport/2026-07-04-program-statusrapport-ingest.md` (slett fila hvis untracked).
+ **Circuit breaker (minor, plan-critic):** hvis MAF-suiten (SC4) er RØD ved evidens-innsamling —
+ STOPP og eskaler; skriv ALDRI en rapport som påstår «grønn offline» over en rød suite. (D7 rød/
+ ikke-kjørbar er derimot forventet-håndtert: rapporteres som «ikke bevist» per SC6, ikke en stopp.)
+- **Checkpoint:** `git commit -m "docs(i7): program status report — bevist/ikke-bevist + verifiseringslogg (I7)"`
+- **Manifest:**
+ ```yaml
+ manifest:
+ expected_paths:
+ - docs/rapport/2026-07-04-program-statusrapport-ingest.md
+ min_file_count: 1
+ commit_message_pattern: "^docs\\(i7\\): program status report"
+ bash_syntax_check: []
+ forbidden_paths:
+ - README.md
+ - docs/extending.md
+ - src/portfolio_optimiser/okf.py
+ must_contain:
+ - path: docs/rapport/2026-07-04-program-statusrapport-ingest.md
+ pattern: "Verifiseringslogg"
+ - path: docs/rapport/2026-07-04-program-statusrapport-ingest.md
+ pattern: "S10"
+ ```
+
+## Alternatives Considered
+
+| Approach | Pros | Cons | Why rejected |
+|----------|------|------|--------------|
+| Full 7-agent exploration-swarm | Prosess-symmetri | Analyserer Python-arkitektur irrelevant for docs; token-sløsing | /trekplan hard rule «Adaptive/Honesty» — docs-økt, målrettet utforsking i stedet |
+| Egen D7-lokal rapport + MAF-rapport | Polyrepo-symmetri | Dupliserer «bevist»-narrativ, tråding mellom to | Operatør valgte «én felles rapport her» (brief) |
+| Slå README+extending sammen til én commit | Færre commits | Blander to distinkte finpuss; svakere headless-revert | To steg = to rene reverts + tydeligere manifest-gate |
+| Skriv rapport FØR docs-fiks | — | Rapporten ville sitert ustabile/stale docs | Rapport sist (Step 3): siterer ferdig-finpusset README/extending |
+
+## Test Strategy
+
+- **Framework:** ingen nye tester — docs-økt. Eksisterende suite er regresjonsvernet.
+- **Existing patterns:** load-bearing-tester (I1–I6) forblir grønne; I7 rører ikke `src/`,
+ `okf.py` eller `shared/`.
+- **New tests in this plan:** 0. Verifikasjon er grep-gater + suite-grønn-sjekk (brief SC1–SC6).
+- **Manuell verifisering:** SC1/SC3 har en menneskelig klassifiseringssteg (docs-prosa) med
+ bundet objektiv proxy (grep + hver logg-rad har kilde) — akseptert av brief-reviewer.
+
+## Risks and Mitigations
+
+| Priority | Risk | Location | Impact | Mitigation |
+|----------|------|----------|--------|------------|
+| Medium | D7-suite ikke `uv sync`-et → pytest feiler av miljøgrunn | søsken-repo | «D7 rød» feilrapporteres | SC6: skill «rød» fra «kunne ikke kjøres offline» eksplisitt i rapporten |
+| Medium | Conflate live-kilde vs live-modell-kjøring | rapport §bevist | Ærlighets-brudd (over- eller under-claim) | Eksplisitt to-akset distinksjon påkrevd i Step 3; D7 S10 sitert fra D7-README |
+| Low | Utilsiktet endring i søsken-repo | D7 | Polyrepo-grensebrudd | Hard rule: D7 er READ-ONLY; ingen commit/write der; forbidden i scope-fence |
+| Low | README-edit rører OKF/Karpathy-prosa | README.md | Scope-drift | Step 1 Changes avgrenser eksakt til Status-blokk + linje 90–92 |
+| Low | Premiss «237/4» sitert uverifisert | rapport | Feil tall i logg | Step 3 kjører `uv run pytest` og fanger FAKTISK output (premiss-verifisering) |
+
+## Assumptions
+
+| # | Assumption | Why unverifiable | Impact if wrong |
+|---|-----------|-----------------|-----------------|
+| 1 | D7-suiten er grønn offline (uv-synced) | Ikke kjørt ennå (execute-tid) | SC6 rapporterer «ikke bevist» framfor å fikse — dekket |
+| 2 | Sammenligningsrapporten dekker stack-sammenligning | Antatt fra tittel/størrelse | Rapport må evt. si mer selv; leses i execute før referanse |
+| 3 | README/extending trenger finpuss, ikke omskriving | Bekreftet: I6 la http+D7-peker | Ingen — begge filer lest, delta bekreftet |
+
+## Verification
+
+*Ende-til-ende integrasjonssjekker på tvers av steg (per-steg manifest kjøres av trekexecute).*
+
+- [ ] `grep -c "not yet implemented" README.md` → `0` (SC1: stale-status fjernet)
+- [ ] **SC1-grep (a), briefens fulle scope** `grep -rniE '(d7|claude[- ]?sdk).{0,60}(http|mcp)' README.md docs/` → manuell klassifisering: HVERT treff er enten (i) eksplisitt «MAF-only / demonstrert extension point», (ii) ren D7-krok-peker (`create_sdk_mcp_server`), eller (iii) plan-/målbilde-prosa som FORBYR/negerer D7-HTTP (§11, sesjonsplan) — INGEN treff påstår D7 HTTP/MCP-*støtte* som bygget
+- [ ] **SC1-grep (b), live-source, briefens verbatim** `grep -rniE '(live|produksjon|production).{0,30}(kilde|source|integrasjon|integration)' README.md docs/rapport/ docs/extending.md` → hvert treff er negasjon/forbud («ingen live-kilde», «no live source», «not built in»), INGEN påstand om live-kilde-integrasjon (dekker README + de to ed.-filene, ikke bare rapporten)
+- [ ] `test -f docs/rapport/2026-07-04-program-statusrapport-ingest.md` → fila finnes med exec-sammendrag + «bevist/ikke bevist» + «Verifiseringslogg» (SC2)
+- [ ] Gjennomlesning: 0 rader i verifiseringsloggen uten kjørbar kommando eller fil-/commit-sitering (SC3)
+- [ ] `uv run pytest` → exit 0, 0 failed (uten nøkkel/nettverk) (SC4)
+- [ ] `uv run ruff check .` exit 0 og `uv run mypy src` exit 0 (SC5)
+- [ ] `cd /Users/ktg/repos/portfolio-optimiser-claude && uv run pytest` → exit 0 offline, sitert read-only, INGEN commit der (SC6)
+
+## Estimated Scope
+
+- **Files to modify:** 2 (`README.md`, `docs/extending.md`)
+- **Files to create:** 1 (`docs/rapport/2026-07-04-program-statusrapport-ingest.md`)
+- **Complexity:** low (docs-økt; ingen kode, ingen nye tester; hovedrisiko = ærlighets-presisjon)
+
+## Plan Quality Score
+
+| Dimension | Weight | Score | Notes |
+|-----------|--------|-------|-------|
+| Structural integrity | 0.15 | 92 | 3 steg, ren avhengighet (1,2 → 3), ≤5 så ingen Execution Strategy |
+| Step quality | 0.20 | 90 | Kirurgiske changes, eksakte linjer, manifest per steg |
+| Coverage completeness | 0.20 | 94 | SC1–SC6 alle sporet til steg + Verification |
+| Specification quality | 0.15 | 90 | Konkrete grep/kjør-kommandoer, ingen placeholders |
+| Risk & pre-mortem | 0.15 | 90 | Live-akse-conflate + D7-miljø fanget |
+| Headless readiness | 0.10 | 90 | On failure + Checkpoint per steg |
+| Manifest quality | 0.05 | 88 | Gyldige manifester; innholds-absens dekkes av Verify (grep -c 0) |
+| **Weighted total** | **1.00** | **91** | **Grade: A** |
+
+**Adversarial review:**
+- **Plan critic:** REVISE (pre-revisjon 73/C) — 1 blocker, 2 major, 4 minor. Blocker (README
+ real-source-overclaim) + alle major/minor adressert i Revisions under. Post-revisjon: blocker lukket.
+- **Scope guardian:** ALIGNED — 0 creep, 2 minor (SC1-dekning). Adressert (Rev 3). Polyrepo-grense
+ (D7 read-only) bekreftet respektert.
+
+## Revisions
+
+| # | Finding (severity) | Kilde | Resolution |
+|---|--------------------|-------|------------|
+| 1 | README linje 90–92 «materializes today» overselger real-source, motsier «hand-curated» (**blocker**) | plan-critic | Step 1 Changes omskrevet: skill kapabilitet-implementert fra kjørt-mot-ekte-kilde; reconciled setning «implementert og øvd mot committede fixtures — ingen bundle materialisert fra live-kilde». Ikke bar nåtid. |
+| 2 | Grep-gater dekker ikke live-*bruk*-overclaim-vektoren (**major**) | plan-critic | Step 1 Verify: ny honesty-gate-grep (`materializ…real/live…source` → 0) + gjennomlesnings-sjekk på «no live source»-klausul. |
+| 3 | SC1 narrowet fra briefens `docs/` til 3 filer; live-source-grep manglet i top-level Verification (**major/minor ×3**) | plan-critic + scope-guardian | Verification: begge SC1-grep gjenopprettet verbatim fra brief (hele `docs/`-treet + live-source over README/extending/rapport), med manuell klassifiserings-regel. |
+| 4 | Step 3 Verify ``-placeholder ikke headless-kjørbar (**minor**) | plan-critic | Erstattet med literal sti i alle tre grep. |
+| 5 | Ingen circuit breaker hvis MAF-suite rød ved Step 3 (**minor**) | plan-critic | Step 3 On failure: STOPP+eskaler hvis MAF-suite rød; aldri «grønn»-rapport over rød suite. |
+| 6 | SC5 (ruff/mypy) kun ende-til-ende, ikke per-steg (**minor**) | plan-critic | Step 3 Verify: kjør + siter faktiske exit-koder i loggen. |
+| 7 | Step 1 valgfri sibling-CSV+SQL-claim = scope-nudge (**minor**) | plan-critic | Step 1 Changes: markert valgfri, betinget av at den ikke trigger egen http/mcp-grep. |