diff --git a/docs/2026-06-26-fot-i-bakken.md b/docs/2026-06-26-fot-i-bakken.md new file mode 100644 index 0000000..2795fc2 --- /dev/null +++ b/docs/2026-06-26-fot-i-bakken.md @@ -0,0 +1,80 @@ +# Fot i bakken — levert vs lovet (2026-06-26) + +**Hva dette er:** En nøktern grunning FØR fase-valget (Fase 4 open-source vs D7-sibling). STATE-narrativet +var triumferende ("Fase 3 helt lukket", "load-bearing bevis", "lærer av dommene"). Session-start flagget +*narrative crystallization* (sesjon #39). En Explore-agent kartla levert kode mot lovet visjon; de +konsekvensrike funnene er **verifisert av hovedkonteksten selv** mot kildekoden, ikke bare relayet. + +## Hovedfunn (én linje) +Den **deterministiske ryggraden holder og er ærlig**. De tre "agentiske" lovnadene STATE hviler på — +*lærer av dommene*, *maker-checker-debatt*, *HITL* — er **inerte, dekorative eller config-stubber**, og +**ingen kodesti har noensinne kjørt mot en ekte modell**. Suiten (116/4) kjører utelukkende på syntetiske +klienter med ferdigskrevet JSON. + +## Hva HOLDER (deterministisk ryggrad — publiserbart, ærlig) +- **Validator (B1):** ekte CBC-solve + Monte Carlo; `Rejection` er egen type uten persentiler (kan aldri + konsumeres som validert). `validator.py:78-129`. Load-bearing testet (mutasjon rødt). +- **Budsjett-/stopp-tak (B4/D6):** `Budget` nektes uten positive tak; `BudgetMiddleware` leser ekte + `UsageDetails`, feiler lukket. `budget.py:50-101`. Sterkeste komponent. +- **Provenance (B6):** Pydantic-stamp, F1 fake-model-lekkasje fikset + load-bearing. `provenance.py`, `run.py:201-205`. +- **Sti-sikkerhet** (`retrieval.py`, fail-closed `commonpath`) + **config-only onboarding** (SC1, ekte src-grep-guard). + +## Hva er GJELD (rangert; ✅ = verifisert av hovedkonteksten, ⚠️ = agent-rapportert, ikke selv-tracet) + +1. **🔴 ✅ ExpeL-læringssløyfa er ÅPEN — retrieval når aldri modellen.** Generering skjer på `run.py:194`, + *før* retrieval-blokken `run.py:216-221`. `provider.before_run` kalles på en lokal `SessionContext` + (`run.py:219`) som **aldri** sendes til noen agent. Debatt-agentene (`workflow.py:57-66`) får `tools`+ + `middleware` men **ingen `context_providers`** (`grep -rn context_providers src/` = **0 treff**). De + hentede verdiktene fyller kun `RunResult.retrieved` (for testassertioner). Docstrings (`run.py:214-215, + 269-271`) + STATE + `CLAUDE.md:4` påstår en lukket sløyfe. **Falsk på wiring-nivå.** Største drift. +2. **🔴 ✅ README sier "Not yet usable".** `README.md:5` ("Status: Early development (plan phase). Not yet + usable.") motsier STATEs "Fase 1-3 lukket". Første en ekstern leser ser — release-blokkerende for Fase 4. +3. **🟠 ✅ Maker-checker-checkeren gater ingenting.** Selektoren er en ren modulo-teller (`workflow.py:93-96`); + checkerens kritikk (`workflow.py:29`) parses aldri, blokkerer aldri. Debatt-teksten mater nå generering + som kontekst (`run.py:189-190`), så den er ikke *helt* dekorativ — men det er ingen konsensus-/gate- + semantikk. Den ekte porten er validatoren, ikke checkeren. +4. **🟠 ✅ Ingen ekte-modell-kjøring — noensinne.** Alle 4 skippede tester er nettopp live-provider-testene + (lokal token-regnskap, Foundry-profil, e2e-portefølje, debatt-konvergens/-kostnad). "Virker det mot en + faktisk LLM?" er en åpen risiko. `findings-a.md` bekrefter: debatt-verditallet ble aldri produsert. +5. **🟠 ✅ Ingen `SKILL.md`.** `CLAUDE.md` + plan Fase 2 lover "Metode = Agent Skill (SKILL.md + scripts/)". + Metoden er vanlige Python-moduler. B8 (skill-sandbox) følgelig også fraværende. +6. **🟡 ✅ Ingen `[project.scripts]` entry-point** til tross for `main()` (`run.py:296`). README viser ingen + kjørekommando. En bruker får ingen vei fra README til en faktisk kjøring. +7. **🟡 ✅ VerdictStore er in-memory only** (`verdicts.py:106`). "Læring" overlever ikke restart — og påvirker + uansett ingenting (jf. #1). +8. **🟡 ⚠️ MCP-datatilgang er parallell demonstrator, ikke datasømmen i bruk.** `build_mcp_server` finnes + (`datasource.py`), men `run_project` bruker in-process `FunctionTool` (`run.py:178`). `CLAUDE.md` løfter + MCP til konvensjon. (Agent-rapportert; ikke selv-tracet.) +9. **🟡 ⚠️ HITL Layer-2 = les hardkodet `verdict_input` JSON fra config** (`run.py:224`). "Fageksperter + vurderer via HITL" er i praksis å lese en config-beslutning. `extending.md` er ærlig om dette. (Agent-rapportert.) +10. **🟡 ⚠️ B10 rejection-taksonomi/konfliktregel fraværende** — `decision` er bar `Literal` (`contracts.py:61`). + §15 kaller dette "den mest domenespesifikke delen som MÅ være brukerlevert". (Agent-rapportert.) + +## 90 %-linja +Forsvarlige kutt: durabel checkpointing, OTEL, vektorlager, concurrent fan-out. **Men:** læringssløyfa er +én av fire headline-invarianter og er *presentert som levert* mens den er inert — det er ikke et 90 %-kutt. +Fan-out er sekvensiell `for`-løkke (`run.py:276-292`); isolasjon oppnås trivielt (ferskt state per kjøring), +sidesteppet B7 heller enn løst for det concurrent tilfellet U1 navnga. STATE er ærlig om "SEKVENSIELT". + +## Konsekvens for fase-valget +- **Fase 4 (open-source) nå** ville publisere et gap mellom README/STATE-narrativet og hva en bruker får. + De to mest markedsførte funksjonene (lærer-av-dommer, maker-checker-debatt) er inerte/dekorative. +- **D7 (sibling) nå** er prematurt: man reimplementerer en metode hvis agentiske claims ennå ikke er sanne. +- **Reell vei videre (operatørbeslutning):** + - **A — Lukk kjerne-gjeld før release:** (1) wire `ExpeLContextProvider` *inn i* generering (fest på + proposer-agenten; flytt retrieval FØR generering); (2) la checkeren binde, ELLER slutt å kalle det en + debatt; (3) kjør ÉN ekte-modell ende-til-ende (lokal Ollama holder, D6-billig); (4) fiks README-status + + legg til entry-point. Gjør narrativet sant. + - **B — Ærlig nedgrader:** release kun den deterministiske kjernen med korrekt framing; merk agentiske lag + som eksperimentelle/uferdige. Raskere, men mindre ambisiøst. + +## Verifiseringslogg +| Påstand | Hvordan verifisert | Resultat | +|---|---|---| +| Suite 116/4 | `uv run pytest -rs` | Bekreftet; 4 skip = alle live-provider | +| ExpeL når aldri modellen | lest `run.py:186-236`, `workflow.py:57-66`; `grep context_providers src/` | Bekreftet (0 treff) | +| Checker gater ikke | lest `workflow.py:93-106` | Bekreftet (modulo-selector) | +| Ingen SKILL.md | `find -name SKILL.md` | Bekreftet (ingen) | +| README "Not yet usable" | `head README.md` | Bekreftet (`README.md:5`) | +| Ingen entry-point | `grep project.scripts pyproject.toml` | Bekreftet (kun `[project]`) | +| mypy/ruff rene | `uv run mypy src`, `ruff check .` | Bekreftet |