portfolio-optimiser/docs/2026-06-26-fot-i-bakken.md
Kjell Tore Guttormsen 129a40baea docs(fot-i-bakken): ground-truth-verifisert levert-vs-lovet — agentiske lag inerte
Fot i bakken før fase-valg (Fase 4 vs D7). Explore-agent kartla; hovedkontekst
selv-verifiserte de konsekvensrike funnene mot kildekoden:

- ExpeL-laeringssloyfa ER APEN: retrieval naar aldri modellen (generering run.py:194
  for retrieval run.py:216-221; sctx run.py:219 forkastes; 0 context_providers i src/).
- README 'Not yet usable' (README.md:5) motsier 'Fase 1-3 lukket' — release-blokkerende.
- Maker-checker-checker gater ingenting (modulo-selector workflow.py:93-96).
- Ingen ekte-modell-kjoring (alle 4 skip = live-provider). Ingen SKILL.md. Ingen entry-point.

Deterministisk ryggrad (validator/budsjett/provenance/sti-sikkerhet/onboarding) holder.
Neste: operatorbeslutning — lukk kjerne-gjeld (A) vs aerlig nedgrader+release (B).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019any9zfGNNwWJPX5Zq2QRz
2026-06-26 15:25:03 +02:00

6.4 KiB

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ærendedecision 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