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:
parent
6d0eeeba56
commit
38596af1d8
202
docs/HANDOFF.md
202
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 (`<din-token>`) 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**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user