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
57 lines
4.2 KiB
Markdown
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.
|