# HANDOFF-LOKAL-LLM-GITEA-MCP.md # EGEN HANDOFF – UFRAVIKELIG STYRINGSDOKUMENT # GJELDER FRA NÅ OG FREM TIL 100 % FERDIGSTILLELSE ## 0. STATUS OG KOMMANDO Denne handoffen er det eneste autoritative arbeidsdokumentet for sporet "lokal LLM-fabrikk + OPAX-MCP + Gitea stabilisering + blueprinting til Gitea-VM". --- ## FREMDRIFT – OPPDATERT 2026-07-25 08:15 CEST ### ✅ FASE 0–5 — FERDIG ### ✅ FASE 6 – CPU-optimalisering — FERDIG ### ✅ FASE 6-TILLEGG – Boot-warming — FERDIG ### ✅ DNS – NS-bytte utført — FERDIG 2026-07-21 23:44 CEST ### ✅ OPAX-MCP – GITEA_URL permanent + deploy — FERDIG 2026-07-21 23:53 CEST ### ✅ SMOKE-TEST – Alle 37 tools — FERDIG 2026-07-22 00:25 CEST ### ✅ FASE 6.5 – VM-oppgradering + modellarkitektur — VERIFISERT 2026-07-22 ### ✅ DEV-SNAP UAVHENGIGHET – Verifisert 2026-07-22 19:30 CEST ### ✅ OSVauco arbeidskopi klonet til Gitea-VM — FERDIG 2026-07-22 19:25 CEST ### ✅ git.vauco.no HTTPS — FERDIG 2026-07-25 ### ✅ GITEA_TOKEN rotert — FERDIG 2026-07-25 ### ✅ Google OAuth2 innlogging Gitea — FERDIG 2026-07-25 ### ✅ SIKKERHETSHERDING – Uautoriserte brukere ryddet — FERDIG 2026-07-25 ### ✅ VM Access Scopes – cloud-platform satt — FERDIG 2026-07-25 ### 🟡 FASE 7 – 14B-validering utført, arkitektur justeres — PÅGÅR ### ⏳ GPG-SIGNERING – Commits verified — PÅGÅR ### ⏳ FASE 8 – Backup / snapshot-strategi — PLANLAGT --- ## SIKKERHETSHERDING (2026-07-25) - ✅ Offentlig brukerregistrering i Gitea deaktivert (`DISABLE_REGISTRATION = true`, `ALLOW_ONLY_EXTERNAL_REGISTRATION = true`, `SHOW_REGISTRATION_BUTTON = false`) - ✅ To uautoriserte brukere (`dev433f2c`, `dev1ba0ac`) deaktivert og deres tokens slettet - ✅ Eksponert GITEA_TOKEN rotert — nytt token i Secret Manager, opax-mcp redeployet - ✅ VM Access Scopes oppdatert til `cloud-platform` (VM stoppet/startet 2026-07-25) --- ## DEV-SNAP UAVHENGIGHET – VERIFISERT 2026-07-22 Alle 6 tester grønne: | Test | Status | Bevis | |------|--------|-------| | A — Gitea API | ✅ | list_commits svarer fra localhost:3000 | | B — Repo-innhold | ✅ | Klon hentet 3545 objekter direkte | | C — OPAX health | ✅ | opax_mcp_status: live | | D — MCP tools/list | ✅ | 37 verktøy live | | E — Git-sync | ✅ | nothing to commit, working tree clean | | F — Ollama | ✅ | 5 modeller bekreftet | **Viktig:** Bruk alltid `localhost:3000` (ikke `34.67.252.59:3000`) når du jobber fra Gitea-VM selv. GCP NAT-er ikke loopback-trafikk. --- ## git.vauco.no – FULLFØRT 2026-07-25 - ✅ DNS: `git.vauco.no` A-record → `34.67.252.59` - ✅ nginx installert og konfigurert som proxy til `localhost:3000` - ✅ Firewall-regel `allow-gitea-web` (prioritet 500) opprettet - ✅ certbot fullført — HTTPS aktivt - ✅ Google OAuth2 konfigurert og testet --- ## SIKKERHET – ÅPNE PUNKTER - ✅ GITEA_TOKEN rotert og fjernet fra eksponering — FERDIG 2026-07-25 --- ### Rollen "automation" og sikkerhets-sentinel for Gitea Status per 2026-07-25: - Gitea kjører på https://git.vauco.no med HTTPS og riktig ROOTURL. - Offentlig registrering er stengt (DISABLE_REGISTRATION = true, ALLOW_ONLY_EXTERNAL_REGISTRATION = true, SHOW_REGISTRATION_BUTTON = false). - To uautoriserte brukere (dev433f2c, dev1ba0ac) er deaktivert, deres tokens er slettet. - Ingen av stegene under er gjennomført ennå – de beskriver målbildet for neste iterasjon. #### 1. Teknisk Gitea-bruker: `automation` Mål: - Skille menneskelig admin (`chris`) fra automatiserte operasjoner. - Sørge for at alle automatiske commits / API-kall identifiseres som `automation`, ikke `chris`. Plan: - Opprett Gitea-bruker `automation` (ikke admin). - Gi `automation` kun tilgang til de repoene automasjon skal jobbe med (f.eks. OSVauco). - Bruk CLI/API fra Gitea-VM til: - Generere ett personal access token for `automation` med begrenset scope. - Skrive tokenet direkte til Google Cloud Secret Manager (secret `gitea-automation-token`). - Konfigurere Cloud Run / OPAX MCP til å lese tokenet via miljøvariabel (`GITEA_TOKEN`). - Konfigurer git på Gitea-VM til å bruke `automation` for push/pull. Viktig: - `automation` skal ikke være admin. - `chris` skal ikke dele token med automasjon. - Token-verdier lagres kun i Secret Manager og miljøvariabler, ikke i repo eller logs. #### 2. Sentinel-rolle for lokale LLM-modeller (Gitea Security Sentinel) Mål: - Ha en lettvekts, lokal LLM-modell som periodisk opptrer som "cyber security sentinel" for Gitea og infrastruktur. - Fange opp mønstre som ligner hendelsen 2026-07-11 (uautoriserte brukere, tokens laget rett etter signup, ukjente repo osv.). Rolle: `sentinel` (kun lesing + rapport) Input: - Gitea-API: brukerliste, tokens, repo-oversikt - Logger: gitea-app-logg, nginx-logg, journald - Konfig: app.ini, firewall-regler, Secret Manager metadata Oppførsel: - Kjør periodisk (hver time eller natt) fra Gitea-VM. - Produser rapport i `protocols/security/SENTINEL-REPORT-YYYY-MM-DD.md`. - Foreta ingen direkte mutasjoner uten eksplisitt godkjenning. Alarmsignaler: - Nye lokale brukere som ikke matcher forventede mønstre. - Tokens opprettet for ukjente brukere. - Nye repo opprettet av ukjente brukere. - app.ini endret slik at registrering åpnes igjen. #### 3. Samspill mellom `automation`, `sentinel` og `chris` - `chris`: Eneste Gitea-admin. Godkjenner større endringer. - `automation`: Utfører godkjente tekniske endringer via CLI/API. - `sentinel`: Kjører periodiske analyser, skriver rapporter, kun lesetilgang. --- ## FASE 6.5 — OPPDATERT LOKAL LLM-STACK (2026-07-22) ### Bekreftet drift - `gitea-cpu-vm` er oppe i `us-central1-b` - VM kjører på `e2-highmem-4` (4 vCPU / 32 GB RAM) - Statisk IP: `34.170.51.84` - Gitea svarer på port `3000` - Ollama svarer på port `11434` ### Faktisk modeller lokalt per 2026-07-25 - `gemma3:4b` - `qwen2.5:3b` - `qwen2.5:7b` - `qwen2.5-coder:7b` - `qwen2.5-coder:14b` ### Revidert anbefalt modellarkitektur - **Frontmodell:** `gemma3:4b` — raske svar, enkel resonnering - **Lett tool-modell:** `qwen2.5:3b` — tool calling, responsivt - **Standard mellomlag:** `qwen2.5:7b` — kvalitet + brukbar latency - **Kode-modell:** `qwen2.5-coder:7b` — standard for repo/kodearbeid - **Backup coder:** `qwen2.5-coder:14b` — batch/asynkrone kodeoppgaver --- ## OPAX-MCP KONFIGURASJON – LÅST | Variabel | Verdi | |---|---| | `GITEA_URL` | `http://34.67.252.59:3000` | | `OLLAMA_BASE_URL` | `http://34.67.252.59:11434` | | `EMMA_MODEL` | `gemma3:4b` | | `EMMA_FAST_MODEL` | `gemma3:4b` | | `EMMA_LIGHT_MODEL` | `qwen2.5:3b` | | `OSVAUCO_AGENT_URL` | `https://osvauco-agent-357036551735.us-central1.run.app` | Deploy verifisert: `get_connector_status` → `live`, `gitea: online`, `tool_count: 37` --- ## DNS – FULLFØRT 2026-07-21 | Record | Type | Verdi | |---|---|---| | `vauco.no.` | A | `34.98.77.173` (LB) | | `www.vauco.no.` | A | `34.98.77.173` (LB) | | `opax.vauco.no.` | A | `34.98.77.173` (LB) | | `git.vauco.no.` | A | `34.67.252.59` | | MX / SPF / DKIM / DMARC | TXT/MX | Google Workspace komplett | --- ## ÅPNE PUNKTER 1. GPG-signering — få commits verified 2. `automation`-bruker opprett i Gitea 3. Sentinel-implementering (lokal LLM periodisk sjekk) 4. Test `qwen2.5-coder:7b` på konkret kode-/repo-oppgave 5. Mål RAM/swap under modell-last 6. Emma derivat-dokument (tilsvarende GEMINI.md) 7. Fase 8: Snapshot-policy aktiveres 8. `opax.vauco.no` domain mapping (Cloud Run → custom domain) ## FASTE SANNHETER - Gitea er source of truth - Lokale modeller er hovedretning - Gitea-VM (`34.67.252.59`) er permanent målmaskin — alltid-på, STANDARD (ikke preemptible) - Bruk `localhost:3000` fra Gitea-VM, aldri ekstern IP mot seg selv - Dev-snap er ikke lenger nødvendig for kjerneflyten - CPU er primær flaskehals for tyngre lokale modeller ## DEFINITION OF DONE - ✅ Lokale modeller lever og kan brukes lokalt - ✅ OPAX-MCP bruker lokal modellbackend korrekt - ✅ Gitea read/write tools er grønne - ✅ GCP/Workspace-kjernen er fortsatt grønn - ✅ Smoke-test alle 37 tools — FERDIG - ✅ VM oppgradert til e2-highmem-4 (32 GB RAM) — FERDIG - ✅ Dev-snap uavhengighet verifisert — FERDIG - ✅ OSVauco arbeidskopi på Gitea-VM — FERDIG - ✅ git.vauco.no live med HTTPS — FERDIG - ✅ Google OAuth2 innlogging Gitea — FERDIG - ✅ GITEA_TOKEN rotert — FERDIG - ✅ Sikkerhetsherding — FERDIG - ✅ VM Access Scopes — FERDIG - ⏳ GPG-signering verified — pågår - ⏳ automation-bruker i Gitea — neste - ⏳ Fase 7: lokal hjerne verifisert — pågår - ⏳ Fase 8: daglig snapshot-backup — planlagt ## OPPDATERINGSLOGG | Dato | Handling | |---|---| | 2026-07-21 | FASE 4–6: CPU-optimalisering, boot-warming fullført | | 2026-07-21 23:44 | DNS: NS-bytte utført hos Proisp | | 2026-07-21 23:53 | OPAX-MCP: GITEA_URL + OLLAMA_BASE_URL → 34.67.252.59, deployed | | 2026-07-22 00:25 | Smoke-test fullført — alle kategorier grønne | | 2026-07-22 03:55 | Handoff oppdatert etter 14B-validering | | 2026-07-22 19:25 | OSVauco klonet til Gitea-VM via localhost:3000 | | 2026-07-22 19:30 | Dev-snap uavhengighet bekreftet — alle 6 tester grønne | | 2026-07-22 19:45 | nginx installert, git.vauco.no konfig opprettet, certbot blokkert av firewall | | 2026-07-23 22:14 | Handoff oppdatert med full status, neste steg og sikkerhetsnotis om token | | 2026-07-25 08:15 | Full synkronisering: HTTPS ferdig, token rotert, OAuth2 fikset, sikkerhetsherding dokumentert, VM scopes fikset |