From ec4e0dbed43ebbfdcee091ec9ebbc8f5eb34f67c Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Sun, 28 Jun 2026 11:42:39 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20HANDOFF=20oppdatert=202026-06-28=20?= =?UTF-8?q?=E2=80=94=20Emma=20bootstrap,=20guardrails,=20OPAX-kobling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/HANDOFF.md | 193 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 134 insertions(+), 59 deletions(-) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 1cc79de..5c38f16 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,8 +1,8 @@ # HANDOFF — Vauco OS -**Sist oppdatert:** 2026-06-18 14:00 CEST +**Sist oppdatert:** 2026-06-28 11:40 CEST **Skrevet av:** Perplexity (Orchestrator) -**Status:** Fase B — Gitea er primær Git. GitHub er fasa ut. +**Status:** Fase C — Emma lokal agent operativ. Gitea er primær Git. GitHub fasa ut. --- @@ -18,17 +18,32 @@ - **Ingen tredjepartsverktøy:** Cursor, Copilot og lignende skal IKKE brukes. Alt eies og kjøres i eget GCP/Gitea. - **Primær Git:** `http://34.59.131.162:3000/chris/OSVauco` — GitHub er IKKJE lenger i bruk. - **Git remote på VM:** `http://chris:@34.59.131.162:3000/chris/OSVauco.git` +- **Emma rapporterer til:** Chris Christiansen `chris.christiansen@vauco.no` — ingen andre kan gi GO --- -## ✅ Fullført i dag (2026-06-18) — IAP Auth fix for opax-mcp +## ✅ Fullført i dag (2026-06-28) — Emma bootstrap + OPAX-kobling + +| Oppgave | Commit | Status | +|---------|--------|--------| +| `emma/emma_seed.py` — LEARNINGS 001-016 + 7 ekstra mønstre som boot-minne | `6726da23` | ✅ | +| `emma/emma_guardrails.py` — 5-nivå risikoscoring (SAFE/LOW/MEDIUM/HIGH/CRITICAL) | `6726da23` | ✅ | +| `emma/emma_opax.py` — OPAX-kobling med identity token og retry | `6726da23` | ✅ | +| `emma/emma_identity.py` — Emma vet hvem hun er og at hun rapporterer til Chris | `31a405ad` | ✅ | +| `emma/emma_gitea.py` — direkte tilgang til alle Gitea-repoer (les + skriv) | `31a405ad` | ✅ | +| `emma/emma_backend_ollama.py` — identitet injisert i alle LLM system-prompts | `31a405ad` | ✅ | +| `emma/setup.sh` — VM-bootstrap: klon Gitea, venv, seed (én kommando) | `47ade3d5` | ✅ | +| `.gemini/GEMINI.md` — oppdatert med Emma, Gitea, guardrails, nye hard rules | `d2b0c6ac` | ✅ | + +--- + +## ✅ Fullført tidligere (2026-06-18) — IAP Auth fix for opax-mcp | Oppgave | Status | |---------|--------| | Identifisert rotårsak: feil IAP audience i identity token-kall | ✅ | | Lagt til `roles/iap.httpsResourceAccessor` for `jason-vauger` SA | ✅ | | Oppdatert `opax-mcp/server.py` — ny env var `OPAX_IAP_CLIENT_ID` som audience | ✅ | -| Lagt til `OPAX_IAP_CLIENT_ID` env var i Cloud Run (revisjon 00019 — feil navn `IAP_CLIENT_ID`) | ⚠️ | | Rettet env var navn til `OPAX_IAP_CLIENT_ID` i Cloud Run — revisjon 00020 deployed | ✅ | | Revisjon `opax-mcp-00020-w6j` aktiv med 100% trafikk | ✅ | @@ -39,15 +54,11 @@ | Oppgave | Status | |---------|--------| | `agents/tools/opax_mcp_client.py` — REST-klient alle 25 tools | ✅ | -| `agents/tools/mcp_tools.py` — X-MCP-Secret fix | ✅ | | Jason deployet til Vertex AI Agent Engine | ✅ | | Jason svarer på norsk og kallar tools automatisk | ✅ | -| Gitea installert på VM (`34.59.131.162:3000`) | ✅ | -| Gitea kjøyrer som systemd-teneste (overlever reboot) | ✅ | -| Mirror-repo sletta og erstatta med vanleg repo | ✅ | +| Gitea installert på VM (`34.59.131.162:3000`) som systemd-teneste | ✅ | | **2867 commits pusha frå GitHub → Gitea** | ✅ | -| Gitea API-tokens i Secret Manager | ✅ | -| **GitHub fasa ut — Gitea er no primær** | ✅ | +| GitHub fasa ut — Gitea er no primær | ✅ | --- @@ -60,6 +71,7 @@ | opax frontend (IAP LB) | https://opax.vauco.no | ✅ Live | | Jason (Vertex AI Agent) | Agent Engine, us-central1 | ✅ Live | | Gitea (self-hosted) | http://34.59.131.162:3000 | ✅ Live | +| Emma (lokal agent) | `~/OSVauco/emma/` på osvauco-dev-vm | ⚠️ Ikke bootstrappt ennå | | GitHub (legacy) | https://github.com/vauco-saas/OSVauco | ⚠️ Fasa ut | --- @@ -71,77 +83,108 @@ - **MCP-Secret:** Secret Manager → `mcp-secret` - **Prosjekt:** `propane-will-491900-m5` - **IAP OAuth Client ID (opax backend):** `357036551735-kq8nt71d38hfqlcfb3n52ef7ala4meo.apps.googleusercontent.com` -- **IAP Backend Service path:** `/projects/357036551735/global/backendServices/` (satt som `OPAX_IAP_CLIENT_ID` i Cloud Run) +- **Emma venv:** `~/emma-venv` (opprettes av setup.sh) --- -## 🎯 Gjenstår (prioritert) +## 🎯 NESTE OPPGAVE -1. **KRITISK — Verifiser IAP auth end-to-end** — kjør verifikasjonskommando under og bekreft `HTTP/2 200` -2. Oppdater Gitea-klient-logikk i agenter (fra GitHub API → Gitea API) -3. DNS/TLS for Gitea (`git.vauco.no`) -4. GPU VM-arbeid (planlagt) -5. Smoke-test pipeline for opax-mcp etter IAP-fix +**Bootstrap Emma på osvauco-dev-vm og verifiser ende-til-ende.** + +Kjør fra VM: + +```bash +# Steg 1: Bootstrap Emma (én kommando) +bash <(curl -s "http://chris:$(gcloud secrets versions access latest \ + --secret=gitea-api-token --project=propane-will-491900-m5 \ + )@34.59.131.162:3000/chris/OSVauco/raw/branch/main/emma/setup.sh") + +# Steg 2: Aktiver aliaser permanent +echo 'source ~/.emma_env' >> ~/.bashrc && source ~/.emma_env + +# Steg 3: Verifiser at seed er utført +ls -lh ~/OSVauco/emma/data/morphic.db +tail -3 ~/OSVauco/emma/emma_flynn_log.jsonl + +# Steg 4: Verifiser Gitea-tilkobling fra Emma +cd ~/OSVauco/emma && ~/emma-venv/bin/python -c " +from emma_gitea import GiteaClient +g = GiteaClient() +print(g.verify_boot()) +" + +# Steg 5: Verifiser OPAX-tilkobling fra Emma +cd ~/OSVauco/emma && ~/emma-venv/bin/python -c " +from emma_opax import OpaxClient +c = OpaxClient() +print(c.health()) +" + +# Steg 6: Start Emma CLI +emma +``` + +Forventet etter bootstrap: +- `morphic.db` eksisterer med > 20 mønstre +- Gitea-tilkobling returnerer `status: ok` med repo-liste +- OPAX health returnerer `status: ok` eller `unreachable` (akseptabelt fra dev-vm uten metadata-server) + +--- + +## 🔨 Gjenstår (prioritert) + +1. **Bootstrap Emma på VM** — kjør setup.sh (se NESTE OPPGAVE over) +2. **Verifiser IAP auth end-to-end** — bekreft `HTTP/2 200` fra opax.vauco.no +3. **Synk Gitea ←→ GitHub** — push emma/-modulene til Gitea (de er for øyeblikket kun på GitHub) +4. DNS/TLS for Gitea (`git.vauco.no`) +5. GPU VM-arbeid (planlagt) --- ## 🚀 Neste sesjon — start her -### 1. Verifiser IAP auth fix (VIKTIGST) - -Kjør fra `osvauco-dev-vm`: +### 0. Boot-sjekk (kjør alltid først) + +```bash +# 1. Hvem er du og hvilken branch er canonical? +git -C ~/OSVauco remote -v +git -C ~/OSVauco log --oneline -5 + +# 2. GCP auth +gcloud auth list +gcloud config get-value project + +# 3. Emma-status +ls -la ~/OSVauco/emma/data/morphic.db ~/OSVauco/emma/emma_flynn_log.jsonl 2>/dev/null || echo 'Emma ikke bootstrappt' + +# 4. Gitea oppe? +curl -s http://34.59.131.162:3000/api/v1/version | python3 -m json.tool +``` + +### 1. IAP auth-verifisering (fortsatt åpen) ```bash -# Hent identity token med korrekt IAP audience TOKEN=$(curl -s -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=357036551735-kq8nt71d38hfqlcfb3n52ef7ala4meo.apps.googleusercontent.com&format=full") -# Test mot opax via IAP load balancer curl -si https://opax.vauco.no/opax/build-status \ -H "Authorization: Bearer $TOKEN" | head -5 +# Forventet: HTTP/2 200 ``` -Forventet: `HTTP/2 200` (tidligere: `HTTP/2 401`) - -### 2. Sjekk Jason sin status +### 2. Synk emma/ til Gitea ```bash -curl -s https://osvauco-agent-zjbgp3prqg-uc.a.run.app/health \ - -H "Authorization: Bearer $(gcloud auth print-identity-token)" +# emma/-modulene ble pushet til GitHub — sjekk om Gitea er oppdatert +git -C ~/OSVauco log --oneline -3 # skal vise d2b0c6ac eller nyere + +# Hvis ikke: pull fra GitHub og push til Gitea +git -C ~/OSVauco remote add github https://github.com/vauco-saas/OSVauco.git 2>/dev/null || true +git -C ~/OSVauco fetch github main +git -C ~/OSVauco merge github/main --ff-only +git -C ~/OSVauco push origin main ``` -### 3. Hva som ble fikset i opax-mcp/server.py - -**Fil:** `opax-mcp/server.py` — commit `9542106` ("OPAX_IAP_CLIENT_ID som IAP audience i identitytoken") - -**Endring linje 17:** -```python -# FØR: -OPAX_BASE_URL = os.environ.get("OPAX_BASE_URL", "https://opax.vauco.no") - -# ETTER: -OPAX_BASE_URL = os.environ.get("OPAX_BASE_URL", "https://opax.vauco.no") -OPAX_IAP_CLIENT_ID = os.environ.get("OPAX_IAP_CLIENT_ID", "") -``` - -**Endring linje 37 (`_opax_identity_token`):** -```python -# FØR: -f"...identity?audience={OPAX_BASE_URL}&format=full" - -# ETTER: -f"...identity?audience={OPAX_IAP_CLIENT_ID or OPAX_BASE_URL}&format=full" -``` - -**Cloud Run env vars på opax-mcp (aktive i rev 00020):** - -| Navn | Verdi | -|------|-------| -| `OPAX_BASE_URL` | `https://opax.vauco.no` | -| `OPAX_IAP_CLIENT_ID` | `/projects/357036551735/global/backendServices/...` | -| `MCP_SECRET` | (fra Secret Manager) | -| `GOOGLE_CLOUD_PROJECT` | `propane-will-491900-m5` | - --- ## 🏗 Arkitektur @@ -153,6 +196,13 @@ Bruker └─► opax-mcp (Cloud Run) └─► [IAP] opax.vauco.no └─► OPAX backend (GCP) + +osvauco-dev-vm + └─► Emma (lokal MDP/MCoT-agent) + ├─► Morfisk minne (SQLite, ~/OSVauco/emma/data/morphic.db) + ├─► Guardrails (5-nivå, blokkerer HIGH/CRITICAL uten GO) + ├─► OPAX-klient (identity token → opax.vauco.no) + └─► Gitea-klient (alle repoer på 34.59.131.162:3000) ``` **Auth-flyt for opax-mcp → opax.vauco.no:** @@ -164,3 +214,28 @@ opax-mcp container → IAP validerer token → Request videresendt til OPAX backend ``` + +**Emma-mønster:** +``` +Input → Guardrails → MDP → Morphic Recall → MCoT → OPAX/Gitea → Flynn-tracker → Output +``` + +--- + +## 📚 Relevante docs (les ved behov) + +| Dok | Innhold | +|-----|---------| +| `docs/LEARNINGS.md` | Append-only lærdomslogg — LEARNING-001 til 016 | +| `docs/AGENT_RULEBOOK.md` | Boot-protokoll, korreksjonsregler, friction-regler | +| `docs/MASTERPLAN.md` | Fase-oversikt og mål | +| `docs/ROADMAP.md` | Prioritert oppgaveliste | +| `docs/ARCHITECTURE.md` | Systemarkitektur | +| `docs/DNS-OG-INFRASTRUKTUR.md` | DNS-kart, IAP-routing, forwarding rules | +| `.gemini/GEMINI.md` | Instrukser til Gemini på VM (dette er deg) | +| `emma/README.md` | Emma-dokumentasjon — filer, bootstrap, guardrails | +| `emma/emma_identity.py` | Emmas identitet og ansettelsesforhold | +| `emma/emma_guardrails.py` | Guardrails-logikk — risikonivåer og regler | +| `emma/emma_gitea.py` | Gitea-klient — les/skriv repoer | +| `emma/emma_seed.py` | Boot-minne frø — kjøres én gang | +| `emma/setup.sh` | VM-bootstrap — klon, venv, install, seed |