docs: oppdater HANDOFF + ROADMAP etter CI1-bygg — ingen 3part

This commit is contained in:
chrischristiansen-glitch 2026-06-15 17:44:44 +02:00
parent 2b791452f9
commit 03880812ea
2 changed files with 92 additions and 72 deletions

View File

@ -1,91 +1,98 @@
# HANDOFF — Vauco OS
**Sist oppdatert:** 2026-06-15 07:05 CEST
**Skrevet av:** Sonar/Perplexity (Orchestrator 2)
**Status:** Fase 2 — aktiv sesjon
**Sist oppdatert:** 2026-06-15 17:42 CEST
**Skrevet av:** Perplexity (Orchestrator)
**Status:** Fase B — aktiv sesjon
---
## ⚠️ KRITISKE REGLER — les alltid først
- **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`WORKDIR `/app`, 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 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
- **GITHUB_PAT** → migrerer til eigen MCP (planlagt, ikkje kritisk no)
- **ALDRI** `--audiences`-flag i smoke-tests
- **Smoke-test:** peker på `/health`
- **Curl mot prod:** alltid identity token — `TOKEN=$(gcloud auth print-identity-token)`
- **Ingen tredjepartsverktøy:** Cursor, Copilot og lignende skal IKKE brukes. Alt eies og kjøres i eget GCP/GitHub.
- **MCP-server** (`opax-mcp/`) er intern binding mellom Jason/Emma og OPAX — ikke en ekstern klientintegrasjon.
---
## ✅ Levert — kumulative commits
## ✅ Levert denne sesjonen (2026-06-15)
| SHA | Commit | Dato |
|-----|--------|------|
| (denne) | `feat: onboard.html + fix len(agents) i /run/dag + HANDOFF` | 2026-06-15 |
| `6367683` | `fix(CG6): loadChannels() matcher /notify/channels API-format (OQ-29)` | 2026-06-15 |
| `0e066d8` | `feat(vm): SSH-nøkkel-knapp + modal i opax.html` | 2026-06-15 |
| `afc878b` | `feat(terminal): koble frontend til POST /terminal/exec` | 2026-06-15 |
| `1e6bc5b` | `fix: replace sync httpx.get with async client in build-status + terminal` | 2026-06-13 |
| `beb466e` | `fix(docker): start main:app fra /app` | 2026-06-13 |
| `3cc6a83` | `fix(opax): Docs Browser, marked.js render` | 2026-06-13 |
---
## 🧪 Panel-status opax.vauco.no
| Panel | Status | Notat |
|-------|--------|-------|
| Jason chat | ✅ Fungerer | |
| Kalkulator | ✅ Fungerer | |
| VM-er | ✅ Fungerer | |
| Sites & Moduler | ✅ Fungerer | |
| Cloud Build | ⚠️ Viser tom liste | IAP-problem, ikkje app-feil |
| CostGuard | ⚠️ Ingen data | `GOOGLE_CREDIT_TOTAL_USD` env-var ikkje satt |
| Terminal | ✅ Frontend kobla | |
| MD-panel | ⚠️ Ikkje verifisert | |
| Docs Browser | ⚠️ Ikkje verifisert | |
| SHA | Commit | Hva |
|-----|--------|-----|
| `2b79145` | `feat(CI1): opax-mcp server — full OPAX tool coverage + Dockerfile + cloudbuild` | MCP-server med 20 tools + CI/CD |
| `4f3a802` | `feat(CG5-onboard): token-basert invite-system + offentlig onboard-flow` | Invite-tokens, offentlig onboard, e-post |
| `099c1cc` | `feat(OQ-26): docs/gemma/world.md — Emma boot context` | Emma sin kontekstpakke |
---
## ✅ Lukkede issues denne sesjonen
| ID | Kva | Løysing |
| ID | Hva | Løsning |
|----|-----|---------|
| OQ-29 | `GET /notify/channels` feil format i dashboard | `loadChannels()` fiksa i `costguard-dashboard.html` |
| CG5-onboard UI | `static/onboard.html` mangla | Oppretta — 4-stegs wizard |
| len(agents)-bug | `/run/dag` kræsja på lengde-mismatch | `build_agent_dag()` i `task_graph.py` hardna mot mismatch |
| OQ-26 | `docs/gemma/world.md` mangler — Emma blokkert | Opprettet ✅ |
| CG5-onboard | Ingen salgsflyt for kunde-onboarding | Token-invite system ✅ |
| CI1 (kode) | `opax-mcp/` var tom | server.py + Dockerfile + cloudbuild.mcp.yaml ✅ |
---
## 🔴 Gjenstår (prioritert)
## 🔴 CI1 — Siste steg (manuelt i GCP Console)
| # | Oppgåve | Prioritet |
|---|---------|----------|
| 1 | Sett env-vars: `SENDGRID_API_KEY`, `TWILIO_ACCOUNT_SID`, `GOOGLE_CREDIT_TOTAL_USD` på Cloud Run | 🔴 Høy |
| 2 | Verifiser Terminal + MD-panel + Docs Browser i nettlesar | 🔴 Høy |
| 3 | `docs/gemma/world.md` — blokkerer ML-3a / Emma | 🟡 Medium |
| 4 | Cloud Build IAP-bypass for `iap.httpsResourceAccessor` | 🟡 Medium |
| 5 | CI1 — opax-mcp full CI/CD-kanal | 🟡 Medium |
| 6 | CG5c — SMS (Twilio) — krev TWILIO_* env-vars | ⏳ Venter på env-vars |
| 7 | CG7-scope | ⏳ Venter på Chris |
`cloudbuild.mcp.yaml` er klar. Trigger må opprettes **av Chris** i GCP Console:
**GCP Console → Cloud Build → Triggers → Create trigger**
| Felt | Verdi |
|------|-------|
| Navn | `opax-mcp-deploy` |
| Repo | `vauco-saas/OSVauco` |
| Branch | `^main$` |
| Build config | `cloudbuild.mcp.yaml` |
| Included files | `opax-mcp/**` |
| Service account | `osvauco-agent-sa@propane-will-491900-m5.iam.gserviceaccount.com` |
Alt kjører i ditt eget GCP — ingen tredjeparter.
---
## 🟠 Gjenstår (prioritert)
| # | Oppgave | Blokkering |
|---|---------|------------|
| 1 | Opprett Cloud Build-trigger for `opax-mcp` (se over) | Manuelt i GCP Console |
| 2 | Sett env-vars som mangler på `osvauco-agent` Cloud Run | GCP Console / gcloud |
| 3 | ML-3a VM — GPU Spot VM for Emma | Planlegging |
| 4 | C4 — Medioteq partnerstrategimøte | Aktiveres nå |
| 5 | CG5c — SMS (Twilio) | Venter på TWILIO_* env-vars |
| 6 | Verifiser Terminal + MD-panel + Docs Browser i nettleser | Manuell test |
---
## 🏗 Systemstatus
- **Cloud Run osvauco-agent:** ✅ Live `us-central1`
- **opax.vauco.no:** ✅ Live
- **Kreditt:** 2911 NOK utløper 2026-07-10
- **Env-vars på Cloud Run (satt):** `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`
- **Env-vars som MANGLER:** `SENDGRID_API_KEY`, `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN`, `TWILIO_FROM_NUMBER`, `GOOGLE_CREDIT_TOTAL_USD`, `NOTIFY_EMAIL_TO`, `NOTIFY_WEBHOOK_URL`, `VAUCO_INTERNAL_WEBHOOK`
| Komponent | Status |
|-----------|--------|
| `osvauco-agent` Cloud Run | ✅ Live `us-central1` |
| `opax.vauco.no` | ✅ Live |
| `opax-mcp/` kode | ✅ Pushet, venter på Cloud Build trigger |
| `docs/gemma/world.md` | ✅ Opprettet |
| Emma boot | ✅ Laster world.md ved oppstart |
| Invite-system | ✅ Live (`/onboard/invite/{token}`) |
| Kreditt | 2911 NOK, utløper 2026-07-10 |
**Env-vars som MANGLER på Cloud Run:**
`SENDGRID_API_KEY`, `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN`, `TWILIO_FROM_NUMBER`,
`GOOGLE_CREDIT_TOTAL_USD`, `NOTIFY_EMAIL_TO`, `NOTIFY_WEBHOOK_URL`, `VAUCO_INTERNAL_WEBHOOK`
---
## 📌 Neste sesjon — start her
1. Sett manglende env-vars via Cloud Console eller gcloud
2. Verifiser Terminal, MD-panel, Docs Browser i nettlesar
3. Test `/onboard``costguard.oss.vauco.no/onboard` eller via proxy
4. Neste kode-oppgave: `docs/gemma/world.md` for ML-3a
1. GCP Console → Cloud Build → opprett trigger `opax-mcp-deploy`
2. Sett manglende env-vars på `osvauco-agent`
3. Test invite-flow: `POST /onboard/invite` → link → `GET /onboard/invite/{token}`
4. Neste kode: C4-forberedelse eller ML-3a VM

View File

@ -24,8 +24,8 @@
## Fase B — CostGuard klient-flow (🟠 IN PROGRESS)
> **Fokus:** Bygg CostGuard som et produkt klienter faktisk kan bruke og betale for.
> Prismodell v2 godkjent 2026-06-12. Push-first arkitektur: Jason finner kunden — ikke omvendt.
> C4 (Medioteq) er deprioritert og er et partnerstrategimøte (joint venture), ikke salg.
> Prismodell v2 godkjent 2026-06-12. Push-first arkitektur.
> **Prinsipp:** Ingen tredjepartsverktøy. Alt eies og kjøres i eget GCP/GitHub.
### CG4 — Kalkulator & UI
@ -34,7 +34,7 @@
| **CG4d** | Prisingskalkulator — GCP-spend slider, tier-highlighter, ROI-beregning | ✅ | Høy |
| **CG6** | Klient-dashboard `costguard.oss.vauco.no` | ✅ 2026-06-15 | Høy |
### CG5 — Delivery layer (push-first)
### CG5 — Delivery layer
| ID | Oppgave | Status | Tier | Prioritet |
|----|---------|--------|------|-----------|
@ -46,24 +46,36 @@
| ID | Oppgave | Status | Prioritet |
|----|---------|--------|-----------|
| **CG5-onboard** | `onboard.html` 4-stegs wizard + `POST /onboard/complete` | ✅ 2026-06-15 | Høy |
| **CG5-onboard** | 4-stegs wizard + token-invite system + `POST /onboard/complete` | ✅ 2026-06-15 | Høy |
| **OQ-29** | `GET /notify/channels` — korrekt format i dashboard | ✅ 2026-06-15 | Lav |
| **OQ-26** | `docs/gemma/world.md` — Emma boot context | ✅ 2026-06-15 | Høy |
### CI1 — opax-mcp CI/CD
| ID | Oppgave | Status | Prioritet |
|----|---------|--------|-----------|
| **CI1-kode** | `opax-mcp/server.py` — 20 tools, Dockerfile, requirements | ✅ 2026-06-15 | Høy |
| **CI1-cicd** | `cloudbuild.mcp.yaml` — CI/CD pipeline | ✅ 2026-06-15 | Høy |
| **CI1-trigger** | Cloud Build trigger opprettes i GCP Console av Chris | 🔴 Manuelt steg | Høy |
> **Prinsipp CI1:** opax-mcp er intern binding mellom Jason/Emma og OPAX-plattformen.
> Ingen tredjepartsverktøy (Cursor, Copilot o.l.). Alt eies 100% av Vauco AS i eget GCP.
### Infrastruktur (parallelt)
| ID | Oppgave | Status | Prioritet |
|----|---------|--------|-----------|
| OX2 | OPAX Hub: koble gjenværende funksjoner | 🟠 | Medium |
| CI1 | OPAX-MCP: full CI/CD-kanal (CI1ae) | 🟠 | Medium |
| **ML-3a** | GPU-VM for Emma + `docs/gemma/world.md` | 🟠 world.md ✅ 2026-06-15 — VM gjenstår | Medium |
| **ML-3a** | GPU-VM for Emma + world.md | 🟠 world.md ✅ — VM gjenstår | Medium |
### Gjenstår før Fase B er ferdig
| ID | Oppgave | Blokkering |
|----|---------|------------|
| CI1-trigger | Cloud Build trigger for opax-mcp | Manuelt i GCP Console |
| CG5c | SMS-varsler | `TWILIO_*` env-vars |
| Verifisering | Terminal, MD-panel, Docs Browser i opax.vauco.no | Manuell test |
| ML-3a VM | GPU Spot VM oppsett for Emma | Planlegging |
| ML-3a VM | GPU Spot VM for Emma | Planlegging |
| Env-vars | `SENDGRID_API_KEY`, `GOOGLE_CREDIT_TOTAL_USD` m.fl. | GCP Console |
---
@ -71,7 +83,7 @@
| ID | Oppgave | Status | Notat |
|----|---------|--------|-------|
| **C4** | Medioteq partnerstrategimøte (joint venture) | 🟡 | Aktiveres når CG-klient-flow er klar |
| **C4** | Medioteq partnerstrategimøte (joint venture) | 🟡 Klar å aktivere | Aktiveres etter CI1-trigger |
| **C5** | Salgsdemo | 🟡 | Avventer C4 |
| ML-3c | Hybrid agent: Emma internt / Jason for kunder | 🟡 | |
| T1T4 | Threadstone full app | 🟡 | |
@ -105,12 +117,13 @@
- Push-first: Jason finner kunden der de er
- Delivery layer: CG5a + CG5b + CG5c
### 2026-06-15 — Fase B hoveddel levert
### 2026-06-15 — Fase B hoveddel + CI1 + eierskap-prinsipp
- CG5a `POST /notify/webhook`
- CG5b `POST /notify/email`
- CG5-onboard `onboard.html` 4-stegs wizard
- CG5-onboard token-invite system
- CG6 `costguard-dashboard.html`
- OQ-29 `loadChannels()` fix ✅
- `len(agents)`-bugfix i `ml/task_graph.py`
- `docs/gemma/world.md` opprettet — ML-3a delvis ✅
- ROADMAP og HANDOFF oppdatert
- OQ-26 `docs/gemma/world.md`
- CI1 `opax-mcp/server.py` 20 tools ✅
- CI1 `cloudbuild.mcp.yaml`
- **Prinsipp fastslått:** Ingen tredjepartsverktøy. Alt eies i eget GCP/GitHub.
- CI1-trigger gjenstår — manuelt steg i GCP Console av Chris