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.
This commit is contained in:
chrischristiansen-glitch 2026-06-13 18:31:19 +02:00 committed by GitHub
parent 6d0eeeba56
commit 38596af1d8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,159 +1,109 @@
# HANDOFF — Vauco OS # HANDOFF — Vauco OS
**Sist oppdatert:** 2026-06-13 17:00 CEST **Sist oppdatert:** 2026-06-13 18:00 CEST
**Skrevet av:** Perplexity (stand-in) **Skrevet av:** Nemotron (stand-in)
**Status:** Fase 2 pågår — opax.html paneler og Dockerfile-fix **Status:** Fase 2 — sesjon avsluttet
--- ---
## ⚠️ KRITISKE REGLER — les alltid først ## ⚠️ 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", ...]` - **Dockerfile:** `agents/core-logic/Dockerfile` — skal ha `WORKDIR /app` og `CMD ["uvicorn", "main:app", ...]`
- **Region:** `us-central1` - **Region:** `us-central1` | **Service:** `osvauco-agent` | **Prosjekt:** `propane-will-491900-m5`
- **Service:** `osvauco-agent` - **Test via proxy:** `gcloud run services proxy osvauco-agent --region us-central1 --project propane-will-491900-m5 --port 8181`
- **Prosjekt:** `propane-will-491900-m5` - **ALDRI** `--audiences`-flag
- **Test via proxy:** `gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080` - **Smoke-test:** skal peke på `/health` (ikkje `/debug-health`)
- **ALDRI `--audiences`-flag** - **Curl mot prod:** Bruk alltid identity token — `TOKEN=$(gcloud auth print-identity-token)` — IAP blokkerer utan
- **Smoke-test:** skal peke på `/health` (ikke `/debug-health`)
--- ---
## 🔴 Siste kjente problem — Dockerfile base-image ## ✅ Levert i dag (2026-06-13)
Bygg `00401` og `00403` viste fortsatt: ### PR #17 — merga til main (commit `1e6bc5b`)
``` - `fix(opax): replace cloudbuild_v1 import with REST API``d25caf1`
WORKDIR /app/agents/core-logic - `fix: replace sync httpx.get with async client in build-status + terminal``1e6bc5b`
CMD uvicorn app:app - 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()`
Selv etter at `agents/core-logic/Dockerfile` ble fikset.
**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`):** ### Panelfiksar opax.html
- `WORKDIR /app` satt eksplisitt først i Dockerfile - `fix(opax): MD-panel — bytt renderMd() med marked.js``39f714a`
- `COPY docs/ ./docs/` lagt til - `fix(opax): CostGuard — AbortController 10s timeout + /billing/credits?days=30``b5c03d4`
- `CMD ["uvicorn", "main:app", ...]` bekreftet - `fix(opax): Fix 4 — Browser → Docs Browser, marked.js render, default MASTERPLAN.md``3cc6a83`
- Smoke-test tilbake til `/health`
**Hvis neste bygg fortsatt feiler på `/health`:** ### Backend-endepunkt lagt til
```bash - `feat(terminal+vm): POST /terminal/exec whitelist + GET /vm/ssh-key``c7e7b28`
gcloud builds submit --config=cloudbuild.base.yaml
``` ### IAM
Deretter trigger et nytt bygg. - `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 | **Kva skjedde:** `--set-env-vars` vart køyrt med plasshaldarar (`<din-token>`) i staden for faktiske verdiar. Cloud Run tolka `<` og `>` som ugyldig Python-syntaks → `SyntaxError` → container krasja → revision `00482-5hq` dead.
|-------|--------|-------------------|
| Jason chat | ✅ Svarer | Enkle spørsmål OK — verktøykall ga HTTP 500 (devtools-fix pushet) | **Løysing:**
| CostGuard | ⚠️ Ingen data | Viser "Ingen data tilgjengelig" — løses når riktig app er oppe | 1. `gcloud run services update ... --remove-env-vars GITHUB_TOKEN,SENDGRID_API_KEY,TWILIO_ACCOUNT_SID`
| Kalkulator | ✅ Fungerer | Slider + ROI live | 2. `git commit --allow-empty` + `git pull --rebase` + `git push` for å trigge ny CI/CD
| Cloud Build | ⚠️ Ingen builds | REST-kall fungerer men returnerer tom liste — auth OK | 3. Tenesta tilbake på `00480-dbn` → ny build `3d8caf0` deployd og live
| VM-er | ✅ Fungerer | RUNNING, IP, SSH-knapp til GCP |
| Sites & Moduler | ✅ Fungerer | Alle 6 kort vises | **Lærdom:** Set aldri env-vars med plasshaldarar. Bruk Secret Manager for sensitive verdiar.
| 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 |
--- ---
## 🔴 Nåværende oppdrag — gjør i denne rekkefølgen ## 🧪 Panel-status opax.vauco.no
### Oppdrag 1 — Verifiser at Dockerfile-fix er i prod | Panel | Status |
```bash |-------|--------|
# Sjekk siste revisjon | Jason chat | ✅ Fungerer |
gcloud run services describe osvauco-agent --region=us-central1 \ | Kalkulator | ✅ Fungerer |
--format="value(status.latestReadyRevisionName)" | VM-er | ✅ Fungerer |
| Sites & Moduler | ✅ Fungerer |
# Test /health | CostGuard | ⚠️ Ikkje verifisert i prod etter fix |
curl http://localhost:8080/health | Cloud Build | ⚠️ Ikkje verifisert i prod etter fix |
| Terminal | 🟡 Backend pusht, frontend-kobling manglar |
# Test /docs/ | MD-panel | ⚠️ Ikkje verifisert i prod etter fix |
curl http://localhost:8080/docs/MASTERPLAN.md | head -5 | Docs Browser | ⚠️ Ikkje verifisert i prod etter fix |
```
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`.
--- ---
## ✅ Levert og bekreftet ## ⚠️ Gjenstår (prioritert)
| Commit | Hva | | # | Oppgåve | Prioritet |
|--------|-----|
| `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 |
|---|---------|----------| |---|---------|----------|
| 1 | Verifiser Dockerfile-fix i prod (/health + /docs/) | 🔴 Høy | | 1 | Verifiser alle paneler i `opax.vauco.no` i nettlesar | 🔴 Høy |
| 2 | POST /terminal/exec backend + frontend kobling | 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 | | 3 | GET /vm/ssh-key modal i `opax.html` | 🟡 Medium |
| 4 | Sett varslings env-vars: SENDGRID_API_KEY, TWILIO_ACCOUNT_SID | Lav | | 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 | Venter | | 5 | CG7-scope | ⏳ Venter på Chris |
| 6 | Emma/Gemma GPU VM — docs/gemma/world.md finnes | Medium | | 6 | Emma/Gemma GPU VM — sjå `docs/gemma/world.md` | 🟡 Medium |
| 7 | OAuth allowlist etter domene-migrering (ProISP → Google) | 🟡 Issue open |
--- ---
## 🏗 Systemstatus ## 🏗 Systemstatus
| Komponent | Status | - **Cloud Run osvauco-agent:** ✅ Live `us-central1` — revision `00483` (etter CI/CD `3d8caf0`)
|-----------|--------| - **opax.vauco.no:** Live — panel-status ikkje verifisert etter dagens fixar
| Cloud Run `osvauco-agent` | ✅ Live us-central1 | - **costguard.oss.vauco.no:** 403 i inline-panel
| `opax.vauco.no` | ✅ Live — 5/9 paneler fungerer | - **Kreditt:** 2911 NOK utløper 2026-07-10
| `costguard.oss.vauco.no` | ⚠️ 403 i inline-panel — åpne direkte i nettleser | - **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`
| Jason ADK | ⚠️ Verktøykall feilet — devtools-fix pushet, venter på deploy | - **Manglar:** `GITHUB_TOKEN`, `SENDGRID_API_KEY`, `TWILIO_ACCOUNT_SID`
| BQ billing export | ✅ Aktiv |
| Gemma/Emma VM | ⏳ Ikke startet | ---
| Kreditt env-vars | ✅ Satt (INFRA 2911 NOK utløper 2026-07-10 ⚠️) |
## 📌 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**