portfolio-optimiser/docs/rapport/2026-07-04-program-statusrapport-ingest.md

130 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Programstatusrapport — ingest-laget (I1I7)
**Dato:** 2026-07-04
**Program:** ingest-konnektorer for portfolio-optimiser, avsluttende steg (I7).
**Omfang:** begge referanseimplementasjonene — MAF (dette repoet) og Claude Agent
SDK-søsknet (D7, [`portfolio-optimiser-claude`](https://git.fromaitochitta.com/ktg/portfolio-optimiser-claude),
sitert *read-only*).
**Bindende føring:** ærlighets-regelen — [målbilde §0 + §11 «Stack-mapping (ærlighets-avgrenset)»](../plan/2026-07-03-maalbilde-ingest-lag.md).
Rapporten skiller **kapabilitet-implementert** fra **kjørt-mot-live**, og holder to «live»-akser
adskilt: live *datakilde* vs. live *modellkjøring*.
---
## 1. Executive-sammendrag
Ingest-laget lar rammeverket bygge en per-prosjekt OKF-bundle fra en ekstern kilde via ett
deterministisk, JSON-Schema-validert manifest som kjører *før* den agentiske loopen. Laget er nå
**implementert og verifisert på begge stacker** for de to transport-familiene som ble besluttet
bygget — file/CSV og SQL — med **bit-identiske golden-uttrekk** fra den delte spec-en. En tredje
familie, HTTP, er **demonstrert som extension point på MAF-siden** mot en lokal mock; MCP er
dokumentert som en krok (`create_sdk_mcp_server` på D7), ikke en shipped connector.
Hva som **gjenstår** er bevisst avgrenset og oppgis eksplisitt i §2:
- **Ingen bundle er materialisert fra en live datakilde.** Alle uttrekk er øvd mot committede
fixtures/golden. «Første live kilde»-gaten er ukonsumert på begge stacker.
- **Live modellkjøring** (ekte LLM) er **ikke** kjørt på MAF-siden — det ende-til-ende-beviset der
er en offline, skriptet simulering som viser plumbing + deterministisk ryggrad, ikke levende
LLM-atferd. På D7 er programmets **ene** budsjetterte live modellkjøring utført og validert
(S10, 2026-07-03).
Rapporten inneholder ingen salgspåstander; hver påstand i §2 er sporet til en kjørbar kommando
eller en fil-/commit-sitering i verifiseringsloggen (§3).
---
## 2. Bevist / ikke bevist
### 2.1 Per connector-familie
| Familie | Status | Bevis-grunnlag |
|---------|--------|----------------|
| **file/CSV** (I2/I3) | Bygget + bevist på **begge** stacker | Golden-uttrekk bit-identisk mot committet fixture; connector + load-bearing-tester (MAF `f331cb4`, `994f5be`; suite grønn) |
| **SQL** (I4/I5) | Bygget + bevist på **begge** stacker | SQLite-connector + typet celle-rendring + golden (MAF `d7e5f2f`, `4f45fe6`); D7-speil i søsknet |
| **HTTP** (I6) | Demonstrert **extension point, MAF-only**, mot lokal mock | `read_http`-connector bak per-kjøring `allow_network`-grant + injiserbar transport-søm; golden mot committet payload (MAF `58dda46`, `bbdcd62`, `24e73f4`). Ikke shipped på D7. |
| **MCP** | **Dokumentert krok**, ikke wiret i kjørestien | Spec §4 dokumenterer MCP som utvidelse av http-familien; demonstrert via `build_mcp_server` (MAF), `create_sdk_mcp_server` (D7, verifisert mot offisiell SDK-doc). Ingen D7-HTTP/MCP-økt planlagt. |
**Ikke bevist / bevisst ikke bygget:** en shipped D7 nettverks-/HTTP-connector; MCP wiret inn i
optimiser-kjørestien (Non-Goal — in-process `FunctionTool` er default-sømmen).
### 2.2 To-akset «live»-distinksjon (ærlighets-kjernen)
Ordet «live» brukes om to uavhengige ting. De må ikke blandes.
**(a) Live data-KILDE** — å materialisere en bundle fra et ekte, kjørende endepunkt (HTTP mot en
reell tjeneste, en produksjons-database e.l.):
> **ALDRI gjort — på ingen av stackene.** Ingen bundle er materialisert fra en live kilde. Alle
> connector-uttrekk (CSV, SQL, HTTP) er øvd mot **committede fixtures/golden**. HTTP-transporten er
> alltid injisert med en canned `get` over fixture-payloads, så suiten kjører offline mot en lokal
> mock — ingen live kilde, ingen credentials. «Første live kilde»-gaten er **ukonsumert**.
**(b) Live MODELL-kjøring** — å drive den agentiske loopen mot en ekte LLM (Azure/Foundry eller
Ollama), i motsetning til en skriptet stand-in:
> - **MAF-siden: IKKE kjørt mot ekte modell.** Ende-til-ende-beviset her er en **offline, skriptet
> simulering** (`portfolio_optimiser.simulation`, skriptet chat-klient). Den beviser plumbing,
> den deterministiske ryggraden og at lærings-sløyfa lukkes — **ikke** at en levende LLM ville
> produsert forslaget/dommen. Kostnadsdrevet valg (privat API for kostbart for løpende kjøring).
> - **D7-siden: DONE én gang.** Programmets **ene** budsjetterte live modellkjøring (S10) er
> **utført og validert 2026-07-03** mot micro-bundelen; de fire artefaktene er committet som fast
> referanse-output under `runs/s10/`. Sitert read-only fra D7s egen README (linje 1314, 121133).
Den genuine modell-atferd-sammenligningen mellom stackene lever altså på D7-siden (én minimal
API-kjøring), ikke på MAF-siden. Se den eksisterende
[stack-sammenligningsrapporten](2026-07-03-sammenligningsrapport.md) for detaljert stack-for-stack
sammenstilling (dupliseres ikke her).
---
## 3. Verifiseringslogg
Hver påstand → kjørbar kommando (med faktisk fanget exit-kode/output) *eller* fil-/commit-sitering.
Kommandoene ble kjørt 2026-07-04 fra repo-rot (MAF) og fra D7-repoet read-only.
| # | Påstand | Verifikasjon | Faktisk resultat |
|---|---------|--------------|------------------|
| 1 | MAF-suiten er grønn offline (uten nøkkel/nettverk) | `uv run pytest -q` | **exit 0**`237 passed, 4 skipped, 2 warnings in 22.23s` |
| 2 | MAF-kildekoden er lint-ren | `uv run ruff check .` | **exit 0**`All checks passed!` |
| 3 | MAF-kildekoden er type-ren | `uv run mypy src` | **exit 0**`Success: no issues found in 19 source files` |
| 4 | D7-søsknets suite er grønn offline | `cd …/portfolio-optimiser-claude && uv run pytest -q` (read-only, ingen commit) | **exit 0**`265 passed in 1.58s` |
| 5 | Stale README-status er fjernet | `grep -c "not yet implemented" README.md` | **0** |
| 6 | README oppgir HTTP som MAF-only demo mot lokal mock | `grep -c "local mock" README.md` | **1** (≥1) |
| 7 | Ingen påstand om at D7 har HTTP/MCP-*støtte* som bygget | `grep -niE '(d7\|claude).{0,40}(http\|mcp).{0,20}(support\|built)' README.md` | **ingen treff** (exit 1) |
| 8 | `extending.md` skjerper D7-grensa eksplisitt | `grep -c "MAF-only" docs/extending.md` | **1** (≥1) |
| 9 | Ingen påstand om at D7 bygde HTTP/MCP | `grep -niE 'D7.{0,30}(built\|shipped\|implement).{0,20}(http\|mcp)' docs/extending.md` | **ingen treff** (exit 1) |
| 10 | Alle «D7 + http/mcp»-nærhets-treff er MAF-only / krok-peker / forbud | `grep -rniE '(d7\|claude[- ]?sdk).{0,60}(http\|mcp)' README.md docs/ --exclude=2026-07-04-program-statusrapport-ingest.md` + manuell klassifisering ‡ | **9 treff**, **alle** kategori (i) MAF-only, (ii) `create_sdk_mcp_server`-peker eller (iii) plan-prosa som forbyr D7-HTTP; **0** i README |
| 11 | Ingen påstand om live-kilde-integrasjon | `grep -rniE '(live\|produksjon\|production).{0,30}(kilde\|source\|integrasjon\|integration)' README.md docs/rapport/ docs/extending.md --exclude=2026-07-04-program-statusrapport-ingest.md` ‡ | **4 treff**, **alle negasjoner** («no live source», «no network connector and no live-source integration») |
| 12 | D7 kjørte programmets ene live modellkjøring (S10) | Sitering, read-only: D7 `README.md:1314, 121133`, artefakter i `runs/s10/` | «single budgeted live model run has been executed and validated … executed 2026-07-03» |
| 13 | file/CSV + SQL bevist på begge stacker (bit-identisk golden) | Commit-sitering MAF: `f331cb4`, `994f5be` (CSV/I2); `d7e5f2f`, `4f45fe6` (SQL/I4). Ingest-serie `e4ee8bd..696f19a` | golden-tester grønne i #1 |
| 14 | HTTP demonstrert bak per-kjøring nettverks-grant | Commit-sitering MAF: `58dda46`, `bbdcd62`, `24e73f4` (I6); spec §4/§8 | golden-test grønn i #1 |
> **Miljønote (SC6):** `grep` på utviklermaskinen er `ugrep`, som feiler på enkelte ERE-mønstre
> med multibyte-tegn («exceeds complexity limits»). Grep-radene over ble kjørt med system-`/usr/bin/grep`
> (POSIX ERE) for trofast semantikk; et ugrep-krasj (exit 2) er et tooling-problem, ikke en
> innholds-verifikasjon, og ble aldri tolket som PASS eller FAIL.
> **Selv-referanse-note (‡, rad #10/#11):** denne rapportfila siterer selve grep-mønstrene i
> verifiseringsloggen over, så uten `--exclude=2026-07-04-program-statusrapport-ingest.md` teller
> kommandoen sine egne mønster-strenger — den måler seg selv (15/12 treff i stedet for 9/4).
> Eksklusjonen scoper målingen til filene som *karakteriseres* (README + `docs/`), ikke rapporten som
> beskriver dem; da reproduserer 9 og 4 stabilt mot committet tre.
---
## 4. Konklusjon
Ingest-programmet (I1I7) er levert innenfor sitt avgrensede omfang: file/CSV og SQL bygget og
bit-identisk bevist på begge stacker, HTTP demonstrert som MAF-only extension point, og
dokumentasjonen (README + `extending.md`) er brakt i samsvar med hva koden faktisk gjør. De to
gjenstående gatene — **første live datakilde** (begge stacker) og **live modellkjøring på
MAF-siden** — er eksplisitt merket som ikke bevist, ikke skjult. Programmet lukkes uten
overselgende artefakt.
### Referanser
- [Målbilde — ingest-laget](../plan/2026-07-03-maalbilde-ingest-lag.md) (§0/§11, ærlighets-regel; frosset 2026-07-03)
- [Sesjonsplan — ingest](../plan/2026-07-03-sesjonsplan-ingest.md) (§I7)
- [Stack-sammenligningsrapport](2026-07-03-sammenligningsrapport.md) (MAF vs. D7, 2026-07-03)
- [README](../../README.md) · [extending.md](../extending.md) (oppdatert i I7)