Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
234 lines
9.3 KiB
Markdown
234 lines
9.3 KiB
Markdown
# 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 |
|