Commit Graph

108 Commits

Author SHA1 Message Date
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) 515dd12cc7 infra(vpc): CIDR 10.20.0.0/16 – undvik krock med aplatform-platform-vpc
Publikt subnät 10.20.1.0/24, privata 10.20.11.0/24 + 10.20.12.0/24
2026-08-11 23:55:27 +07:00
Sven (AAMOS AI) 5b35df24a7 cibello(terraform): add lifecycle ignore_changes for placeholder SSM secrets
Prevent Terraform from overwriting externally-managed secret values
2026-08-11 23:31:43 +07:00
Sven (AAMOS AI) 99c73cada0 cibello(terraform): replace SES with Mailu DNS records
- Remove aws_ses_configuration_set, aws_ses_domain_identity, aws_ses_domain_dkim

- Remove SES verification and DKIM Route53 records

- Remove SES outputs

- Add MX, SPF, DKIM, DMARC records for cibello.app -> mail.aamos.systems

- DKIM key split into two 255-char strings per Route53 limit

No apply; plan saved as cibello.plan
2026-08-11 22:51:20 +07:00
Sven (AAMOS AI) 8168f64437 docs: add FAS 1 infrastructure plan report 2026-08-11 21:39:00 +07:00
Sven (AAMOS AI) 29637ffc89 infra: fix ses dkim records output 2026-08-11 21:37:56 +07:00
Sven (AAMOS AI) d1b1748426 infra: ignore terraform local state and provider cache 2026-08-11 21:37:32 +07:00
Sven (AAMOS AI) 562b9ab6fc infra: fix oac signing protocol and route53 record output 2026-08-11 21:37:10 +07:00
Sven (AAMOS AI) e62e63739e infra: add terraform outputs 2026-08-11 21:35:46 +07:00
Sven (AAMOS AI) ff77fe0c08 infra: add route53, ses, acm, cloudfront and dns records 2026-08-11 21:35:31 +07:00
Sven (AAMOS AI) 32d93e2a0c infra: add ssm secrets and placeholders 2026-08-11 21:34:13 +07:00
Sven (AAMOS AI) 02056b2d76 infra: add least-privilege iam role and instance profile 2026-08-11 21:33:45 +07:00
Sven (AAMOS AI) c567092180 infra: add rds and s3 resources 2026-08-11 21:33:19 +07:00
Sven (AAMOS AI) dc3c3f1847 infra: add ec2, eip, key pair and docker bootstrap 2026-08-11 21:32:20 +07:00
Sven (AAMOS AI) b408caef2a infra: add vpc, subnets, routing and security groups 2026-08-11 21:31:46 +07:00
Sven (AAMOS AI) cc948c258a infra: add aws providers and default tags 2026-08-11 21:31:02 +07:00
Sven (AAMOS AI) d3d485ffe8 test(eoc-push): rätta sökväg till brand.config.json 2026-08-11 19:20:52 +07:00
Sven (AAMOS AI) cb53784ec3 test(eoc-push): använd BRAND.name istället för hårdkodat Cibello 2026-08-11 19:19:55 +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) ac919e9425 harden(eoc-push): fånga mappningsfel så pushen aldrig kastar 2026-08-11 18:44:01 +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) 90b23fcd7f fix(eoc-push): interpolera {brand} + EOC-tone i pushad wall 2026-08-11 18:21:58 +07:00
Sven (AAMOS AI) 8586ed3411 fix(compose): mappa admin-porten mot 8080 (non-root nginx) 2026-08-11 17:52:23 +07:00
Sven (AAMOS AI) c4fddf0eeb fix(docker): skriv nginx-pid till /tmp sa admin kor non-root 2026-08-11 17:52:19 +07:00
Sven (AAMOS AI) c29ab778a0 harden(docker): non-root USER i Dockerfile.admin 2026-08-11 17:29:00 +07:00
Sven (AAMOS AI) 125192f24a fix(eoc-push): mappa feedback-tidsstämpel till "skapad" per EOC-kontraktet 2026-08-11 17:27:53 +07:00
Sven (AAMOS AI) af05f084b8 feat(worker): EOC push-agent for ops summary
- Add EOC_URL + EOC_PUSH_TOKEN config
- Add pushOpsSummaryToEoc processor
- Schedule PUSH_OPS_SUMMARY_TO_EOC every 2 minutes
- Add unit tests
2026-08-11 17:03:53 +07:00
Sven (AAMOS AI) 4eddcfbefe docs: pre-launch readiness report 2026-08-11 07:40:00 +07:00
Sven (AAMOS AI) 63d83e0d7c ops(api): lägg till /ops/v1/health för EOC 2026-08-11 07:37:51 +07:00
Sven (AAMOS AI) 714d0a2e5b docs(security): genomgång av hardening-checklist inför prod 2026-08-11 07:30:50 +07:00
Sven (AAMOS AI) 8627331cc9 docs(status): uppdatera till nuläge (S1–S6, 254 recept, ops+wall, EOC) 2026-08-11 07:28:59 +07:00
Sven (AAMOS AI) 4a63c5cb67 cleanup(memory): impact läser bara egen userPreferences-rad 2026-08-11 07:28:25 +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) 95c934cbec fix: robustisera cooking-sessions-analytics-test + rätta eventName-alias 2026-08-11 05:47:56 +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
Sven (AAMOS AI) 05bba93b90 feat(worker): S3 3b härda UPDATE_USER_MEMORY — budget, kostnad, anti-påhitt, GDPR-regression 2026-08-11 03:23:09 +07:00
Sven (AAMOS AI) 33b0a8267b fix(ops): interpolera varumärke i wall board från brand.config.json 2026-08-11 02:47:25 +07:00
Sven (AAMOS AI) 335cfe0bf6 feat(memory): S3 3a minnes-yta + impact-endpoint 2026-08-11 02:41:39 +07:00
Sven (AAMOS AI) 4296a64aef feat(ops): wall board härlett ur summary-värden 2026-08-11 02:36:08 +07:00
Sven (AAMOS AI) b1b6eb994c feat(seed): import 246 verified recipes as committed seed catalog
- Convert C:\Users\Public\cibello-verified-final-result.json to
  packages/database/src/seed/data/verified-recipes.ts (committed, hermetic).
