fix: strengthen boot prompt to force file reading in both GEMINI.md and CLAUDE.md

This commit is contained in:
chrischristiansen-glitch 2026-05-31 19:57:36 +02:00
parent 3d2559b8a3
commit 6758685b7b
2 changed files with 103 additions and 127 deletions

View File

@ -1,6 +1,6 @@
# GEMINI.md — OSVauco / OPAX # GEMINI.md — OSVauco / OPAX
> Claude Opus 4.6 · Vertex AI EU endpoint · Nemotron session protocol · HITL-safe > Gemini 2.5 Pro · Vertex AI EU endpoint · Nemotron session protocol · HITL-safe
--- ---
@ -29,31 +29,14 @@ OPERATOR_ROLE: Eier, arkitekt og primær operatør av OSVauco / OS-Vauco
--- ---
## Modell: Claude Opus 4.6 via Vertex AI ## Modell: Gemini 2.5 Pro via Vertex AI
Denne agenten kjøres med **Claude Opus 4.6** tilgjengelig via Vertex AI EU multi-region endpoint. Denne agenten kjøres med **Gemini 2.5 Pro** tilgjengelig via Vertex AI EU endpoint.
- Data forblir innenfor EU-grensen (GDPR-compliant) - Data forblir innenfor EU-grensen (GDPR-compliant)
- Ingen separat Anthropic API-nøkkel — billing via eksisterende GCP-konto - 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 - 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 ```bash
# Auth # Auth
gcloud auth application-default login --project=propane-will-491900-m5 gcloud auth application-default login --project=propane-will-491900-m5
@ -71,7 +54,7 @@ Chris er en erfaren DevOps/Cloud-utvikler. Han er teknisk, presis og forventer d
- **Ikke vær lat.** Internett-søk er siste utvei — ikke første instinkt. - **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. - **Vær direkte.** Presenter funn, rot-årsak og fix — ikke lange forklaringer.
**Denne agenten kjøres utelukkende i Gemini TUI** (terminal, interaktiv CLI). **Denne agenten kjøres utelukkende i Gemini CLI TUI** (terminal, interaktiv CLI).
Det er ingen nettleser, ingen GUI, ingen web-editor. Alt skjer i terminalen. Det er ingen nettleser, ingen GUI, ingen web-editor. Alt skjer i terminalen.
### Hva dette betyr for oppførsel: ### Hva dette betyr for oppførsel:
@ -107,8 +90,8 @@ Den er **aldri** i git og eksisterer kun på disk eller i Secret Manager.
```bash ```bash
# Alternativ 1: Sjekk Secret Manager # Alternativ 1: Sjekk Secret Manager
gcloud secrets list --project=propane-will-491900-m5 | grep -i env gcloud secrets list --project=propane-will-491900-m5 | grep -i env
gcloud secrets versions access latest gcloud secrets versions access latest \
--secret=<env-secret-navn> --secret=<env-secret-navn> \
--project=propane-will-491900-m5 > .env --project=propane-will-491900-m5 > .env
# Alternativ 2: Sjekk GCS backup # Alternativ 2: Sjekk GCS backup
@ -152,14 +135,14 @@ NÅR noe feiler:
NÅR du er usikker på state: NÅR du er usikker på state:
```bash ```bash
gcloud run services describe $CLOUD_RUN_SVC gcloud run services describe $CLOUD_RUN_SVC \
--project=$GCP_PROJECT --region=$GCP_REGION --project=$GCP_PROJECT --region=$GCP_REGION \
--format="yaml(status,spec.template.spec.containers)" --format="yaml(status,spec.template.spec.containers)"
gcloud artifacts docker images list gcloud artifacts docker images list \
gcr.io/$GCP_PROJECT/osvauco-agent gcr.io/$GCP_PROJECT/osvauco-agent \
--project=$GCP_PROJECT --project=$GCP_PROJECT \
--sort-by=~CREATE_TIME --sort-by=~CREATE_TIME \
--limit=3 --limit=3
``` ```
@ -182,14 +165,14 @@ gcloud artifacts docker images list
Etter enhver endring: Etter enhver endring:
```bash ```bash
gcloud run revisions list gcloud run revisions list \
--service=$CLOUD_RUN_SVC --service=$CLOUD_RUN_SVC \
--project=$GCP_PROJECT --project=$GCP_PROJECT \
--region=$GCP_REGION --region=$GCP_REGION \
--limit=3 --limit=3
curl -s -o /dev/null -w "%{http_code}" curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
https://opax.vauco.no/health https://opax.vauco.no/health
``` ```
@ -208,57 +191,57 @@ VERIFY: [kommando for å bekrefte fix]
## Session Protocol (Nemotron Loop) ## Session Protocol (Nemotron Loop)
### BOOT ### BOOT
- Read `docs/AGENT_RULEBOOK.md`, `docs/VAUCO_OS_ROADMAP.md`, and `docs/OSVAUCO_OPAX_SESSION_LOG.md`. - Les og print innhold fra: `docs/AGENT_RULEBOOK.md`, `docs/MASTERPLAN.md`, `docs/ROADMAP.md`, `docs/HANDOFF.md`.
- Print LOCKED DEFINITIONS (`MCP_NAME`, `MCP_PROTOCOL`, `HUB_URL`, `ROOT_DOMAIN`, `GCP_PROJECT`, `MODEL`, `BUDGET_CAP`, `OPERATOR`). - Print LOCKED DEFINITIONS (`MCP_NAME`, `MCP_PROTOCOL`, `HUB_URL`, `ROOT_DOMAIN`, `GCP_PROJECT`, `MODEL`, `BUDGET_CAP`, `OPERATOR`) i en kompakt blokk.
- Print the last `## NESTE OPPGAVE` block found in the session log. - Print siste `## NESTE OPPGAVE`-blokk fra `docs/HANDOFF.md` i én setning.
- If no NESTE OPPGAVE found → warn and read ROADMAP NOW section instead. - Hvis ingen NESTE OPPGAVE → advar og les ROADMAP NOW-seksjon i stedet.
- Sjekk gjeldende GCP auth: `gcloud auth list` og `gcloud config get-value project` - 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. - Sjekk om `.env` eksisterer: `ls -la .env` — hvis IKKE: rapporter til Chris umiddelbart, IKKE opprett den.
### PLAN ### PLAN
- Before any code change, write a short PLAN block in Markdown: - Før enhver kodeendring, skriv en kort PLAN-blokk i Markdown:
- Files to touch - Filer som berøres
- Expected outcome - Forventet resultat
- HITL gate required - HITL gate påkrevd
- Do NOT proceed to EXECUTE without human confirmation. - IKKE gå til EXECUTE uten human bekreftelse.
### EXECUTE ### EXECUTE
- Apply exactly the change described in the PLAN block — no more, no less. - Gjennomfør nøyaktig den endringen som er beskrevet i PLAN-blokken — ikke mer, ikke mindre.
- Always show a full diff before writing any file. - Vis alltid full diff før du skriver noen fil.
- Never batch unrelated edits in a single EXECUTE step. - Aldri batch urelaterte endringer i ett EXECUTE-steg.
### VERIFY ### VERIFY
- Run the relevant verification command (`curl`, `gcloud`, `grep`, `git log`). - Kjør relevant verifikasjonskommando (`curl`, `gcloud`, `grep`, `git log`).
- State result explicitly as `PASS` or `FAIL`. - Angi resultatet eksplisitt som `PASS` eller `FAIL`.
- If FAIL → **les loggene** → identifiser rot-årsak → rapport. - Ved FAIL → **les loggene** → identifiser rot-årsak → rapporter.
- IKKE gå videre til LOG før VERIFY er PASS. - IKKE gå videre til LOG før VERIFY er PASS.
### LOG ### LOG
- Append to `docs/OSVAUCO_OPAX_SESSION_LOG.md`: - Append til `docs/OSVAUCO_OPAX_SESSION_LOG.md`:
``` ```
## SLUTTRAPPORT <date> <Phase> ## SLUTTRAPPORT <dato> <Fase>
- Hva: <description of change> - Hva: <beskrivelse av endring>
- Filer: <list of files changed> - Filer: <liste over endrede filer>
- Verifisering: <command + result> - Verifisering: <kommando + resultat>
## NESTE OPPGAVE ## NESTE OPPGAVE
<single next task, explicit> <én konkret neste oppgave>
``` ```
### NEXT ### NEXT
- At the next session start, read `## NESTE OPPGAVE` before doing anything else. - Ved neste sesjonstart, les `## NESTE OPPGAVE` fra `docs/HANDOFF.md` før du gjør noe annet.
--- ---
## Hard Rules ## Hard Rules
1. **Never change LOCK LIST values** without explicit human instruction. 1. **Aldri endre LOCK LIST-verdier** uten eksplisitt human instruksjon.
2. **Always show diff before writing** any file. 2. **Vis alltid diff før du skriver** noen fil.
3. **Never batch unrelated edits** in a single EXECUTE step. 3. **Aldri batch urelaterte endringer** i ett EXECUTE-steg.
4. **OPAX (`opax.vauco.no`) is management plane only** — it never receives raw patient data. 4. **OPAX (`opax.vauco.no`) er kun management plane** — den mottar aldri rå pasientdata.
5. **Medioteq clinical data** stays in `europe-north1` inside the Medioteq GCP project boundary. 5. **Medioteq kliniske data** forblir i `europe-north1` innenfor Medioteq GCP-prosjektgrensen.
6. **Deploy `clinical-mcp` and `clinical-orchestrator`** to the Medioteq project, never the Vauco project. 6. **Deploy `clinical-mcp` og `clinical-orchestrator`** til Medioteq-prosjektet, aldri Vauco-prosjektet.
7. **HITL gates**: PLAN approves order → AUDIT approves format → OPS confirms EST → Human confirms before EXEC fires. 7. **HITL gates**: PLAN godkjenner rekkefølge → AUDIT godkjenner format → OPS bekrefter EST → Human bekrefter før EXEC kjøres.
8. **Aldri søk på nett for å diagnostisere feil du kan lese i loggene.** 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.** 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`. 10. **Aldri gjett på koden — les den.** Du er i repoet. Bruk `cat`, `grep`, `git diff`.
@ -275,12 +258,12 @@ VERIFY: [kommando for å bekrefte fix]
### 🔴 Cloud Build feiler ### 🔴 Cloud Build feiler
```bash ```bash
BUILD_ID=$(gcloud builds list BUILD_ID=$(gcloud builds list \
--project=propane-will-491900-m5 --project=propane-will-491900-m5 \
--limit=1 --limit=1 \
--format="value(id)") --format="value(id)")
gcloud builds log $BUILD_ID gcloud builds log $BUILD_ID \
--project=propane-will-491900-m5 2>&1 | tail -100 --project=propane-will-491900-m5 2>&1 | tail -100
``` ```
@ -293,16 +276,16 @@ Vanlige årsaker:
### 🔴 Cloud Run svarer ikke / returnerer feil ### 🔴 Cloud Run svarer ikke / returnerer feil
```bash ```bash
gcloud run services describe osvauco-agent gcloud run services describe osvauco-agent \
--project=propane-will-491900-m5 --project=propane-will-491900-m5 \
--region=europe-west1 --region=europe-west1 \
--format="value(status.conditions)" --format="value(status.conditions)"
gcloud logging read gcloud logging read \
'resource.type=cloud_run_revision AND resource.labels.service_name=osvauco-agent' 'resource.type=cloud_run_revision AND resource.labels.service_name=osvauco-agent' \
--project=propane-will-491900-m5 --project=propane-will-491900-m5 \
--limit=50 --limit=50 \
--order=desc --order=desc \
--format="table(timestamp,textPayload,jsonPayload.message)" --format="table(timestamp,textPayload,jsonPayload.message)"
``` ```
@ -313,33 +296,12 @@ gcloud auth list
gcloud config get-value project gcloud config get-value project
gcloud auth print-identity-token gcloud auth print-identity-token
gcloud iap web get-iam-policy gcloud iap web get-iam-policy \
--project=propane-will-491900-m5 --project=propane-will-491900-m5 \
--resource-type=cloud-run --resource-type=cloud-run \
--service=osvauco-agent --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 ### 🔴 .env mangler ved oppstart
```bash ```bash
@ -360,7 +322,6 @@ find ~ -name ".env" -not -path "*/OSVauco/*" 2>/dev/null
| Cloud Run 500 | `gcloud logging read` → les stack trace | Endre kode uten å se feilen | | Cloud Run 500 | `gcloud logging read` → les stack trace | Endre kode uten å se feilen |
| Cloud Run 404 | `curl` + les rutekonfig | Anta routing er feil | | Cloud Run 404 | `curl` + les rutekonfig | Anta routing er feil |
| Auth 403 | `gcloud iap get-iam-policy` | Anta token er utløpt | | 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 | | .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 | | Noe «virker ikke» | `gcloud run services describe` | Anta det er koden sin feil |
@ -377,10 +338,10 @@ IMAGE=gcr.io/propane-will-491900-m5/osvauco-agent
gcloud builds submit --config=cloudbuild.yaml --project=propane-will-491900-m5 gcloud builds submit --config=cloudbuild.yaml --project=propane-will-491900-m5
gcloud run deploy osvauco-agent gcloud run deploy osvauco-agent \
--image=$IMAGE:latest --image=$IMAGE:latest \
--project=propane-will-491900-m5 --project=propane-will-491900-m5 \
--region=europe-west1 --region=europe-west1 \
--platform=managed --platform=managed
``` ```
@ -400,15 +361,16 @@ Auth: Google OAuth now. BankID on `-os` later (Medioteq first).
## Standard Boot Prompt ## Standard Boot Prompt
Lim inn dette ved start av HVER sesjon: > Lim inn dette ord-for-ord ved start av HVER sesjon. `Les og print innhold fra` tvinger faktisk fillesing — ikke bare skumming.
``` ```
BOOT: Read docs/AGENT_RULEBOOK.md, docs/MASTERPLAN.md, docs/ROADMAP.md, docs/HANDOFF.md. Les og print innhold fra: @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.
Deretter:
1. Print LOCKED DEFINITIONS (project, region, model, service, URLs) i en kompakt blokk
2. Oppsummer NESTE OPPGAVE fra HANDOFF.md i én setning
3. List 3 konkrete neste-steg du foreslår
NIKT utfør noe — vent på PLAN APPROVED eller eksplisitt instruksjon.
Bekreft at du forstår ABSOLUTT REGEL: når Chris spesifiserer region/modell/parameter eksplisitt, bruk ALLTID den verdien — aldri overstyr med LOCKED DEFINITIONS.
``` ```
---
## Boot-instruksjon
BOOT: Les @docs/AGENT_RULEBOOK.md, @docs/MASTERPLAN.md, @docs/ROADMAP.md og @docs/HANDOFF.md. Print så LOCKED DEFINITIONS (project, region, model, service, URLs) i en kompakt blokk. Oppsummer NESTE OPPGAVE fra HANDOFF.md i én setning. List så 3 konkrete neste-steg du foreslår, men IKKE utfør noe — vent på at jeg svarer "PLAN APPROVED" eller gir en spesifikk instruksjon. Bekreft til slutt at du forstår ABSOLUTT REGEL #1.

View File

@ -26,7 +26,7 @@ OPERATOR_ROLE: Eier, arkitekt og primær operatør av OSVauco / OS-Vauco
> These values are LOCKED. Do NOT change without explicit human instruction. > These values are LOCKED. Do NOT change without explicit human instruction.
> >
> **ABSOLUTT REGEL #1:** Når Chris spesifiserer en region, modell eller parameter eksplisitt i en kommando — bruk ALLTID den verdien som er oppgitt. Ikke overstyr med LOCKED DEFINITIONS. LOCKED DEFINITIONS gjelder kun når ingenting er spesifisert. > **ABSOLUTT REGEL:** Når Chris spesifiserer en region, modell eller parameter eksplisitt i en kommando — bruk ALLTID den verdien som er oppgitt. Ikke overstyr med LOCKED DEFINITIONS. LOCKED DEFINITIONS gjelder kun når ingenting er spesifisert.
--- ---
@ -208,9 +208,9 @@ VERIFY: [kommando for å bekrefte fix]
## Session Protocol (Nemotron Loop) ## Session Protocol (Nemotron Loop)
### BOOT ### BOOT
- Read `docs/AGENT_RULEBOOK.md`, `docs/MASTERPLAN.md`, `docs/ROADMAP.md` og `docs/HANDOFF.md`. - Les og print innhold fra: `docs/AGENT_RULEBOOK.md`, `docs/MASTERPLAN.md`, `docs/ROADMAP.md`, `docs/HANDOFF.md`.
- Print LOCKED DEFINITIONS kompakt. - Print LOCKED DEFINITIONS kompakt.
- Print siste `## NESTE OPPGAVE` fra HANDOFF.md. - Print siste `## NESTE OPPGAVE` fra `docs/HANDOFF.md` i én setning.
- Hvis ingen NESTE OPPGAVE → advar og les ROADMAP NOW-seksjon. - Hvis ingen NESTE OPPGAVE → advar og les ROADMAP NOW-seksjon.
- Sjekk GCP auth: `gcloud auth list` og `gcloud config get-value project` - Sjekk 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. - Sjekk om `.env` eksisterer: `ls -la .env` — hvis IKKE: rapporter til Chris umiddelbart, IKKE opprett den.
@ -246,7 +246,7 @@ VERIFY: [kommando for å bekrefte fix]
``` ```
### NEXT ### NEXT
- Ved neste sesjonstart, les `## NESTE OPPGAVE` før du gjør noe annet. - Ved neste sesjonstart, les `## NESTE OPPGAVE` fra `docs/HANDOFF.md` før du gjør noe annet.
--- ---
@ -317,18 +317,24 @@ gcloud iap web get-iam-policy \
### 🔴 Claude / Vertex AI-feil ### 🔴 Claude / Vertex AI-feil
```bash ```bash
# Test Claude via Vertex EU endpoint
curl -X POST \ curl -X POST \
"https://eu-aiplatform.googleapis.com/v1/projects/propane-will-491900-m5/locations/eu/publishers/anthropic/models/claude-opus-4-6:rawPredict" \ "https://eu-aiplatform.googleapis.com/v1/projects/propane-will-491900-m5/locations/eu/publishers/anthropic/models/claude-opus-4-6:rawPredict" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{ -d '{"anthropic_version": "vertex-2023-10-16", "max_tokens": 256, "messages": [{"role": "user", "content": "ping"}]}'
"anthropic_version": "vertex-2023-10-16",
"max_tokens": 256,
"messages": [{"role": "user", "content": "ping"}]
}'
``` ```
### 🔴 .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.**
--- ---
## GCP-konvensjoner for dette prosjektet ## GCP-konvensjoner for dette prosjektet
@ -353,8 +359,16 @@ gcloud run deploy osvauco-agent \
## Standard Boot Prompt ## Standard Boot Prompt
Lim inn dette ved start av HVER sesjon i Claude Code TUI: > Lim inn dette ord-for-ord ved start av HVER sesjon. `Les og print innhold fra` tvinger faktisk fillesing — ikke bare skumming.
``` ```
BOOT: Les @docs/AGENT_RULEBOOK.md, @docs/MASTERPLAN.md, @docs/ROADMAP.md og @docs/HANDOFF.md. Print LOCKED DEFINITIONS kompakt. Oppsummer NESTE OPPGAVE fra HANDOFF.md i én setning. Foreslå 3 konkrete neste-steg, men IKKE utfør noe — vent på PLAN APPROVED. Bekreft at du forstår ABSOLUTT REGEL #1. Les og print innhold fra: @docs/AGENT_RULEBOOK.md @docs/MASTERPLAN.md @docs/ROADMAP.md @docs/HANDOFF.md
Deretter:
1. Print LOCKED DEFINITIONS (project, region, model, service, URLs) i en kompakt blokk
2. Oppsummer NESTE OPPGAVE fra HANDOFF.md i én setning
3. List 3 konkrete neste-steg du foreslår
Ikke utfør noe — vent på PLAN APPROVED eller eksplisitt instruksjon.
Bekreft at du forstår ABSOLUTT REGEL: når Chris spesifiserer region/modell/parameter eksplisitt, bruk ALLTID den verdien — aldri overstyr med LOCKED DEFINITIONS.
``` ```