3.8 KiB
AGENT RULEBOOK — OSVauco
Status: 🔒 LOCKED DEFINITIONS — ikke endre uten RULEBOOK APPROVED fra Chris
Sist oppdatert: 2026-06-10
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.
R-01 · Modell-hierarki
| Agent | Modell | Scope |
|---|---|---|
| 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.
R-02 · Forbudte identiteter
Disse kontiene skal aldri opprettes eller gis tilganger:
tinius.vauger@vauco.noccv@vauco.noeller varianter
R-03 · Deploy-protokoll
- Alltid sjekk kostnad via
infrastructure/09-cost-check.shfør deploy - Ingen deploy uten smoke-test på
/health - Cloud Run: alltid
--no-allow-unauthenticatedpå prod-tjenester - Ny revisjon bekreftes med
gcloud run services describeetter deploy
R-04 · Dokumenthierarki
Alle agenter følger dette hierarkiet — nyere dato vinner ved konflikt:
docs/MASTERPLAN.md— arkitektur og sannhetdocs/ROADMAP.md— prioriteringerdocs/AGENT_RULEBOOK.md— denne filendocs/gemma/world.md— Emmas kontekstpakkedocs/HANDOFF.md— siste sesjonsstatus
R-05 · Filsti-regel (låst 2026-06-10)
Absolutte filstier er obligatorisk i all Python-kode som serverer statiske filer.
Korrekt mønster:
from pathlib import Path
STATIC_DIR = Path(__file__).parent.parent / "static" # juster nivåer etter struktur
@app.get("/")
async def root():
return FileResponse(str(STATIC_DIR / "index.html"))
Forbudt mønster:
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.
R-06 · Dockerfile-regel (låst 2026-06-10)
Alle Dockerfiler som bruker statiske filer må eksplisitt kopiere dem:
COPY static/ ./static/ # ← obligatorisk — kopieres ikke automatisk
Sjekkliste ved ny tjeneste:
COPY agents/eller relevant kildekodeCOPY static/ ./static/hvis tjenesten serverer HTML/CSS/JS- WORKDIR satt korrekt
- CMD peker på riktig modul (
app:app, ikkemain:appmed mindre main.py er inngangen)
R-07 · FastAPI rot-rute
Alle FastAPI-tjenester med en HTML-frontend må definere GET / eksplisitt:
@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:
- Last
docs/gemma/world.mdsom system-prompt ved oppstart - Bruk absolutte stier for alle filoperasjoner (R-05)
- Eksponer kun localhost:11434 (Ollama) eller localhost:8000 (vLLM) — aldri åpne porter mot internett uten IAP
- Logg alle kall til
~/.emma/logs/YYYY-MM-DD.log - Emma er ikke kundevendt — bruk Jason for alt kundevendt
Oppdatert 2026-06-10 | Neste oppdatering ved ML-3a (GPU-VM deploy)