docs: korriger mappestruktur i MASTERPLAN + oppdater HANDOFF med faktisk repo-layout [2026-06-12]

This commit is contained in:
chrischristiansen-glitch 2026-06-12 16:19:36 +02:00
parent 7aa73842d4
commit 9783ed10f8
2 changed files with 217 additions and 355 deletions

View File

@ -1,8 +1,8 @@
# HANDOFF — Vauco OS
**Sist oppdatert:** 2026-06-12 16:09 CEST
**Sist oppdatert:** 2026-06-12 16:16 CEST
**Skrevet av:** Perplexity (stand-in) via GitHub MCP
**Sprint:** CostGuard prismodell v2 + push-first arkitektur + delivery layer definert
**Sprint:** Mappestruktur korrigert — main.py er hovudapp, opax-mcp/ er MCP-server
---
@ -10,15 +10,11 @@
| Task | Detalj |
|------|--------|
| **MASTERPLAN seksjon 10** | Prismodell v2 godkjent og pushet — Starter $499 / Guard $999 / Shield $1.999 / Enterprise $3.500+ |
| **Tier-grenser** | Basert på kundens GCP-spend (ikke token-volum) — $03k / $315k / $1550k / >$50k |
| **Feature-spec per tier** | Full feature-liste per tier definert og låst i MASTERPLAN |
| **Push-first arkitektur** | Konsept: "Jason finner kunden — ikke omvendt". Delivery layer definert |
| **Delivery layer** | Tre kanaler: CG5a webhook / CG5b e-post / CG5c SMS |
| **Nye endepunkter definert** | `POST /notify/webhook`, `POST /notify/email`, `POST /notify/sms` — ikke bygget ennå |
| **Markedsposisjon** | Dokumentert mot Kubecost ($199) / Cloudability ($1.930) / CloudHealth ($5.400+) |
| **ROADMAP oppdatert** | CG4d + CG5a + CG5b + CG5c + CG5-onboard lagt til som 🔴 NOW |
| **Commit** | [`c312f4a`](https://github.com/vauco-saas/OSVauco/commit/c312f4a7274f65eb213477956854977df10d7a7a) |
| **MASTERPLAN seksjon 10** | Prismodell v2: Starter $499 / Guard $999 / Shield $1.999 / Enterprise $3.500+ |
| **Push-first arkitektur** | Delivery layer: CG5a webhook + CG5b e-post + CG5c SMS |
| **Mappestruktur korrigert** | Verifisert mot GitHub API — main.py er hovudapp, opax-mcp/ er MCP-mappa |
| **MASTERPLAN seksjon 4** | Korrekt repo-layout dokumentert med alle faktiske mapper |
| **Commits** | [`c312f4a`](https://github.com/vauco-saas/OSVauco/commit/c312f4a7274f65eb213477956854977df10d7a7a) + [`7aa7384`](https://github.com/vauco-saas/OSVauco/commit/7aa73842d46b2b65610358c0ff8e456b2189e7f4) |
---
@ -26,34 +22,21 @@
| Task | Detalj |
|------|--------|
| **CG4b** | Chart.js donut live — `renderDonut()`, 8-farge palett, DOM-safe |
| **Build 2f385fe3** | ✅ Grønt — commit `87345b1` |
| **Medioteq presisert** | Joint venture, ikke SaaS-kunde — alle filer oppdatert |
| **C4 deprioritert** | Partnerstrategimøte, aktiveres etter CostGuard klient-flow |
| **CG4b** | Chart.js donut live — build 2f385fe3 ✅ |
| **Medioteq** | Joint venture presisert — ikke SaaS-kunde |
---
## 🔴 NOW — Neste oppgaver (prioritert rekkefølge)
## 🔴 NOW — Neste oppgaver (prioritert)
| ID | Oppgave | Prioritet | Byggetid | Notat |
|----|---------|-----------|----------|-------|
| **CG5a** | Delivery layer + webhook — `POST /notify/webhook` → Slack/Teams/Chat/Discord | 🔴 Høy | 23t | Gir Starter-tieren verdi umiddelbart |
| **CG4d** | Prisingskalkulator i `opax.html` — GCP-spend slider, tier-highlight, ROI | 🔴 Høy | 2t | Selger produktet visuelt |
| **CG5b** | E-post digest — SendGrid, daglig + månedlig rapport | 🔴 Høy | 2t | Starter-tier inkludert |
| **CG5c** | SMS-varsler — Twilio, kun kritiske spikes | 🔴 Medium | 2t | Guard+ |
| **CG5-onboard** | Klient-onboarding flow — provisjonering + kanal-oppsett | 🔴 Høy | 12d | Kobler alt sammen |
| **CG6** | Klient-dashboard på `costguard.oss.vauco.no` | 🔴 Høy | 23d | Frontend mot eksisterende API |
---
## 🟠 NEXT (etter Fase B)
| ID | Oppgave |
|----|---------|
| CI1 | OPAX-MCP full CI/CD-kanal (CI1ae) |
| ML-3a | GPU-VM for Emma (Gemma 4) + `emma.vauger@vauco.no` |
| C4 | Medioteq partnerstrategimøte |
| C5 | Salgsdemo |
| ID | Oppgave | Fil | Byggetid |
|----|---------|-----|----------|
| **CG5a** | `POST /notify/webhook` — Jason poster til Slack/Teams/Chat/Discord | `main.py` | 23t |
| **CG4d** | Prisingskalkulator — GCP-spend slider + tier + ROI | `static/opax.html` | 2t |
| **CG5b** | `POST /notify/email` — SendGrid digest | `main.py` | 2t |
| **CG5c** | `POST /notify/sms` — Twilio spikes [Guard+] | `main.py` | 2t |
| **CG5-onboard** | Klient-onboarding + kanal-oppsett | `main.py` + `static/` | 12d |
| **CG6** | Klient-dashboard `costguard.oss.vauco.no` | `static/` | 23d |
---
@ -61,21 +44,16 @@
| Komponent | Status |
|-----------|--------|
| Cloud Run `osvauco-agent` | ✅ Live, `us-central1` |
| `opax.vauco.no` (LB + SSL + IAP) | ✅ Live |
| `static/opax.html` | ✅ Live — OPAX Hub inkl. billing donut |
| `static/jason.html` | ✅ Live — Jason fullskjerm |
| Cloud Build trigger | ✅ Operativt |
| BQ token-logging | ✅ CG3e live |
| Chart.js donut (billing) | ✅ CG4b live |
| `POST /notify/webhook` | 🔴 Ikke bygget — CG5a |
| `POST /notify/email` | 🔴 Ikke bygget — CG5b |
| `POST /notify/sms` | 🔴 Ikke bygget — CG5c |
| Prisingskalkulator | 🔴 Ikke bygget — CG4d |
| Klient-onboarding | 🔴 Ikke bygget — CG5-onboard |
| Klient-dashboard | 🔴 Ikke bygget — CG6 |
| Emma (Gemma GPU-VM) | 🔮 ML-3a ikke utløst |
| OPAX-MCP server | 🔮 CI1 |
| Cloud Run `osvauco-agent` | ✅ Live `us-central1` |
| `opax.vauco.no` | ✅ Live |
| `main.py` | ✅ Hovudapp — alle ruter her |
| `static/opax.html` | ✅ Live |
| `static/jason.html` | ✅ Live |
| `opax-mcp/` | ✅ MCP-server mappe |
| `POST /notify/webhook` | 🔴 CG5a — ikke bygget |
| `POST /notify/email` | 🔴 CG5b — ikke bygget |
| `POST /notify/sms` | 🔴 CG5c — ikke bygget |
| `docs/gemma/world.md` | ❌ Mangler — blokkerer ML-3a |
---
@ -86,55 +64,57 @@
| GCP Project | `propane-will-491900-m5` |
| Region (LÅST) | `us-central1` |
| Cloud Run service | `osvauco-agent` |
| Cloud Run URL (direkte) | `https://osvauco-agent-zjbqp3prqq-uc.a.run.app` |
| Direct URL | `https://osvauco-agent-zjbqp3prqq-uc.a.run.app` |
| Public URL | `https://opax.vauco.no` |
| Hovudapplikasjon | `main.py` (rot i repo) |
| MCP-server | `opax-mcp/` |
| Static filer | `static/` |
| Jason chat | `https://opax.vauco.no/static/jason.html` |
| OPAX Hub | `https://opax.vauco.no/` |
| LB IP | `34.98.77.173` |
| VM | `osvauco-dev-vm` · `us-central1-b` · `e2-standard-2` |
| AI-modell | `gemini-2.5-pro` via Vertex |
| Repo | `vauco-saas/OSVauco` |
| Eier | `chris.christiansen@vauco.no` |
| Jason (kundeagent) | `jason.vauger@vauco.no` |
| Emma (intern agent) | `emma.vauger@vauco.no` — 🔮 ML-3a |
| Jason | `jason.vauger@vauco.no` |
| Emma | `emma.vauger@vauco.no` — 🔮 ML-3a |
---
## CostGuard — prismodell v2 (fasit for neste agent)
## CostGuard — prismodell v2 (fasit)
| Tier | GCP-spend/mnd | Pris | Kjernefunksjon |
|------|--------------|------|----------------|
| Starter | $0$3k | $499/mnd | Dashboard + e-postvarsler + 1 webhook-kanal |
| Guard | $3k$15k | $999/mnd | + sanntid spikes + AI-anbefalinger + SMS + interaktiv Jason i chat |
| Shield | $15k$50k | $1.999/mnd | + auto-remediation + multi-prosjekt + CUD-anbefalinger |
| Enterprise | >$50k | $3.500+/mnd | + dedikert Jason-agent + CI/CD cost gates + SSO + custom subdomain |
| Tier | GCP-spend/mnd | Pris |
|------|--------------|------|
| Starter | $0$3k | $499/mnd |
| Guard | $3k$15k | $999/mnd |
| Shield | $15k$50k | $1.999/mnd |
| Enterprise | >$50k | $3.500+/mnd |
**Push-first prinsipp:** Jason leverer til kunden der de er (webhook/e-post/SMS). Kunden setter opp kanal ved onboarding.
**Salgspitch:** *"Du trenger ikke lære et nytt verktøy. Jason finner deg."*
**Push-first:** Jason leverer til webhook/e-post/SMS — kunden setter opp kanal ved onboarding.
---
## ⚠️ Regler — ikke gjør disse feilene
## ⚠️ Regler
- **Ikke opprett nye HANDOFF_YYYYMMDD-filer.** Kun denne. Overskriv.
- **Ikke bytt til Claude før kvote + `MODEL APPROVED`.**
- **Ikke migrer fra us-central1** — regionen er låst.
- **Ikke rør IAP/OAuth/Secret Manager** uten `DEPLOY GODKJENT`.
- **Ikke opprett nye repos** uten `REPO APPROVED`.
- **Medioteq er joint venture** — ikke behandle som vanlig SaaS-kunde.
- **Prismodell er låst** — ikke endre uten `PLAN APPROVED` fra Chris.
- **Hovudapp er `main.py`** — ikke `agents/core-logic/app.py`
- **MCP-server er `opax-mcp/`** — ikke `agents/mcp_server/`
- **Absolutte stier i Python**`Path(__file__).parent / "..."`
- **Ikke migrer fra us-central1**
- **Ikke rør IAP/OAuth** uten `DEPLOY GODKJENT`
- **Ikke opprett repos** uten `REPO APPROVED`
- **Medioteq = joint venture** — ikke SaaS-kunde
- **Prismodell låst** — ikke endre uten `PLAN APPROVED`
- **Verifiser alltid mappestruktur** via GitHub API før du bygger
---
## 📁 Viktige filer (i denne rekkefølgen)
## 📁 Filer (i prioritert rekkefølge)
1. `docs/MASTERPLAN.md` — autoritativ sannhet
2. `docs/ROADMAP.md` — hva som skjer akkurat
2. `docs/ROADMAP.md` — hva skjer nå
3. `docs/HANDOFF.md` — denne filen
4. `docs/AGENT_RULEBOOK.md` — agent-regler
5. `docs/UNIVERSAL_BOOT_PROMPT.md` — boot-protokoll v1.4
6. `docs/gemma/world.md` — Emma sin kontekstpakke ❌ mangler
4. `CLAUDE.md` — kontekst for Claude (rot)
5. `docs/AGENT_RULEBOOK.md`
6. `docs/UNIVERSAL_BOOT_PROMPT.md` v1.4
7. `docs/gemma/world.md` ❌ mangler
---
*Vauco AS · propane-will-491900-m5 · us-central1 · Jason live · Emma 🔮 · Perplexity stand-in · Sesjon 2026-06-12*
*Vauco AS · propane-will-491900-m5 · us-central1 · Sesjon 2026-06-12*

View File

@ -14,7 +14,10 @@
- Cloud Build smoke-tests require: hardcoded canonical BASE_URL, bare identity token (no --audiences), and explicit run.invoker IAM binding for the Cloud Build service account on every service.
- **2026-06-10 — Absolutte filstier i Python:** Bruk alltid `Path(__file__).parent / "..."` for å referere til statiske filer og konfigurasjon i FastAPI/Cloud Run. Aldri relativ sti som `"static/file.html"` — dette bryter når WORKDIR avviker fra repo-rot (f.eks. i Docker). Regelen gjelder alle fremtidige tjenester og klientleveranser.
- **2026-06-10 — Dockerfile COPY static/:** `static/`-mappen må eksplisitt kopieres inn i Docker-imaget via `COPY static/ ./static/`. Den kopieres ikke automatisk selv om build-konteksten er repo-roten.
- **2026-06-10 — app.py mangler GET /:** FastAPI returnerer `{"detail":"Not Found"}` for alle ruter som ikke er definert — inkludert rot (`/`). Sørg alltid for at rot-ruten er eksplisitt definert og peker på riktig HTML-fil via absolutt sti.
- **2026-06-10 — app.py mangler GET /:** FastAPI returnerer `{"detail":"Not Found"}` for alle ruter som ikke er definert. Sørg alltid for at rot-ruten er eksplisitt definert.
- **2026-06-12 — Mappestruktur må verifiseres mot repo:** MASTERPLAN-dokumentasjon av mappestruktur må alltid verifiseres via GitHub API før bygging. Antakelser om struktur er ikke nok.
---
## 1. Plattformhierarki — sannheten i én modell
@ -22,31 +25,23 @@
Vauco AS (selskap, eier alle merkevarer)
├── vauco.no (APEX — bedriftens salgs- og portalside; ansiktet utad)
│ └── ruter besøkende videre til riktig modul
└── VAUCO OS (plattform — visjon, økonomi, token-lag, agent-fabrikk)
└── VAUCO OS (plattform)
└── OPAX (engine — Cloud Run, RAG, agentic arkitektur, IAP)
├── Modul #1 · CostGuard (live på costguard.oss.vauco.no)
├── Modul #2 · Threadstone (landingsside live, app i bygg)
└── Modul #3 · [navngis senere]
Separat merkevare under Vauco AS (parkert til etter Modul #1 + #2 lever):
└── Proof of Curiosity (egen identitet, ikke en OPAX-modul)
Separat merkevare (parkert):
└── Proof of Curiosity
```
**Fire nivåer, fire formål:**
| Nivå | Hva | Hvem ser det |
|---|---|---|
| **vauco.no (apex)** | **Bedriftens salgsportal — viser hvem Vauco AS er og hvilke moduler vi selger** | **Alle: kunder, partnere, presse, kandidater** |
| Vauco OS | Plattformen Chris bygger og selger fra | Internt (Chris + agenter) |
| **vauco.no (apex)** | Bedriftens salgsportal | Alle |
| Vauco OS | Plattformen Chris bygger | Internt |
| OPAX | Engine som driver modulene | Internt + utviklere |
| Modul (CostGuard / Threadstone / …) | Det kundene faktisk kjøper | Kunder |
**Salgskanal-prinsipp:**
- `vauco.no` = portalen som forteller "hva selger vi" og leder til riktig modul
- Hver modul har sin egen landings-/produktside
- Vauco OS og OPAX nevnes ikke som produkter på `vauco.no` — de er interne verktøy
| Modul | Det kundene kjøper | Kunder |
**Ikke selg Vauco OS. Ikke selg OPAX. De er interne verktøy.**
@ -54,50 +49,19 @@ Separat merkevare under Vauco AS (parkert til etter Modul #1 + #2 lever):
## 2. Registrerte domener — fasit
### Vauco (hos Proisp)
| Domene | Prosjekt | Status |
|--------|----------|--------|
| `vauco.no` | Rot for alle Vauco-tjenester | ✅ Aktiv, live på GCS+LB |
**Aktive subdomener:**
| Domene/subdomen | Teknologi | Status | Eier-flate |
|----------|-----------|--------|------------|
| `vauco.no` (apex) | GCS + GCP Load Balancer + Cloud CDN | ✅ LIVE · 2026-06-05 | Vauco AS apex |
| `www.vauco.no` | Følger apex | ✅ LIVE | Vauco AS apex |
| `opax.vauco.no` | LB + IAP → Cloud Run `osvauco-agent` | ✅ Live (IP 34.98.77.173) | OPAX |
| `oss.vauco.no` | Staging-miljø | ✅ Aktiv | OPAX |
| `os.vauco.no` | Prod-miljø | 🔮 Fase C | OPAX |
| `costguard.oss.vauco.no` | Cloud Run via IAP | ✅ Live | CostGuard |
| `costguard.os.vauco.no` | Promoteres fra oss | 🔮 Fase C | CostGuard |
| `threadstone.vauco.no` | GitHub Pages (`threadstone-landing`) | ✅ Live | Threadstone |
| `app.threadstone.vauco.no` | GitHub Pages (`vauco-saas.github.io`) | ⚠️ CNAME satt, side mangler | Threadstone |
| `<kunde>.vauco.no` | LB + IAP via Terraform | 🔮 Fase C2 | OPAX/Multi-tenant |
| Domene/subdomen | Teknologi | Status |
|----------|-----------|--------|
| `vauco.no` (apex) | GCS + LB + CDN | ✅ LIVE 2026-06-05 |
| `opax.vauco.no` | LB + IAP → Cloud Run | ✅ Live (IP 34.98.77.173) |
| `oss.vauco.no` | Staging | ✅ Aktiv |
| `costguard.oss.vauco.no` | Cloud Run via IAP | ✅ Live |
| `threadstone.vauco.no` | GitHub Pages | ✅ Live |
| `app.threadstone.vauco.no` | GitHub Pages | ⚠️ CNAME satt, side mangler |
| `os.vauco.no` | Prod-miljø | 🔮 Fase C |
**Reservert til senere:**
| Subdomen | Tiltenkt formål | Trigger |
|----------|------------------|---------|
| `status.vauco.no` | Statuspage | Etter første kunde |
| `docs.vauco.no` | Offentlig kundedok | CG4 / første kunde |
| `careers.vauco.no` | Stillinger | Når Vauco rekrutterer |
**Email-infra:**
- MX: Google Workspace ✅
- SPF/DKIM/DMARC: ✅ Live 2026-06-10
### Proof of Curiosity (hos Proisp) — egen merkevare
| Domene | Merknad |
|--------|---------|
| `proof-of-curiosity.com` | Registrert — ikke i bruk |
| `proofofcuriosity.com` | Registrert — ikke i bruk |
| `proofofcuriosity.io` | Registrert — ikke i bruk |
| `proof-of-curiosity.no` | Registrert — ikke i bruk |
| `proofofcuriosity.no` | Registrert — ikke i bruk |
> **Trigger:** Ingen POC-arbeid før Modul #1 + #2 lever.
**Email-infra:** MX + SPF/DKIM/DMARC ✅ Live 2026-06-10
---
@ -105,122 +69,115 @@ Separat merkevare under Vauco AS (parkert til etter Modul #1 + #2 lever):
### Aktive repos (5)
| Repo | Formål | Synlighet | Eier-flate |
|------|--------|-----------|------------|
| `OSVauco` | Mono-repo: OPAX-engine, infra, Terraform, all dokumentasjon | Privat | OPAX (rot) |
| `vauco-bootstrap` | Terraform-modul for kunde-provisjonering | Privat | OPAX |
| `vauco-site` | `vauco.no` salgsportal | Public | Vauco AS apex |
| `threadstone-landing` | `threadstone.vauco.no` landingsside | Public | Threadstone |
| `vauco-saas.github.io` | `app.threadstone.vauco.no` Threadstone-app frontend | Public | Threadstone |
### Arkiverte repos
| Repo | Arkivert | Innholdet finnes nå i |
|------|----------|------------------------|
| `vauco-os` | ✅ 2026-05-27 | `OSVauco/docs/architecture/` |
| `vauco-gemini-tui-bridge` | ✅ 2026-05-27 | Arkiv — reaktiveres som del av OX1b |
| `command-hub` | ✅ 2026-05-27 | `OSVauco/static/command-hub.html` |
| Repo | Formål | Synlighet |
|------|--------|-----------|
| `OSVauco` | Mono-repo: OPAX-engine, infra, Terraform, all dokumentasjon | Privat |
| `vauco-bootstrap` | Terraform-modul for kunde-provisjonering | Privat |
| `vauco-site` | `vauco.no` salgsportal | Public |
| `threadstone-landing` | `threadstone.vauco.no` landingsside | Public |
| `vauco-saas.github.io` | Threadstone-app frontend | Public |
> **Regel:** Nytt repo krever eksplisitt `REPO APPROVED` fra Chris.
---
## 4. OSVauco — intern mappestruktur (fasit)
## 4. OSVauco — FAKTISK mappestruktur (verifisert 2026-06-12)
> **VIKTIG:** Denne seksjonen er verifisert mot GitHub API. Ikke anta struktur — alltid verifiser.
```
OSVauco/
├── MASTERPLAN.md
├── README.md
OSVauco/ (root)
├── main.py (26 KB) ⭐ HOVUDAPPLIKASJON — FastAPI app + alle ruter
├── AGENTS.md
├── Dockerfile / cloudbuild.yaml
├── CLAUDE.md ← Kontekstfil for Claude-agenter
├── README.md
├── CNAME
├── cloudbuild.yaml ← CI/CD trigger
├── cloudbuild.base.yaml
├── requirements.txt
├── .env.example / .env.prefilled
├── dev-startup.sh / opax.sh
├── agents/
│ ├── core-logic/ OPAX orchestrator + FastAPI app
│ │ ├── agent.py
│ │ ├── app.py
│ │ └── token_logger.py
│ ├── mcp_server/
│ ├── rag/
│ ├── memory/
│ ├── multi_agent/
│ ├── eval/
│ ├── tests/
│ └── tools/
├── auth/
├── ml/
├── infrastructure/
├── scripts/
├── static/
│ ├── opax.html
│ ├── jason.html
│ ├── billing-dashboard.html
│ ├── command-hub.html
│ └── admin.html
├── docs/
├── agents/ ← Agent-logikk (ikke hovudapp)
├── architecture/ ← Arkitekturdokumenter
├── auth/ ← Auth-logikk
├── data/
├── dialogflow/ ← Dialogflow-integrasjon
├── docs/ ← All dokumentasjon
│ ├── MASTERPLAN.md
│ ├── ROADMAP.md
│ ├── HANDOFF.md
│ ├── AGENT_RULEBOOK.md
│ ├── gemma/
│ │ ├── world.md
│ │ └── README.md
│ └── [øvrige tema-docs]
├── protocols/sessions/
└── data/
│ ├── UNIVERSAL_BOOT_PROMPT.md
│ ├── LEARNINGS.md
│ ├── ARCHITECTURE.md
│ ├── AGENTIC_CONTRACT_MCP_PROVISIONING.md
│ ├── DNS-OG-INFRASTRUKTUR.md
│ ├── SECRETS-SETUP.md
│ ├── LEARNINGS_CICD_2026-06-10.md
│ ├── GCP_Best_Practices.md
│ └── gemma/
│ └── world.md ❌ MANGLER — blokkerer ML-3a/Emma-boot
├── infrastructure/
├── master_hub/ ← Eksisterer — formål ikke klarlagt
├── ml/
├── opax-mcp/ ← MCP-server (ikke agents/mcp_server/)
├── protocols/
├── scripts/
└── static/
├── opax.html
├── jason.html
├── billing-dashboard.html
├── command-hub.html
└── admin.html
```
**Kritiske korrекsjoner fra tidligere feil dokumentasjon:**
- `main.py` (rot) er hovudapplikasjonen — IKKE `agents/core-logic/app.py`
- MCP-server ligger i `opax-mcp/` — IKKE `agents/mcp_server/`
- `master_hub/` og `dialogflow/` eksisterer — formål må kartlegges
- Nye ruter/endepunkter legges i `main.py` — ikke i agents/
---
## 4b. vauco.no — salgsportal (Vauco AS apex)
> Eget repo: `vauco-saas/vauco-site` — LIVE 2026-06-05 på GCS+LB.
### Versjons-evolusjon
## 4b. vauco.no — salgsportal
| Versjon | Inneholder | Trigger |
|---------|------------|---------|
| V1 (MVP) ✅ | Hero + modul-grid + om-oss + kontakt + personvern | LIVE 2026-06-05 |
| V2 | Sales-CTA + CostGuard ROI-kalkulator | Etter første betalende kunde |
| V3 | Blogg, kundereferanser, status-widget | Når 3+ kunder |
| V4 | Internasjonalt (`vauco.no/en`), Proof of Curiosity i footer | Etter Modul #3 |
| V1 (MVP) ✅ | Hero + modul-grid + om-oss + kontakt | LIVE 2026-06-05 |
| V2 | Sales-CTA + ROI-kalkulator | Etter første betalende kunde |
| V3 | Blogg, kundereferanser | Når 3+ kunder |
---
## 5. Dokumenthierarki — én kilde til sannhet
## 5. Dokumenthierarki
| Fil | Rolle | Oppdateres |
|-----|-------|------------|
| `docs/MASTERPLAN.md` | Arkitektur, domener, repos, agent-identitet | Ved arkitekturendringer |
| `docs/ROADMAP.md` | Faser, status, backlog | Hver sesjon |
| `docs/HANDOFF.md` | Hva ble gjort, hva er neste | Overskrives hver sesjon |
| `docs/AGENT_RULEBOOK.md` | Locked definitions for agent-boot | Ved infrastruktur-låsing |
| `docs/gemma/world.md` | Emmas verden — kontekstpakke for lokal Gemma-modell | Bygges simultant med alt annet |
| `protocols/sessions/YYYY-MM-DD_<tema>.md` | Detaljerte protokoller | Append-only |
| Fil | Rolle |
|-----|-------|
| `docs/MASTERPLAN.md` | Autoritativ sannhet |
| `docs/ROADMAP.md` | Faser og status |
| `docs/HANDOFF.md` | Sesjonsstatus — overskrives hver sesjon |
| `docs/AGENT_RULEBOOK.md` | Locked agent-regler |
| `docs/UNIVERSAL_BOOT_PROMPT.md` | Boot-protokoll v1.4 |
| `CLAUDE.md` | Kontekst for Claude-agenter (rot) |
| `docs/gemma/world.md` | Emma sin kontekstpakke ❌ mangler |
---
## 6. AI-modell — tofase-strategi
### Fase 1 — Nå (Vertex AI, løper ut kreditter)
### Fase 1 — Nå
| Parameter | Verdi |
|-----------|-------|
| Intern stand-in | Perplexity (Sonnet 4.6) via GitHub MCP |
| Kundemodell (Jason) | `gemini-2.5-flash` via Vertex AI |
| Region | `us-central1` |
| Parameter | Verdi | Merknad |
|-----------|-------|---------|
| **Intern modell (Emma/Chris)** | `gemini-2.5-pro` / `gemini-2.5-flash` | Via Vertex AI, tærer på kreditter |
| **Stand-in operatør** | Perplexity (Sonnet 4.6) via GitHub MCP | Erstatter Emma til Gemma-VM er oppe |
| **Kundemodell (Jason)** | `gemini-2.5-flash` | Via Vertex AI — kunder betaler indirekte |
| **Endpoint** | `us-central1` | Vertex-kreditter |
| **SDK** | `google-adk` + `google-genai` | |
| **Status Claude** | ⏳ Venter på EU-kvote | Bytt når kvote innvilget |
### Fase 2 — Gemma-migrering
| Parameter | Verdi | Merknad |
|-----------|-------|---------|
| **Emma (intern)** | `gemma-4-12b-it` int4 | GCP `g2-standard-4` Spot VM (~$120150/mnd) |
| **Serving** | Ollama (utvikling) → vLLM (produksjon) | |
| **Jason (kunder)** | `gemini-2.5-flash` via Vertex | Uendret |
| **Kontekst** | `docs/gemma/world.md` lastet som system-prompt | |
### Fase 2 — Gemma (trigger: kreditter < 20% eller første kunde)
| Parameter | Verdi |
|-----------|-------|
| Emma (intern) | `gemma-4-12b-it` int4 · GCP `g2-standard-4` Spot VM |
| Jason (kunder) | `gemini-2.5-flash` via Vertex — uendret |
---
@ -229,35 +186,27 @@ OSVauco/
> Full status i `docs/ROADMAP.md`.
### 🔴 NOW
- [x] CG4b — Token dashboard breakdown per modul ✅
- [x] OX1c — Jason fullskjerm-chat LIVE ✅
- [x] CI5+CI6 — OPAX-MCP live ✅
- [ ] CG4d — Kundeprisingskalkulator (GCP-spend-basert)
- [ ] CG5a — Delivery layer: webhook-kanal onboarding
- [ ] CG5b — E-postvarsler (SendGrid)
- [ ] CG5c — SMS-varsler (Twilio) [Guard+]
- [ ] CG4d — Prisingskalkulator i `static/opax.html`
- [ ] CG5a — Delivery layer: `POST /notify/webhook` i `main.py`
- [ ] CG5b — E-postvarsler: `POST /notify/email` via SendGrid
- [ ] CG5c — SMS-varsler: `POST /notify/sms` via Twilio [Guard+]
- [ ] CG5-onboard — Klient-onboarding flow
- [ ] CG6 — Klient-dashboard
### 🟠 NEXT
- CG6 — Klient-dashboard
- CI1 — OPAX-MCP full CI/CD-kanal
- ML-3a — GPU-VM for Emma
- CI1 — opax-mcp/ full CI/CD-kanal
- ML-3a — GPU-VM for Emma + `docs/gemma/world.md` opprettes
- C4 — Medioteq partnerstrategimøte
### 🟡 LATER
- ML-3c — Hybrid agent
- T1T4 — Threadstone
- Fase C — Multi-tenant
---
## 8. Agent-identitet
| Identitet | E-post | Modell | Rolle | Status |
|-----------|--------|--------|-------|--------|
| Eier / admin | `chris.christiansen@vauco.no` | — | Full kontroll | ✅ Aktiv |
| Jason Vauger | `jason.vauger@vauco.no` | `gemini-2.5-flash` via Vertex | Kundevendt agent | ✅ Live |
| Emma Vauger | `emma.vauger@vauco.no` | `gemma-4-12b-it` (lokal GPU-VM) | Intern agent for Chris | 🔮 ML-3a |
| Fremtidig gruppe | `billing@vauco.no` | — | `billing.viewer` (Fase C) | 🔮 Fase C |
| Identitet | E-post | Modell | Status |
|-----------|--------|--------|--------|
| Eier | `chris.christiansen@vauco.no` | — | ✅ Aktiv |
| Jason Vauger | `jason.vauger@vauco.no` | `gemini-2.5-flash` | ✅ Live |
| Emma Vauger | `emma.vauger@vauco.no` | `gemma-4-12b-it` | 🔮 ML-3a |
**Forbudte kontoer:** `tinius.vauger`, `ccv` — aldri gi tilganger.
@ -265,27 +214,25 @@ OSVauco/
## 9. Cloud Run — live endepunkter
**Service:** `osvauco-agent` | **Region:** `us-central1` | **Project:** `propane-will-491900-m5`
**Service:** `osvauco-agent` · `us-central1` · `propane-will-491900-m5`
**Public URL:** `https://opax.vauco.no`
**Jason UI:** `https://opax.vauco.no/static/jason.html`
**OPAX UI:** `https://opax.vauco.no/`
| Endepunkt | Status |
|-----------|--------|
| `GET /` | ✅ opax.html |
| `GET /health` | ✅ |
| `POST /run` | ✅ |
| `GET /static/jason.html` | ✅ |
| `GET /billing/tokens/by-module` | ✅ |
| `GET /billing/tokens/estimate` | ✅ |
| `GET /billing/summary` | ✅ |
| `GET /billing/anomalies` | ✅ |
| `GET /billing/history` | ✅ |
| `GET /billing/budget` | ✅ |
| `POST /billing/budget` | ✅ |
| `POST /notify/webhook` | 🔴 CG5a |
| `POST /notify/email` | 🔴 CG5b |
| `POST /notify/sms` | 🔴 CG5c |
| Endepunkt | Fil | Status |
|-----------|-----|--------|
| `GET /` | `main.py` | Serverer opax.html |
| `GET /health` | `main.py` | ✅ |
| `POST /run` | `main.py` | ✅ |
| `GET /static/jason.html` | `main.py` | ✅ |
| `GET /billing/tokens/by-module` | `main.py` | ✅ |
| `GET /billing/tokens/estimate` | `main.py` | ✅ |
| `GET /billing/summary` | `main.py` | ✅ |
| `GET /billing/anomalies` | `main.py` | ✅ |
| `GET /billing/history` | `main.py` | ✅ |
| `GET /billing/budget` | `main.py` | ✅ |
| `POST /billing/budget` | `main.py` | ✅ |
| `POST /notify/webhook` | `main.py` | 🔴 CG5a |
| `POST /notify/email` | `main.py` | 🔴 CG5b |
| `POST /notify/sms` | `main.py` | 🔴 CG5c |
---
@ -293,123 +240,58 @@ OSVauco/
### CostGuard — prismodell v2 (godkjent 2026-06-12)
> **Prinsipp:** "Meet them where they are" — CostGuard push-first. Jason finner kunden, ikke omvendt.
#### Tier-oversikt
> **Prinsipp:** Push-first — Jason finner kunden, ikke omvendt.
> **Pitch:** *"Du trenger ikke lære et nytt verktøy. Jason finner deg."*
| Tier | GCP-spend/mnd | Pris | Kjerneløfte |
|------|--------------|------|-------------|
| **Starter** | $0 $3k | **$499/mnd** | Synlighet — du vet hva du bruker |
| **Guard** | $3k $15k | **$999/mnd** | Kontroll — du stopper sløsing før det skjer |
| **Shield** | $15k $50k | **$1.999/mnd** | Automatisering — Jason handler, ikke bare varsler |
| **Enterprise** | > $50k | **$3.500+/mnd** | Platform — Vauco er din interne FinOps-funksjon |
#### Hva er inkludert per tier
**Starter — $499/mnd**
- CostGuard dashboard (read-only)
- Daglig kostnadsoversikt per GCP-tjeneste
- Anomali-varsler → e-post (månedlig rapport)
- 1 bruker-login
- Webhook til én kanal (Slack/Teams/Chat/etc.)
**Guard — $999/mnd**
- Alt i Starter, pluss:
- Budsjett-enforcement (Jason setter og overvåker grenser)
- AI-anbefalinger: årsak + handling per anomali
- Sanntids spike-varsler
- E-post ukentlig digest
- SMS-varsler ved kritiske spikes (Twilio)
- Interaktiv Jason i valgt chat-kanal
- 3 bruker-logins
- Slack + Teams + Google Chat støtte
**Shield — $1.999/mnd**
- Alt i Guard, pluss:
- Automatisk remediation (Jason stopper overforbruk)
- Multi-GCP-prosjekt (opp til 5)
- CUD-anbefalinger (Committed Use Discounts)
- FinOps-rapport til CFO/styret
- Tagging-enforcement
- 10 bruker-logins
- Dedikert onboarding med Chris
- SLA: respons innen 4 timer
**Enterprise — $3.500+/mnd**
- Alt i Shield, pluss:
- Ubegrenset GCP-prosjekter + multi-org
- Jason som dedikert FinOps-agent (tilpasset kundens stack)
- Terraform cost gates (blokkerer deploys over budsjett)
- CI/CD cost gates
- Custom rapportering + BI-eksport
- BankID / SSO
- Dedikert subdomain: `costguard.<kunde>.no`
- SLA: 99.9% uptime, respons innen 1 time
- Kvartalsvis strategimøte med Chris
#### Push-first arkitektur — Delivery layer
| **Starter** | $0$3k | $499/mnd | Synlighet |
| **Guard** | $3k$15k | $999/mnd | Kontroll |
| **Shield** | $15k$50k | $1.999/mnd | Automatisering |
| **Enterprise** | >$50k | $3.500+/mnd | Platform |
**Delivery layer:**
```
GCP-event → Jason analyserer → Delivery layer → Kanal
├── Webhook (Slack/Teams/Chat/Discord/etc.) [CG5a]
├── E-post (SendGrid) [CG5b]
├── SMS (Twilio) [Guard+] [CG5c]
└── In-app (CG6 dashboard)
GCP-event → Jason → Delivery layer → Webhook (CG5a) / E-post (CG5b) / SMS (CG5c)
```
Kunden setter opp sin foretrukne kanal ved onboarding — Jason finner dem der.
**Markedsposisjon:**
#### Markedsposisjon
| Konkurrent | Pris | CostGuard vinner på |
|-----------|------|--------------------|
| Kubecost Business | $199/mnd | GCP-native + Jason AI |
| Apptio Cloudability | $1.930/mnd | Enklere, push-first |
| CloudHealth | $5.400+/mnd | Pris + SMB-fokus |
| Konkurrent | Pris | Svakhet | CostGuard vinner på |
|-----------|------|---------|--------------------|
| Kubecost Business | $199/mnd | Kun K8s, ingen AI | GCP-native + Jason AI |
| Apptio Cloudability | $1.930/mnd | Komplekst, enterprise-only | Enklere, raskere, billigere |
| CloudHealth | $5.400+/mnd | Overkill for SMB | Pris + push-first UX |
**Salgspitch:** *"Du trenger ikke lære et nytt verktøy. Jason finner deg."*
### Produkt #2: Threadstone (Q3 2026)
Definisjon låses når Modul #1 har første kunde.
### Medioteq — Joint Venture (ikke en vanlig kunde)
> Medioteq er et partnersamarbeid. **Ikke** standard SaaS-kundeforhold. C4 er partnerstrategimøte.
### Medioteq — Joint Venture
> Partnersamarbeid, ikke SaaS-kunde. C4 = partnerstrategimøte.
---
## 11. Kjente hull
| ID | Problem | Løsning | Prioritet |
|----|---------|---------|-----------|
| OQ-15 | BQ billing_export tabell | Venter på aktivering | Medium |
| OQ-17 | `github-token` secret mangler | Opprett alias fra `github-pat` | Medium |
| OQ-18 | VM alltid-på kostnad | Kjør `03-teardown.sh` hver kveld | Høy |
| OQ-21 | `app.threadstone.vauco.no` CNAME uten side | Bygg T2 eller fjern CNAME | Lav |
| OQ-22 | Claude EU-kvote | Vent på Google Cloud-team | Medium |
| OQ-26 | Ingen statuspage | Etter første kunde | Lav |
| ID | Problem | Prioritet |
|----|---------|----------|
| OQ-15 | BQ billing_export tabell | Medium |
| OQ-17 | `github-token` secret mangler | Medium |
| OQ-18 | VM alltid-på kostnad | Høy |
| OQ-21 | `app.threadstone.vauco.no` CNAME uten side | Lav |
| OQ-26 | `docs/gemma/world.md` mangler | Høy (ML-3a blokkert) |
| OQ-27 | `master_hub/` formål ikke dokumentert | Medium |
| OQ-28 | `dialogflow/` formål ikke dokumentert | Medium |
---
## 12. OPAX — fremtidig visjon
## 12. OPAX — status
**Ferdig:**
- ✅ opax.html LIVE via `GET /`
- ✅ opax.html LIVE via `GET /` (main.py)
- ✅ Jason-chat LIVE
- ✅ Billing dashboard + Chart.js donut (CG4b)
- ✅ Cloud Build live-widget
- ✅ Token Intelligence endepunkter
- ✅ CI5+CI6 — OPAX-MCP live
- ✅ CI5+CI6 — opax-mcp live
**Gjenstår:**
- CG4d — Prisingskalkulator
- CG5a/b/c — Delivery layer
- CG6 — Klient-dashboard
- OX2 — Command Hub
- CI1 — OPAX-MCP full CI/CD
---
## 13. TUI-bridge — reaktivert som OX1b ✅
**Gjenstår:** CG4d / CG5ac / CG5-onboard / CG6 / CI1 / ML-3a
---