101 Commits

Author SHA1 Message Date
Claude e66d9aee72 fix(inventory): sluta gissa utgangsdatum + las 2-siffriga bast-fore-stamplar
CI / Typecheck, test & build (push) Failing after 46s
BUG: forseglad vara utan tryckt datum fick fabricerat utgang (purchasedAt + shelfLifeGuidance, som ar hallbarhet EFTER oppning) -> falska 'gar ut snart'-varningar OCH gav sken av att datum inte lastes. Nu: ingen data -> unknown (hedrar appens egen princip 'aldrig gissa'). parseDate laser aven YY-MM-DD/YYMMDD/YYYYMMDD (svenska stamplar) som forr slangdes. Regressionstester tillagda. 36/36 gront.
2026-08-17 19:22:54 +00:00
Claude 0ff3396d6e fix(cost): korrekt Gemini 3.5 Flash Lite priser i kod + docs
gemini.ts estimateCostUsd: 2.5-Flash-priser (0.075/0.30) -> 3.5-Flash-Lite standard (0.30/2.50). Pessimistiska per-bild-estimat 0.0015->0.004, OCR 0.001->0.002. docs/10: Claude-modelltabell + kostnad-per-uppgift omskrivna till Gemini. 36/36 gront.
2026-08-17 18:41:45 +00:00
Claude 75591bb294 fix(subscriptions): free-niva 5 AI-skanningar (beslut Johan)
Free 10->5 i kod, test, paywall-copy (12 sprak) och docs. Full trappa: free 5 / trial 14d 25 skann / premium 100/200/400.
2026-08-17 17:34:55 +00:00
Claude 88876a24b7 fix(subscriptions): trial 14 dagar konsekvent i UI/docs/legal/butik
TRIAL_DAYS var redan 14 i koden men auth.trialNote (12 sprak), butiksmetadata, juridik-utkast, API-ref, exec-summary och UX-doc sa 7. Nu 14 overallt. Rorde EJ icke-trial 7-dagar (inbjudningslank, backup, S3-lifecycle, grace, retention). Beslut: Johan (battre onboarding).
2026-08-17 17:04:00 +00:00
Claude cacca3481c fix(subscriptions): free-niva 10 AI-skanningar/man (matcha paywall + spec §46)
Koden gav 5 men paywall-copy (12 sprak), butiksmetadata (docs/22) och subscriptions-testet sager 10. Enforcement (canUseAiScan) laser konstanten dynamiskt sa en rad racker. Beslut bekraftat av Johan: free=10.
2026-08-17 16:39:52 +00:00
Sven (AAMOS AI) 260f816c83 feat(recommendations): MIKRO MEAL-1 måltids-lämplighet i rankningen (nedvikta frukost/dessert vid huvudmåltid) 2026-08-17 20:37:47 +07:00
Sven (AAMOS AI) ec0b64efe8 feat(recipes): MIKRO KRAM-1 variera Krämig-titlar (behåll ~4 genuint krämiga) 2026-08-17 19:34:42 +07:00
Sven (AAMOS AI) 97b5baa367 feat(weekplan): MIKRO WEEK-2 dagliga måltidsslots (vardag middag, helg lunch+middag) 2026-08-17 19:17:27 +07:00
Sven (AAMOS AI) 305b6d1886 feat(seed): add aliases for milk, yoghurt, crème fraiche and carrot 2026-08-16 21:23:07 +07:00
Sven (AAMOS AI) 5ad6bf6f60 feat(seed): make sourdough bread and cardamom computable (gramsPerPiece/density) 2026-08-16 21:11:48 +07:00
Sven (AAMOS AI) 70021ebdf2 feat(seed): add pantry ingredients (balsamic, strawberry jam, fish/lobster stock, cornichons) + gramsPerPiece for dill/parsley 2026-08-16 21:01:08 +07:00
Sven (AAMOS AI) c0a15bb1b5 feat: kitchen screen, scan dedup, gemini-3.5-flash-lite, seed grapes/beetroot/pea shoots 2026-08-16 20:13:49 +07:00
Sven (AAMOS AI) 3b313135d4 feat(db): firebaseUid-kolumn på users för Firebase-kundidentitet (AUTH-1) 2026-08-15 19:32:03 +07:00
Sven (AAMOS AI) 92b1ee54c6 content(seed): 5 svenska högtidsrecept (gravlax, toast skagen, julskinka, lussekatter, saffransbullar) (MIKRO INNEHÅLL-3) 2026-08-15 18:36:31 +07:00
Sven (AAMOS AI) 06891522d9 content(seed): kanoniska högtidsingredienser (saffran/jäst/skinka/kräftor m.fl.) (MIKRO INNEHÅLL-2)
CI / Typecheck, test & build (push) Failing after 48s
2026-08-14 23:21:37 +07:00
Sven (AAMOS AI) 14a4fd85aa content(seed): tagga köttbullar (jul) + sill (jul/påsk) för högtidssök (MIKRO INNEHÅLL-1)
CI / Typecheck, test & build (push) Failing after 49s
2026-08-14 23:11:37 +07:00
Sven (AAMOS AI) a11267edac feat(seed): GB/US/CA-högtider inkl. Thanksgiving-datum (MIKRO C4)
CI / Typecheck, test & build (push) Failing after 43s
2026-08-14 22:34:31 +07:00
Sven (AAMOS AI) fe71bd0db6 feat(seed): ES/IT/PT/PL-högtider (MIKRO C3)
CI / Typecheck, test & build (push) Failing after 43s
2026-08-14 22:26:35 +07:00
Sven (AAMOS AI) f0488eefd6 feat(seed): DE/FR/NL-högtider (MIKRO C2)
CI / Typecheck, test & build (push) Failing after 42s
2026-08-14 22:19:04 +07:00
Sven (AAMOS AI) cb40170171 feat(seed): nordiska högtider (NO/DK/FI/IS) + nameLocalized (MIKRO C1)
CI / Typecheck, test & build (push) Failing after 43s
2026-08-14 22:04:15 +07:00
Sven (AAMOS AI) 61b9198d51 feat(season): nameLocalized-kolumn för högtidsnamn per marknad (MIKRO B)
CI / Typecheck, test & build (push) Failing after 44s
2026-08-14 21:56:03 +07:00
Sven (AAMOS AI) 19af7e0720 feat(season): easter-offset + nth-weekday datumregler för marknads-högtider (MIKRO A)
CI / Typecheck, test & build (push) Failing after 42s
2026-08-14 21:46:17 +07:00
Sven (AAMOS AI) 33c72ddacd fix(reco): fria sökord + mjuk-filter så råvaru-sökning (kyckling) ger rätt recept (MIKRO 60)
CI / Typecheck, test & build (push) Failing after 42s
2026-08-14 20:28:56 +07:00
Sven (AAMOS AI) 0d1cc727ae fix(gdpr): radera user_terms_consents vid kontoradering + klassa i residual-testet
CI / Typecheck, test & build (push) Successful in 11m6s
2026-08-14 00:45:42 +07:00
Sven (AAMOS AI) 0145c50916 test(ai-contracts): budgetspärr blockerar inte längre – uppdatera gemini-testet (MIKRO 12)
CI / Typecheck, test & build (push) Failing after 6m10s
2026-08-14 00:00:55 +07:00
Sven (AAMOS AI) c32a7e33c7 ci: trigga på master + formatfix inför Gitea Actions
CI / Typecheck, test & build (push) Failing after 2s
2026-08-13 17:25:14 +07:00
Sven (AAMOS AI) f917d0c866 Gemini global budget: larm istället för block (blockera aldrig användarskanning) 2026-08-13 04:32:46 +07:00
Sven (AAMOS AI) 61c3193f17 feat(consent): user_terms_consents + /v1/me/consent 2026-08-13 02:06:44 +07:00
Sven (AAMOS AI) 10ba64e4ba fix(ops): gemini-block i summary-byggaren, inte routen 2026-08-12 22:41:11 +07:00
Sven (AAMOS AI) 602405d56d feat(ops): logga gemini_usage per scan (best-effort) 2026-08-12 21:08:03 +07:00
Sven (AAMOS AI) f11cbce114 feat(ai): surfacea Gemini token-usage 2026-08-12 20:59:49 +07:00
Sven (AAMOS AI) 14a5243bb2 feat(db): gemini_usage-tabell för token-telemetri 2026-08-12 20:51:50 +07:00
Sven (AAMOS AI) bf04a12b89 fix(gemini): read binary response body as Buffer instead of UTF-8 string
customNodeFetch previously used res.setEncoding('utf8') and concatenated
chunks into a string. This corrupted JPEG/PNG binary data with UTF-8
replacement characters, causing Gemini to return:
  400 Unable to process input image.

