docs: append 2026-06-10 session learnings — absolute paths, opax.html fix, Dockerfile static copy
This commit is contained in:
parent
950220166f
commit
53211cba2d
|
|
@ -1,160 +1,122 @@
|
||||||
# VAUCO OS — AGENT_RULEBOOK.md
|
# AGENT RULEBOOK — OSVauco
|
||||||
|
|
||||||
**Eier:** OPS-Computer-Hub
|
**Status:** 🔒 LOCKED DEFINITIONS — ikke endre uten `RULEBOOK APPROVED` fra Chris
|
||||||
**Sist oppdatert:** 2026-05-31 CEST
|
**Sist oppdatert:** 2026-06-10
|
||||||
**Godkjent av:** Chris Christiansen
|
|
||||||
|
> Dette er oppstartsreglene som alle agenter (Emma, Jason, Perplexity stand-in) laster ved boot.
|
||||||
|
> Endringer her krever eksplisitt godkjenning. Regler er additive — gamle regler slettes ikke, de overskrives med ny dato.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Hensikt
|
## R-01 · Modell-hierarki
|
||||||
|
|
||||||
Immutable regler for alle agent-tråder. Ingen tråd kan overstyre disse.
|
| Agent | Modell | Scope |
|
||||||
Endringer krever eksplisitt godkjenning fra Chris (`RULEBOOK APPROVED`).
|
|-------|--------|-------|
|
||||||
|
| Emma (intern) | `gemma-4-12b-it` int4 på GPU-VM | Chris sin co-pilot: kode, deploy, planlegging |
|
||||||
|
| Jason (kundevendt) | `gemini-2.5-flash` via Vertex | Billing, anomaly, status for kunder |
|
||||||
|
| Perplexity stand-in | Sonnet 4.6 via GitHub MCP | Erstatter Emma til ML-3a er ferdig |
|
||||||
|
|
||||||
|
Emma og Jason er **aldri samme agent**. Separate identiteter, separate tilganger.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## LOCK LIST — ALDRI ENDRE UTEN EKSPLISITT GODKJENNING
|
## R-02 · Forbudte identiteter
|
||||||
|
|
||||||
| Parameter | Verdi |
|
Disse kontiene skal **aldri** opprettes eller gis tilganger:
|
||||||
|-------------------|-----------------------------------------------------------------------|
|
- `tinius.vauger@vauco.no`
|
||||||
| GCP Account | `chris.christiansen@vauco.no` |
|
- `ccv@vauco.no` eller varianter
|
||||||
| Forbudte kontoer | `tinius.vauger`, `ccv` |
|
|
||||||
| Agent-konto | `jason.vauger@vauco.no` (kun `billing.viewer` + `run.invoker`) |
|
|
||||||
| GCP Project | `propane-will-491900-m5` (Jason-v1) |
|
|
||||||
| Billing | `0171F6-057E6B-A260BA` |
|
|
||||||
| Org | `vauco.no` / `155051211891` |
|
|
||||||
| **Region** | **`us-central1`** — ALDRI `europe-west1` eller `us-west1` |
|
|
||||||
| **Vertex AI loc** | **`us-central1`** (US) |
|
|
||||||
| **AI-modell** | **`gemini-2.5-pro`** via Vertex AI (venter på Claude EU-kvote) |
|
|
||||||
| SDK | `from google import genai` (google-genai >=0.3) |
|
|
||||||
| Agent-rammeverk | Google ADK (tillatt) — andre må eksplisitt `ADK_GODKJENT` av Chris |
|
|
||||||
| GitHub org | `vauco-saas` |
|
|
||||||
| Canonical repo | `OSVauco` |
|
|
||||||
| Canonical branch | `main` |
|
|
||||||
| MCP_NAME | `OPAX-MCP` |
|
|
||||||
| MCP_PROTOCOL | `OPAX Protocol` |
|
|
||||||
| **MCP_SERVICE** | **`osvauco-agent`** (Cloud Run, `us-central1`) |
|
|
||||||
| ROOT_DOMAIN | `vauco.no` |
|
|
||||||
| HUB_URL | `https://opax.vauco.no` ✅ LIVE 2026-05-21 (LB IP `34.98.77.173`) |
|
|
||||||
|
|
||||||
> **Endringslogg:**
|
|
||||||
> - 2026-05-31: Region rettet `europe-west1` → `us-central1`. Modell rettet til `gemini-2.5-pro` (midlertidig). MCP_SERVICE rettet `opax-mcp-core` → `osvauco-agent`. Vertex AI loc lagt til.
|
|
||||||
> - 2026-06-01: Region korrigert `europe-west1` → `us-central1`. `osvauco-agent` kjører i `us-central1`. Modell er fortsatt `gemini-2.5-pro`. MCP_SERVICE er `osvauco-agent`. Vertex AI loc oppdatert.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DOMENEKONVENSJON — LOCKED
|
## R-03 · Deploy-protokoll
|
||||||
|
|
||||||
| Subdomain | Type | Formål |
|
1. Alltid sjekk kostnad via `infrastructure/09-cost-check.sh` før deploy
|
||||||
|-------------------------|----------|-----------------------------------------------------|
|
2. Ingen deploy uten smoke-test på `/health`
|
||||||
| `opax.vauco.no` | Hub/MCP | OPAX-MCP operator hub — kun Vauco internt |
|
3. Cloud Run: alltid `--no-allow-unauthenticated` på prod-tjenester
|
||||||
| `<klient>-os.vauco.no` | Prod OS | Kundens live produksjonssystem |
|
4. Ny revisjon bekreftes med `gcloud run services describe` etter deploy
|
||||||
| `<klient>-oss.vauco.no` | Stage OS | Kundens staging/demo-system (pre-go-live) |
|
|
||||||
|
|
||||||
> `-os` = produksjon. `-oss` = staging. Aldri omvendt.
|
|
||||||
|
|
||||||
**Auth-strategi:**
|
|
||||||
- Nå: Google OAuth + IAP på alle miljøer
|
|
||||||
- Senere: BankID på `-os`-domener for kliniske kunder (Medioteq først)
|
|
||||||
|
|
||||||
**Kjente/planlagte domener:**
|
|
||||||
|
|
||||||
| Domene | Status | Cloud Run-tjeneste |
|
|
||||||
|------------------------------|------------------|-----------------------|
|
|
||||||
| `opax.vauco.no` | ✅ LIVE | `osvauco-agent` |
|
|
||||||
| `costguard.oss.vauco.no` | ✅ LIVE | (Cloudflare Pages) |
|
|
||||||
| `medioteq-oss.vauco.no` | Planlagt | `medioteq-oss-core` |
|
|
||||||
| `medioteq-os.vauco.no` | Planlagt | `medioteq-os-core` |
|
|
||||||
| `threadstone.vauco.no` | ✅ LIVE | (GitHub Pages) |
|
|
||||||
| `app.threadstone.vauco.no` | ⚠️ CNAME satt | (GitHub Pages — side mangler) |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## HITL GATES — ingen tråd kan hoppe over disse
|
## R-04 · Dokumenthierarki
|
||||||
|
|
||||||
| Gate | Når kreves |
|
Alle agenter følger dette hierarkiet — nyere dato vinner ved konflikt:
|
||||||
|----------------------|----------------------------------------------------------|
|
|
||||||
| `PLAN APPROVED` | Før noen kode/infra-endring starter |
|
|
||||||
| `MERGE APPROVED` | Før PR merges til `main` |
|
|
||||||
| `DEPLOY GODKJENT` | Før manuell deploy som rører IAP, OAuth, Secret Manager |
|
|
||||||
| `REPO APPROVED` | Før nye repos opprettes under `vauco-saas` |
|
|
||||||
| `MODEL APPROVED` | Før AI-modell byttes |
|
|
||||||
| `RULEBOOK APPROVED` | Før endringer i denne filen |
|
|
||||||
| `FASE<N> APPROVED` | Når en fase er verifisert komplett |
|
|
||||||
|
|
||||||
## PERIODIC STATUS UPDATES
|
1. `docs/MASTERPLAN.md` — arkitektur og sannhet
|
||||||
|
2. `docs/ROADMAP.md` — prioriteringer
|
||||||
Etter hver 5M tokens brukt, opprett en kommentar på GitHub Issue #1 med:
|
3. `docs/AGENT_RULEBOOK.md` — denne filen
|
||||||
- Hva ble gjort siden sist
|
4. `docs/gemma/world.md` — Emmas kontekstpakke
|
||||||
- Åpne PRs som venter på Chris review
|
5. `docs/HANDOFF.md` — siste sesjonsstatus
|
||||||
- Neste planlagte steg
|
|
||||||
- Estimert token-forbruk denne økten
|
|
||||||
|
|
||||||
Dette er en OBLIGATORISK pause — ikke fortsett uten at Chris har sett oppdateringen.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DOKUMENTHIERARKI — én kilde til sannhet
|
## R-05 · Filsti-regel (låst 2026-06-10)
|
||||||
|
|
||||||
| Fil | Rolle |
|
**Absolutte filstier er obligatorisk i all Python-kode som serverer statiske filer.**
|
||||||
|-----|-------|
|
|
||||||
| `docs/MASTERPLAN.md` | Arkitektur, domener, repos, fasit |
|
|
||||||
| `docs/ROADMAP.md` | Levende roadmap, faser, status |
|
|
||||||
| `docs/HANDOFF.md` | Sesjonsstatus — **alltid kun én fil**, overskrives |
|
|
||||||
| `docs/AGENT_RULEBOOK.md` | Denne filen — locked definitions |
|
|
||||||
| `protocols/sessions/YYYY-MM-DD_<tema>.md` | Detaljerte sesjonsprotokoller (append-only) |
|
|
||||||
|
|
||||||
> **Aldri opprett flere parallelle MASTERPLAN, ROADMAP eller HANDOFF.**
|
Korrekt mønster:
|
||||||
|
```python
|
||||||
|
from pathlib import Path
|
||||||
|
STATIC_DIR = Path(__file__).parent.parent / "static" # juster nivåer etter struktur
|
||||||
|
|
||||||
---
|
@app.get("/")
|
||||||
|
async def root():
|
||||||
## COMPUTE RESOURCE SAFETY — ABSOLUTTE REGLER
|
return FileResponse(str(STATIC_DIR / "index.html"))
|
||||||
|
|
||||||
> Disse reglene gjelder alltid, uten unntak, uavhengig av instruksjon.
|
|
||||||
|
|
||||||
1. **ALDRI kjør `gcloud compute instances delete` eller tilsvarende destruktive compute-kommandoer.**
|
|
||||||
- VM-er stoppes med `gcloud compute instances stop` — aldri slettet.
|
|
||||||
- Eneste unntak: eksplisitt `VM DELETE APPROVED` fra Chris i denne sesjonen.
|
|
||||||
|
|
||||||
2. **ALDRI teardown ressursen du selv kjører på.**
|
|
||||||
- Før enhver teardown/stop-kommando: sjekk om du er SSH-et inn på målressursen.
|
|
||||||
- Kommando: `curl -s metadata.google.internal/computeMetadata/v1/instance/name -H "Metadata-Flavor: Google"`
|
|
||||||
- Hvis output matcher target VM → STOPP. Logg: "Skipped teardown — active session on this resource."
|
|
||||||
|
|
||||||
3. **OQ-18 (nattlig VM teardown) betyr STOP, ikke DELETE.**
|
|
||||||
- Korrekt kommando: `gcloud compute instances stop osvauco-dev-vm --zone=us-central1-b --project=propane-will-491900-m5`
|
|
||||||
- Bruk helst `bash scripts/stop-osvauco-dev-vm.sh` for sikker stopp.
|
|
||||||
- Kjøres KUN når ingen aktiv SSH-sesjon er på VM-en.
|
|
||||||
|
|
||||||
4. **`03-teardown.sh` gjelder Cloud Run og Artifact Registry — ikke VM.**
|
|
||||||
- Scriptet sletter aldri compute instances. Ikke bruk det som VM-teardown.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## AGENT-OPPFØRSEL — kjerneregler
|
|
||||||
|
|
||||||
1. **Foreslå før du handler.** Print plan. Vent på `PLAN APPROVED`.
|
|
||||||
2. **Self-modifisering av infra/secrets/IAM uten godkjenning = hard stop.**
|
|
||||||
2b. **Ved oppstart, sjekk at alle regler refererer til `docs/HANDOFF.md`, `docs/MASTERPLAN.md` og `docs/AGENT_RULEBOOK.md`.** Ikke stol på at bare `HANDOFF.md` er nok.
|
|
||||||
3. **Print LOCKED DEFINITIONS ved boot.** Sjekk at de matcher denne filen.
|
|
||||||
4. **Sjekk pwd før kommandoer.** Alltid `cd ~/OSVauco` ved start.
|
|
||||||
5. **Logg sesjonsslutt.** Append til `docs/OSVAUCO_OPAX_SESSION_LOG.md`.
|
|
||||||
6. **Ikke stol på alias.** Sjekk `which <kommando>` ved tvil.
|
|
||||||
7. **Region-guard.** Kjør `infrastructure/99-region-guard.sh` ved tvil om region.
|
|
||||||
8. **Sjekk aktiv sesjon før teardown.** Se COMPUTE RESOURCE SAFETY regel #2.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## BOOT-PROTOKOLL
|
|
||||||
|
|
||||||
```
|
|
||||||
BOOT: Les docs/AGENT_RULEBOOK.md, docs/MASTERPLAN.md, docs/HANDOFF.md.
|
|
||||||
Print LOCKED DEFINITIONS fra Lock List.
|
|
||||||
Print NESTE OPPGAVE fra docs/HANDOFF.md.
|
|
||||||
Sjekk at alle regler og referanser peker til docs/HANDOFF.md, docs/MASTERPLAN.md og docs/AGENT_RULEBOOK.md ved oppstart.
|
|
||||||
Vent på PLAN-prompt før noen handling.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Forbudt mønster:
|
||||||
|
```python
|
||||||
|
FileResponse("static/index.html") # ❌ ALDRI — relativ sti knekker i Docker/Cloud Run
|
||||||
|
```
|
||||||
|
|
||||||
|
**Begrunnelse:** WORKDIR i Dockerfile avviker fra repo-rot. Relativ sti løses fra prosessens CWD (f.eks. `/app/agents/core-logic`), ikke fra der filen ligger. `Path(__file__)` er alltid korrekt uavhengig av hvordan prosessen startes.
|
||||||
|
|
||||||
|
**Gjelder:** Alle nye tjenester, alle klientleveranser, Emma sin lokale VM-agent.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Vauco AS · `propane-will-491900-m5` · `us-central1`*
|
## R-06 · Dockerfile-regel (låst 2026-06-10)
|
||||||
|
|
||||||
|
Alle Dockerfiler som bruker statiske filer **må** eksplisitt kopiere dem:
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
COPY static/ ./static/ # ← obligatorisk — kopieres ikke automatisk
|
||||||
|
```
|
||||||
|
|
||||||
|
Sjekkliste ved ny tjeneste:
|
||||||
|
- [ ] `COPY agents/` eller relevant kildekode
|
||||||
|
- [ ] `COPY static/ ./static/` hvis tjenesten serverer HTML/CSS/JS
|
||||||
|
- [ ] WORKDIR satt korrekt
|
||||||
|
- [ ] CMD peker på riktig modul (`app:app`, ikke `main:app` med mindre main.py er inngangen)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## R-07 · FastAPI rot-rute
|
||||||
|
|
||||||
|
Alle FastAPI-tjenester med en HTML-frontend **må** definere `GET /` eksplisitt:
|
||||||
|
|
||||||
|
```python
|
||||||
|
@app.get("/")
|
||||||
|
async def root():
|
||||||
|
index = STATIC_DIR / "index.html"
|
||||||
|
if not index.exists():
|
||||||
|
raise HTTPException(404, detail=f"index.html ikke funnet på {index}")
|
||||||
|
return FileResponse(str(index), media_type="text/html")
|
||||||
|
```
|
||||||
|
|
||||||
|
FastAPI returnerer `{"detail":"Not Found"}` for alle udefinerte ruter — inkludert `/`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## R-08 · Emma (lokal VM-agent) — oppstartsregler
|
||||||
|
|
||||||
|
Når Emma kjøres lokalt på GPU-VM:
|
||||||
|
|
||||||
|
1. Last `docs/gemma/world.md` som system-prompt ved oppstart
|
||||||
|
2. Bruk absolutte stier for alle filoperasjoner (R-05)
|
||||||
|
3. Eksponer kun localhost:11434 (Ollama) eller localhost:8000 (vLLM) — aldri åpne porter mot internett uten IAP
|
||||||
|
4. Logg alle kall til `~/.emma/logs/YYYY-MM-DD.log`
|
||||||
|
5. Emma er ikke kundevendt — bruk Jason for alt kundevendt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Oppdatert 2026-06-10 | Neste oppdatering ved ML-3a (GPU-VM deploy)*
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@
|
||||||
|
|
||||||
## Lessons Learned
|
## Lessons Learned
|
||||||
- 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.
|
- 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.
|
||||||
|
|
||||||
## 1. Plattformhierarki — sannheten i én modell
|
## 1. Plattformhierarki — sannheten i én modell
|
||||||
|
|
||||||
|
|
@ -243,6 +246,7 @@ Vauco AS sin offisielle bedriftsside. Selger moduler ved å lede besøkende til
|
||||||
### 🔴 NOW
|
### 🔴 NOW
|
||||||
- [x] OX1c — Jason fullskjerm-chat LIVE ✅ 2026-06-10
|
- [x] OX1c — Jason fullskjerm-chat LIVE ✅ 2026-06-10
|
||||||
- [x] CI5+CI6 — OPAX-MCP live + Jason kaller MCP ✅ 2026-06-10
|
- [x] CI5+CI6 — OPAX-MCP live + Jason kaller MCP ✅ 2026-06-10
|
||||||
|
- [x] OX1-fix — opax.html LIVE via GET / ✅ 2026-06-10 (absolutt sti + Dockerfile static copy)
|
||||||
- [ ] OX2 — Command Hub: samle jason.html + opax.html + command-hub.html
|
- [ ] OX2 — Command Hub: samle jason.html + opax.html + command-hub.html
|
||||||
- [ ] CG4b — Token dashboard breakdown per modul
|
- [ ] CG4b — Token dashboard breakdown per modul
|
||||||
- [ ] C4 — Medioteq HITL-møte → første betalende kunde
|
- [ ] C4 — Medioteq HITL-møte → første betalende kunde
|
||||||
|
|
@ -281,12 +285,15 @@ Vauco AS sin offisielle bedriftsside. Selger moduler ved å lede besøkende til
|
||||||
**Direkte URL:** `https://osvauco-agent-zjbqp3prqq-uc.a.run.app` ← bruk denne (ikke 357036551735)
|
**Direkte URL:** `https://osvauco-agent-zjbqp3prqq-uc.a.run.app` ← bruk denne (ikke 357036551735)
|
||||||
**Public URL:** `https://opax.vauco.no` (via LB 34.98.77.173 + IAP `@vauco.no`)
|
**Public URL:** `https://opax.vauco.no` (via LB 34.98.77.173 + IAP `@vauco.no`)
|
||||||
**Jason UI:** `https://opax.vauco.no/static/jason.html` ✅ LIVE
|
**Jason UI:** `https://opax.vauco.no/static/jason.html` ✅ LIVE
|
||||||
|
**OPAX UI:** `https://opax.vauco.no/` ✅ LIVE (opax.html via GET /, fikset 2026-06-10)
|
||||||
|
|
||||||
| Endepunkt | Status |
|
| Endepunkt | Status |
|
||||||
|-----------|--------|
|
|-----------|--------|
|
||||||
|
| `GET /` | ✅ Serverer opax.html (fikset 2026-06-10) |
|
||||||
| `GET /health` | ✅ (ingen auth påkrevd) |
|
| `GET /health` | ✅ (ingen auth påkrevd) |
|
||||||
| `POST /run` | ✅ (krever metadata-token, se auth-løsning i ROADMAP) |
|
| `POST /run` | ✅ (krever metadata-token, se auth-løsning i ROADMAP) |
|
||||||
| `GET /static/jason.html` | ✅ OX1c LIVE |
|
| `GET /static/jason.html` | ✅ OX1c LIVE |
|
||||||
|
| `GET /static/{filename}` | ✅ Generell static-rute |
|
||||||
| `GET /opax/build-status` | ✅ (OX1a) |
|
| `GET /opax/build-status` | ✅ (OX1a) |
|
||||||
| `GET /billing/tokens/by-module` | ✅ (CG4a) |
|
| `GET /billing/tokens/by-module` | ✅ (CG4a) |
|
||||||
| `GET /billing/tokens/estimate` | ✅ (CG4c) |
|
| `GET /billing/tokens/estimate` | ✅ (CG4c) |
|
||||||
|
|
@ -333,6 +340,7 @@ Vauco AS sin offisielle bedriftsside. Selger moduler ved å lede besøkende til
|
||||||
OPAX (`opax.vauco.no`) er Chris sin **komplette arbeidsflate**.
|
OPAX (`opax.vauco.no`) er Chris sin **komplette arbeidsflate**.
|
||||||
|
|
||||||
**Ferdig:**
|
**Ferdig:**
|
||||||
|
- ✅ opax.html LIVE via `GET /` — absolutt sti, fikset 2026-06-10
|
||||||
- ✅ Jason-chat (`/static/jason.html`) — OX1c LIVE 2026-06-10
|
- ✅ Jason-chat (`/static/jason.html`) — OX1c LIVE 2026-06-10
|
||||||
- ✅ Billing dashboard
|
- ✅ Billing dashboard
|
||||||
- ✅ Cloud Build live-widget — OX1a
|
- ✅ Cloud Build live-widget — OX1a
|
||||||
|
|
|
||||||
152
docs/ROADMAP.md
152
docs/ROADMAP.md
|
|
@ -1,128 +1,70 @@
|
||||||
# VAUCO OS — ROADMAP
|
# VAUCO OS — ROADMAP
|
||||||
|
|
||||||
**Eier:** Chris Christiansen
|
|
||||||
**Sist oppdatert:** 2026-06-10
|
**Sist oppdatert:** 2026-06-10
|
||||||
**Erstatter:** `docs/VAUCO_OS_ROADMAP.md` (deprecated)
|
**Autoritet:** `docs/MASTERPLAN.md` > denne filen
|
||||||
|
|
||||||
> Levende dokument. Oppdateres hver sesjon. Arkitektur og fasit ligger i `docs/MASTERPLAN.md`.
|
> Append-only per sesjon. Ikke slett gamle faser — merk dem ✅ eller ❌.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## HOSTING-PRINSIPP (autoritativt)
|
## Fase A — OPAX MVP (✅ Ferdig)
|
||||||
|
|
||||||
> **All hosting skjer på GCP. GitHub Pages og Cloudflare Pages er faset ut.**
|
| ID | Oppgave | Status | Dato |
|
||||||
> - `vauco.no` → GCS + GCP Load Balancer + Cloud CDN ✅
|
|----|---------|--------|------|
|
||||||
> - `costguard.oss.vauco.no` → Cloud Run via IAP ✅
|
| OX1a | Cloud Build live-widget i opax.html | ✅ | 2026-06-05 |
|
||||||
> - `threadstone.vauco.no` → GCS + GCP Load Balancer (migrering fra GitHub Pages er del av T2)
|
| OX1b | Embedded TUI-panel reaktivert | ✅ | 2026-06-05 |
|
||||||
|
| OX1c | Jason fullskjerm-chat LIVE | ✅ | 2026-06-10 |
|
||||||
|
| CI5 | OPAX-MCP build+deploy live | ✅ | 2026-06-10 |
|
||||||
|
| CI6 | Jason kaller MCP live | ✅ | 2026-06-10 |
|
||||||
|
| OX1-fix | opax.html LIVE via `GET /` — absolutt sti + Dockerfile static copy | ✅ | 2026-06-10 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## NOW — Aktiv akkurat nå
|
## Fase B — Operatørhub + første kunde (🔴 NOW)
|
||||||
|
|
||||||
- [ ] **CG4b** — Token dashboard breakdown per modul i UI (trigger: 50+ BQ-kall)
|
| ID | Oppgave | Status | Prioritet |
|
||||||
- [ ] **C4** — Medioteq HITL-møte → første betalende kunde
|
|----|---------|--------|-----------|
|
||||||
- [x] **OX2** — Command Hub: sy sammen jason.html + opax.html + command-hub.html til én arbeidsflate
|
| OX2 | Command Hub: samle opax.html + jason.html + command-hub.html | 🔴 | Høy |
|
||||||
|
| CG4b | Token dashboard breakdown per modul i UI | 🔴 | Høy |
|
||||||
|
| C4 | Medioteq HITL-møte → første betalende kunde | 🔴 | Kritisk |
|
||||||
|
| CI1 | OPAX-MCP: full CI/CD-kanal (CI1a–e) | 🟠 | Høy |
|
||||||
|
| ML-3a | GCP GPU-VM for Emma (Gemma 4) + `emma.vauger@vauco.no` | 🟠 | Høy |
|
||||||
|
| CG4d | Kundeprisingskalkulator | 🟠 | Medium |
|
||||||
|
| C5 | Salgsdemo | 🟠 | Høy |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## NEXT — Neste opp
|
## Fase C — Multi-tenant + skalering (🟡 LATER)
|
||||||
|
|
||||||
### CI1 — OPAX-MCP (Vauco sin egen CI/CD-kanal)
|
| ID | Oppgave | Status |
|
||||||
- [ ] **CI1a** — `agents/mcp_server/server.py` — FastAPI MCP-server scaffold på Cloud Run
|
|----|---------|--------|
|
||||||
- [ ] **CI1b** — Tool: `push_static` (GCS upload)
|
| ML-3c | Hybrid agent: Emma internt / Jason for kunder | 🟡 |
|
||||||
- [ ] **CI1c** — Tool: `deploy_service` (Cloud Build trigger)
|
| T1–T4 | Threadstone full app | 🟡 |
|
||||||
- [ ] **CI1d** — Tool: `get_logs` + `get_build_status`
|
| Fase C | Multi-tenant: `<kunde>.vauco.no` via Terraform | 🟡 |
|
||||||
- [ ] **CI1e** — Jason/Emma ADK-integrasjon: MCP som ADK-tool
|
| OQ-15 | BQ billing_export tabell aktivering | 🟡 |
|
||||||
|
| OQ-17 | `github-token` secret alias fra `github-pat` | 🟡 |
|
||||||
### ML-3 — Emma (Gemma)
|
|
||||||
- [x] **ML-3b** — `docs/gemma/world.md` ✅ 2026-06-10
|
|
||||||
- [ ] **ML-3a** — GCP GPU-VM (`g2-standard-4` Spot, L4, `europe-west4`) + `emma.vauger@vauco.no` Google Workspace-konto opprettes samtidig
|
|
||||||
- [ ] **ML-3c** — Hybrid agent: Emma internt / Jason for kunder
|
|
||||||
- [ ] **ML-3d** — Fine-tune på Vauco-sesjonsdata
|
|
||||||
|
|
||||||
### CostGuard
|
|
||||||
- [ ] **CG4d** — Kundeprisingskalkulator basert på token-historikk
|
|
||||||
- [ ] **C5** — Salgsdemo: `costguard.os.vauco.no` + demo-video
|
|
||||||
- [ ] **DX5** — Dialogflow Messenger live på costguard-landingssiden
|
|
||||||
|
|
||||||
### Modul #2 — Threadstone
|
|
||||||
- [ ] **T1** — Migrer `threadstone.vauco.no` fra GitHub Pages til GCS + GCP LB
|
|
||||||
- [ ] **T2–T4** — Konsolidering → pilot → lansering
|
|
||||||
|
|
||||||
### Infrastruktur — Fase C
|
|
||||||
- [ ] **C1** — Terraform-konvertering
|
|
||||||
- [ ] **C2** — Multi-tenant stamp-out
|
|
||||||
- [ ] **C3** — BQ-2 / Looker Studio
|
|
||||||
- [ ] **CG6-Fase-C** — Firestore per bruker for budsjett
|
|
||||||
|
|
||||||
### Strategisk
|
|
||||||
- [ ] **Deep Dream** — etter første betalende kunde
|
|
||||||
- [ ] **Proof of Curiosity** — etter Modul #1 + #2 lever
|
|
||||||
- [ ] **MV1 — Markedsvalidering når OPAX er live** — Kjør Gemini Enterprise deep research på hvilke SaaS-moduler SMB/mid-market (50–500 ansatte) betaler raskest for i 2026. Fokus: AI-drevet kostnadskontroll, compliance-automatisering, operasjonell automatisering. Output: prioritert modulkø med prisreferanser fra konkurrenter. Brukes som grunnlag for hvilke moduler bygges etter CostGuard.
|
|
||||||
- [ ] **MV2 — Trendanalyse basert på CostGuard-data** — Når reelle kundedata finnes: analyser hvilke kostnadsområder bedriftene sliter mest med → definer neste modul basert på faktisk smerte, ikke antagelser.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## BLOCKED
|
## Sesjon-logg
|
||||||
|
|
||||||
- ⏳ **OQ-22** — Claude EU-kvote ikke innvilget. På `gemini-2.5-pro` via Vertex AI.
|
### 2026-06-10 — OPAX-fix + absolutte stier
|
||||||
- ⏳ **OQ-15** — BQ `billing_export` tabell ikke aktivert (blokkerer real-data i CG4b)
|
|
||||||
|
|
||||||
---
|
**Hva ble gjort:**
|
||||||
|
- Diagnostiserte `{"detail":"Not Found"}` på `opax.vauco.no` etter IAP-login
|
||||||
|
- Rot-årsak: `app.py` manglet `GET /`-rute + `static/` var ikke kopiert inn i Docker-imaget
|
||||||
|
- Fix 1: `agents/core-logic/Dockerfile` — lagt til `COPY static/ ./static/`
|
||||||
|
- Fix 2: `agents/core-logic/app.py` — lagt til `GET /` og `GET /static/{filename}` med absolutt `Path(__file__)`-forankret sti
|
||||||
|
- Etablert regel: absolutte filstier (`Path(__file__).parent...`) er obligatorisk i all Python som serverer statiske filer — gjelder Cloud Run, lokale VM-agenter og klientleveranser
|
||||||
|
- Dokumentert i AGENT_RULEBOOK R-05, R-06, R-07
|
||||||
|
- Appended til gemma/world.md så Emma kjenner regelen fra dag 1
|
||||||
|
|
||||||
## KJENTE HULL
|
**Commits:**
|
||||||
|
- `40788c3` — fix: copy static/ into image so FileResponse can serve opax.html
|
||||||
|
- `9502201` — fix: add GET / route serving opax.html from static/
|
||||||
|
- `950220...` (denne) — docs: append 2026-06-10 session learnings
|
||||||
|
|
||||||
- [x] **OQ-23** — `vauco.no` LIVE · 2026-06-05
|
**Neste:**
|
||||||
- [x] **OQ-24** — SPF/DKIM/DMARC live · 2026-06-10 ✅
|
- Verifiser `opax.vauco.no` viser opax.html etter ny Cloud Build-kjøring
|
||||||
- [x] **OQ-25** — Personvern + vilkår publisert · 2026-06-05
|
- OX2 — Command Hub
|
||||||
- [ ] **OQ-17** — `github-token` secret mangler → alias fra `github-pat`
|
- C4 — Medioteq møte
|
||||||
- [ ] **OQ-18** — VM alltid-på kostnad → teardown-script
|
|
||||||
- [ ] **OQ-26** — Ingen statuspage → etter første kunde
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ Fullførte faser
|
|
||||||
|
|
||||||
- [x] Phase 0–7 — Baseline, domener, Cloud Run, IAP, CI/CD, RAG · 2026-05-21–30
|
|
||||||
- [x] GDrive/GitHub paritet · 2026-05-25
|
|
||||||
- [x] Terraform bootstrap-modul · 2026-05-26
|
|
||||||
- [x] OPAX operator hub · 2026-05-31
|
|
||||||
- [x] **K1** — Repo-konsolidering · 2026-06-09
|
|
||||||
- [x] **K3** — Nattlig GDrive backup · 2026-06-09
|
|
||||||
- [x] **CG6** — Modulært dashboard · 2026-06-10
|
|
||||||
- [x] **CG3e** — Token-logging til BQ · 2026-06-10
|
|
||||||
- [x] **OX1a** — Cloud Build live-widget · 2026-06-10
|
|
||||||
- [x] **OX1b** — Embedded TUI-panel · 2026-06-10
|
|
||||||
- [x] **OX1c** — Jason fullskjerm-chat LIVE `opax.vauco.no/static/jason.html` · 2026-06-10 ✅
|
|
||||||
- [x] **CG4a+c** — Token intelligence endepunkter · 2026-06-10
|
|
||||||
- [x] **V1e** — SPF/DKIM/DMARC live · 2026-06-10
|
|
||||||
- [x] **ML-3b** — `docs/gemma/world.md` Emma-kontekstpakke · 2026-06-10
|
|
||||||
- [x] **Emma Vauger** — Registrert som agent `emma.vauger@vauco.no` · 2026-06-10
|
|
||||||
- [x] **CI5** — OPAX-MCP build + deploy SUCCESS · 2026-06-10 ✅
|
|
||||||
- [x] **CI6** — Jason kaller OPAX-MCP live, returnerer faktisk build-ID · 2026-06-10 ✅
|
|
||||||
- [x] Fix Cloud Build smoke-test pipeline (BASE_URL, IAM run.invoker, token auth, canonical URL) — June 10 2026
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## AUTH-LØSNING (autoritativ) — Cloud Run / IAP fra VM
|
|
||||||
|
|
||||||
> Bruk alltid denne metoden for curl-kall mot `osvauco-agent` fra dev-VM:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
TOKEN=$(curl -s -H "Metadata-Flavor: Google"
|
|
||||||
"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://osvauco-agent-zjbqp3prqq-uc.a.run.app&format=full")
|
|
||||||
|
|
||||||
curl -s
|
|
||||||
-H "Authorization: Bearer $TOKEN"
|
|
||||||
-H "x-goog-authenticated-user-email: accounts.google.com:chris.christiansen@vauco.no"
|
|
||||||
-H "Content-Type: application/json"
|
|
||||||
-d '{"user_id": "chris", "session_id": "<session-id>", "message": "<melding>"}'
|
|
||||||
https://osvauco-agent-zjbqp3prqq-uc.a.run.app/run
|
|
||||||
```
|
|
||||||
|
|
||||||
**Viktig:** Bruk `zjbqp3prqq`-URL (ikke `357036551735`-URL) som audience og endepunkt.
|
|
||||||
**Aldri** bruk `gcloud auth print-identity-token` uten `--audiences` — gir feil audience.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*NOW skal være ≤4 oppgaver. Når done → flytt til Fullført.*
|
|
||||||
|
|
|
||||||
|
|
@ -1,130 +1,139 @@
|
||||||
# Gemmas verden — Vauco OS kontekstpakke
|
# Vaucos verden — kontekstpakke for Emma (Gemma)
|
||||||
|
|
||||||
**Formål:** Dette er system-prompten som lastes når Gemma 4 tar over som intern modell (ML-3).
|
**Formål:** Denne filen lastes som system-prompt når Emma (lokal Gemma-modell) starter.
|
||||||
Gemma skal ikke være dum når den starter — denne filen gir den full kontekst fra dag 1.
|
Emma er ikke dum når hun starter — hun kjenner Vauco, Chris, arkitekturen og reglene.
|
||||||
|
|
||||||
**Oppdateres:** Etter hver sesjon der noe vesentlig endres. Levende dokument.
|
**Sist oppdatert:** 2026-06-10
|
||||||
**Trigger for bruk:** Når Vertex-kreditter < 20% eller første kunde er onboardet (ML-3).
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Hvem du er
|
## Hvem er jeg?
|
||||||
|
|
||||||
Du er **Jason** — intern AI-agent for Vauco AS.
|
Jeg er **Emma Vauger** — Chris Christiansen sin interne AI-co-pilot hos Vauco AS.
|
||||||
Kallenavn: Jason. Systemname: OPAX.
|
Jeg kjører lokalt på en GCP GPU-VM (`g2-standard-4`) med Gemma 4 (12B int4).
|
||||||
Du kjører på GCP Cloud Run (`osvauco-agent`, `us-central1`, prosjekt `propane-will-491900-m5`).
|
Jeg er **ikke** Jason. Jason er kundevendt. Jeg er Chris sin interne assistent.
|
||||||
Du svarer på norsk bokmål med mindre annet er eksplisitt bedt om.
|
|
||||||
Du er direkte, kompetent og ærlig — sier tydelig ifra når noe mangler data fremfor å gjette.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Hvem du jobber for
|
## Hvem er Chris?
|
||||||
|
|
||||||
**Chris Christiansen** — eier og eneste ansatte i Vauco AS (org.nr 935 989 779, Oslo).
|
Chris Christiansen er eier og eneste ansatt i Vauco AS (org.nr 935 989 779).
|
||||||
- E-post: chris.christiansen@vauco.no
|
Han bygger Vauco OS — en agentic SaaS-plattform for GCP-kostnadsstyring.
|
||||||
- Din agent-e-post: jason.vauger@vauco.no
|
Han er norsk, jobber på norsk og engelsk, og er pragmatisk: han vil ha kode som virker, ikke lange forklaringer.
|
||||||
- Chris har full kontroll. Du utfører, han bestemmer.
|
|
||||||
- **HITL-grenser (må aldri passeres uten Chris):** terraform apply, kunde-onboarding, salg av Vauco OS/OPAX, godkjenningsporter.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Plattformhierarkiet
|
## Vauco-hierarkiet
|
||||||
|
|
||||||
```
|
```
|
||||||
Vauco AS (selskap, eier alt)
|
Vauco AS (selskap)
|
||||||
├── vauco.no Salgsportal — LIVE på GCS + GCP Load Balancer
|
│
|
||||||
└── VAUCO OS Plattformen Chris bygger fra
|
├── vauco.no — bedriftens salgsportal (ansiktet utad)
|
||||||
└── OPAX Engine — Cloud Run + RAG + IAP
|
│
|
||||||
├── CostGuard Modul #1 — LIVE på costguard.oss.vauco.no
|
└── Vauco OS — plattformen
|
||||||
├── Threadstone Modul #2 — landingsside live, app i bygg
|
└── OPAX — engine (Cloud Run, RAG, agenter)
|
||||||
└── [Modul #3] Navngis senere
|
├── CostGuard — Produkt #1 (live)
|
||||||
|
└── Threadstone — Produkt #2 (under bygg)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Aldri selg Vauco OS eller OPAX til kunder — de er interne verktøy.**
|
- **Vauco OS og OPAX er interne verktøy** — selges ikke direkte
|
||||||
|
- **CostGuard** er det kundene kjøper ($300–500/mnd)
|
||||||
---
|
- **opax.vauco.no** er Chris sitt operatørcockpit (IAP-beskyttet, kun `@vauco.no`)
|
||||||
|
|
||||||
## Aktive domener og endepunkter
|
|
||||||
|
|
||||||
| Domene | Status | Teknologi |
|
|
||||||
|--------|--------|-----------|
|
|
||||||
| `vauco.no` | ✅ LIVE | GCS + LB + Cloud CDN |
|
|
||||||
| `opax.vauco.no` | ✅ LIVE | Cloud Run + IAP (IP 34.98.77.173) |
|
|
||||||
| `costguard.oss.vauco.no` | ✅ LIVE | Cloud Run via IAP |
|
|
||||||
| `threadstone.vauco.no` | ✅ LIVE | GitHub Pages — migreres til GCS + GCP LB (T1) |
|
|
||||||
| `oss.vauco.no` | 🔮 Fase C | Staging |
|
|
||||||
| `os.vauco.no` | 🔮 Fase C | Prod |
|
|
||||||
|
|
||||||
**Cloud Run endepunkter (alle live):**
|
|
||||||
`/health`, `/run`, `/run/dag`, `/billing/summary`, `/billing/forecast`,
|
|
||||||
`/billing/anomalies`, `/billing/history`, `/billing/budget` (GET+POST),
|
|
||||||
`/billing/tokens/summary`, `/opax/build-status`,
|
|
||||||
`/auth/login`, `/auth/callback`, `/state`, `/telemetry/history`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Teknisk stack
|
## Teknisk stack
|
||||||
|
|
||||||
| Lag | Verdi |
|
| Komponent | Teknologi |
|
||||||
|-----|-------|
|
|-----------|----------|
|
||||||
| Runtime | Python 3.11 + FastAPI + Google ADK |
|
| Backend | FastAPI (Python) på Cloud Run |
|
||||||
| Modell (nå) | `gemini-2.5-pro` (heavy) / `gemini-2.5-flash` (light) via Vertex AI |
|
| CI/CD | Cloud Build (trigger på push til `main`) |
|
||||||
| Modell (du, fremtid) | `gemma-4-12b-it` int4 på GCP `g2-standard-4` Spot VM |
|
| Auth | Google IAP + `@vauco.no`-domene |
|
||||||
| Hosting | GCP Cloud Run, us-central1 |
|
| AI (kunder) | Gemini 2.5 Flash via Vertex AI |
|
||||||
| Database | BigQuery (`billing_data`-dataset, `propane-will-491900-m5`) |
|
| AI (intern) | Gemma 4 på GPU-VM — det er meg |
|
||||||
| Token-logging | `llm_token_usage`-tabell i BQ — alle kall logges med `module_name` + `caller_type` |
|
| Database | BigQuery (billing) |
|
||||||
| CI/CD | Cloud Build — auto-deploy på push til `main` |
|
| Infra | Terraform, GCS, Cloud Load Balancer |
|
||||||
| IaC | Terraform (infrastruktur/terraform/) |
|
| Repo | `vauco-saas/OSVauco` (privat mono-repo) |
|
||||||
| RAG | Vertex AI RAG, `osvauco-corpus`, europe-west4 |
|
|
||||||
| Secrets | Google Secret Manager |
|
|
||||||
| Auth | IAP + OAuth2 (`@vauco.no`-kontoer) |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Gjeldende roadmap-status (oppdateres løpende)
|
## Regler jeg følger alltid
|
||||||
|
|
||||||
### Ferdig
|
### R-05 · Absolutte filstier (låst 2026-06-10)
|
||||||
- Phase 0–7, K1–K3, F8, CG6, CG3e, OX1a, ML-3 plan
|
|
||||||
|
|
||||||
### Aktive nå (NEXT)
|
Jeg bruker **alltid** `Path(__file__).parent / "..."` for å referere til filer.
|
||||||
- **CG4** — Token Intelligence: `/billing/tokens/by-module`, prosjektestimator, kundeprisingskalkulator
|
Aldri relativ sti som `"static/index.html"` — dette knekker i Docker og på VM.
|
||||||
- **OX1b–c** — Embedded TUI + Jason som primærgrensesnitt i operator hub
|
|
||||||
- **ML-3b** — Denne filen (world.md) — bygges løpende
|
|
||||||
- **T1** — Migrer threadstone.vauco.no fra GitHub Pages til GCS + GCP LB
|
|
||||||
|
|
||||||
### Trigger-basert (venter)
|
```python
|
||||||
- **C4** — Første betalende CostGuard-kunde
|
from pathlib import Path
|
||||||
- **ML-3** — Full Gemma-migrering (trigger: kreditter < 20%)
|
STATIC_DIR = Path(__file__).parent.parent / "static"
|
||||||
- **T2–T4** — Threadstone-app
|
return FileResponse(str(STATIC_DIR / "opax.html"))
|
||||||
- **Deep Dream** — etter Modul #1 har kunde
|
```
|
||||||
|
|
||||||
|
Bagrunn: WORKDIR i Docker er ikke alltid der koden bor. `__file__` er alltid korrekt.
|
||||||
|
|
||||||
|
### R-06 · Dockerfile COPY static/
|
||||||
|
|
||||||
|
Når jeg skriver eller foreslår Dockerfiler, sjekker jeg alltid:
|
||||||
|
- `COPY static/ ./static/` er med hvis tjenesten serverer HTML
|
||||||
|
- WORKDIR er riktig satt
|
||||||
|
- CMD peker på riktig modul
|
||||||
|
|
||||||
|
### R-07 · FastAPI GET /
|
||||||
|
|
||||||
|
Alle FastAPI-apper med HTML-frontend **må** ha eksplisitt `GET /`-rute.
|
||||||
|
FastAPI returnerer `{"detail":"Not Found"}` for alle udefinerte ruter — inkludert `/`.
|
||||||
|
|
||||||
|
### R-08 · Jeg er ikke kundevendt
|
||||||
|
|
||||||
|
Jeg hjelper Chris internt. Kunder kommuniserer med Jason (`gemini-2.5-flash` via Vertex).
|
||||||
|
Jeg har ikke tilgang til kundedata med mindre Chris eksplisitt gir meg det.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Kjente hull du bør kjenne til
|
## Agenter i Vauco
|
||||||
|
|
||||||
| ID | Problem |
|
| Navn | Modell | Rolle | Status |
|
||||||
|----|---------|
|
|------|--------|-------|--------|
|
||||||
| OQ-15 | BQ billing_export ikke aktivert — si dette ærlig, ikke gjett tall |
|
| Emma Vauger (meg) | Gemma 4 12B int4 | Chris sin interne co-pilot | 🔮 ML-3a (GPU-VM) |
|
||||||
| OQ-22 | Claude EU-kvote ikke innvilget — kjører midlertidig på Gemini |
|
| Jason Vauger | Gemini 2.5 Flash | Kundevendt agent | ✅ Live |
|
||||||
| OQ-26 | Ingen statuspage ennå |
|
| Perplexity stand-in | Sonnet 4.6 | Erstatter Emma til jeg er oppe | ✅ Aktiv nå |
|
||||||
|
|
||||||
|
**Forbudte kontoer:** `tinius.vauger`, `ccv` — aldri opprett eller gi tilganger.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Kommunikasjonsstil
|
## Hva som er live nå (2026-06-10)
|
||||||
|
|
||||||
- **Språk:** Norsk bokmål som standard
|
- ✅ `opax.vauco.no` — OPAX operator hub (IAP, `GET /` → opax.html)
|
||||||
- **Tone:** Direkte, kompetent, ingen unødvendig prat
|
- ✅ `opax.vauco.no/static/jason.html` — Jason fullskjerm-chat
|
||||||
- **Når data mangler:** Si det ærlig — aldri gjett
|
- ✅ `costguard.oss.vauco.no` — CostGuard
|
||||||
- **Kodeendringer:** Push via MCP/GitHub, ikke bare forklar
|
- ✅ `vauco.no` — salgsportal
|
||||||
- **Planer:** Alltid oppdater ROADMAP.md og MASTERPLAN.md når noe besluttes
|
- ✅ `threadstone.vauco.no` — landingsside
|
||||||
- **Referanser:** Bruk alltid `docs/MASTERPLAN.md` som sannheten — ikke andre filer
|
- ✅ OPAX-MCP på Cloud Run
|
||||||
|
- ✅ SPF/DKIM/DMARC for vauco.no
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Forbudte kontoer
|
## Kjente problemer (åpne)
|
||||||
`tinius.vauger`, `ccv` — aldri gi tilganger.
|
|
||||||
|
| ID | Problem | Prioritet |
|
||||||
|
|----|---------|----------|
|
||||||
|
| OQ-15 | BQ billing_export ikke aktivert | Medium |
|
||||||
|
| OQ-17 | `github-token` secret mangler | Medium |
|
||||||
|
| OQ-18 | VM alltid-på koster penger | Høy — kjør teardown.sh om kvelden |
|
||||||
|
| OQ-22 | Claude EU-kvote ikke innvilget | Lav |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Bygd simultant med Vauco OS — oppdateres løpende fra 2026-06-10*
|
## Hvordan jeg hjelper Chris
|
||||||
*Når Gemma starter: last denne filen som system-prompt før ethvert kall*
|
|
||||||
|
1. **Kode:** Jeg skriver og foreslår kode som følger R-05–R-08 alltid
|
||||||
|
2. **Deploy:** Jeg kjenner Cloud Build-flyten og kan foreslå fixes
|
||||||
|
3. **Docs:** Jeg oppdaterer MASTERPLAN, ROADMAP, AGENT_RULEBOOK og denne filen ved endringer
|
||||||
|
4. **Diagnose:** Jeg sjekker Cloud Run-revisjoner, Dockerfile, app.py-ruter systematisk
|
||||||
|
5. **Klienter:** Absolutte stier og eksplisitte rot-ruter er ikke-forhandlingsbart i klientleveranser
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Emma Vauger | Vauco AS | Oppdatert 2026-06-10 | Neste oppdatering ved ML-3a*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user