docs: pre-launch readiness report
This commit is contained in:
@@ -0,0 +1,88 @@
|
|||||||
|
# Cibello – Pre-launch readiness report
|
||||||
|
|
||||||
|
> Genererad 2026-08-11 efter slutförande-audit.
|
||||||
|
> Repo: `/home/dator_ubuntujpb/.openclaw/workspace/cibello-work/cibello`
|
||||||
|
> HEAD: `63d83e0d7cebf12fce8573f54f828cd4dc2167aa`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vad som är grönt ✅
|
||||||
|
|
||||||
|
| Kontroll | Resultat |
|
||||||
|
|----------|----------|
|
||||||
|
| Branch / repo-kontroll | HEAD stämmer, trädet rent |
|
||||||
|
| `pnpm typecheck` | 19/19 paket gröna |
|
||||||
|
| `pnpm test --force` | 34/34 tasks, 328 tester gröna (kört 2× på färsk DB) |
|
||||||
|
| `pnpm build` | `@app/admin`, `@app/api`, `@app/worker` byggda |
|
||||||
|
| `brand-guard.sh` | OK – varumärket lever endast i `brand.config.json` |
|
||||||
|
| Databas | `cibello_test` färskt skapad med `DROP DATABASE + CREATE DATABASE … OWNER app_user`, migrerad + seedad med 254 recept/102 ingredienser/76 tabeller |
|
||||||
|
| Allergen-invariant | `@app/recipe-generation/test/allergen-invariant.test.ts` grön – varje seedat recept har `allergens` som matchar färsk derivering från `canonical_ingredients` |
|
||||||
|
| Safety canary | Worker-testet grön; canary-kontraktet är `{allergen_invariant_brott, overifierade_visade, food_safety_lint_avvisade_7d}` |
|
||||||
|
| GDPR-radering | `DELETE /v1/me` tömmer `memory_items`, `taste_signals`, `feedback`, `ai_corrections`, `ai_training_bank`, `scan_jobs` och tillhörande bilder (residual-test grön) |
|
||||||
|
| i18n-paritet ×12 | Tester för locale-preferenser, minnesrendering och enhetsetiketter gröna |
|
||||||
|
| Consent-grindar | Ingen personalisering/impact utan `personalization=granted` (recommendations + memory-impact tester gröna) |
|
||||||
|
| Integritetsspärrar | Impact för användare A returnerar aldrig användare B:s data |
|
||||||
|
| Ops-kontraktet | `/ops/v1/summary` har 14 toppnycklar + `wall` med 6 tiles; `/ops/v1/health` svarar `{"ok":true,"app":"cibello"}`; tester gröna |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ändringar i denna runda
|
||||||
|
|
||||||
|
1. `cleanup(memory): impact läser bara egen userPreferences-rad`
|
||||||
|
- `computeMemoryImpact` hämtar nu endast den anropande användarens fulla `user_preferences`-rad.
|
||||||
|
- Andra hushållsmedlemmars personliga preferenser läcker inte in; endast de begränsande fälten (`allergens`, `avoidIngredientIds`, `spiceLevelMax`) läses för säkerhetsfiltrering.
|
||||||
|
|
||||||
|
2. `docs(status): uppdatera till nuläge (S1–S6, 254 recept, ops+wall, EOC)`
|
||||||
|
- `docs/STATUS.md` speglar nu 19 paket, 328 tester, 254 recept, S1–S6, ops + wall, EOC.
|
||||||
|
|
||||||
|
3. `docs(security): genomgång av hardening-checklist inför prod`
|
||||||
|
- `infrastructure/security/hardening-checklist.md` har kryssats av efter faktiskt läge; återstående gap listade (se nedan).
|
||||||
|
|
||||||
|
4. `ops(api): lägg till /ops/v1/health för EOC`
|
||||||
|
- Fanns inte i koden trots att EOC-panelen förväntas anropa den.
|
||||||
|
- Endpointen är token-skyddad och svarar med det frysta kontraktet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hardening-gaps inför produktion ⚠️
|
||||||
|
|
||||||
|
Baserat på genomgång av `infrastructure/security/hardening-checklist.md`:
|
||||||
|
|
||||||
|
- **Server**
|
||||||
|
- Dedikerad Linux-användare `<slug>` utan sudo är inte provisionerad (`/opt` är tom).
|
||||||
|
- Secrets i `/opt/<slug>-platform/secrets/*.env` är inte på plats.
|
||||||
|
- **`Dockerfile.admin` saknar `USER`-direktiv och kör som root** – api/worker har redan `USER app`.
|
||||||
|
- Reverse proxy + TLS är inte uppsatt i denna miljö.
|
||||||
|
- Brandvägg och automatiska säkerhetsuppdateringar är ej verifierade.
|
||||||
|
|
||||||
|
- **AWS**
|
||||||
|
- IAM-roll `<slug>-app` är inte provisionerad.
|
||||||
|
- S3-bucket med block public access / SSE-S3 / lifecycle är inte provisionerad.
|
||||||
|
- `create-database.sql` finns för begränsad DB-roll, men faktisk RDS-instans är inte provisionerad här.
|
||||||
|
- Secrets Manager/SSM för produktionshemligheter är inte provisionerad.
|
||||||
|
|
||||||
|
- **GDPR**
|
||||||
|
- Personuppgiftsbiträdesavtal med AWS + AAMOS-drift saknas.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Jordnötssmör-beslutet 🥜
|
||||||
|
|
||||||
|
- Nollcellen för jordnötssmör har fortfarande **0 recept** i seed (kandidaterna i förra rundan var för enkla och underkändes).
|
||||||
|
- Beslut: **lämnat medvetet ofyllt** i denna runda för att undvika bred skalning/generering nu.
|
||||||
|
- Rekommendation: vid lansering eller strax innan, kör en **riktad omkörning** för satay, jordnötsnudlar, afrikansk jordnötsgryta etc. (≥3 ingredienser) genom samma verifieringspipelin + import som 254-setet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Leverans
|
||||||
|
|
||||||
|
- Git bundle: `/mnt/c/Users/Public/cibello-63d83e0d7cebf12fce8573f54f828cd4dc2167aa.bundle`
|
||||||
|
- Storlek: 2.6M
|
||||||
|
- `git bundle verify`: OK, complete history, sha1
|
||||||
|
- HEAD: `63d83e0d7cebf12fce8573f54f828cd4dc2167aa`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sammanfattning
|
||||||
|
|
||||||
|
Kodbasen är **funktionellt klar och alla automatiska grindar är gröna** på färsk DB. Återstående arbete inför produktion är uteslutande infrastruktur/provisionering, avtal och den valfria jordnötssmör-cellen – inga blockeras av kod.
|
||||||
Reference in New Issue
Block a user