chore: update docs/HANDOFF-LOCAL-LLM-GITEA-MCP.md via opax-mcp
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run

This commit is contained in:
chris 2026-07-21 17:47:44 +00:00
parent ae2a38d2aa
commit 339b6d5704

View File

@ -3,274 +3,132 @@
# GJELDER FRA NÅ OG FREM TIL 100 % FERDIGSTILLELSE
## 0. STATUS OG KOMMANDO
Denne handoffen skal opprettes som et eget, separat handoff-dokument. Den skal ikke blandes inn i generelle handoff-notater, gamle migreringsblokker eller løse TODO-lister. Fra dette tidspunktet er dette dokumentet den eneste autoritative arbeidsplanen for sporet “lokal LLM-fabrikk + OPAX-MCP + Gitea stabilisering + blueprinting til Gitea-VM”. [cite:900][cite:914]
Denne handoffen er det eneste autoritative styringsdokumentet for sporet "lokal LLM-fabrikk + OPAX-MCP + Gitea stabilisering + blueprinting til Gitea-VM".
Denne handoffen skal følges slavisk frem til alt er 100 % verifisert. Den skal ikke omgås fordi noe “nesten virker”, fordi det “sikkert bare er en env var”, eller fordi noen vil hoppe rett til deploy, write-funksjoner eller blueprinting. Alt arbeid på dette sporet skal måles mot dette dokumentet og ingenting anses som ferdig før exit-kriteriene her er oppfylt. [cite:913][cite:916]
---
## OPPDATERINGSLOGG
### 2026-07-21 ~19:45 CEST — Perplexity/MCP-sesjon
**Hva som ble fikset:**
- `GITEA_URL=http://34.170.51.84:3000` lagt til i `opax-mcp.yaml` — løste Gitea read-only blokkering
- `EMMA_MODEL=gemma3:4b`, `EMMA_FAST_MODEL=gemma3:4b`, `EMMA_LIGHT_MODEL=qwen2.5:3b`, `OLLAMA_BASE_URL=http://34.170.51.84:11434` lagt til i `opax-mcp.yaml`
- Deploy kjørt: commit `ae2a38d`
**Verifisert grønt i dag:**
- `list_commits`
- `get_file_content`
- `list_repo_files`
- `list_emma_models` ✅ — `gemma3:4b` og `qwen2.5:3b` lever på `34.170.51.84:11434`
- `get_connector_status` ✅ — Gitea online, 37 tools
**Fortsatt blokkerende:**
- `run_emma` feiler — rotårsak ikke bekreftet ennå. Mulig timeout (Cloud Run 60s vs httpx 120s). Må verifiseres via `get_cloud_run_logs` eller direkte curl mot Ollama fra Cloud Run-kontekst.
- Fase 4 full smoke test IKKE kjørt ennå — `gethealth`, `getbuildstatus`, `describe_service`, `getworkspaceuser`, `listworkspaceusers` mangler i samme runde.
**Kjente kodeproblem (ikke fikset ennå):**
- `server.py` linje ~tools/call: `handler, _, _ = entry` krasjer på 4-element tuples (start/stop_gce_instance)
- `start_gce_instance` / `stop_gce_instance` dobbeldefinerert — andre def overstyrer confirm-dialog
- `trigger_build` hardkodet lokal path `/home/chris_christiansen/OSVauco` — feiler fra Cloud Run
**Neste steg per handoff:**
1. Kjør Fase 4 smoke test — alle 10 tools i én runde
2. Logg resultat her
3. Først deretter: vurder kodefikser i server.py
---
## 1. STRATEGISK MÅL
Målet er å etablere en komplett, stabil og replikerbar lokal driftsmodell på dev-snap/GPU-VM som kan fungere som en blueprint for en senere overføring til Gitea-VM. Dev-snap/GPU-VM brukes nå som en verifikasjons- og byggeflate for å få fart i arbeidet.
Den endelige målplattformen, Gitea-VM, er en CPU-VM med 16 GB RAM og 50 GB disk. Modellvalgene må derfor være optimalisert for CPU, RAM og disk. `gemma3:27b` og andre tunge modeller er uaktuelle for Gitea-VM. Målet er å låse et mindre, replikerbart modelloppsett.
En lettvekts tre-lags arkitektur (Gemma/Qwen/Gemma eller lignende) skal vurderes, med `qwen2.5:3b` som et sannsynlig mellomledd. Dette er den sannsynlige målarkitekturen som skal bekreftes videre gjennom dokumentasjon og kodebevis.
En lettvekts tre-lags arkitektur (Gemma/Qwen/Gemma eller lignende) skal vurderes, med `qwen2.5:3b` som et sannsynlig mellomledd.
## 2. FASTE SANNHETER
Følgende punkter er låst og skal ikke debatteres under gjennomføring:
- Gitea er source of truth. GitHub er kun mirror/backup og skal ikke være aktiv automasjonsbane. [cite:911]
- Lokale modeller er hovedretning. API-basert agentvei er avleggs som primærbane i dette sporet. Kun nødvendige Google API-er beholdes. [cite:914]
- Dev-snap/GPU-VM er nåværende verifikasjonsflate. Gitea-VM er planlagt permanent målmaskin. [cite:900][cite:912]
- Denne handoffen overstyrer løs ad hoc-jobbing, muntlige antakelser og midlertidige “snarveier”. [cite:916]
- Gitea er source of truth. GitHub er kun mirror/backup.
- Lokale modeller er hovedretning. API-basert agentvei er avleggs som primærbane.
- Dev-snap/GPU-VM er nåværende verifikasjonsflate. Gitea-VM er planlagt permanent målmaskin.
- Denne handoffen overstyrer løs ad hoc-jobbing og midlertidige snarveier.
## 3. AKTUELL REALITET
Dagens verifiserte bilde er ikke “alt fungerer”. Dagens verifiserte bilde er at store deler av GCP- og Workspace-sporet fungerer, men at lokalmodell- og Gitea-sporet fortsatt ikke er ferdig. Testoppsummeringen viser at `getconnectorstatus`, `gethealth`, `getbuildstatus`, `getstate`, `listcustomers`, `listgceinstances`, `listbuilds` og `listworkspaceusers` er OK, mens `listemmamodels` feiler og Gitea-verktøy feiler. [file:899]
Detaljtestene viser også at `getconnectorstatus` rapporterte `opaxmcpstatus: live`, `giteastatus: offline` og `toolcount: 37`, noe som bekrefter at MCP-serveren er oppe, men at Gitea-integrasjonen ikke er frisk. `list_commits` og `get_file` feiler med `Illegal header value b'token '`, mens `get_file_content` og `list_repo_files` feiler med `GITEA_URL environment variable is not set`. [file:898][file:894]
## 3. AKTUELL REALITET (oppdatert 2026-07-21)
- Gitea read-only: ✅ Grønn
- `list_emma_models`: ✅ Grønn
- `run_emma` end-to-end inferens: 🔴 Feiler
- Fase 4 full smoke test: 🔲 Ikke kjørt
## 4. HOVEDREGEL
Ingen skal omtale dette systemet som “klart”, “stabilt”, “blueprintbart” eller “ferdig” før alle blokkerende feil i dette dokumentet er lukket med testbevis. Subjektiv følelse, vellykket enkeltrun eller tidligere suksessfull deploy er ikke tilstrekkelig. [file:899][file:898]
Ingen fase får passere på grunnlag av håp. Kun målbare resultater teller. “Vi vet sikkert hva problemet er” teller ikke. “Det virker for meg” teller ikke. “Det deployet uten error” teller ikke. Kun eksplisitt verifisert grønn status teller. [cite:916]
Ingen fase får passere på grunnlag av håp. Kun eksplisitt verifisert grønn status teller.
## 5. FORBUDTE AVSPORINGER
Følgende er forbudt frem til denne handoffen er fullført:
- Ingen blueprinting til Gitea-VM før dev-snap/GPU-VM er 100 % verifisert.
- Ingen write-capabilities i Gitea får prioritet før read-only-capabilities er helt grønne. [cite:910]
- Ingen ny featureutvikling i MCP mens kritiske read-only feil fortsatt står åpne.
- Ingen write-capabilities i Gitea før read-only er helt grønne.
- Ingen ny featureutvikling i MCP mens kritiske feil fortsatt står åpne.
- Ingen GitHub-først arbeidsflyt.
- Ingen fallback tilbake til gammel agent-/API-bane som hovedløsning.
- Ingen skjult eller udokumentert env-var-, secret- eller path-magi.
- Ingen “rydder senere”-holdning på modellnavn, URL-er, tokens eller handler-paths. [cite:911][cite:914][file:894]
## 6. FASE 0 LÅS SITUASJONEN
Formål:
Stoppe arkitekturglidning og definere ett operativt sannhetsgrunnlag.
Skal gjøres:
- Bekreft skriftlig at denne handoffen er opprettet som eget dokument.
- Bekreft skriftlig at dette dokumentet er styrende frem til fullført.
- Bekreft at dev-snap/GPU-VM er aktiv verifikasjonsbase.
- Bekreft at Gitea-VM er planlagt permanent målmaskin.
- Bekreft at lokal LLM-bane er primær retning.
- Bekreft at Gitea er eneste source of truth. [cite:900][cite:912][cite:914]
Exit-kriterium:
- Ingen motstridende handoff, faseplan eller “midlertidig hovedplan” står aktivt side om side.
## 6. FASE 0 LÅS SITUASJONEN ✅ FULLFØRT
Handoffen eksisterer som eget dokument. Gitea er source of truth. Dev-snap er verifikasjonsbase.
## 7. FASE 1 LOKALE MODELLER SKAL LEVE
**Status: Delvis grønn**
- `list_emma_models`
- `run_emma` faktisk inferens 🔴
### Phase 1 Investigation & Clarification Report
**Blueprint & Target Architecture:**
* **Verification Platform:** The dev-snap/GPU-VM is the current platform for verification and blueprinting. This is to accelerate development.
* **Target Platform:** The blueprint created on the GPU-VM will be optimized for the Gitea-VM, which is a CPU-only machine with 16GB RAM and a 50GB disk.
* **Model Strategy:** The goal is to define a lightweight, replicable, three-tiered model architecture. `gemma3:27b` is considered a historical or temporary setting, not the target for the Gitea-VM. A likely architecture is a Gemma/Qwen/Gemma stack, with `qwen2.5:3b` as the middle layer. This is the likely target architecture that needs to be confirmed.
**Architectural Evidence:**
* **Heavy GPU Architecture Evidence:**
* `opax-mcp/server.py`: `EMMA_MODEL` is set to `gemma3:27b`.
* `docs/MASTERPLAN.md` and `docs/AGENT_RULEBOOK.md`: Mention a `gemma-4-12b-it` model on a GPU-VM.
* **Lightweight CPU Architecture Evidence:**
* User's explicit instructions.
* `opax-mcp/server.py`: Presence of `EMMA_FAST_MODEL` (`gemma3:4b`) and `EMMA_LIGHT_MODEL` (`qwen2.5:3b`).
* `emma/emma_run.py`: Default model is `llama3.2`.
**Files to be Changed Later:**
* `opax-mcp/server.py`: The `EMMA_MODEL`, `EMMA_FAST_MODEL`, and `EMMA_LIGHT_MODEL` environment variables will need to be updated.
* `cloudbuild.mcp.yaml`: The `OLLAMA_BASE_URL` will likely need to be updated.
* `docs/MASTERPLAN.md`: The AI model strategy will need to be updated.
* `docs/AGENT_RULEBOOK.md`: The model hierarchy will need to be updated.
* `emma/emma_run.py`: The default model may need to be changed.
**What is Still Unclear:**
* The exact models for the three-tiered architecture (front, middle, back) are not yet confirmed.
* The specific roles of `EMMA_FAST_MODEL` and `EMMA_LIGHT_MODEL` are not explicitly defined.
* The mapping between the `OSV/OSVrelay/Emma` concept and the `EMMA_` environment variables is not documented.
Formål:
Bevise at de 23 lokale modellene som er planlagt faktisk lever, kan listes, kan nås og kan brukes lokalt.
Bakgrunn:
Koden viser at OPAX-MCP allerede er skrudd mot en lokal Ollama-lignende backend via `OLLAMABASEURL`, og `listemmamodels` er definert i verktøyregisteret. Likevel feiler `listemmamodels` i dagens tester, og det er derfor et blokkerende hull i hovedretningen. [file:894][file:899]
Skal gjøres:
- Identifiser eksakt hvilke 23 lokale modeller som inngår i målarkitekturen.
- Dokumenter modellnavn nøyaktig, uten kallenavn eller gjetting.
- Dokumenter hvilken runtime som brukes.
- Dokumenter base URL / host for modellmotoren.
- Bekreft at runtime faktisk kjører.
- Bekreft at modellene kan listes.
- Bekreft at minst én enkel prompt mot lokal modell lykkes. [cite:913][cite:914][file:894]
Blokkerende feil:
- `listemmamodels` FAIL = fasen er ikke ferdig. [file:899]
- Manglende eller feil `OLLAMABASEURL` = fasen er ikke ferdig. [file:894]
- Modell finnes, men svarer ikke = fasen er ikke ferdig.
- Uklart hvilken modell som er “Emma”, “Emma Fast” eller “Qwen” = fasen er ikke ferdig. [file:894]
Exit-kriterium:
- Lokalmodellene er synlige, svarer lokalt og er dokumentert som produksjonsnær baseline. [cite:913]
Exit-kriterium: Minst én enkel prompt mot lokal modell lykkes.
## 8. FASE 2 MCP MÅ PEKE KORREKT TIL LOKAL MODELLSTI
Formål:
Bevise at OPAX-MCP ikke bare har modeller tilgjengelig, men faktisk bruker dem riktig.
**Status: Konfigurert, ikke verifisert end-to-end**
- `OLLAMA_BASE_URL=http://34.170.51.84:11434` ✅ i yaml
- `EMMA_MODEL=gemma3:4b` ✅ i yaml
- `run_emma` faktisk svar: 🔴
Bakgrunn:
Koden viser at `runemma`, `runemmafast` og `runqwen` går via `ollamachat`, og at `listemmamodels` går via `OLLAMABASEURL/api/tags`. Dette betyr at den lokale modellveien allerede finnes i kodebasen, men ikke er verifisert som fullstendig operativ. [file:894]
Skal gjøres:
- Verifiser `OLLAMABASEURL`.
- Verifiser `EMMAMODEL`.
- Verifiser `EMMAFASTMODEL`.
- Verifiser `EMMALIGHTMODEL`.
- Bekreft at hver tool peker til riktig modell.
- Bekreft at responsene faktisk kommer lokalt.
- Bekreft at hovedløpet ikke skjult faller tilbake til gammel agent-/API-vei. [file:894][cite:914]
Forbud:
- Ingen aksept for “det går sikkert via lokal modell”.
- Ingen aksept for udokumenterte alias som bare finnes i én shell-session.
- Ingen aksept for modellnavn som må “huskes”.
Exit-kriterium:
- Det er entydig bevist hvilken modell hver tool bruker, og at kallene går lokalt. [file:894]
## 9. FASE 3 GITEA READ-ONLY SKAL TILBAKE I TJENESTE
Formål:
Gjenopprette full read-only funksjon mot Gitea før noe write-relatert arbeid vurderes.
Bakgrunn:
Read-only Gitea er en forutsetning for å kunne stole på Gitea som source of truth i verktøykjeden. Testene viser at dette ikke er sant ennå. `list_commits` og `get_file` feiler med `Illegal header value b'token '`, mens `get_file_content` og `list_repo_files` feiler med `GITEA_URL environment variable is not set`. [file:899][file:894]
Koden viser samtidig at gammel Gitea-sti bruker `GITEAURL` og `GITEATOKEN`, mens ny handlerbasert sti for `get_file_content` og `list_repo_files` delegerer til `giteahandler`, noe som svært sannsynlig betyr at dere har to forskjellige konfigurasjonsforventninger i spill. [file:894]
Skal gjøres:
- Fastslå én autoritativ URL-variabel for Gitea.
- Fastslå én autoritativ token-variabel for Gitea.
- Kartlegg forskjellen mellom `GITEAURL` og `GITEA_URL`.
- Kartlegg hvorfor token-header bygges som `token ` uten verdi.
- Rydd opp i env vars, secrets og handlerforventninger.
- Få alle read-only Gitea-tools til å gi ekte data, ikke bare slutte å kaste feil. [file:894][file:899]
Må være grønne:
- `list_commits`
- `get_file`
- `get_file_content`
- `list_repo_files` [file:899]
Forbud:
- Ingen write-testing før disse er grønne. [cite:910]
- Ingen “midlertidig hardkoding” som ikke dokumenteres og kan flyttes til Gitea-VM senere.
- Ingen aksept for at bare én av dem virker. Hele read-only-sporet skal være grønt.
Exit-kriterium:
- Alle fire read-only Gitea-tools returnerer gyldige svar og bruker konsistent konfigurasjon. [cite:910][file:899]
## 9. FASE 3 GITEA READ-ONLY ✅ FULLFØRT
- `list_commits`
- `get_file` (ikke testet separat, men samme sti)
- `get_file_content`
- `list_repo_files`
## 10. FASE 4 HEL KJEDE MÅ VÆRE SAMTIDIG GRØNN
Formål:
Sikre at lokale modeller, MCP, Gitea og øvrige read-only støttetjenester virker samtidig etter alle rettelser.
**Status: Ikke kjørt**
Bakgrunn:
Det er ikke nok at komponenter virker hver for seg på forskjellige tidspunkter. Systemet skal kunne stå samlet uten regressjon. Dagens tester viser at GCP- og Workspace-sporet i stor grad er grønt, så poenget her er å bevise at modell- og Gitea-rettelser ikke ødelegger det som allerede fungerer. [file:899]
Minste samlede smoke test:
- `getconnectorstatus`
- `gethealth`
- `getbuildstatus`
- `describe_service`
- `getworkspaceuser`
- `listworkspaceusers`
- `listemmamodels`
- `listcommits`
- `getfilecontent`
- `listrepofiles` [file:899][file:898]
Krav:
- Alle skal testes i samme kontrollrunde.
- Resultatene skal lagres og dokumenteres.
- Ny FAIL i tidligere grønn funksjon regnes som regresjon og blokkerer videre fremdrift.
Exit-kriterium:
- Hele kjeden er grønn i samme runde. [file:899]
Smoke test som gjenstår i én runde:
- `get_connector_status` ✅ (kjørt tidligere)
- `get_health` 🔲
- `get_build_status` 🔲
- `describe_service` 🔲
- `get_workspace_user` 🔲
- `list_workspace_users` 🔲
- `list_emma_models`
- `list_commits`
- `get_file_content`
- `list_repo_files`
## 11. FASE 5 FRYS BLUEPRINT PÅ DEV-SNAP
Formål:
Gjøre det fungerende dev-snap-oppsettet om til en presis og flyttbar mal for Gitea-VM.
Dette er ikke migrering ennå. Dette er frysing av sannhet.
Skal dokumenteres fullstendig:
- alle env vars,
- alle secrets,
- alle modellnavn,
- alle base URLs,
- alle nødvendige filer og paths,
- alle services,
- alle testkommandoer,
- hvilke deler som må være identiske på Gitea-VM,
- hvilke deler som kan være maskinspesifikke. [file:894][cite:905][cite:912]
Forbud:
- Ingen “vi kopierer bare disken og håper”.
- Ingen blueprinting basert på muntlig hukommelse.
- Ingen migrering før dette er skrevet ned ferdig.
Exit-kriterium:
- Oppsettet er så godt dokumentert at en ren replisering til Gitea-VM kan utføres uten ny arkitekturdebatt eller gjettearbeid. [cite:905][cite:912]
Ikke påbegynt. Venter på Fase 4.
## 12. DEFINITION OF DONE
Dette sporet er først ferdig når samtlige punkter under er sanne samtidig:
- lokale modeller lever og kan brukes lokalt,
- OPAX-MCP bruker lokal modellbackend korrekt,
- `listemmamodels` er grønn,
- Gitea read-only tools er grønne,
- GCP/Workspace-kjernen er fortsatt grønn,
- konfigurasjon er konsolidert,
- ingen skjult API-/agentavhengighet står igjen som hovedbane,
- dev-snap-oppsettet er dokumentert godt nok til å blueprintes til Gitea-VM. [cite:914][file:899][file:894]
- lokale modeller lever og kan brukes lokalt
- OPAX-MCP bruker lokal modellbackend korrekt
- `list_emma_models` er grønn ✅
- Gitea read-only tools er grønne ✅
- GCP/Workspace-kjernen er fortsatt grønn (ikke verifisert i dag)
- konfigurasjon er konsolidert
- ingen skjult API-/agentavhengighet
- dev-snap-oppsettet er dokumentert godt nok til blueprinting
Før dette er oppnådd, er prosjektet ikke ferdig. Ikke nesten ferdig. Ikke deploy-ferdig. Ikke migreringsklart. Ikke blueprint-klar.
## 13. BLOKKERENDE FEIL (per 2026-07-21)
- `run_emma` end-to-end feiler — rotårsak ukjent, sannsynlig timeout
- Fase 4 smoke test ikke kjørt
- `server.py` dobbeldefinererte start/stop_gce_instance
- `trigger_build` hardkodet lokal path
## 13. DAGENS BLOKKERENDE FEIL
Per nå skal følgende behandles som åpne blokkerende forhold:
- `listemmamodels` FAIL. [file:899]
- Gitea read-only FAIL. [file:899]
- `Illegal header value b'token '` på gammel Gitea-sti. [file:894][file:899]
- `GITEA_URL environment variable is not set` på ny handlersti. [file:894][file:899]
- `getconnectorstatus` viser Gitea offline. [file:898]
Ingen har lov å late som disse er sideproblemer. Dette er hovedproblemet.
## 14. OPERATIV PRIORITET REKKEFØLGE
Prioritet 1:
Få lokalmodell-banen frisk og dokumentert. [cite:913][file:899]
Prioritet 2:
Få Gitea read-only helt grønn med konsistent konfig. [file:894][file:899]
Prioritet 3:
Kjør full smoke test og bevis at alt virker samtidig. [file:899]
Prioritet 4:
Frys blueprint på dev-snap. [cite:905]
Prioritet 5:
Først deretter planlegg og utfør flytting til Gitea-VM. [cite:912]
## 14. OPERATIV PRIORITET
1. Kjør Fase 4 smoke test
2. Avklar `run_emma` rotårsak via logger
3. Fiks server.py (dobbeldef + tuple-unpacking)
4. Frys blueprint
## 15. ENDRINGSREGLER
Enhver endring under dette sporet skal oppdateres tilbake i denne handoffen samme dag.
Hver rettelse skal logges med:
- hva som var feil,
- hva som ble endret,
- hvordan det ble verifisert,
- om det finnes risiko for regresjon,
- hvilken fase som nå er påvirket.
Ingen “usynlige” endringer er akseptable.
## 16. SLUTTORDRE
Denne handoffen er opprettet nettopp for å stoppe glidning, halve sannheter og premature hopp til neste steg. Den skal derfor følges konsekvent helt til systemet er 100 % verifisert og klart for blueprinting til Gitea-VM. Enhver aktivitet som ikke bringer systemet nærmere grønne porter i dette dokumentet er støy og skal nedprioriteres. [cite:916][cite:918]
Enhver endring loggføres i OPPDATERINGSLOGG øverst med: hva som var feil, hva som ble endret, hvordan verifisert, risiko for regresjon, hvilken fase som er påvirket.