portfolio-optimiser-claude/docs/2026-07-04-I7-statusrapport.md
Kjell Tore Guttormsen 0c42cebf90 docs(ingest): I7 — programavslutning, D7-docs avgrenset til CSV + SQL
Docs-only program-avslutning for ingest-laget (D7-stacken). Bygget fra
commons-spec + eget repo alene — MAF-koden kun eksistens-bekreftet (I6-gate),
aldri lest/reverse-engineert.

- README: ingest-seksjon (file/CSV + sql/sqlite RO) som post-S10-tillegg;
  testtall 187 -> 265; HTTP/MCP kun peker (D7 har ingen HTTP-konnektor).
- docs/extending.md (ny): hvordan ingest-laget virker + hvordan legge til en
  kildetype; HTTP/MCP som ærlig extension-point-peker (spec §4, MAF I6-demo,
  create_sdk_mcp_server som ubygd vehikkel — brukt ingen steder i src/).
- docs/2026-07-04-I7-brief.md + -statusrapport.md: I7-brief + D7-lokal
  statusrapport m/ verifiseringslogg. Kryss-stack-kriteriet peker til
  MAF-programrapporten.

Ærlighetsregelen (method-spec §1): ingen artefakt påstår HTTP/MCP-støtte i D7
eller live-kilde-integrasjon. Grep-sjekk mot overpåstand ren.

Verifisering: 265 passed uten nøkkel/nettverk · ruff/mypy rene.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R7nuUMUyWB9viiBjz8Bo7R
2026-07-04 20:08:06 +02:00

57 lines
4.2 KiB
Markdown

# I7 — statusrapport (D7): ingest-programmet, D7-stacken
> **Scope:** denne rapporten dekker **D7-stacken alene** (dette repoet). Kryss-stack-
> sluttkriteriet (begge stacker materialiserer identiske golden-uttrekk) eies av
> MAF-programrapporten — se [Kryss-stack](#kryss-stack-eies-av-maf-programrapporten). Dato:
> 2026-07-04. Ingen ny kode i I7 (docs-avslutning).
## Hva D7 har bevist
| # | Påstand | Bevis |
|---|---------|-------|
| 1 | D7 implementerer `file` (CSV) + `sql` (sqlite RO) mot delt spec | `src/…/ingest.py` (`FileSource`, `SqlSource`, diskriminert union); `test_ingest_golden.py`, `test_ingest_sql_golden.py` |
| 2 | Golden-uttrekk er byte-identisk (CSV + SQL) | `examples/ingest-golden-file/`, `examples/ingest-golden-sql/` mot `expected-bundle/` — golden-regresjonstester grønne |
| 3 | Alle sømmer load-bearing (rød ved detach) | `test_ingest_loadbearing.py`, `test_ingest_sql_loadbearing.py`, `test_ingest_spec_loadbearing.py` (provenance, navigerbarhet via UENDRET `okf.py`, verdict-reservasjon, re-ingest-sikkerhet) |
| 4 | `http`-manifest avvises fail-fast (ingen stille aksept) | `test_ingest.py::test_malformed_manifest_is_rejected` (parametriserer `http` OG ukjent diskriminator → `ValidationError`) |
| 5 | Ingest gjør null modellkall / null nettverk | `ingest.py` er ren stdlib (ingen SDK/`requests`-import); hele suiten kjører uten nøkkel/nettverk |
| 6 | Full suite grønn uten nøkkel/nettverk | `uv run pytest -q`**265 passed** |
| 7 | Lint + type rene | `uv run ruff check .` → All checks passed · `uv run mypy src` → no issues (16 filer) |
| 8 | Dokumentasjonen er sannferdig avgrenset (CSV+SQL; HTTP/MCP kun peker) | `README.md` (ingest-seksjon + honesty-note), `docs/extending.md`; grep-sjekk mot overpåstand ren |
## Hva D7 IKKE har (ærlighetsregelen, method-spec §1 / ingest-spec §1)
- **Ingen HTTP-konnektor, ingen MCP-konnektor.** `http` er et OPTIONAL extension point (spec
§1) som D7 bevisst ikke bygger; et `http`-manifest avvises fail-fast (bevis #4).
- **Ingen live-kilde-integrasjon.** Ingest er deterministisk, offline, null egress.
- **`create_sdk_mcp_server`/`@tool` brukes ingen steder i `src/`** — omtales i `docs/extending.md`
kun som det ubygde vehikkelet man *ville* grepet til for en MCP-konnektor.
- **Ingen ny live-atferd utover S10.** Programmets ENE ekte API-kjøring forblir S10 (D6);
ingest la ingenting til på den fronten.
## Verifiseringslogg (hver påstand → kommando/kilde)
| Påstand | Kommando / kilde | Resultat |
|---------|------------------|----------|
| Suite grønn uten nøkkel/nettverk | `uv run pytest -q` | `265 passed in 1.18s` |
| Lint rent | `uv run ruff check .` | `All checks passed!` |
| Type rent | `uv run mypy src` | `Success: no issues found in 16 source files` |
| `http` avvist fail-fast | `tests/test_ingest.py:71-72` (parametrisert `http`+`unknown``ValidationError`) | testbevist |
| Ingest rører ikke SDK/nett | `grep -n "sdk\|claude_agent\|create_sdk" src/…/ingest.py` | ingen treff (ren stdlib) |
| `create_sdk_mcp_server` ubrukt i src | `grep -rn "create_sdk_mcp_server\|@tool" src/` | ingen treff |
| Ingen overpåstand i docs | grep `http\|mcp\|live\|egress` over `README.md` + `docs/extending.md` + briefer | hvert treff = negasjon eller peker; ingen påstand om D7-HTTP/MCP-støtte eller live-kilde |
| MAF I6 landet (I7-gaten) | `git -C /Users/ktg/repos/portfolio-optimiser log --oneline` | `58dda46``696f19a`, review `72cb15f` — kun eksistens bekreftet |
| Golden byte-identisk | `test_ingest_golden.py`, `test_ingest_sql_golden.py` | grønne |
## Kryss-stack (eies av MAF-programrapporten)
Program-sluttkriteriet «begge stacker materialiserer identiske golden-uttrekk fra delt spec
(CSV + SQL)» er en **kryss-stack**-påstand. Den eies av MAF-programrapporten (hovedrepoet),
som ser begge stackene; denne D7-rapporten dupliserer den ikke. D7-siden av kontrakten er
oppfylt: D7 konsumerer den delte spec-en uendret og reproduserer golden-bytene (bevis #1, #2).
HTTP/MCP-extension-pointet er demonstrert **MAF-only** (I6, lokal mock, bak opt-in-flagg);
D7 har det bevisst ikke.
## Utestående (gated på operatør — ikke I7-scope)
- Åpent-speil-synk (`open/…`) av I3+I5+I7-koden — outward-facing operatør-handling.
- LICENSE-valg / S12-release.