- Replace/extend the 23 placeholder SEED_RECIPES via re-export.
- Upsert on slug with onConflictDoUpdate of ALL recipe fields.
- Hard-reject recipes with unmapped canonical ingredients (0 rejected this batch).
- Derive allergens and compute nutrition per portion from ingredients at seed time.
- Run food-safety lint; auto-patch 8 legacy raw-protein recipes with safe-cooking phrase.
- Resolve 4 suspected title duplicates via variantOfSlug.
- Guard brand name: creatorDisplayName uses BRAND.name, never JSON placeholder.
- Preserve verificationStatus (editorial/verified) and source-registry FKs.
- Extend allergen-invariant test to cover full 246-recipe catalog.
- Stabilise API tests by disabling file parallelism (flakiness from shared DB state).

Refs: seed pipeline, brand-guard, safety canary
2026-08-11 00:47:08 +07:00
Sven (AAMOS AI) 4687f46384 Phase 1 ops core: base blocks, feedback, canary fixes
- Add app/ekonomi/anvandare/prenumerationer/butik/feedback blocks to computeOpsSummary.
- New feedback table, POST /api/feedback, GDPR erasure wiring.
- Canary: only count unverified/rejected published recipes; treat verified/editorial as safe.
- Add 'rejected' recipe verification status enum value.
- Fix food-safety lint baseline: remove egg/cured fish from raw-protein list, relax
  genomstekt regex, add safe-cooking phrases to seed recipes.