Now chunks are collected as Buffers and concatenated, preserving binary
integrity when images are fetched from presigned S3 URLs before being
sent to Gemini.
2026-08-12 20:30:24 +07:00
Sven (AAMOS AI) 716e768cd0 feat(deploy): aktivera dedikerad Cibello-Gemini-nyckel + SMTP, ersätt /openclaw-referens 2026-08-12 20:07:32 +07:00
Sven (AAMOS AI) 6e2d794130 feat(storage,deploy): delad S3/mock-lagring, SSM .env-sync, Gemini readyz
- @app/storage med MockStorage + AwsStorage delas mellan API och worker

- Workerns readUrl() ger presignerad S3-URL i aws-läge (fixar mock-s3 404)

- sync-env-from-ssm.py hämtar /cibello/prod/* och skriver .env; first-deploy.sh kör det i prod

- /readyz returnerar 503 om app.aamos.healthCheck() misslyckas

- docs/SECRETS.md med rotations- och SSM-regler
2026-08-12 17:28:58 +07:00
Sven (AAMOS AI) 7dda0fad00 fix(gemini): budget-check före bildhämtning så spärr triggars tidigt 2026-08-12 16:30:49 +07:00
Sven (AAMOS AI) 6c581bec1a feat(cost-guard): global Gemini daily budget + EOC alarm; trial requires verified email 2026-08-12 06:43:32 +07:00
Sven (AAMOS AI) 81927b6cdc fix(db): RDS-CA i poolen (app+migrator delar TLS) 2026-08-12 06:07:07 +07:00
Sven (AAMOS AI) 983f3fb2aa fix(database): explicit RDS SSL via NODE_EXTRA_CA_CERTS 2026-08-12 04:48:42 +07:00
Sven (AAMOS AI) c5a8530fbf fix(deploy): brand-guard compat + db_reachable med RDS SSL + first-deploy SSL 2026-08-12 04:22:24 +07:00
Sven (AAMOS AI) 659d0f9290 feat(deploy): Gemini som committat prod-läge + hermetiska eval-fixtures
- config.ts: tillåt AAMOS_MODE=http|gemini i prod; mock förbjudet
- first-deploy.sh: Grind 1 accepterar gemini (kräv GEMINI_API_KEY);
  Grind 5 kör eval:scan mot gemini; Grind 8 behandlar gemini som riktig AI
- gemini.ts: stöd för data-URLer (inline base64-bilder) i fetchOneImage
- eval-fixtures: 4 lokala bilder (fridge-1, fridge-2, label-1, receipt-1)
- scan-eval.ts: läser lokala fixtures, inga externa hämtningar
- capture-eval.ts: använder lokal fixture som data-URL
2026-08-12 04:10:10 +07:00
Sven (AAMOS AI) 9a9f8a6a3c feat(worker/ai): Gemini-lärar-tier för scan/detect/allergen + shadow-capture
- Utöka GeminiAamosClient med ANALYZE_MEAL_IMAGE, READ_NUTRITION_LABEL,
  READ_EXPIRY_DATE och READ_RECEIPT (vision-prompts mot kontraktsscheman).
- Lägg till apps/worker/src/lib/shadow-capture.ts: S3/local fallback,
  imageTraining-gating, ingen PII, aldrig faila användarvägen.
- Integrera capture i scan-processorn efter lyckad runTask med consentFlags.
- Lägg till @aws-sdk/client-s3 i worker samt eval:capture-skript.
- Uppdatera eval:scan till Wikimedia Special:FilePath + redirect-following.
- Exkludera .terraform i brand-guard för att undvika false positives.
- Uppdatera gemini-test för DEDUPLICATE_INVENTORY som unsupported.
2026-08-12 02:51:05 +07:00
Sven (AAMOS AI) c60158801d gapfill: jordnötssmör-cellen fylld (4 recept) 2026-08-11 19:19:23 +07:00
Sven (AAMOS AI) a7b53c7ba3 gapfill(peanut): rikare middagsrätter som target 2026-08-11 19:16:39 +07:00
Sven (AAMOS AI) 4adde4faff chore(ops): feedback.senaste upp till 10 for EOC-panelen 2026-08-11 18:22:07 +07:00
Sven (AAMOS AI) 989c242d2c gapfill: importera nollcells-recept i seed 2026-08-11 06:42:09 +07:00
Sven (AAMOS AI) a00f0a59ab gapfill: generera+verifiera nollceller (export) 2026-08-11 06:39:58 +07:00
Sven (AAMOS AI) 4116653b51 S6: i18n-paritet, provenans + eval, copy-skanning, fabricerade-minnes-eval 2026-08-11 05:20:27 +07:00
Sven (AAMOS AI) f86a37dd33 S5: onboarding → minne + smaksignaler (user_stated) 2026-08-11 04:43:43 +07:00
Sven (AAMOS AI) 1e18146665 fix(recommendation-engine): S4-FIX — opersonliga vyer fungerar utan samtycke via depersonalize(weights) 2026-08-11 04:02:46 +07:00