From 95ad4f799a2edcad80a824068eb3a816b3470c23 Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Sat, 13 Jun 2026 17:22:45 +0200 Subject: [PATCH] Revise HANDOFF document for phase 2 updates Updated the HANDOFF document to reflect the latest status, critical issues, and tasks for the ongoing phase 2. Added details on Dockerfile fixes, panel statuses, and next steps for development. --- docs/HANDOFF.md | 202 +++++++++++++++++++++++++++--------------------- 1 file changed, 115 insertions(+), 87 deletions(-) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index cd2e43c..69d543c 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,131 +1,159 @@ # HANDOFF — Vauco OS -**Sist oppdatert:** 2026-06-13 14:45 CEST -**Skrevet av:** Perplexity (stand-in) via GitHub MCP -**Sprint:** Fase 2 — opax.html panel-fikser er neste prioritet +**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 --- -## 🔴 Kritisk blokkering — fikses nå +## ⚠️ KRITISKE REGLER — les alltid først -### `google.cloud.devtools` krasjer `/run`-endepunktet -**Rotårsak:** `main.py` importerer `from google.cloud.devtools import cloudbuild_v1` inne i `/opax/build-status`. -Denne importen krasjer med HTTP 500 og blokkerer: -- Jason: alle verktøykall (`get_build_status`, `get_logs`, `deploy_service`) feiler -- Cloud Build-panel i opax.html: viser alltid ERROR -- `/run`-endepunktet krasjer hvis Jason prøver å bruke et ADK-verktøy - -**Fix:** Erstatt `cloudbuild_v1`-importen med REST API via `httpx` + `google.auth` (se Fase 2-oppdrag nedenfor) +- **Hovudapp:** `main.py` i rot — IKKE `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`) --- -## 🧪 Panel-test 2026-06-13 — opax.vauco.no +## 🔴 Siste kjente problem — Dockerfile base-image -| Panel | Status | Problem | -|-------|--------|----------| -| Jason chat | ✅ Svarer | Enkle spørsmål fungerer — verktøykall gir HTTP 500 | -| CostGuard | 🔴 Spinner evig | Fetcher feil URL eller timeout | +Bygg `00401` og `00403` viste fortsatt: +``` +WORKDIR /app/agents/core-logic +CMD uvicorn app:app +``` +Selv etter at `agents/core-logic/Dockerfile` ble fikset. + +**Rotårsak:** `osvauco-base:latest` base-image inneholder gammel `WORKDIR` og `CMD` som arves. + +**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` + +**Hvis neste bygg fortsatt feiler på `/health`:** +```bash +gcloud builds submit --config=cloudbuild.base.yaml +``` +Deretter trigger et nytt bygg. + +--- + +## 🧪 Panel-status opax.vauco.no (testet 2026-06-13 17:00) + +| 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 | 🔴 ERROR alltid | `devtools`-import krasjer — aldri fungert | +| 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 | Viser 5 hardkodede kommandoer, ingen output fra backend | -| MD | 🔴 Tom | Åpne-knappen gjør ingenting | -| Browser | 🔴 Ødelagt | Kun intern /docs/-proxy — externe URLer viser broken | +| 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 | --- -## 🔴 Fase 2 — Neste oppdrag (gi til Nemotron) +## 🔴 Nåværende oppdrag — gjør i denne rekkefølgen -### Fix 1 — Cloud Build REST (blokkerer Jason) -`/opax/build-status` i `main.py`: fjern `cloudbuild_v1`-import, bruk: -```python -import httpx, google.auth, google.auth.transport.requests +### 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)" -@app.get("/opax/build-status") -async def build_status(): - creds, project = google.auth.default() - creds.refresh(google.auth.transport.requests.Request()) - url = f"https://cloudbuild.googleapis.com/v1/projects/{project}/builds?pageSize=5" - r = httpx.get(url, headers={"Authorization": f"Bearer {creds.token}"}) - builds = r.json().get("builds", []) - return {"builds": [{"id": b["id"], "status": b["status"], - "branch": b.get("substitutions",{}).get("BRANCH_NAME",""), - "createTime": b["createTime"]} for b in builds]} +# 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). -### Fix 2 — MD-panel -`Åpne`-knappen på hvert MD-kort gjør ingenting. -Fiks: klikk → fetch `/docs/` → render markdown inline med `marked.js` +### 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. -### Fix 3 — CostGuard-panel spinner -Finn fetch-URL i `opax.html` for CostGuard-seksjonen. -Verifiser at den peker på `/billing/credits?days=30`. -Legg til timeout 10s og vis "Ingen data" i stedet for evig spinner. - -### Fix 4 — Browser-panel -Fjern ekstern URL-støtte (fungerer ikke — CORS/iframe-blokkering). -Rename til "Docs Browser", placeholder `/docs/MASTERPLAN.md`. -Vis markdown rendret, ikke raw. - -**Commit:** `fix(opax): cloud-build REST, MD-render, CostGuard timeout, browser-panel` +### 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 2026-06-13 -| Commit | Task | Detalj | -|--------|------|---------| -| `6611927` | **Hotfix** `requirements.txt` + BQ-migrering | `google-cloud-build>=3.24.0` lagt til. BQ-skript kjørt ✅ | -| `c114f6c` | **Frontend** `billing-dashboard.html` | Tre pool-bars, Free Trial topbar-banner, `Promise.allSettled()` | -| `bc501c1` | **OQ-31** `billing_agent.py` | `credit_pools[]`, `effective_days`, `badge_class`, `warning: bool` | -| `055a482` | **OQ-29** `main.py` | `GET /notify/channels` — verifisert i prod | -| `4693fea` | **CI-fix** `cloudbuild.yaml` | Fjernet `--audiences` fra smoke-test | +## ✅ Levert og bekreftet ---- - -## ✅ Manuelt utført 2026-06-13 -| Handling | Status | -|----------|--------| -| Kreditt env-vars satt i Cloud Run (rev `00469-p96`) | ✅ Ferdig | -| BQ-migrering kjørt — `caller_type`, `module_name`, `session_id` | ✅ Ferdig | -| `google-cloud-build` i `requirements.txt` | ✅ Pushet | +| 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` | ✅ Verifisert i prod | -| **OQ-30** | Browser-panel `opax.html` | ✅ Løst (frontend) — backend /docs/ fungerer | -| **OQ-31** | `credit_pools[]` + kreditt env-vars | ✅ Komplett | +| OQ-29 | GET /notify/channels | ✅ Prod | +| OQ-30 | Browser-panel opax.html | ✅ Levert | +| OQ-31 | credit_pools[] | ✅ Komplett | --- -## ⚠️ Gjenstår for Chris -| # | Handling | Prioritet | -|---|----------|-----------| -| 1 | Gi Fase 2-oppdraget til Nemotron (Fix 1-4 over) | 🔴 Høy | -| 2 | Sett varslings-env-vars: `SENDGRID_API_KEY`, `NOTIFY_EMAIL_TO`, `TWILIO_ACCOUNT_SID` | Lav | -| 3 | Bestem CG7-scope | Venter på Chris | -| 4 | Aktiver Emma/Gemma — `docs/gemma/world.md` finnes allerede i repo | Medium | +## ⚠️ Gjenstår ---- - -## ⚠️ Regler (låst) -- **Test alltid via `cloud-run-proxy`** — IKKE `--audiences` -- `gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080` -- **Hovudapp:** `main.py` i rot — IKKE `agents/core-logic/app.py` -- **Region:** `us-central1` -- **Service:** `osvauco-agent` +| # | Oppgave | 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 | --- ## 🏗 Systemstatus + | Komponent | Status | |-----------|--------| -| Cloud Run `osvauco-agent` | ✅ Live `us-central1` rev `00469-p96` | +| Cloud Run `osvauco-agent` | ✅ Live us-central1 | | `opax.vauco.no` | ✅ Live — 5/9 paneler fungerer | -| `costguard.oss.vauco.no` | ✅ Innlogging fungerer | -| Jason (ADK) | 🔴 Verktøykall feiler — devtools-fix nødvendig | +| `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 ⚠️) |