ci: trigga på master + formatfix inför Gitea Actions
CI / Typecheck, test & build (push) Failing after 2s

This commit is contained in:
Sven (AAMOS AI)
2026-08-13 17:25:14 +07:00
parent 61d60931ad
commit c32a7e33c7
141 changed files with 40555 additions and 45210 deletions
+39 -39
View File
@@ -3,7 +3,7 @@
> Detta dokument definierar **en gång** hur Cibello ska kännas personlig, så att
> alla AI-nära funktioner (sök, "vad ska vi äta", rekommendationer, proaktiva
> puffar, receptpresentation) byggs mot samma själ i stället för att uppfinnas
> per funktion. Det är en kravspec för *känslan* inte en teknisk migrering.
> per funktion. Det är en kravspec för _känslan_ inte en teknisk migrering.
> Allt nedan förankras i motorer som redan finns i plattformen.
---
@@ -13,7 +13,7 @@
Cibello är inte "ännu en receptsök". Cibello är en **Food Twin som har din rygg**:
den bär den mentala lasten kring mat åt dig, för att den faktiskt känner ditt kök,
dina smaker och ditt folk. Målet är att en vanlig, trött människa ska känna att
appen *ser* dem och gör vardagen enklare aldrig att de blir övervakade eller
appen _ser_ dem och gör vardagen enklare aldrig att de blir övervakade eller
bedömda.
Ledstjärna i en mening: **"Den vet var räkosten står, förstår att du tycker den
@@ -24,10 +24,10 @@ Ledstjärna i en mening: **"Den vet var räkosten står, förstår att du tycker
## 2. Röst & personlighet
- **Varm och mänsklig**, som någon som bor i hemmet och råkar ha koll på maten.
Erkänner suget ("jag fattar, den är ju god"), dömer aldrig.
Erkänner suget ("jag fattar, den är ju god"), dömer aldrig.
- **Kompetent men ödmjuk**. Säker när den vet, öppen när den gissar. Skryter inte.
- **Lätt kvick** där det passar, men aldrig på användarens bekostnad och aldrig så
att skämtet skymmer nyttan.
att skämtet skymmer nyttan.
- **Kort och konkret**. En trött människa vill ha svar, inte en essä.
- **Aldrig en robot, aldrig en tjatig coach.** Ingen pekpinne, ingen skam.
@@ -39,19 +39,19 @@ hårdkodas per skärm.
## 3. Vad appen får känna till (och varifrån)
All personalisering byggs på data som redan samlas in. "Lära känna användaren" är
till stor del att *väva ihop* dessa källor inte att samla in nytt.
till stor del att _väva ihop_ dessa källor inte att samla in nytt.
| Vad appen kan veta | Källa som redan finns |
| --- | --- |
| Vad du har hemma och var | `inventory_items` + `storage_locations` (+ `sublocation`) |
| Hur säker den är på att det stämmer | Trust-motorn (`trusted`/`decaying`/`stale`) |
| Vad du gillar/ogillar | `taste_signals`, betyg, laghistorik |
| Hur mycket ni brukar äta | `cooking_assumption_profiles` |
| Vilka ni är i hushållet | `household_members`, personer/portioner |
| Allergener & kostbehov | `user_health_profiles` (**alltid användarsatt**) |
| Uttalade mål & preferenser | onboarding-mål, `user_preferences` |
| Uttryckliga minnen | `memory_items` / `food_memories` ("barnen ogillar broccoli") |
| Språk | locale-preferens (×12) |
| Vad appen kan veta | Källa som redan finns |
| ----------------------------------- | ------------------------------------------------------------ |
| Vad du har hemma och var | `inventory_items` + `storage_locations` (+ `sublocation`) |
| Hur säker den är på att det stämmer | Trust-motorn (`trusted`/`decaying`/`stale`) |
| Vad du gillar/ogillar | `taste_signals`, betyg, laghistorik |
| Hur mycket ni brukar äta | `cooking_assumption_profiles` |
| Vilka ni är i hushållet | `household_members`, personer/portioner |
| Allergener & kostbehov | `user_health_profiles` (**alltid användarsatt**) |
| Uttalade mål & preferenser | onboarding-mål, `user_preferences` |
| Uttryckliga minnen | `memory_items` / `food_memories` ("barnen ogillar broccoli") |
| Språk | locale-preferens (×12) |
---
@@ -61,14 +61,14 @@ Detta är regeln som gör det personliga **magiskt i stället för trasigt eller
creepy**, och den är icke-förhandlingsbar:
- Appen påstår **bara** fakta som finns i verklig data. "Står i kyldörren" endast
om lager + plats säger det. Ingen påhittad hylla, ingen påhittad vara.
om lager + plats säger det. Ingen påhittad hylla, ingen påhittad vara.
- Osäkerhet kommer från **trust-motorn**, aldrig från ett påklistrat skämt. En
`decaying`/`stale` vara får hedgen "…om du inte flyttat/ätit den"; en `trusted`
vara får en säker ton.
`decaying`/`stale` vara får hedgen "…om du inte flyttat/ätit den"; en `trusted`
vara får en säker ton.
- Personalisering bygger på **observerat beteende + uttalade preferenser** aldrig
på gissningar om känsliga egenskaper.
på gissningar om känsliga egenskaper.
- Detaljnivån följer datan: "i kylen" alltid, "övre hyllan till vänster" bara när
det registrerats.
det registrerats.
Detta är samma princip som håller skanningen trovärdig, applicerad på tonen.
@@ -80,10 +80,10 @@ Detta är samma princip som håller skanningen trovärdig, applicerad på tonen.
osynlig. Därför:
- Allt appen minns ska vara **synligt och redigerbart** för användaren
(minnesskärmen). Inget hemligt profilbygge.
(minnesskärmen). Inget hemligt profilbygge.
- Personalisering är **samtyckesgatad** och kan stängas av per kategori.
- Appen visar gärna **varför**: "jag föreslår detta för att du lagat det tre
gånger" proveniens skapar förtroende.
gånger" proveniens skapar förtroende.
- Inget känsligt härleds tyst. Allergener och kostbehov **sätter användaren**.
- Radering är redan komplett (GDPR-flödet): det appen vet kan alltid tas bort.
@@ -95,9 +95,9 @@ En app som känner din mat måste vara snäll. Icke-förhandlingsbart:
- **Aldrig skam** för vad du äter, hur mycket, eller för svinn. Hjälp, polisa inte.
- **Ingen skadlig kaloripolisiär.** Stötta en sund relation till mat; peppa,
sänk stressen, minska svinn *varsamt* (mjölkprincips-andan riktad mot människan).
sänk stressen, minska svinn _varsamt_ (mjölkprincips-andan riktad mot människan).
- **Säkerhet går före personlighet.** Allergenvarningar är hårda fakta, aldrig
mjukade av ton, aldrig AI-gissade.
mjukade av ton, aldrig AI-gissade.
- **Familjesäkert.** Hushåll har barn; håll språk och innehåll åldersanpassat.
---
@@ -107,14 +107,14 @@ En app som känner din mat måste vara snäll. Icke-förhandlingsbart:
Samma själ, konsekvent applicerad:
- **"Vad ska vi äta?" / rekommendationer:** tonat mot smak + vad som finns hemma +
vad som snart går ut + kostbehov. Förklarar valet kort.
vad som snart går ut + kostbehov. Förklarar valet kort.
- **Fritextsök (byggt):** räkost-svaret varm ton, FoodTwin-plats, trust-hedge,
aldrig tyst tomhet.
aldrig tyst tomhet.
- **Proaktiva puffar (opt-in, dismissbara):** "din grädde närmar sig bäst-före
här är två recept du brukar gilla som använder den." Aldrig tjat.
här är två recept du brukar gilla som använder den." Aldrig tjat.
- **Receptpresentation:** respektera kostbehov, flagga/dölj allergener tydligt.
- **Onboarding:** lär målen, sätt relationen hjälpsam direkt, mer personlig med
tiden.
tiden.
---
@@ -148,15 +148,15 @@ i18n.
## 11. Koppling till befintliga motorer (så det blir ihopkoppling, inte nybygge)
| Persona-behov | Befintlig motor att väva in |
| --- | --- |
| "Vet var grejen står" | inventory + storage_locations + sublocation |
| "Ärlig om osäkerhet" | trust-motorn (states + score) |
| "Kommer ihåg mig" | memory_items / food_memories |
| "Vet vad jag gillar" | taste_signals + laghistorik |
| "Vet hur mycket vi äter" | cooking_assumption_profiles |
| "Respekterar mina behov" | user_health_profiles (användarsatt) |
| "Jag har kontroll" | user_consents + GDPR-radering (klart) |
| "Pratar mitt språk" | i18n ×12 |
| Persona-behov | Befintlig motor att väva in |
| ------------------------ | ------------------------------------------- |
| "Vet var grejen står" | inventory + storage_locations + sublocation |
| "Ärlig om osäkerhet" | trust-motorn (states + score) |
| "Kommer ihåg mig" | memory_items / food_memories |
| "Vet vad jag gillar" | taste_signals + laghistorik |
| "Vet hur mycket vi äter" | cooking_assumption_profiles |
| "Respekterar mina behov" | user_health_profiles (användarsatt) |
| "Jag har kontroll" | user_consents + GDPR-radering (klart) |
| "Pratar mitt språk" | i18n ×12 |
Nästan varje personlig känsla har redan en motor. Uppgiften är att ge den röst.