Operatørdirektiv 2026-08-18: alt av privat natur skal bort. Dette er klasse 1 fra økt 43-gjennomgangen, utvidet etter en bredere sveip enn de seks linjene som var kjent. FJERNET (11 linjer i 7 filer): - /Users/ktg-stier i tre docs -> relative stier (../portfolio-optimiser-claude, tests/golden/...). Røpet brukernavn OG maskinens repo-layout. De relative formene er dessuten mer brukbare for en ekstern leser. - `Hi there, ktg!` i demo-runbookens SSH-probe -> `<user>!`. - `ktg-plugin-marketplace` -> `plugin-marketplace` i to plandokumenter. - `commons`-remotens `ktg/`-referanse i CLAUDE.md -> "den private namespacen". - git.fromaitochitta.com/ktg/portfolio-optimiser-claude -> .../open/portfolio-optimiser-claude. Den var både privat OG utdatert: søskenet ligger i open/ (verifisert med ls-remote, exit 0). BEHOLDT, MED GRUNN: - LICENSE:3 `Copyright (c) 2026 Kjell Tore Guttormsen` - MIT krever at copyright-erklæringen står. Å fjerne rettighetshaveren ville brutt lisensen, ikke beskyttet noe: dette er forfatterens egen, tilsiktede attribusjon på et åpent prosjekt. - hello@fromaitochitta.com (SECURITY/CODE_OF_CONDUCT) og git.fromaitochitta.com/open/... - organisasjonens publiserte kontaktpunkt og publiseringsvert. Å fjerne verten ville brukket install-instruksjonene. - Statens vegvesen-sitatene under shared/examples/ - offentlige håndbøker (V124, N500) sitert som kildemateriale, ikke en opplysning om noen. IKKE RØRT, RAPPORTERT VIDERE: tre linjer under shared/ (.gitignore:7 "KTG global", 2026-07-26-...:608 `human:ktg`, 2026-07-31-...:92 `~/repos/ktg-plugin-marketplace/catalog`). shared/ er en pull-only subtree av commons; å redigere den her ville brutt subtree-kontrakten og blitt overskrevet ved neste pull. Meldt til commons, som er source of truth. MÅLT: ingen test, gate eller kode pinner de redigerte strengene (0 treff i tests/+src/+scripts/; kjent-positiv kontroll fant DEPLOY.md pinnet i to tester). Regresjonsgaten: 869 passed / 5 skipped, likt referansen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WVTZgMF94VZtNa7nGVtupF
130 lines
9.4 KiB
Markdown
130 lines
9.4 KiB
Markdown
# Programstatusrapport — ingest-laget (I1–I7)
|
||
|
||
**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/open/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 13–14, 121–133).
|
||
|
||
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:13–14, 121–133`, 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 (I1–I7) 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)
|