Commit Graph

28 Commits

Author SHA1 Message Date
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) 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) 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) 61c3193f17 feat(consent): user_terms_consents + /v1/me/consent 2026-08-13 02:06:44 +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) 14a5243bb2 feat(db): gemini_usage-tabell för token-telemetri 2026-08-12 20:51:50 +07:00
Sven (AAMOS AI) f86a37dd33 S5: onboarding → minne + smaksignaler (user_stated) 2026-08-11 04:43:43 +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) 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
Sven (AAMOS AI) ddd6b736ba feat(gdpr): fullständig raderingsflöde med pseudonym-retention, residual-test och hushållshantering
- Implementerar eraseUser() i packages/database/src/gdpr-erasure.ts som
  raderar/anonymiserar/pseudonymiserar alla personliga tabeller.
- DELETE /v1/me orkestrerar nu plan + transaktion + lagringsrensning.
- Enpersonshushåll raderas automatiskt; publika recept anonymiseras;
  draft/private-recept raderas.
- Finansiella poster (subscriptions/store_transactions/subscription_events)
  behålls under retention med slumpmässig pseudonym från
  gdpr_retention_pseudonyms.
- audit_logs/domain_events anonymiseras; kvitton i kvarvarande hushåll
  strippas på bild och OCR-text.
- Lägger till permanent residual-test (me.residual.test.ts) med
  schema-diff-assertion mot information_schema.
- Uppdaterar docs/23 och docs/29 med implementerad mekanism.
- Migration 0021 för gdpr_retention_pseudonyms och nullable
  cooking_sessions.started_by_user_id.
2026-08-08 05:45:49 +07:00
Sven (AAMOS AI) c2cc3878dd fix(skiva-1): spara accept, bildref, lokal träningsbank, lärande-loop-dok
- confirm-loop sparar nu även action=accept som positivt exempel i ai_corrections
- imageS3Key sparas vid image_training-samtycke, annars null
- ai_corrections.proposal lagrar det specifika AI-förslaget per item
- BUILD_TRAINING_SAMPLE bankar lokalt till ai_training_bank (ej externt runTask)
- Jobbet kastar aldrig i AAMOS_MODE=gemini
- Migration 0020: ai_corrections.image_s3_key/proposal + ai_training_bank
- docs/28-lärande-loop.md: datakontrakt, samtycke, retention, GDPR-radering
- Tester: accept + bildref (ja/nej) + lokal bank i gemini-läge
- REQUIRE_REAL=1 är AI-fokuserat i gemini-läge; staging mail/S3 får vara mock
2026-08-08 04:00:49 +07:00
Sven (AAMOS AI) 050c958285 feat(gemini): Skiva 1 – Gemini 2.5 Flash som lärar-tier för kylskåpsskanning
- Gemini-adapter bakom AamosClient-interface (AAMOS_MODE=gemini)
- Serversida/worker: hämtar bild, anropar Gemini, mappar mot canonical_ingredients
- Kostnad/tokens bokförs i ai_usage_counters; global dagsbudget via BudgetStore
- Redis-backed budget i worker, in-memory i tester
- Migration 0019: ai_cost_usd_microcents
- Hermetiska tester med inspelad fixture; separat pnpm eval:scan
- docs/09 uppdaterad ärligt: AAMOS-status, Gemini-flöde, säkerhet/kostnad
- REQUIRE_REAL=1 stödjer AAMOS_MODE=gemini; deploy-grind uppdaterad
2026-08-08 03:30:59 +07:00
Sven (AAMOS AI) fadd7692b2 docs(3d): restore FAS3 audit doc from cb49301 + add 3d semantics
- Restore full docs/FAS3-COOKING-SESSIONS-AUDIT.md from cb49301
  (hermetic test rules, REUSE/GAP matrix, anti-duplication rationale,
  step plans 3a-3d). Append section 7 with 3d merge/undo semantics.
- Update 7.6 wrapper reference to c1ab2c8 behaviour.
- Fix migration 0017: cast completed_at/started_at/created_at to UTC
  before extracting DATE. Idempotent (WHERE meal_date IS NULL); already
  backfilled rows unaffected. Runner does not checksum files.
- Clarify meal_date purpose: future UTC statistics/queries; undo uses
  stored mealBoxMutations.

Refs: cb49301, c1ab2c8
2026-08-07 17:24:15 +07:00
Sven (AAMOS AI) 74f95daab2 feat(3d): meal-box merge, stored mutations, undo, mobile undo UI + i18n ×12
- Merge leftovers into existing meal_box when same recipeId + cookedAt date + frozen + available.
- Store mealBoxMutations JSONB on cooking_sessions for deterministic undo.
- Undo decrements portions/remaining, discards box at zero, appends correction ledger rows.
- Mobile: undo button in cooking/[id].tsx after-flow and meal-boxes.tsx within 24h window.
- i18n undo strings across all 12 locales; parity test green.
- 6 new integration tests: merge, no cross-date merge, frozen split, undo restore, undo discard, ledger invariant.
- Update FAS3 audit doc with 3d semantics.

