From 38596af1d8e1c46d33a6a6fc866224c6c2c9ce50 Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Sat, 13 Jun 2026 18:31:19 +0200 Subject: [PATCH] Revise HANDOFF.md with updates and fixes Updated the Handoff document with recent changes, including status updates, critical rules, and fixes related to Dockerfile and backend endpoints. --- docs/HANDOFF.md | 202 ++++++++++++++++++------------------------------ 1 file changed, 76 insertions(+), 126 deletions(-) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 69d543c..c6c9072 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,159 +1,109 @@ # HANDOFF — Vauco OS -**Sist oppdatert:** 2026-06-13 17:00 CEST -**Skrevet av:** Perplexity (stand-in) -**Status:** Fase 2 pågår — opax.html paneler og Dockerfile-fix +**Sist oppdatert:** 2026-06-13 18:00 CEST +**Skrevet av:** Nemotron (stand-in) +**Status:** Fase 2 — sesjon avsluttet --- ## ⚠️ KRITISKE REGLER — les alltid først -- **Hovudapp:** `main.py` i rot — IKKE `agents/core-logic/app.py` +- **Hovudapp:** `main.py` i rot — IKKJE `agents/core-logic/app.py` - **Dockerfile:** `agents/core-logic/Dockerfile` — skal ha `WORKDIR /app` og `CMD ["uvicorn", "main:app", ...]` -- **Region:** `us-central1` -- **Service:** `osvauco-agent` -- **Prosjekt:** `propane-will-491900-m5` -- **Test via proxy:** `gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080` -- **ALDRI `--audiences`-flag** -- **Smoke-test:** skal peke på `/health` (ikke `/debug-health`) +- **Region:** `us-central1` | **Service:** `osvauco-agent` | **Prosjekt:** `propane-will-491900-m5` +- **Test via proxy:** `gcloud run services proxy osvauco-agent --region us-central1 --project propane-will-491900-m5 --port 8181` +- **ALDRI** `--audiences`-flag +- **Smoke-test:** skal peke på `/health` (ikkje `/debug-health`) +- **Curl mot prod:** Bruk alltid identity token — `TOKEN=$(gcloud auth print-identity-token)` — IAP blokkerer utan --- -## 🔴 Siste kjente problem — Dockerfile base-image +## ✅ Levert i dag (2026-06-13) -Bygg `00401` og `00403` viste fortsatt: -``` -WORKDIR /app/agents/core-logic -CMD uvicorn app:app -``` -Selv etter at `agents/core-logic/Dockerfile` ble fikset. +### PR #17 — merga til main (commit `1e6bc5b`) +- `fix(opax): replace cloudbuild_v1 import with REST API` — `d25caf1` +- `fix: replace sync httpx.get with async client in build-status + terminal` — `1e6bc5b` +- To stader i `main.py` fiksa: linje ~188 (`build_status()`) og linje ~248 (`terminal_exec` cmd=build) +- Synkron `httpx.get` → `async with httpx.AsyncClient(timeout=15.0)` + `raise_for_status()` -**Rotårsak:** `osvauco-base:latest` base-image inneholder gammel `WORKDIR` og `CMD` som arves. +### Dockerfile-fix +- `fix(docker): start main:app fra /app — ikke agents/core-logic` — `beb466e` +- `WORKDIR /app` og `CMD ["uvicorn", "main:app", ...]` bekrefta i prod -**Siste fix (commit `beb466e`):** -- `WORKDIR /app` satt eksplisitt først i Dockerfile -- `COPY docs/ ./docs/` lagt til -- `CMD ["uvicorn", "main:app", ...]` bekreftet -- Smoke-test tilbake til `/health` +### Panelfiksar opax.html +- `fix(opax): MD-panel — bytt renderMd() med marked.js` — `39f714a` +- `fix(opax): CostGuard — AbortController 10s timeout + /billing/credits?days=30` — `b5c03d4` +- `fix(opax): Fix 4 — Browser → Docs Browser, marked.js render, default MASTERPLAN.md` — `3cc6a83` -**Hvis neste bygg fortsatt feiler på `/health`:** -```bash -gcloud builds submit --config=cloudbuild.base.yaml -``` -Deretter trigger et nytt bygg. +### Backend-endepunkt lagt til +- `feat(terminal+vm): POST /terminal/exec whitelist + GET /vm/ssh-key` — `c7e7b28` + +### IAM +- `osvauco-agent-sa` har fått `roles/cloudbuild.builds.viewer` — satt manuelt + +### Andre commits +- `chore: oppdater gemma/world.md + vm-teardown.sh` — `6d0eeeb` +- `chore: trigger CI/CD redeploy — rollback env-var fix` — `3d8caf0` --- -## 🧪 Panel-status opax.vauco.no (testet 2026-06-13 17:00) +## 🔴 Incident i dag — env-var-krasj -| Panel | Status | Problem / Merknad | -|-------|--------|-------------------| -| Jason chat | ✅ Svarer | Enkle spørsmål OK — verktøykall ga HTTP 500 (devtools-fix pushet) | -| CostGuard | ⚠️ Ingen data | Viser "Ingen data tilgjengelig" — løses når riktig app er oppe | -| Kalkulator | ✅ Fungerer | Slider + ROI live | -| Cloud Build | ⚠️ Ingen builds | REST-kall fungerer men returnerer tom liste — auth OK | -| VM-er | ✅ Fungerer | RUNNING, IP, SSH-knapp til GCP | -| Sites & Moduler | ✅ Fungerer | Alle 6 kort vises | -| Terminal | 🟡 Skall | JS kaller endepunkter direkte, ingen POST /terminal/exec backend | -| MD | ⚠️ HTTP 404 | Åpne-knappen feiler — løses når COPY docs/ er i prod | -| Docs Browser | ⚠️ HTTP 404 | Samme — løses med riktig Dockerfile i prod | +**Kva skjedde:** `--set-env-vars` vart køyrt med plasshaldarar (``) i staden for faktiske verdiar. Cloud Run tolka `<` og `>` som ugyldig Python-syntaks → `SyntaxError` → container krasja → revision `00482-5hq` dead. + +**Løysing:** +1. `gcloud run services update ... --remove-env-vars GITHUB_TOKEN,SENDGRID_API_KEY,TWILIO_ACCOUNT_SID` +2. `git commit --allow-empty` + `git pull --rebase` + `git push` for å trigge ny CI/CD +3. Tenesta tilbake på `00480-dbn` → ny build `3d8caf0` deployd og live + +**Lærdom:** Set aldri env-vars med plasshaldarar. Bruk Secret Manager for sensitive verdiar. --- -## 🔴 Nåværende oppdrag — gjør i denne rekkefølgen +## 🧪 Panel-status opax.vauco.no -### Oppdrag 1 — Verifiser at Dockerfile-fix er i prod -```bash -# Sjekk siste revisjon -gcloud run services describe osvauco-agent --region=us-central1 \ - --format="value(status.latestReadyRevisionName)" - -# Test /health -curl http://localhost:8080/health - -# Test /docs/ -curl http://localhost:8080/docs/MASTERPLAN.md | head -5 -``` -Hvis HTTP 404 på `/health` → rebuild base-image (se over). - -### Oppdrag 2 — Terminal backend (main.py) -Legg til: -```python -@app.post("/terminal/exec") -async def terminal_exec(body: dict): - cmd = body.get("cmd", "").strip() - whitelist = { - "health": lambda: {"output": "OK", "exit_code": 0}, - "billing": "GET /billing/summary", - "build": "GET /opax/build-status", - "help": lambda: {"output": "Kommandoer: health billing build logs help", "exit_code": 0}, - } - if cmd not in whitelist: - return {"output": f"Ukjent kommando: {cmd}", "exit_code": 1} - # kall internt og returner output som streng -``` -Koble `opax.html` terminal-input til `POST /terminal/exec` og vis output. - -### Oppdrag 3 — VM SSH-nøkkel modal (main.py + opax.html) -```python -@app.get("/vm/ssh-key") -async def vm_ssh_key(instance: str = "osvauco-dev-vm"): - # hent public key via Compute Engine metadata API - # google.auth + httpx GET - # https://compute.googleapis.com/compute/v1/projects/{project}/zones/us-central1-b/instances/{instance} - return {"public_key": str, "instance": str} -``` -Legg til "Vis SSH-nøkkel"-knapp på VM-kortet i `opax.html`. +| Panel | Status | +|-------|--------| +| Jason chat | ✅ Fungerer | +| Kalkulator | ✅ Fungerer | +| VM-er | ✅ Fungerer | +| Sites & Moduler | ✅ Fungerer | +| CostGuard | ⚠️ Ikkje verifisert i prod etter fix | +| Cloud Build | ⚠️ Ikkje verifisert i prod etter fix | +| Terminal | 🟡 Backend pusht, frontend-kobling manglar | +| MD-panel | ⚠️ Ikkje verifisert i prod etter fix | +| Docs Browser | ⚠️ Ikkje verifisert i prod etter fix | --- -## ✅ Levert og bekreftet +## ⚠️ Gjenstår (prioritert) -| Commit | Hva | -|--------|-----| -| `6611927` | `google-cloud-build` i requirements + BQ-migrering | -| `c114f6c` | billing-dashboard: tre pool-bars, banner, allSettled | -| `bc501c1` | credit_pools[], effective_days, badge_class | -| `055a482` | GET /notify/channels — verifisert i prod | -| `4693fea` | CI-fix: fjernet --audiences fra smoke-test | -| `39f714a` | MD-panel: marked.js + openMd() | -| `b5c03d4` | CostGuard: fetchWithTimeout 10s + fallback | -| `3cc6a83` | Docs Browser: dropdown, auto-load, marked.js | -| `beb466e` | Dockerfile: WORKDIR /app, COPY docs/, main:app | - ---- - -## ✅ OQ-logg - -| OQ | Beskrivelse | Status | -|----|-------------|--------| -| OQ-29 | GET /notify/channels | ✅ Prod | -| OQ-30 | Browser-panel opax.html | ✅ Levert | -| OQ-31 | credit_pools[] | ✅ Komplett | - ---- - -## ⚠️ Gjenstår - -| # | Oppgave | Prioritet | +| # | Oppgåve | Prioritet | |---|---------|----------| -| 1 | Verifiser Dockerfile-fix i prod (/health + /docs/) | 🔴 Høy | -| 2 | POST /terminal/exec backend + frontend kobling | Høy | -| 3 | GET /vm/ssh-key + modal i opax.html | Medium | -| 4 | Sett varslings env-vars: SENDGRID_API_KEY, TWILIO_ACCOUNT_SID | Lav | -| 5 | CG7-scope — venter på Chris | Venter | -| 6 | Emma/Gemma GPU VM — docs/gemma/world.md finnes | Medium | +| 1 | Verifiser alle paneler i `opax.vauco.no` i nettlesar | 🔴 Høy | +| 2 | Terminal frontend-kobling — `runTerminalCommand()` i `opax.html` → `POST /terminal/exec` | 🔴 Høy | +| 3 | GET /vm/ssh-key modal i `opax.html` | 🟡 Medium | +| 4 | Env-vars: `GITHUB_TOKEN`, `SENDGRID_API_KEY`, `TWILIO_ACCOUNT_SID` — hent frå SendGrid/Twilio/GitHub og set via `--set-env-vars` med faktiske verdiar | 🟡 Medium | +| 5 | CG7-scope | ⏳ Venter på Chris | +| 6 | Emma/Gemma GPU VM — sjå `docs/gemma/world.md` | 🟡 Medium | +| 7 | OAuth allowlist etter domene-migrering (ProISP → Google) | 🟡 Issue open | --- ## 🏗 Systemstatus -| Komponent | Status | -|-----------|--------| -| Cloud Run `osvauco-agent` | ✅ Live us-central1 | -| `opax.vauco.no` | ✅ Live — 5/9 paneler fungerer | -| `costguard.oss.vauco.no` | ⚠️ 403 i inline-panel — åpne direkte i nettleser | -| Jason ADK | ⚠️ Verktøykall feilet — devtools-fix pushet, venter på deploy | -| BQ billing export | ✅ Aktiv | -| Gemma/Emma VM | ⏳ Ikke startet | -| Kreditt env-vars | ✅ Satt (INFRA 2911 NOK utløper 2026-07-10 ⚠️) | +- **Cloud Run osvauco-agent:** ✅ Live `us-central1` — revision `00483` (etter CI/CD `3d8caf0`) +- **opax.vauco.no:** Live — panel-status ikkje verifisert etter dagens fixar +- **costguard.oss.vauco.no:** 403 i inline-panel +- **Kreditt:** 2911 NOK utløper 2026-07-10 +- **Env-vars på Cloud Run:** `GOOGLE_CLOUD_PROJECT`, `GOOGLE_CLOUD_LOCATION`, `GOOGLE_GENAI_USE_VERTEXAI`, `BILLING_TABLE`, `RAG_CORPUS`, `RAG_LOCATION`, `GOOGLE_CLIENT_ID`, `SESSION_SECRET`, `GOOGLE_CLIENT_SECRET`, `MCP_SECRET` +- **Manglar:** `GITHUB_TOKEN`, `SENDGRID_API_KEY`, `TWILIO_ACCOUNT_SID` + +--- + +## 📌 Neste sesjon — start her + +1. Gå til `opax.vauco.no` i nettlesar — sjekk alle 9 paneler +2. Les `main.py` linje 240-280 for terminal-frontend-kobling +3. Hent `GITHUB_TOKEN` frå github.com/settings/tokens, `SENDGRID_API_KEY` frå sendgrid.com, `TWILIO_ACCOUNT_SID` frå console.twilio.com +4. Set env-vars med faktiske verdiar — **ikkje plasshaldarar**