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.
This commit is contained in:
parent
c7e7b28b68
commit
95ad4f799a
202
docs/HANDOFF.md
202
docs/HANDOFF.md
|
|
@ -1,131 +1,159 @@
|
||||||
# HANDOFF — Vauco OS
|
# HANDOFF — Vauco OS
|
||||||
|
|
||||||
**Sist oppdatert:** 2026-06-13 14:45 CEST
|
**Sist oppdatert:** 2026-06-13 17:00 CEST
|
||||||
**Skrevet av:** Perplexity (stand-in) via GitHub MCP
|
**Skrevet av:** Perplexity (stand-in)
|
||||||
**Sprint:** Fase 2 — opax.html panel-fikser er neste prioritet
|
**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
|
- **Hovudapp:** `main.py` i rot — IKKE `agents/core-logic/app.py`
|
||||||
**Rotårsak:** `main.py` importerer `from google.cloud.devtools import cloudbuild_v1` inne i `/opax/build-status`.
|
- **Dockerfile:** `agents/core-logic/Dockerfile` — skal ha `WORKDIR /app` og `CMD ["uvicorn", "main:app", ...]`
|
||||||
Denne importen krasjer med HTTP 500 og blokkerer:
|
- **Region:** `us-central1`
|
||||||
- Jason: alle verktøykall (`get_build_status`, `get_logs`, `deploy_service`) feiler
|
- **Service:** `osvauco-agent`
|
||||||
- Cloud Build-panel i opax.html: viser alltid ERROR
|
- **Prosjekt:** `propane-will-491900-m5`
|
||||||
- `/run`-endepunktet krasjer hvis Jason prøver å bruke et ADK-verktøy
|
- **Test via proxy:** `gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080`
|
||||||
|
- **ALDRI `--audiences`-flag**
|
||||||
**Fix:** Erstatt `cloudbuild_v1`-importen med REST API via `httpx` + `google.auth` (se Fase 2-oppdrag nedenfor)
|
- **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 |
|
Bygg `00401` og `00403` viste fortsatt:
|
||||||
|-------|--------|----------|
|
```
|
||||||
| Jason chat | ✅ Svarer | Enkle spørsmål fungerer — verktøykall gir HTTP 500 |
|
WORKDIR /app/agents/core-logic
|
||||||
| CostGuard | 🔴 Spinner evig | Fetcher feil URL eller timeout |
|
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 |
|
| 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 |
|
| VM-er | ✅ Fungerer | RUNNING, IP, SSH-knapp til GCP |
|
||||||
| Sites & Moduler | ✅ Fungerer | Alle 6 kort vises |
|
| Sites & Moduler | ✅ Fungerer | Alle 6 kort vises |
|
||||||
| Terminal | 🟡 Skall | Viser 5 hardkodede kommandoer, ingen output fra backend |
|
| Terminal | 🟡 Skall | JS kaller endepunkter direkte, ingen POST /terminal/exec backend |
|
||||||
| MD | 🔴 Tom | Åpne-knappen gjør ingenting |
|
| MD | ⚠️ HTTP 404 | Åpne-knappen feiler — løses når COPY docs/ er i prod |
|
||||||
| Browser | 🔴 Ødelagt | Kun intern /docs/-proxy — externe URLer viser broken |
|
| 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)
|
### Oppdrag 1 — Verifiser at Dockerfile-fix er i prod
|
||||||
`/opax/build-status` i `main.py`: fjern `cloudbuild_v1`-import, bruk:
|
```bash
|
||||||
```python
|
# Sjekk siste revisjon
|
||||||
import httpx, google.auth, google.auth.transport.requests
|
gcloud run services describe osvauco-agent --region=us-central1 \
|
||||||
|
--format="value(status.latestReadyRevisionName)"
|
||||||
|
|
||||||
@app.get("/opax/build-status")
|
# Test /health
|
||||||
async def build_status():
|
curl http://localhost:8080/health
|
||||||
creds, project = google.auth.default()
|
|
||||||
creds.refresh(google.auth.transport.requests.Request())
|
# Test /docs/
|
||||||
url = f"https://cloudbuild.googleapis.com/v1/projects/{project}/builds?pageSize=5"
|
curl http://localhost:8080/docs/MASTERPLAN.md | head -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]}
|
|
||||||
```
|
```
|
||||||
|
Hvis HTTP 404 på `/health` → rebuild base-image (se over).
|
||||||
|
|
||||||
### Fix 2 — MD-panel
|
### Oppdrag 2 — Terminal backend (main.py)
|
||||||
`Åpne`-knappen på hvert MD-kort gjør ingenting.
|
Legg til:
|
||||||
Fiks: klikk → fetch `/docs/<filnavn>` → render markdown inline med `marked.js`
|
```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
|
### Oppdrag 3 — VM SSH-nøkkel modal (main.py + opax.html)
|
||||||
Finn fetch-URL i `opax.html` for CostGuard-seksjonen.
|
```python
|
||||||
Verifiser at den peker på `/billing/credits?days=30`.
|
@app.get("/vm/ssh-key")
|
||||||
Legg til timeout 10s og vis "Ingen data" i stedet for evig spinner.
|
async def vm_ssh_key(instance: str = "osvauco-dev-vm"):
|
||||||
|
# hent public key via Compute Engine metadata API
|
||||||
### Fix 4 — Browser-panel
|
# google.auth + httpx GET
|
||||||
Fjern ekstern URL-støtte (fungerer ikke — CORS/iframe-blokkering).
|
# https://compute.googleapis.com/compute/v1/projects/{project}/zones/us-central1-b/instances/{instance}
|
||||||
Rename til "Docs Browser", placeholder `/docs/MASTERPLAN.md`.
|
return {"public_key": str, "instance": str}
|
||||||
Vis markdown rendret, ikke raw.
|
```
|
||||||
|
Legg til "Vis SSH-nøkkel"-knapp på VM-kortet i `opax.html`.
|
||||||
**Commit:** `fix(opax): cloud-build REST, MD-render, CostGuard timeout, browser-panel`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ Levert 2026-06-13
|
## ✅ Levert og bekreftet
|
||||||
| 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 |
|
|
||||||
|
|
||||||
---
|
| Commit | Hva |
|
||||||
|
|--------|-----|
|
||||||
## ✅ Manuelt utført 2026-06-13
|
| `6611927` | `google-cloud-build` i requirements + BQ-migrering |
|
||||||
| Handling | Status |
|
| `c114f6c` | billing-dashboard: tre pool-bars, banner, allSettled |
|
||||||
|----------|--------|
|
| `bc501c1` | credit_pools[], effective_days, badge_class |
|
||||||
| Kreditt env-vars satt i Cloud Run (rev `00469-p96`) | ✅ Ferdig |
|
| `055a482` | GET /notify/channels — verifisert i prod |
|
||||||
| BQ-migrering kjørt — `caller_type`, `module_name`, `session_id` | ✅ Ferdig |
|
| `4693fea` | CI-fix: fjernet --audiences fra smoke-test |
|
||||||
| `google-cloud-build` i `requirements.txt` | ✅ Pushet |
|
| `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-logg
|
||||||
|
|
||||||
| OQ | Beskrivelse | Status |
|
| OQ | Beskrivelse | Status |
|
||||||
|----|-------------|--------|
|
|----|-------------|--------|
|
||||||
| **OQ-29** | `GET /notify/channels` | ✅ Verifisert i prod |
|
| OQ-29 | GET /notify/channels | ✅ Prod |
|
||||||
| **OQ-30** | Browser-panel `opax.html` | ✅ Løst (frontend) — backend /docs/ fungerer |
|
| OQ-30 | Browser-panel opax.html | ✅ Levert |
|
||||||
| **OQ-31** | `credit_pools[]` + kreditt env-vars | ✅ Komplett |
|
| OQ-31 | credit_pools[] | ✅ Komplett |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚠️ Gjenstår for Chris
|
## ⚠️ Gjenstår
|
||||||
| # | 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 |
|
|
||||||
|
|
||||||
---
|
| # | Oppgave | Prioritet |
|
||||||
|
|---|---------|----------|
|
||||||
## ⚠️ Regler (låst)
|
| 1 | Verifiser Dockerfile-fix i prod (/health + /docs/) | 🔴 Høy |
|
||||||
- **Test alltid via `cloud-run-proxy`** — IKKE `--audiences`
|
| 2 | POST /terminal/exec backend + frontend kobling | Høy |
|
||||||
- `gcloud run services proxy osvauco-agent --region=us-central1 --project=propane-will-491900-m5 --port=8080`
|
| 3 | GET /vm/ssh-key + modal i opax.html | Medium |
|
||||||
- **Hovudapp:** `main.py` i rot — IKKE `agents/core-logic/app.py`
|
| 4 | Sett varslings env-vars: SENDGRID_API_KEY, TWILIO_ACCOUNT_SID | Lav |
|
||||||
- **Region:** `us-central1`
|
| 5 | CG7-scope — venter på Chris | Venter |
|
||||||
- **Service:** `osvauco-agent`
|
| 6 | Emma/Gemma GPU VM — docs/gemma/world.md finnes | Medium |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏗 Systemstatus
|
## 🏗 Systemstatus
|
||||||
|
|
||||||
| Komponent | Status |
|
| 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 |
|
| `opax.vauco.no` | ✅ Live — 5/9 paneler fungerer |
|
||||||
| `costguard.oss.vauco.no` | ✅ Innlogging fungerer |
|
| `costguard.oss.vauco.no` | ⚠️ 403 i inline-panel — åpne direkte i nettleser |
|
||||||
| Jason (ADK) | 🔴 Verktøykall feiler — devtools-fix nødvendig |
|
| Jason ADK | ⚠️ Verktøykall feilet — devtools-fix pushet, venter på deploy |
|
||||||
| BQ billing export | ✅ Aktiv |
|
| BQ billing export | ✅ Aktiv |
|
||||||
| Gemma/Emma VM | ⏳ Ikke startet |
|
| Gemma/Emma VM | ⏳ Ikke startet |
|
||||||
|
| Kreditt env-vars | ✅ Satt (INFRA 2911 NOK utløper 2026-07-10 ⚠️) |
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user