diff --git a/HANDOFF.md b/HANDOFF.md index 0848c65..86aed6e 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -20,6 +20,12 @@ Roller: OpenClaw bygger. Extern granskare ("Sven", i Johans chatt) verifierar + - AAMOS_MODE=gemini. GeminiAamosClient täcker scan/etikett/kvitto/utgång. - Shadow-capture skriver träningspar → s3://cibello-production/training/cibello/. Insamling PÅ för admin/beta (imageTraining=true); publika användare följer samtycke (gate ej byggd än). +- **Global Gemini dagsbudget:** `GEMINI_DAILY_BUDGET_USD=25`. Budget-check sker före varje + AI-jobb i workern; vid överskridande stoppas jobbet, `gemini:daily:budget:alarm:` + sätts i Redis, och ops-summary får `larm` + wall-tile `AI-budget` i `crit`. +- **Trial efter verifiering:** Family 7-dagars trial startas först när användaren verifierar + e-posten. En trial per verifierad e-post. Trial-rättigheter räknas mot samma + `ai_usage_counters` som övriga planer. ## Hemligheter - SSM /cibello/prod/* (SecureString). @@ -41,12 +47,28 @@ Roller: OpenClaw bygger. Extern granskare ("Sven", i Johans chatt) verifierar + - [x] `https://api.cibello.app/healthz` och `/readyz` svarar. - [x] Röktest via HTTPS: registrering + token + recept fungerar. - [x] JWT- + DB-hemligheter roterade och verifierade. +- [x] **Pre-launch cost-safeguards (bränn-spärr):** + - `GEMINI_DAILY_BUDGET_USD=25` i `.env` och `.env.example`. + - Budget-check före bildhämtning i `GeminiAamosClient` (`packages/ai-contracts/src/gemini.ts`). + - `BudgetStore.raiseBudgetAlarm()` + `RedisBudgetStore`-implementation. + - Ops-summary visar `AI-budget` wall-tile och `larm`-block vid överskridande. + - Trial startas först vid e-postverifiering (`apps/api/src/routes/auth.ts`). +- [x] **Verifierat i produktion:** + - Gratisanvändare blockeras på 11:e AI-scanen (HTTP 429 `QUOTA_EXCEEDED`). + - AI-jobb stoppas när `GEMINI_DAILY_BUDGET_USD` sätts till 0.001 USD. + - `/ops/v1/summary` visar `AI-budget` tile och `budget_exceeded`-larm i `crit`. ## PENDING (i ordning) 1. **Egen Gemini-nyckel + SMTP-pass** — Johan levererar värden lokalt; claw skriver till SSM/.env. + - Nuvarande `.env` innehåller fortfarande den delade `/openclaw`-Gemini-nyckeln. 2. **End-user samtyckes-gate** för bildträning + in-app allergen-disclaimer före publik lansering. 3. **Säkerhetsgranskning**: öppna portar, Caddy-konfig, IAM, S3-bucket-policy. 4. **Övervakning/larm**: logga fel, sentry, health-check alert. +5. **Worker-S3-reader**: `readUrl` i `apps/worker/src/context.ts` pekar fortfarande på + `/v1/mock-s3/` vilket ger 404 på riktiga S3-uppladdningar. För fullt skarpt + bildflöde behöver den returnera presignerad S3-URL (jmf eval-fixturer som använder + data URLs). Budget-spärren är verifierad trots detta; Gemini-anrop nås nu före + bildhämtning. ## Så här återupptar en färsk session Läs denna fil + `git log --oneline -8` + senaste prompt från Sven. Arbeta stramt. Echo ALDRIG