docs: HANDOFF oppdatert 2026-06-28 — Emma bootstrap, guardrails, OPAX-kobling
This commit is contained in:
parent
c45613982b
commit
ec4e0dbed4
193
docs/HANDOFF.md
193
docs/HANDOFF.md
|
|
@ -1,8 +1,8 @@
|
||||||
# HANDOFF — Vauco OS
|
# HANDOFF — Vauco OS
|
||||||
|
|
||||||
**Sist oppdatert:** 2026-06-18 14:00 CEST
|
**Sist oppdatert:** 2026-06-28 11:40 CEST
|
||||||
**Skrevet av:** Perplexity (Orchestrator)
|
**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.
|
- **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.
|
- **Primær Git:** `http://34.59.131.162:3000/chris/OSVauco` — GitHub er IKKJE lenger i bruk.
|
||||||
- **Git remote på VM:** `http://chris:<TOKEN>@34.59.131.162:3000/chris/OSVauco.git`
|
- **Git remote på VM:** `http://chris:<TOKEN>@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 |
|
| Oppgave | Status |
|
||||||
|---------|--------|
|
|---------|--------|
|
||||||
| Identifisert rotårsak: feil IAP audience i identity token-kall | ✅ |
|
| Identifisert rotårsak: feil IAP audience i identity token-kall | ✅ |
|
||||||
| Lagt til `roles/iap.httpsResourceAccessor` for `jason-vauger` SA | ✅ |
|
| Lagt til `roles/iap.httpsResourceAccessor` for `jason-vauger` SA | ✅ |
|
||||||
| Oppdatert `opax-mcp/server.py` — ny env var `OPAX_IAP_CLIENT_ID` som audience | ✅ |
|
| 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 | ✅ |
|
| Rettet env var navn til `OPAX_IAP_CLIENT_ID` i Cloud Run — revisjon 00020 deployed | ✅ |
|
||||||
| Revisjon `opax-mcp-00020-w6j` aktiv med 100% trafikk | ✅ |
|
| Revisjon `opax-mcp-00020-w6j` aktiv med 100% trafikk | ✅ |
|
||||||
|
|
||||||
|
|
@ -39,15 +54,11 @@
|
||||||
| Oppgave | Status |
|
| Oppgave | Status |
|
||||||
|---------|--------|
|
|---------|--------|
|
||||||
| `agents/tools/opax_mcp_client.py` — REST-klient alle 25 tools | ✅ |
|
| `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 deployet til Vertex AI Agent Engine | ✅ |
|
||||||
| Jason svarer på norsk og kallar tools automatisk | ✅ |
|
| Jason svarer på norsk og kallar tools automatisk | ✅ |
|
||||||
| Gitea installert på VM (`34.59.131.162:3000`) | ✅ |
|
| Gitea installert på VM (`34.59.131.162:3000`) som systemd-teneste | ✅ |
|
||||||
| Gitea kjøyrer som systemd-teneste (overlever reboot) | ✅ |
|
|
||||||
| Mirror-repo sletta og erstatta med vanleg repo | ✅ |
|
|
||||||
| **2867 commits pusha frå GitHub → Gitea** | ✅ |
|
| **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 |
|
| opax frontend (IAP LB) | https://opax.vauco.no | ✅ Live |
|
||||||
| Jason (Vertex AI Agent) | Agent Engine, us-central1 | ✅ Live |
|
| Jason (Vertex AI Agent) | Agent Engine, us-central1 | ✅ Live |
|
||||||
| Gitea (self-hosted) | http://34.59.131.162:3000 | ✅ 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 |
|
| GitHub (legacy) | https://github.com/vauco-saas/OSVauco | ⚠️ Fasa ut |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -71,77 +83,108 @@
|
||||||
- **MCP-Secret:** Secret Manager → `mcp-secret`
|
- **MCP-Secret:** Secret Manager → `mcp-secret`
|
||||||
- **Prosjekt:** `propane-will-491900-m5`
|
- **Prosjekt:** `propane-will-491900-m5`
|
||||||
- **IAP OAuth Client ID (opax backend):** `357036551735-kq8nt71d38hfqlcfb3n52ef7ala4meo.apps.googleusercontent.com`
|
- **IAP OAuth Client ID (opax backend):** `357036551735-kq8nt71d38hfqlcfb3n52ef7ala4meo.apps.googleusercontent.com`
|
||||||
- **IAP Backend Service path:** `/projects/357036551735/global/backendServices/<navn>` (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`
|
**Bootstrap Emma på osvauco-dev-vm og verifiser ende-til-ende.**
|
||||||
2. Oppdater Gitea-klient-logikk i agenter (fra GitHub API → Gitea API)
|
|
||||||
3. DNS/TLS for Gitea (`git.vauco.no`)
|
Kjør fra VM:
|
||||||
4. GPU VM-arbeid (planlagt)
|
|
||||||
5. Smoke-test pipeline for opax-mcp etter IAP-fix
|
```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
|
## 🚀 Neste sesjon — start her
|
||||||
|
|
||||||
### 1. Verifiser IAP auth fix (VIKTIGST)
|
### 0. Boot-sjekk (kjør alltid først)
|
||||||
|
|
||||||
Kjør fra `osvauco-dev-vm`:
|
```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
|
```bash
|
||||||
# Hent identity token med korrekt IAP audience
|
|
||||||
TOKEN=$(curl -s -H "Metadata-Flavor: Google" \
|
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")
|
"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 \
|
curl -si https://opax.vauco.no/opax/build-status \
|
||||||
-H "Authorization: Bearer $TOKEN" | head -5
|
-H "Authorization: Bearer $TOKEN" | head -5
|
||||||
|
# Forventet: HTTP/2 200
|
||||||
```
|
```
|
||||||
|
|
||||||
Forventet: `HTTP/2 200` (tidligere: `HTTP/2 401`)
|
### 2. Synk emma/ til Gitea
|
||||||
|
|
||||||
### 2. Sjekk Jason sin status
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -s https://osvauco-agent-zjbgp3prqg-uc.a.run.app/health \
|
# emma/-modulene ble pushet til GitHub — sjekk om Gitea er oppdatert
|
||||||
-H "Authorization: Bearer $(gcloud auth print-identity-token)"
|
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
|
## 🏗 Arkitektur
|
||||||
|
|
@ -153,6 +196,13 @@ Bruker
|
||||||
└─► opax-mcp (Cloud Run)
|
└─► opax-mcp (Cloud Run)
|
||||||
└─► [IAP] opax.vauco.no
|
└─► [IAP] opax.vauco.no
|
||||||
└─► OPAX backend (GCP)
|
└─► 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:**
|
**Auth-flyt for opax-mcp → opax.vauco.no:**
|
||||||
|
|
@ -164,3 +214,28 @@ opax-mcp container
|
||||||
→ IAP validerer token
|
→ IAP validerer token
|
||||||
→ Request videresendt til OPAX backend
|
→ 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 |
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user