Closes Fas 3d
2026-08-07 17:04:42 +07:00
Sven (AAMOS AI) cb493010d0 3c: partial consumption + undo for cooking sessions
- Append-only undo via correction transactions tied to cookingSessionId.
- POST /v1/cooking-sessions/:id/undo with 24h UTC window (409 + i18n after expiry).
- Complete undo scope: meals removed, meal boxes discarded, recipe_cooks
deleted, cookCount decremented; activation milestones left intact.
- Deterministic assumption-profile rollback via lastSessionAnswers.sessionId;
profile deleted when observationCount reaches 0.
- New status 'undone' as TEXT validated against COOKING_SESSION_STATUSES.
- Analytics event cooking_session_undone + domain events MEAL_BOX_DISCARDED,
MEAL_REMOVED, COOKING_SESSION_UNDONE.
- Partial consumption uses actualPortionsEaten/plannedPortions factor.
- i18n coverage for cooked.undoWindowExpired across all 12 locales + server.
- Invariant tests: computeBalance(transactions) === item.quantity after
complete, undo, and undo + new complete; transaction count increases on undo.
- Migration 0014_expand_event_types.sql adds new enum values.
- Updated FAS3-COOKING-SESSIONS-AUDIT.md with chosen semantics.
2026-08-07 05:47:54 +07:00
Sven (AAMOS AI) e46281b9b5 Fas 3 steg 3b: minimala efterfrågor + hushållsantagandeprofiler per ingrediens 2026-08-07 03:56:41 +07:00
Sven (AAMOS AI) e9fb4a17d4 Fas 3 steg 3a: cooking_sessions-tabell + lifecycle-endpoints + timeout-jobb, gamla /cook kvar som kortkommando 2026-08-07 03:14:13 +07:00
Sven (AAMOS AI) 4a4f448e1c Fas 2 steg 5: Scan-to-scan-diff + konfliktlösning, samt buggfix depleted-transaktion i reconciliation 2026-08-07 01:30:31 +07:00
Sven (AAMOS AI) bcf932d2ff Fas 2 steg 2: Inventory Trust Engine - decay-profiler och cache-jobb 2026-08-06 23:25:32 +07:00
Sven (AAMOS AI) 8ae4bf6ec3 Fas 2 steg 1: Inventory Trust Engine - trust states pa inventory_items 2026-08-06 23:01:43 +07:00
Sven (AAMOS AI) 3696aadf98 Hermetiska integrationstester + auto-hushall i onboarding (size, i18n, locations) 2026-08-06 22:06:11 +07:00
Sven (AAMOS AI) bd8df59138 Fas 1b punkt 6: First Scan Coach + aktiveringsmätning 2026-08-06 04:14:49 +07:00
Sven (AAMOS AI) 2f3cdf8016 FAS 1b: Progressive onboarding (3-layer flow)
- Add PROGRESSIVE_ONBOARDING feature flag to KNOWN_FLAGS
- Add onboarding_step column to users table (a/b/c)
- New backend endpoints:
  - GET /v1/onboarding/status – check current step + feature flag
  - POST /v1/onboarding/quick-start – complete Step A (goal + precision)
  - POST /v1/onboarding/complete-b – complete Step B (diet, allergens, household)
  - POST /v1/onboarding/complete-c – complete Step C (health profile)
  - POST /v1/onboarding/skip – GDPR-friendly skip
- Refactor mobile onboarding screen into 3 progressive layers
- Update auth store with onboardingStep state
- Update tab layout to only block on Step A
- Update registration to set onboardingStep='a'
- Add i18n keys for Step B/C titles across all 12 locales
- Add Zod validation schemas (quickStartInputSchema, onboardingStatusSchema)
- Add tests for validation and feature flag
- Preserve existing /v1/me/onboarding for backward compatibility
- Migration: 0004_progressive_onboarding.sql
2026-08-06 00:40:59 +07:00
Sven (AAMOS AI) b2b6601f54 Fas 1a punkt 3+4: worker-härdning (DLQ, larm, multi-instance), AAMOS training export 2026-08-05 23:32:18 +07:00
Sven (AAMOS AI) d1455fb581 Fas 1a punkt 2: release_gates tabell + go/no-go-vy 2026-08-05 23:10:09 +07:00
Sven (AAMOS AI) d627014425 Fas 1a: product analytics schema + GDPR controls 2026-08-05 19:51:37 +07:00
Sven (AAMOS AI) ac5340195a Initial commit (unpacked platform) 2026-08-05 19:21:11 +07:00