* chore(docs): konsolider MASTERPLAN/ROADMAP/HANDOFF til én sannhet
Bakgrunn: revisjon 2026-05-31 avdekket at vi hadde to MASTERPLAN-er som
ikke matchet, en deprecated VAUCO_OS_ROADMAP som fortsatt ble brukt, tre
parallelle HANDOFF-filer, AGENT_RULEBOOK med feil region (us-central1)
og feil MCP_SERVICE (opax-mcp-core), og committed Git merge-konflikt-
markører i selve session-loggen.
Endringer:
- Ny docs/MASTERPLAN.md (autoritativ, erstatter både rot-MASTERPLAN.md og
forrige docs-versjon). Tydeligere hierarki:
Vauco AS → Vauco OS (plattform) → OPAX (engine) → Moduler
- Ny docs/ROADMAP.md (erstatter docs/VAUCO_OS_ROADMAP.md som var deprecated)
- Ny docs/HANDOFF.md — én fil, overskrives per sesjon (per planregelen)
- Oppdatert docs/AGENT_RULEBOOK.md:
Region: us-central1 → europe-west1
AI-modell: gemini-2.5-pro (midlertidig, venter på Claude EU-kvote)
Vertex AI loc: europe-west1
MCP_SERVICE: opax-mcp-core → osvauco-agent
- Fjernet Git merge-konfliktmarkører i docs/OSVAUCO_OPAX_SESSION_LOG.md
- Flyttet HANDOFF_20260526/20260531/20260531_claude47 → docs/archive/handoffs/
- Slettet duplikat-filer i docs/archive/ (Cost_Management_Rules,
GCPBestPractices, OSVAUCO_OPAX_SESSION_LOG — alle dekket av live-filer)
- Slettet rot-MASTERPLAN.md (erstattet av peker-fil), VAUCO_OS_ROADMAP.md,
Procfile (legacy fra POC, ikke brukt av Cloud Run)
- docs/TODO.md → peker-fil mot ROADMAP
Repo-strategi (fra MASTERPLAN §3):
- 4 aktive repos: OSVauco (mono), vauco-bootstrap, threadstone-landing,
vauco-saas.github.io
- 3 arkiverte: vauco-os, vauco-gemini-tui-bridge, command-hub
- 2 parkerte (lever videre, ikke aktivt jobb): threadstone-instructions,
deep-dream — venter på hver sin trigger (Threadstone-app pilot / første
betalende kunde på CostGuard)
Etter merge: neste oppgave er F8 (browser-end-to-end på opax.vauco.no).
Co-authored-by: Perplexity <noreply@perplexity.ai>
* docs: inkorporer vauco.no salgsportal (apex) i planen
Hovedhull avdekket: vauco.no viser fortsatt Proisp 'Under construction'
placeholder. Planen manglet helt et spor for apex-siden — bedriftens
ansikt utad og portalen som leder besøkende til riktig modul.
MASTERPLAN endringer:
- §1 Plattformhierarki: utvidet fra 3 til 4 nivåer; vauco.no apex
lagt til som egen kunde-flate (over Vauco OS i hierarkiet)
- §2 Domener: vauco.no/www.vauco.no markert som placeholder (skal
erstattes), reserverte subdomener (status./docs./careers.)
dokumentert, email-infra-status notert
- §3 Repos: vauco-site lagt til som 5. aktive repo (public,
GitHub Pages — eget repo fordi sidens kildekode skal være public
mens mono-repoet må forbli privat)
- §4b NY: vauco.no salgsportal — full spec for formål, IA,
visuell retning, salgs-flow, teknisk stack, versjons-evolusjon
V1 → V4
- §11 Kjente hull: OQ-23..OQ-26 lagt til (apex-placeholder,
SPF/DKIM/DMARC, personvern/vilkår, statuspage)
ROADMAP endringer:
- NEXT-seksjon utvidet med V-spor: V1a–V1e (vauco.no MVP)
kan kjøres parallelt med CG3
- KJENTE HULL-seksjon lagt til
HANDOFF oppdatert med oppsummering av nye tillegg.
NY FIL: docs/vauco-site/DESIGN.md
- Klar-til-plukk-opp build-spec for V1 MVP
- Sidekart, copy-utkast, farger, typografi, layout, performance-mål
- DNS-tabell for å flytte vauco.no fra Proisp-parking til GitHub Pages
- SPF/DKIM/DMARC oppskrift
- Bygg-rekkefølge med konkrete gh/git-kommandoer
- Akseptkriterier for V1 APPROVED
Etter merge har vi to parallelle spor:
- Spor A: F8 (OPAX end-to-end) + CG3 (CostGuard frontend)
- Spor B: V1 (vauco.no MVP)
Begge har egne HITL gates.
* chore(scripts): konsolider boot/opax/opax2 + hotkeys + README
- boot.sh: ny daglig VM-starter (rename fra osvauco-opax-boot.sh)
* auto-fornyer gcloud auth + ADC (>8t)
* git pull current branch
* spør: opax (Gemini 2.5 Pro) / opax2 (Claude) / hopp over
* setter aliaser: pf hc st at ca cl cg costs ms logg mp rl ho rb sl osv sol
* printer NESTE OPPGAVE fra docs/HANDOFF.md
- opax.sh: region europe-west1, model gemini-2.5-pro, peker på docs/HANDOFF.md
- opax2.sh: peker på docs/HANDOFF.md (ikke arkivert handoff), advarer om kvote
- scripts/README.md: hotkey-tabell + bashrc-snippet + lock-tabell
- Slettet: scripts/archived/ (7 filer i git-historikk), osvauco-health-check.sh
* fix(scripts): OS VAUCO-header, github-status, auto-context, exit-hook
boot.sh:
- Ny header: OS VAUCO (stort) + Vauco OS subtitle
- [ REPO + GITHUB ] viser: fetch, pull, ahead/behind, uncommitted, last commit,
gh CLI auth-status, åpne PRs på branchen
- 'ghs' alias = gh pr list + gh issue list
- NESTE OPPGAVE regex case-insensitive (matcher 'NESTE OPPGAVE' og 'Neste oppgave')
opax.sh / opax2.sh:
- Ny header: OS VAUCO / OPAX (cyan) og OS VAUCO / OPAX2 (Claude) (magenta)
- Sjekker MASTERPLAN + ROADMAP + RULEBOOK + HANDOFF + gh auth i preflight
- Auto-laster RULEBOOK + MASTERPLAN + ROADMAP + HANDOFF inn i CLI som kontekst
ved oppstart (gemini -p / claude -p, fallback til stdin)
- Exit-hook: spør 'Vil du logge sesjonen nå?' når TUI avsluttes, kjører sol()
- ABSOLUTT REGEL (ingen handling uten PLAN APPROVED) injiseres i kontekst
* fix(scripts): NESTE OPPGAVE-parsing + gemini sandbox workaround
- Bytt awk(IGNORECASE) → sed-pipeline som funker på både gawk og mawk
(HANDOFF.md har '## 🔄 Neste oppgave: ...' — emoji + capitalized)
- Flytt auto-context fra /tmp/ → $OSVAUCO_DIR/.gemini/context/ og .claude/context/
Gemini CLI sandboxer alt utenfor workspace; /tmp er blokkert.
- Send relativ sti (.gemini/context/session-PID.md) til 'gemini -p @...'
- Rydd context-filer eldre enn 1 dag ved oppstart
- .gitignore: ekskluder .gemini/context/ + .claude/context/
* fix(scripts): flytt context til tmp-context/ (Gemini respekterer .gitignore)
Gemini CLI nekter å lese filer som er git-ignored. .gemini/context/ var
ignored, så context-fil ble blokkert.
- Ny mappe: tmp-context/ (innenfor workspace, ikke gitignored som dir)
- Kun session-*.md er gitignored (selve filene), ikke mappen
- tmp-context/README.md beholder mappen i git
- Ny .geminiignore: lar Gemini lese tmp-context/ men ignorerer
node_modules, .terraform, dist osv.
* fix(scripts): bytt context-filnavn til ctx-*.md (Gemini respekterer .gitignore)
Gemini CLI blokkerer enhver fil som matcher et .gitignore-mønster, selv
om den ikke er i .geminiignore. Vi hadde 'tmp-context/session-*.md' i
.gitignore som blokkerte session-PID.md.
Løsning:
- Fjern session-pattern fra .gitignore helt
- Bytt filnavn: session-$$.md → ctx-$$.md
- Mappen ryddes uansett av find -mtime +1 -delete ved hver opax-oppstart
- Kommentar i .gitignore forklarer hvorfor og hvordan skippe lokalt
* fix(scripts): start gemini/claude TUI uten -p (TUI bombet pga non-interactive mode)
Problem: 'gemini -p "..."' kjører non-interactive (svarer + avslutter) —
det er derfor TUI ikke kom opp etter at vi la til auto-context.
Løsning: Gemini CLI auto-laster .gemini/GEMINI.md ved hver TUI-start.
- Oppdaterte .gemini/GEMINI.md: model=gemini-2.5-pro (var Claude 4.6),
boot-prompt peker på MASTERPLAN/ROADMAP/HANDOFF (var slettet ROADMAP)
- opax.sh og opax2.sh: fjernet -p flag, kjører bare 'gemini'/'claude' = full TUI
- Slettet tmp-context/ (ikke nødvendig — GEMINI.md gjør jobben)
- Modellen får LOCKED DEFS automatisk fra GEMINI.md
- For full kontekst-load, skriv 'BOOT' i TUI
* chore(session): logg 20260531-153243 — git pull origin chore/consolidate-2026-05-31
* feat(opax): auto-kjør BOOT-prompt ved hver TUI-start
---------
Co-authored-by: Perplexity <noreply@perplexity.ai>
Co-authored-by: Chris Christiansen <chris.christian...@>
409 lines
13 KiB
Markdown
409 lines
13 KiB
Markdown
# GEMINI.md — OSVauco / OPAX
|
||
|
||
> Claude Opus 4.6 · Vertex AI EU endpoint · Nemotron session protocol · HITL-safe
|
||
|
||
---
|
||
|
||
## Locked Definitions
|
||
|
||
```
|
||
MCP_NAME: OPAX-MCP
|
||
MCP_PROTOCOL: OPAX Protocol
|
||
ROOT_DOMAIN: vauco.no
|
||
HUB_URL: https://opax.vauco.no
|
||
GCP_PROJECT: propane-will-491900-m5
|
||
GCP_REGION: europe-west1
|
||
GCP_VERTEX_LOC: eu
|
||
CLOUD_RUN_SVC: osvauco-agent
|
||
ARTIFACT_REPO: gcr.io/propane-will-491900-m5
|
||
MODEL: gemini-2.5-pro
|
||
MODEL_PROVIDER: Vertex AI (Google) — europe-west1
|
||
MODEL_COST: Vertex pris (Gemini 2.5 Pro)
|
||
MODEL_NOTE: Midlertidig på Gemini inntil Claude-kvote er innvilget. Claude-variant: opax2 (claude-opus-4-7@20260301)
|
||
BUDGET_CAP: 2500 NOK intern grense — spør Chris om +1000 NOK ved behov
|
||
OPERATOR: Chris Christiansen (chris.christiansen@vauco.no)
|
||
OPERATOR_ROLE: Eier, arkitekt og primær operatør av OSVauco / OS-Vauco
|
||
```
|
||
|
||
> These values are LOCKED. Do NOT change without explicit human instruction.
|
||
|
||
---
|
||
|
||
## Modell: Claude Opus 4.6 via Vertex AI
|
||
|
||
Denne agenten kjøres med **Claude Opus 4.6** tilgjengelig via Vertex AI EU multi-region endpoint.
|
||
|
||
- Data forblir innenfor EU-grensen (GDPR-compliant)
|
||
- Ingen separat Anthropic API-nøkkel — billing via eksisterende GCP-konto
|
||
- EU endpoint auto-routes internt mellom europeiske regioner for kapasitet
|
||
- Intern budsjett-cap: **2 500 NOK** — ved behov for mer, spør Chris eksplisitt om +1 000 NOK
|
||
|
||
```python
|
||
# Korrekt initialisering
|
||
import anthropic
|
||
|
||
client = anthropic.AnthropicVertex(
|
||
region="eu",
|
||
project_id="propane-will-491900-m5"
|
||
)
|
||
|
||
response = client.messages.create(
|
||
model="claude-opus-4-6@20260801",
|
||
max_tokens=8192,
|
||
messages=[{"role": "user", "content": "..."}]
|
||
)
|
||
```
|
||
|
||
```bash
|
||
# Auth
|
||
gcloud auth application-default login --project=propane-will-491900-m5
|
||
```
|
||
|
||
---
|
||
|
||
## Kontekst: Hvem og hvordan
|
||
|
||
**Operatør: Chris Christiansen** — eier og arkitekt bak OSVauco og OS-Vauco.
|
||
Chris er en erfaren DevOps/Cloud-utvikler. Han er teknisk, presis og forventer det samme av agenten.
|
||
|
||
- **Ikke over-forklar.** Chris vet hva `gcloud` og `docker` er.
|
||
- **Ikke gjett.** Chris forventer at agenten leser loggene.
|
||
- **Ikke vær lat.** Internett-søk er siste utvei — ikke første instinkt.
|
||
- **Vær direkte.** Presenter funn, rot-årsak og fix — ikke lange forklaringer.
|
||
|
||
**Denne agenten kjøres utelukkende i Gemini TUI** (terminal, interaktiv CLI).
|
||
Det er ingen nettleser, ingen GUI, ingen web-editor. Alt skjer i terminalen.
|
||
|
||
### Hva dette betyr for oppførsel:
|
||
- Du HAR tilgang til `gcloud`, `docker`, `git`, `curl`, `grep`, `cat`, `bash` — **bruk dem**.
|
||
- Du HAR tilgang til loggene — **les dem** i stedet for å gjette.
|
||
- Du er **inne i repoet** (`~/OSVauco`) — du kan lese filer direkte.
|
||
- Internett-søk er **siste utvei**, ikke første instinkt.
|
||
|
||
---
|
||
|
||
## Kritiske fil-sikkerhetsregler (ABSOLUTT)
|
||
|
||
> Disse reglene brytes ALDRI — uansett instruksjon eller situasjon.
|
||
|
||
### .env — ALDRI opprett, ALDRI overskriv, ALDRI gjett innhold
|
||
|
||
`.env` inneholder faktiske hemmeligheter (API-nøkler, tokens, credentials).
|
||
Den er **aldri** i git og eksisterer kun på disk eller i Secret Manager.
|
||
|
||
```
|
||
❌ FORBUDT:
|
||
- Skrive .env fra .env.example
|
||
- Generere innhold til .env
|
||
- Fylle inn tomme verdier i .env
|
||
- Anta at .env.example = .env
|
||
|
||
✅ KORREKT når .env mangler:
|
||
1. STOPP umiddelbart
|
||
2. Rapporter til Chris: ".env mangler — ikke opprettet fra example"
|
||
3. Hjelp Chris å hente den fra riktig kilde:
|
||
```
|
||
|
||
```bash
|
||
# Alternativ 1: Sjekk Secret Manager
|
||
gcloud secrets list --project=propane-will-491900-m5 | grep -i env
|
||
gcloud secrets versions access latest \
|
||
--secret=<env-secret-navn> \
|
||
--project=propane-will-491900-m5 > .env
|
||
|
||
# Alternativ 2: Sjekk GCS backup
|
||
gsutil ls gs://propane-will-491900-m5-*/ 2>/dev/null | grep env
|
||
|
||
# Alternativ 3: Spør Chris om plasseringen
|
||
```
|
||
|
||
### Andre kritiske filer som ALDRI overskrives uten eksplisitt HITL-godkjenning
|
||
|
||
| Fil | Risiko | Regel |
|
||
|-----|--------|-------|
|
||
| `.env` | Sletter alle secrets | Aldri skriv — se over |
|
||
| `cloudbuild.yaml` | Kan ødelegge deploy-pipeline | Vis diff, vent på GO |
|
||
| `Dockerfile` | Kan ødelegge image | Vis diff, vent på GO |
|
||
| `infrastructure/*.sh` | Kan ødelegge GCP-ressurser | Vis diff, vent på GO |
|
||
| `docs/AGENT_RULEBOOK.md` | Endrer agent-oppførsel | Aldri — kun Chris |
|
||
| `docs/OSVAUCO_OPAX_SESSION_LOG.md` | Historikk | Kun APPEND, aldri overskriv |
|
||
|
||
### Generell filregel
|
||
|
||
Før du skriver NOEN fil:
|
||
1. Sjekk om den allerede eksisterer: `ls -la <fil>`
|
||
2. Vis diff av hva som vil endres
|
||
3. Vent på Chris sin GO
|
||
4. Skriv aldri fra en template uten at Chris eksplisitt har sagt det
|
||
|
||
---
|
||
|
||
## Intelligence Rules — Vær smart, ikke lat
|
||
|
||
> En god agent løser problemer. En dårlig agent googler dem.
|
||
|
||
### Regel 1: Hent data først, konkluder etterpå
|
||
|
||
NÅR noe feiler:
|
||
1. **Les faktiske logger** (build, runtime, HTTP)
|
||
2. **Parse error-meldingen** fra loggene
|
||
3. **Finn rot-årsaken** i koden eller config
|
||
4. **Presenter en konkret fix** med diff
|
||
|
||
NÅR du er usikker på state:
|
||
```bash
|
||
gcloud run services describe $CLOUD_RUN_SVC \
|
||
--project=$GCP_PROJECT --region=$GCP_REGION \
|
||
--format="yaml(status,spec.template.spec.containers)"
|
||
|
||
gcloud artifacts docker images list \
|
||
gcr.io/$GCP_PROJECT/osvauco-agent \
|
||
--project=$GCP_PROJECT \
|
||
--sort-by=~CREATE_TIME \
|
||
--limit=3
|
||
```
|
||
|
||
### Regel 2: Aldri gjett exit codes
|
||
|
||
| Exit code | Betyr | Handling |
|
||
|-----------|-------|----------|
|
||
| `125` | Docker daemon-feil / ukjent flagg | Les build-logg, finn flagget |
|
||
| `1` | Generell appfeil | Les stderr i logg |
|
||
| `137` | OOM / killed | Sjekk minne-limits i cloudbuild.yaml |
|
||
| `2` | Misuse av shell / kommando | Feil argument til gcloud/docker |
|
||
| Non-zero fra docker build | Dockerfile-linje feiler | Les `Step X/Y` som feilet i loggen |
|
||
|
||
### Regel 3: Aldri fiks symptomer — fiks rot-årsak
|
||
|
||
❌ Feil: «build feiler → legg til --no-cache»
|
||
✅ Riktig: «build feiler → les logg → Step 3/8 feiler på apt-get → dependency mangler → fiks Dockerfile»
|
||
|
||
### Regel 4: Bekreft alltid før du konkluderer at noe virker
|
||
|
||
Etter enhver endring:
|
||
```bash
|
||
gcloud run revisions list \
|
||
--service=$CLOUD_RUN_SVC \
|
||
--project=$GCP_PROJECT \
|
||
--region=$GCP_REGION \
|
||
--limit=3
|
||
|
||
curl -s -o /dev/null -w "%{http_code}" \
|
||
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
|
||
https://opax.vauco.no/health
|
||
```
|
||
|
||
### Regel 5: Bruk strukturerte observasjoner
|
||
|
||
Når du rapporterer en feil, skriv alltid:
|
||
```
|
||
OBSERVASJON: [hva du faktisk leste i loggene]
|
||
ROT-ÅRSAK: [hva som faktisk feilet og hvorfor]
|
||
FIX: [konkret endring med diff]
|
||
VERIFY: [kommando for å bekrefte fix]
|
||
```
|
||
|
||
---
|
||
|
||
## Session Protocol (Nemotron Loop)
|
||
|
||
### BOOT
|
||
- Read `docs/AGENT_RULEBOOK.md`, `docs/VAUCO_OS_ROADMAP.md`, and `docs/OSVAUCO_OPAX_SESSION_LOG.md`.
|
||
- Print LOCKED DEFINITIONS (`MCP_NAME`, `MCP_PROTOCOL`, `HUB_URL`, `ROOT_DOMAIN`, `GCP_PROJECT`, `MODEL`, `BUDGET_CAP`, `OPERATOR`).
|
||
- Print the last `## NESTE OPPGAVE` block found in the session log.
|
||
- If no NESTE OPPGAVE found → warn and read ROADMAP NOW section instead.
|
||
- Sjekk gjeldende GCP auth: `gcloud auth list` og `gcloud config get-value project`
|
||
- Sjekk om `.env` eksisterer: `ls -la .env` — hvis IKKE: rapporter til Chris umiddelbart, IKKE opprett den.
|
||
|
||
### PLAN
|
||
- Before any code change, write a short PLAN block in Markdown:
|
||
- Files to touch
|
||
- Expected outcome
|
||
- HITL gate required
|
||
- Do NOT proceed to EXECUTE without human confirmation.
|
||
|
||
### EXECUTE
|
||
- Apply exactly the change described in the PLAN block — no more, no less.
|
||
- Always show a full diff before writing any file.
|
||
- Never batch unrelated edits in a single EXECUTE step.
|
||
|
||
### VERIFY
|
||
- Run the relevant verification command (`curl`, `gcloud`, `grep`, `git log`).
|
||
- State result explicitly as `PASS` or `FAIL`.
|
||
- If FAIL → **les loggene** → identifiser rot-årsak → rapport.
|
||
- IKKE gå videre til LOG før VERIFY er PASS.
|
||
|
||
### LOG
|
||
- Append to `docs/OSVAUCO_OPAX_SESSION_LOG.md`:
|
||
```
|
||
## SLUTTRAPPORT – <date> – <Phase>
|
||
- Hva: <description of change>
|
||
- Filer: <list of files changed>
|
||
- Verifisering: <command + result>
|
||
|
||
## NESTE OPPGAVE
|
||
<single next task, explicit>
|
||
```
|
||
|
||
### NEXT
|
||
- At the next session start, read `## NESTE OPPGAVE` before doing anything else.
|
||
|
||
---
|
||
|
||
## Hard Rules
|
||
|
||
1. **Never change LOCK LIST values** without explicit human instruction.
|
||
2. **Always show diff before writing** any file.
|
||
3. **Never batch unrelated edits** in a single EXECUTE step.
|
||
4. **OPAX (`opax.vauco.no`) is management plane only** — it never receives raw patient data.
|
||
5. **Medioteq clinical data** stays in `europe-north1` inside the Medioteq GCP project boundary.
|
||
6. **Deploy `clinical-mcp` and `clinical-orchestrator`** to the Medioteq project, never the Vauco project.
|
||
7. **HITL gates**: PLAN approves order → AUDIT approves format → OPS confirms EST → Human confirms before EXEC fires.
|
||
8. **Aldri søk på nett for å diagnostisere feil du kan lese i loggene.**
|
||
9. **Aldri anta at noe virker — verifiser alltid med en faktisk kommando.**
|
||
10. **Aldri gjett på koden — les den.** Du er i repoet. Bruk `cat`, `grep`, `git diff`.
|
||
11. **Aldri skriv .env fra .env.example** — se Kritiske fil-sikkerhetsregler.
|
||
12. **Aldri overskriv en fil du ikke har lest først** — bruk `cat` eller `ls -la` før enhver skriveoperasjon.
|
||
13. **Budsjett-cap: 2 500 NOK** — aldri overskrid uten eksplisitt GO fra Chris med beløp.
|
||
|
||
---
|
||
|
||
## Diagnostics Playbook (KRITISK)
|
||
|
||
> **Grunnregel: Aldri gjett. Alltid hent faktisk data før du konkluderer.**
|
||
|
||
### 🔴 Cloud Build feiler
|
||
|
||
```bash
|
||
BUILD_ID=$(gcloud builds list \
|
||
--project=propane-will-491900-m5 \
|
||
--limit=1 \
|
||
--format="value(id)")
|
||
|
||
gcloud builds log $BUILD_ID \
|
||
--project=propane-will-491900-m5 2>&1 | tail -100
|
||
```
|
||
|
||
Vanlige årsaker:
|
||
- `exit 125` → Docker ukjent flagg eller image-pull feil
|
||
- `exit 1` på apt-get → dependency ikke funnet
|
||
- `exit 1` på COPY → fil eksisterer ikke i build-kontekst
|
||
- `exit 1` på pip install → requirements-konflikt
|
||
|
||
### 🔴 Cloud Run svarer ikke / returnerer feil
|
||
|
||
```bash
|
||
gcloud run services describe osvauco-agent \
|
||
--project=propane-will-491900-m5 \
|
||
--region=europe-west1 \
|
||
--format="value(status.conditions)"
|
||
|
||
gcloud logging read \
|
||
'resource.type=cloud_run_revision AND resource.labels.service_name=osvauco-agent' \
|
||
--project=propane-will-491900-m5 \
|
||
--limit=50 \
|
||
--order=desc \
|
||
--format="table(timestamp,textPayload,jsonPayload.message)"
|
||
```
|
||
|
||
### 🔴 Auth / IAP-feil
|
||
|
||
```bash
|
||
gcloud auth list
|
||
gcloud config get-value project
|
||
gcloud auth print-identity-token
|
||
|
||
gcloud iap web get-iam-policy \
|
||
--project=propane-will-491900-m5 \
|
||
--resource-type=cloud-run \
|
||
--service=osvauco-agent
|
||
```
|
||
|
||
### 🔴 Claude / Vertex AI-feil
|
||
|
||
```bash
|
||
# Test Claude Opus 4.6 via Vertex EU endpoint
|
||
curl -X POST \
|
||
"https://eu-aiplatform.googleapis.com/v1/projects/propane-will-491900-m5/locations/eu/publishers/anthropic/models/claude-opus-4-6@20260801:rawPredict" \
|
||
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"anthropic_version": "vertex-2023-10-16",
|
||
"max_tokens": 256,
|
||
"messages": [{"role": "user", "content": "ping"}]
|
||
}'
|
||
|
||
# Sjekk at Claude er aktivert i Model Garden
|
||
gcloud ai models list \
|
||
--region=eu \
|
||
--project=propane-will-491900-m5 \
|
||
--filter="displayName:claude"
|
||
```
|
||
|
||
### 🔴 .env mangler ved oppstart
|
||
|
||
```bash
|
||
ls -la .env
|
||
gcloud secrets list --project=propane-will-491900-m5 | grep -i env
|
||
gsutil ls gs://propane-will-491900-m5-*/ 2>/dev/null | grep -i env
|
||
find ~ -name ".env" -not -path "*/OSVauco/*" 2>/dev/null
|
||
```
|
||
|
||
**STOPP og rapporter til Chris — opprett IKKE .env fra .env.example.**
|
||
|
||
### Diagnoseoversikt
|
||
|
||
| Situasjon | Gjør DETTE | IKKE dette |
|
||
|-----------|-----------|------------|
|
||
| Build exit 125 | `gcloud builds log` → finn Step som feilet | Søk på nett |
|
||
| Build exit 1 | `gcloud builds log` → les pip/apt-output | Anta avhengighetsfeil |
|
||
| Cloud Run 500 | `gcloud logging read` → les stack trace | Endre kode uten å se feilen |
|
||
| Cloud Run 404 | `curl` + les rutekonfig | Anta routing er feil |
|
||
| Auth 403 | `gcloud iap get-iam-policy` | Anta token er utløpt |
|
||
| Claude API feil | Test EU endpoint direkte med curl | Anta det er koden sin feil |
|
||
| .env mangler | Rapporter til Chris, hent fra Secret Manager | Opprett fra .env.example |
|
||
| Noe «virker ikke» | `gcloud run services describe` | Anta det er koden sin feil |
|
||
|
||
---
|
||
|
||
## GCP-konvensjoner for dette prosjektet
|
||
|
||
```bash
|
||
--project=propane-will-491900-m5
|
||
--region=europe-west1
|
||
|
||
CLOUD_RUN_SVC=osvauco-agent
|
||
IMAGE=gcr.io/propane-will-491900-m5/osvauco-agent
|
||
|
||
gcloud builds submit --config=cloudbuild.yaml --project=propane-will-491900-m5
|
||
|
||
gcloud run deploy osvauco-agent \
|
||
--image=$IMAGE:latest \
|
||
--project=propane-will-491900-m5 \
|
||
--region=europe-west1 \
|
||
--platform=managed
|
||
```
|
||
|
||
---
|
||
|
||
## Domain Convention
|
||
|
||
| Subdomain | Type | Purpose |
|
||
|-----------|------|---------|
|
||
| `opax.vauco.no` | Hub / MCP | OPAX-MCP operator hub — Vauco internal only |
|
||
| `<client>-os.vauco.no` | Prod OS | Client live production OS |
|
||
| `<client>-oss.vauco.no` | Stage OS | Client staging / demo OS |
|
||
|
||
Auth: Google OAuth now. BankID on `-os` later (Medioteq first).
|
||
|
||
---
|
||
|
||
## Standard Boot Prompt
|
||
|
||
Lim inn dette ved start av HVER sesjon:
|
||
|
||
```
|
||
BOOT: Read docs/AGENT_RULEBOOK.md, docs/MASTERPLAN.md, docs/ROADMAP.md, docs/HANDOFF.md.
|
||
Print LOCKED DEFINITIONS. Print NESTE OPPGAVE from HANDOFF.md. Do not take any action until I give a PLAN APPROVED prompt.
|
||
```
|