- Seed recipes now get verificationStatus=editorial.
- Tests: ops summary blocks, feedback route, me.residual cleanup.
2026-08-10 06:35:51 +07:00
Sven (AAMOS AI) 8f20b2ef1b feat(ops): /ops/v1/summary med ai/aktivering/engagemang/betalning/jobb/sakerhet + canary
- Nya toppnivåblock i /ops/v1/summary: ai_scan, aktivering, engagemang,
  betalning, jobb, sakerhet. Alla värden läses från DB/cache; null där data
  saknas, inga påhittade värden.
- AI-kostnad i USD mikrocent (native); intäkter fortsatt SEK-öre.
- product_analytics_events är källa för volym, latens, lyckandegrad,
  felfrekvens, aktivering, retention och engagemang.
- Nya händelser: scan_started (API) och scan_failed/scan_completed med
  latencyMs + felkod (worker). latencyMs flödar nu in i scan_completed.
- Safety canary-jobb varje timme: re-härleder allergener för alla recept,
  räknar överifierade publika recept och food-safety-lint; skriver EN rad till
  ops_safety_canary. Endpointen läser endast sista raden.
- Cache-refresh-jobb var 60 s skriver hela summariet till Redis; endpointen
  serverar cachen med 503 vid cache-miss.
- Bearer-token-skydd med OPS_TOKEN; HTTPS-tvång i produktion; ingen PII.
- Tester för endpoint, auth, cache-miss och safety canary.
2026-08-10 05:47:43 +07:00
Sven (AAMOS AI) f4a603e977 fix(recipe-generation): BRAND.name-interpolation för creatorDisplayName + rubriker/filnamn
feat(recommendation-engine,api): S4 Smak/Hälsa/Lager-vyer för 'Vad ska vi äta?'

- Ersätter hårdkodat 'Cibello' i scale-batch, scale-smoke-test och export-verified.
- DB-backfill: 224 recept hade 'Cibello AI' i creator_display_name (värdena
  motsvarar nuvarande BRAND.name, ingen rad ändrades men kontrollen är gjord).
- Lägger till view-query-param (default|taste|health|pantry) med fördefinierade
  ScoringWeights och samtyckesgrind.
- Unit-tester för vyer; integrationstester för vy-param, validering och
  fallback utan personalization-samtycke.
- brand-guard grön; pnpm typecheck 19/19; pnpm test --force x2 grönt (34 tasks,
  275 tester).
2026-08-10 05:17:43 +07:00
Sven (AAMOS AI) 881c5bb1e3 fix(worker): S2 proactive tips logic, i18n parity, hardened test DB reset
- processProactiveTips now iterates all expiring items sorted by urgency and
  emits the first candidate with a recipe that clears 7-day dedup.
- Add pt-PT proactive-tip templates; remove en-GB duplicate; parity test
  asserts against shared-types SUPPORTED_LANGUAGE_TAGS.
- Serialize DB test setup via turbo dependencies; seed truncates only *_test
  DBs, guarded by both --test flag and DB name suffix.
2026-08-10 04:35:22 +07:00
Sven (AAMOS AI) 1de1c68485 docs(34): S2 commit-hash 2026-08-10 03:52:13 +07:00
Sven (AAMOS AI) f494b1810e feat(worker): S2 proaktiva puffar (expiring-ingredient)
- Ny notification_type 'proactive_tip' och consent_kind 'notifications'.
- Dubbelgrind: personalization + notifications samtycke måste vara granted.
- Mallbaserade pufftexter i 12 språk; ingen fri AI-text.
- Led med nyttan ('gurkan börjar bli slapp — recept du brukar gilla').
- Max 1 puff/hushåll/dag; ingen upprepning av samma vara+recept inom 7 dagar.
- UTC för all datummatte; createdAt sätts explicit från processorns now.
- Ny worker-jobbtyp SEND_PROACTIVE_TIPS.
- Integrationstester för dubbelgrind, revoke, frekvens, duplicate, UTC.
- Migration 0022 + worker test script kör db:test-setup.
2026-08-10 03:51:57 +07:00