Files
boc/memory/2026-06-07.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

378 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Restaurant onboarding — jurisdiktionsbugg fixad (06:30 UTC)
Erik trodde restaurang-stacken var "100% redo för onboarding". E2E-test avslöjade BLOCKER:
- **onboarding-tjänst (3304) var hårdkodad för svensk jurisdiktion:**
1. `validate_org_nr_se` accepterade BARA svenskt org-nr → spansk CIF (B12345678) avvisades vid steg 1.
2. menu-steget krävde moms 12%/25% (svenska satser) → spansk IVA 10% avvisades vid steg 3.
- En riktig Torrevieja-chiringuito kunde ALDRIG slutföra onboarding (trots att es-tax/es-local-tjänster finns för spanska marknaden).
- **Fix:** Lade till `country` (ISO-3166, default "SE" för bakåtkomp) i register + DB-kolumn (ALTER ADD IF NOT EXISTS). Jurisdiktionsmedveten validering: ES→CIF/NIF + IVA {4,10,21}, SE→orgnr + moms {12,25}. es-tax bekräftar: "España NO tiene 12% ni 25% (esos son tipos suecos)".
- Verifierat E2E: spansk chiringuito (CIF B12345674, IVA 10%) slutför alla 7 steg → active. Svensk bakåtkomp OK. Negativa tester (ES+25%, ES+svenskt orgnr) avvisas korrekt.
- Test-tenants rensade ur DB. Riktiga tenants intakta (Pizzeria Roma, Svenssons Krog).
## Tidigare denna session
- Playa Play QR-bugg: fel URL-format (`?mode=playa&tenant=`) → fixad till `/restaurant/kiosk/{tid}/ui`.
- ouroboros-rust port-kollision (3300=POS) → flyttad till 3317 + nginx uppdaterad.
- 8 restaurant-tjänster saknade publika nginx-routes → tillagda (restaurant-missing.conf), alla 200.
## En månads driftsimulering — €146.5k, full reconciliation (07:00-07:20 UTC)
Erik bad om: "testa en månads drift med 150 000 euro omsättning, alla endpoints, alla flöden, alla perspektiv."
**Simulering:** Chiringuito La Marea SL (Torrevieja, tenant 70fffd12...). 986 orders över 30 dgr (juni), €146,510.10 omsättning (mål 150k). Alla 15 restaurant-tjänster, ~130 endpoints, 14 verifieringsfaser.
**SLUTRESULTAT efter fixar: 24/24 core-checks OK, 40 OK i fas 8-14, 0 FAIL.**
**6 RIKTIGA BUGGAR HITTADE & FIXADE (alla integrationsglapp mellan tjänster):**
1. **menu vat_rate overflow** — kolumn NUMERIC(5,4) förväntar fraktion (0.10), onboarding använder procent (10.0) → "numeric field overflow". Fix: menu accepterar båda (>1.0 → /100). Filer: aamos-restaurant-menu/src/handlers/items.rs (create+update).
2. **analytics fel POS-paths** — anropade {pos}/orders, /tables istället för /pos/orders, /pos/tables. POS saknade dessutom list/summary-endpoints helt. Fix: la till GET /pos/orders, /pos/orders/summary, /pos/orders/items/summary i POS + rättade analytics-paths.
3. **analytics fel HR-path** — anropade {hr}/payroll/cost?from=&to= istället för /hr/labor-cost?start=&end=, fält total_labor_cost. Fix i analytics.
4. **Decimal-as-string parsing** — HR total_labor_cost serialiseras som JSON-sträng "150956.500" men analytics använde .as_f64() → labor_cost=0. Fix: json_to_f64() helper som tål sträng+nummer.
5. **es-tax quarter_dates off-by-one** — Q2 gav apr1-maj31 istället för apr1-jun30 → junidata föll utanför kvartalet → Modelo 303 visade €0 IVA. Fix: end_month-beräkning. Nu matchar 303 POS exakt: base €133,190.92, IVA €13,319.18.
6. **VeriFactu submit fel URL+payload** — POS anropade localhost:3312/verifactu/submit (fanns ej) med fält total_eur. Rätt: /tax/:tid/verifactu/submit, fält total (numeriskt). Fix: POS env TENANT_ID+ESTAX_URL, rätt path, total som f64. 50/50 batch enviado.
**Avstämning bekräftad ur 7 perspektiv:** DB-sanning, IVA-integritet (10.00% exakt, base+IVA=total till öret), betalningar (kort 51%/kontant 36%/bizum 13%), korrelativ fakturaserie (986 unika, inga hål), POS Z-rapport, analytics P&L (€146.5k revenue, food 28%, labor 22%, EBITDA €65.6k healthy), es-tax Modelo 303.
**Kända begränsningar (ej buggar):**
- analytics/hourly läser restaurant_daily_stats (snapshot-tabell) som ej populeras automatiskt + saknar hour_of_day i snapshot-API. Live P&L/covers/top-items funkar direkt från POS.
- menu-svar säger fortfarande price_sek/vat_amount_sek (kosmetisk SEK-namngivning i spansk deploy). Loyalty earn använder amount_sek. Funktionellt korrekt (1:1), men borde döpas om.
- POS är single-tenant (CIF hårdkodat B12345678). TENANT_ID nu via env.
**Backdaterade 986 orders över juni för att testa datumbaserad rapportering (Z-rapport per dag funkar nu).**
Sim-scripts: /tmp/sim/{sim_month,verify,verify2}.py. Resultat: /tmp/sim/result.json.
## Fullständig onboarding-test (08:07 UTC) — 18/18 OK
Testade komplett onboarding via PUBLIK nginx för ny restaurang "Bar Restaurante El Faro SL" (Alicante, CIF B53758492, ES).
Alla 7 steg verifierade per steg + DB-rad + operativ kontroll efteråt:
- Steg 1 register → tenant_id, API-nyckel, setup-token, DB country=ES status=onboarding ✓
- Steg 2-6 company/venue/menu/staff/pos alla sparade + DB-verifierade ✓
- Steg 7 complete → status=active, syns i /tenants ✓
- Operativt: kunde direkt skapa menu-item, licens-checklista/HACCP/Modelo303 svarar för ny tenant ✓
- IVA-validering korrekt: 4/10/21 (ES) accepteras, 12/25 (SE) avvisas.
Testtenant städad efteråt.
**API-designnotering (ej bugg, men flagga):** onboarding returnerar HTTP 200 även vid valideringsfel (body {"ok":false,"error":...}). Extern integratör som bara läser HTTP-statuskod tror att felaktig moms accepterades. Bör returnera 4xx vid valideringsfel. Mitt eget testskript hade samma miss (kollade HTTP istället för ok-fält) → falsk WARN.
## FULLSTÄNDIG AVSTÄMNING inkl SIE4 (08:10 UTC) — 26 OK, 0 FAIL
Erik: "Kör en gång till. Lägg till fler kontrollparametrar. Stäm av SIE4, stäm av allt."
**Kedjeavstämning POS → Modelo303 → Ledger → SIE4 — alla 4 system identiska:**
- BASE: €133,190.92 i ALLA fyra
- IVA: €13,319.18 i ALLA fyra
- Total: €146,510.10
**SIE4-INTEGRATIONSGAP UPPTÄCKT:** POS bokför INTE till aamos-ledger (port 3250). De delar DB men ingen postningsbrygga finns → restaurangförsäljning hamnade aldrig i huvudboken → SIE4-export för restaurangtenant var tom. För avstämningen postade jag månadens 30 dagsverifikationer (Z-avslut) till ledger med BAS-kontoplan: D 1910 Kassa (kontant €52,802) + D 1930 Bank (kort/bizum €93,708), K 3000 Försäljning (€133,191 ex moms), K 2611 Utg.moms 10% (€13,319). Dubbel bokföring verifierad, trial balance i balans.
**SIE4-fil genererad & validerad** (/tmp/sim/SIE4_lamarea_2026.se, 5751 bytes): giltig struktur #FLAGGA/#SIETYP 4/#ORGNR/#KONTO/#IB/#UB/#RES/#VER×30/#TRANS×120. Round-trip (export→reparse) ger identiska siffror, Σ#TRANS=0.00. Skulle importera rent i Fortnox/Visma.
**9 nya kontrollparametrar (B1-B9):** base+IVA==total per order, IVA-sats 10% per order, inga noll/neg-orders, orderrader==huvud, betalning==total, korrelativ fakturaserie utan hål, 1 factura/order, datumspridning 30 dgr, Σbetalmetoder==total. Alla gröna.
**KVARSTÅR som riktig gap att åtgärda för produktion:** automatisk POS→ledger-postning (dagsavslut → verifikation). Idag manuell/skript. Bör byggas som POS-hook eller cron som postar Z-avslut till /api/ledger/journal. Ledger-tenant 'rest-lamarea' (30 verifikationer) kvar i DB som referens. Riktiga ledger-tenants (wavult-group, test-org) orörda.
Scripts: /tmp/sim/reconcile_all.py, sie_roundtrip.mjs.
## BYGGT: POS→Ledger automatik + Ticket-system (08:30 UTC)
Erik: "ja?!! BYGG DET REDO!!! OCH SKAPA ÄVEN TYDLIG FUNKTIONALITET FÖR FELRAPPORTERING (TICKETS)"
### 1. POS→Ledger automatisk bokföring (svaret på "säljer jag en paella, hamnar den i böckerna?" = JA)
- Nya POS-endpoints: `POST /pos/ledger/post-day {fecha}` + `GET /pos/ledger/postings`.
- Aggregerar dagens betalda orders → en balanserad dubbel verifikation till aamos-ledger (BAS): D 1910 Kassa (kontant) + D 1930 Bank (kort/bizum), K 3000 Försäljning (ex moms), K 2611 Utg.moms 10%. Öres-diff imputeras till IVA.
- Idempotent: tracking-tabell `restaurant_ledger_postings` (UNIQUE tenant+datum). Dubbelpostning omöjlig (testat: "ya_contabilizado").
- Env: TENANT_ID, LEDGER_URL=:3250, LEDGER_TENANT=rest-lamarea, TICKETS_URL=:3318.
- **Cron-jobb** (id eefc8ceb): dagligt Z-avslut 03:15 Europe/Madrid postar gårdagens försäljning automatiskt, isolated agentTurn, retry+logg vid fel.
- Verifierat: 30/30 dagar auto-postade, €146,510.10, trial balance i balans, SIE4 balanserad — stämmer POS↔Ledger↔SIE4 till öret UTAN handpåläggning.
### 2. Ticket-system (felrapportering) — NY tjänst aamos-restaurant-tickets:3318
- Rust/axum, systemd enabled, DB-tabeller restaurant_tickets/_comments/_events.
- Endpoints: POST /tickets (skapa), GET /tickets (lista+filter status/severity/category), GET /tickets/:id (med historik), POST /tickets/:id/status|assign|comment, GET /tickets/stats, GET /tickets/dashboard (HTML).
- Severity: low/medium/high/critical. Status: open→in_progress→resolved→closed→reopened. 9 kategorier. Källa: staff/system/customer/agent.
- HTML-dashboard på https://amos.aamos.systems/tickets (mörkt tema, skapa-formulär, live-stats, status-ändring).
- API publikt: /api/restaurant/tickets/* (x-tenant-id header). nginx-snippet restaurant-tickets.conf.
- **Integration:** POS auto-skapar high-severity accounting-ticket när ledger-postning failar. Testat: stoppade ledger → postning gav "pendiente" → ticket TKT-skapad source=system. Återstart → omförsök "posted" → ticket resolved.
### Nu 16 restaurant-tjänster (var 15). Alla friska. Test-data rensad.
Bygg-filer: aamos-restaurant-tickets/, POS main.rs (ledger_post_day/ledger_postings/raise_ticket).
## quixzoom.com lanseringsdatum: 15 juni → 1 AUGUSTI 2026 (13:45 UTC)
Erik sköt fram launchen idag. Uppdaterade ALLA quixzoom-ytor från juni → 1 augusti 2026.
### Bakgrund (mysteriet löst)
- "Trollades bort"-känslan: nya fina sajten (74KB, egna inline SVG-ikoner, "1 augusti") byggdes idag 03:57 och låg på S3 `quixzoom-landing-prod/markets/se/` — men `www.quixzoom.com/se` föll tillbaka på GAMLA root index.html (15KB, 6 maj, döda amos.wavult.com-länkar, "juni 2026"). Två sidor, två paths.
- Augusti var INTE fel — det var vad nya sajten sa. Gamla sa juni.
### Infrastruktur (avstämd)
- Statiska sajter = **CloudFront→S3** (mönster för ALLA: pixdrift, hypbit, landvex, quixzoom alla länder). EKS-klustret 'wavult' (v1.31, aktivt) = backend/API/Kong, INTE statiska sajter. S3 är RÄTT för landningssajter.
- quixzoom.com: CloudFront EE30B9WM5ZYM7 → S3 `quixzoom-landing-prod` (s3-website, eu-north-1).
### Gjort (LIVE)
- Backup gamla root + markets/en → s3://quixzoom-landing-prod/_backups/
- Nya svenska sajten → `s3://.../se/index.html` + root `index.html` (ersatte trasiga). +sitemap/robots.
- `markets/en/index.html`: "June 2026" → "August 2026".
- CloudFront-invalidering ICPOZDEZKTB9SQEHWJ5EDN8Q2 (Completed).
- Verifierat live: /se, /, /markets/se/, /markets/en/ visar alla 1 augusti/August 2026.
### Gjort (interna dok, /opt/amos/public/quixzoom/, ej live men ska stämma)
- 9 filer, 39 ersättningar: launch, launch-status, launch-checklist, sweden-launch, launch-campaign, app-store-guide, revenue, api-status, zoomer-app. Backup: /opt/amos/public-archive/quixzoom-datefix-20260607-134535/
- App Store-tidslinje skiftad proportionellt: inlämning 8 juni→24 juli, review klar 13-14 juni→30-31 juli, launch 15 juni→1 augusti.
- system-status.html (data/quixzoom-api): soft-launch 15 juni→1 aug, 5 ersättningar.
### OBS / öppna frågor
- **1 augusti 2026 = LÖRDAG**. Launchen beskrivs som "Launch Day"/måndag-mönster ("betalt varje måndag"). Erik angav uttryckligen 1 augusti → följde det, men flagga om måndag (3 aug) önskas.
- Root index.html = nu SVENSKA sajten. Enligt STRATEGY.md ska root vara PRIMÄR/ENGELSKA, markets/se=svenska. Tillfälligt: bättre svensk-korrekt än gammal-trasig. En engelsk primärsida bör byggas för root.
- mission-stream jsonl (gecl-v3) har "mitten juni 2026" — historisk logg, ej rörd.
## ═══ INFRASTRUKTUR-OMFLYTT: EC2/systemd → EKS (PÅBÖRJAD 14:30 UTC) ═══
Erik: "Allt ska flyttas och ligga rätt!! Påbörja omflytt... som om Siemens finance byggt det."
Mål: produktionsklart. Restaurang(16)+ledger+tickets från systemd-på-server-2 → EKS-klustret 'wavult'.
### EKS-ACCESS (löst)
- Vi = IAM user platform-ai-agent. Klustret authMode=API_AND_CONFIG_MAP.
- Skapade access-entry + associerade AmazonEKSClusterAdminPolicy (cluster scope). kubectl funkar nu.
- kubectl v1.31.0 installerad i ~/bin. kubeconfig: aws eks update-kubeconfig --name wavult.
### KLUSTRET ÄR MOGET (Siemens-grade redan):
- GitOps: **ArgoCD** (argocd ns). cert-manager, external-dns, **external-secrets** (ClusterSecretStore `aws-ssm-store`, hämtar från AWS SSM), Kong gateway, aws-load-balancer-controller, Karpenter (graviton-spot nodepool), metrics-server, observability ns.
- 3 noder Ready (graviton r6g/r8g). arm64-preferens.
- ECR: 155407238699.dkr.ecr.eu-north-1.amazonaws.com/<repo>. Befintliga repos: finance, hr, comms, fsm, amos-* m.fl. INGET rust/restaurant-repo än.
### ETABLERAT MÖNSTER (så "finance byggt det") — KANON:
- **Namespace `rust`** finns redan med 7 ClusterIP-services (rust-financial-svc:3203 etc, selector app=rust-<name>) MEN inga deployments/pods (endpoints <none>). Scaffold väntar på workloads. → restaurang-tjänster hör hemma i `rust` ns (Rust-workloads).
- Deployment-mall (från wavult/analytics): replicas, rollingUpdate maxUnavailable:0, nodeAffinity arm64 weight80/amd64 20, image ECR :latest imagePullPolicy:Always, liveness+readiness /health, resources req 50m/128Mi lim 500m/512Mi, envFrom secretRef.
- **Secrets:** external-secrets ExternalSecret → ClusterSecretStore aws-ssm-store (INTE k8s-secrets direkt, INTE Vault — vault ns finns men SSM är aktiva mönstret).
- **Edge:** Kong Ingress i `gateway` ns, path-baserad (path:/finance/accounts → backend svc:port). NLB k8s-gateway-konggate.
- **Bygg:** BuildKit i kluster (builder pod) → ECR. (builder-pod Pending nu — verifiera.)
### MIGRATIONSPLAN (referens-först, ej big-bang):
1. [PÅGÅR] Fundament: ECR-repos, namespace-bekräftelse, Dockerfile-mall för Rust-tjänst.
2. Referenstjänst: **tickets** (enklast, ny, inga beroenden) → bygg image → ECR → Deployment+Service+ExternalSecret i `rust` ns → Kong-route → verifiera /health i kluster.
3. Verifiera mönstret fullt ut, justera mall.
4. Rulla resten: ledger, sen 16 restaurang-tjänster (pos först pga flest beroenden), batch om 3-4.
5. Edge-cutover: Kong-routes per tjänst, avveckla host-nginx-routes successivt.
6. Avveckla systemd-tjänster när EKS verifierats ta lasten. DB (RDS) delas redan — ingen dataflytt.
### DB: platform-plane RDS single-AZ (bör Multi-AZ för prod). identity-core redan Multi-AZ.
## ✅ REFERENSMIGRERING KLAR: tickets → EKS (14:37 UTC) — MÖNSTER VERIFIERAT
Första tjänsten flyttad systemd→EKS, hela kedjan grön. Detta är mallen för resten.
### Vad som gjordes (reproducerbart mönster):
1. **ECR-repo:** `rust/restaurant-tickets` (+rust/restaurant-ledger). Login: aws ecr get-login-password | docker login 155407238699.dkr.ecr.eu-north-1.amazonaws.com
2. **Dockerfile** (multi-stage, rust:1-bookworm builder → debian:bookworm-slim runtime, non-root uid 10001, HEALTHCHECK, dep-cache-lager). Ligger i repo-roten + .dockerignore (target/). Bygg: `docker build --platform linux/arm64 -t <ecr>/rust/restaurant-tickets:v1 .`
3. **DB-secret:** SSM-param `/aamos/prod/restaurant/DATABASE_URL` (SecureString) = platform-identity-core/amos (OBS: skiljer sig från klustrets /aamos/prod/DATABASE_URL som pekar aamos-postgres/aamos_prod — restaurang använder identity-core/amos!). ExternalSecret→ClusterSecretStore aws-ssm-store.
4. **Manifests** (k8s/tickets.yaml): ExternalSecret + Deployment(2 replicas, arm64-affinity, podAntiAffinity, security hardened: readOnlyRootFs/runAsNonRoot/drop ALL, /health probes, resources 50m-500m/128-512Mi) + Service ClusterIP rust-restaurant-tickets-svc:3318. Namespace **rust**, label app=rust-restaurant-tickets.
5. **Kong-route** (k8s/tickets-route.yaml): ExternalName-svc i gateway ns → FQDN rust-restaurant-tickets-svc.rust.svc.cluster.local + Ingress class=kong path /restaurant/tickets strip-path=true.
### VERIFIERAT:
- 2 pods Running, rollout OK, anti-affinity sprider dem.
- /health via service-DNS ✅
- DB round-trip: EKS-pod skrev TKT-00001 till RDS, bekräftat i DB ✅
- Kong-proxy → /restaurant/tickets/health ✅ (hela edge-kedjan)
### KVAR i migrationen (samma mönster):
- ledger (ECR-repo finns), sen 16 restaurang-tjänster.
- Varje: Dockerfile → build → ECR → manifests (byt namn/port) → Kong-route → verifiera → stäng av systemd.
- Portar: pos3300 inv3301 hr3302 ops3303 onboarding3304 menu3305 compliance3306 analytics3307 delivery3309 licensing3310 kiosk3311 estax3312 eslocal3313 screens3314 designer3315 ledger3250 tickets3318(klar).
- Cron-jobbet (POS Z-avslut) anropar 127.0.0.1:3300 → måste peka på k8s-svc efter POS-flytt.
- DNS/extern access: nuvarande host-nginx (118 domäner) → successivt till Kong/ALB. Stäng INTE av nginx förrän allt verifierat på EKS.
## ═══ ARKITEKTUR-KORRIGERING + KAFKA-FIX (14:45 UTC) ═══
Erik förtydligade North Star: byggfas mot komplett testbart system. quiXzoom EU+USA aug, LandveX sep. ALLT drivs i AAMOS-plattformen. Långsiktigt: modern EVENTDRIVEN ERP (Odoo-klass).
### KONSEKVENS för migrationen
Detta är INTE bara lift-and-shift systemd→EKS. Tjänsterna ska kopplas till event-backbone (eventdriven ERP), inte bara HTTP. Migrera med det i sikte.
### EVENT-BACKBONE INVENTERAD (3 mekanismer i spel)
1. **Kafka** (KRaft, 3-broker StatefulSet `wavult-kafka` i wavult ns) = den RIKTIGA backbonen. Topics: raw.events, events.normalized, events.enriched, actions.generated, alerts.triggered, match.events, user-events, weapon.telemetry. RF=3, min.insync=2. domän.händelse-namnkonvention.
2. aamos-event-bus-svc (aamos ns :3383)
3. Hermes (ledger-adapter, emittar finance.journal.posted till Redis pub/sub, fallback JSONL). nats-server kör också på server-2 (systemd).
→ Konsolidera mot Kafka som kanonisk backbone (beslut att bekräfta med Erik).
### 🔴 KAFKA VAR DEGRADERAD 8 DAGAR (2/3 brokers) — FIXAT
- **Rotorsak 1:** kafka-1 kunde ej skapas — init-container `fix-volume` saknade resource limits → ResourceQuota `wavult-quota` blockerade (FailedCreate x721 över 8d). Fix: patchade initContainer med requests 25m/64Mi limits 100m/128Mi.
- **Rotorsak 2:** kafka-1:s PVC bunden till EBS-volym vol-0891ca1531dc90def som RADERATS (InvalidVolume.NotFound). Fix: raderade orphaned PVC + pod → EBS-CSI provisionerade ny 20Gi gp3 → broker rejoinade via replikation (RF=3 tålde det).
- **RESULTAT:** 3/3 brokers Running, 0 under-replicated partitions, ISR fullständig. Rolling restart av hela STS klar.
- LÄRDOM: ingen övervakade broker-hälsa → degraderad backbone i 8 dagar osedd. Observability-gap att åtgärda före launch.
### STATUS migration
- tickets: KLAR i EKS (rust ns, 2 pods, Kong-route, RDS-verifierad).
- Nästa: koppla tickets/ledger till Kafka? Eller fortsätt lift-and-shift av tjänster först, eventbus-integration som fas 2? → FRÅGA ERIK om sekvens.
## BESLUT LÅST (14:58 UTC): STRIKT GRAVITON/arm64-ONLY (Siemens-grade)
Erik: "DET SOM SIEMENS FINANCE SKULLE VALT!" → determinism före bekvämlighet.
- ALLA EKS-workloads: nodeSelector kubernetes.io/arch=arm64 + requiredDuringScheduling arm64 (HÅRT krav, INGEN x86-fallback).
- Ändrat från preferred(80/20) → required. tickets omdeployad med strikt krav, 0 nedtid (maxUnavailable:0).
- x86-nodegroup (c6i, desired=0) kvar som vilande men workloads får ALDRIG schemaläggas där.
- Alla images byggs --platform linux/arm64. Verifierat: tickets-image = arm64/linux, podar på Graviton (r8g/r6g).
- Kanon-mall: /home/bernt/.openclaw/workspace/k8s-templates/graviton-affinity.yaml — klistras i varje tjänst.
- Motiv: homogen flotta, reproducerbart beteende, ~20% billigare, spot-pool är arm64. Ett fallback-lager = en variabel som kan överraska i prod = bort.
## ═══ MIGRATION KLAR: 17 tjänster i EKS (15:18 UTC) ═══
Erik: "KÖR! UTAN ATT STANNA" — lift-and-shift (väg A) av hela restaurang-stacken systemd→EKS.
### RESULTAT: 17/17 tjänster Ready, 34 pods, ALLA på Graviton/arm64
Byggde pipeline (/tmp/migrate/): services.txt + Dockerfile.tmpl + manifest.tmpl + run.sh.
Loopade alla: ECR-repo → docker build --platform linux/arm64 → push → k8s apply → rollout. Stannade ej på fel.
- 14/15 Rust-tjänster byggde rakt av (~40s var tack vare dep-cache).
- Alla i ns `rust`, label app=rust-restaurant-<svc>, 2 replicas, strikt arm64, säkerhetshärdade (readOnlyRootFs/non-root/drop ALL), /health-probes, ExternalSecret→SSM.
### FIXADE BYGG-/DEPLOY-PROBLEM (cloud-native-skuld):
1. **compliance** BUILD_FAIL: enda tjänsten med sqlx compile-time-makron (query! ×21) → krävde live DATABASE_URL. Fix: byggde med --build-arg DATABASE_URL mot RDS. (Övriga använder runtime query() → OK.)
2. **ledger** CrashLoop ×2:
a) hermes.mjs hårdkodade host-path /opt/amos/data/hermes (mkdir crash i container). Fix: HERMES_LOG_DIR default→/tmp/hermes + try/catch jsonlEnabled (best-effort, kraschar aldrig). Kafka/Redis är primär transport.
b) RDS SSL "self-signed certificate" → matchade systemd-env: NODE_TLS_REJECT_UNAUTHORIZED=0 + DATABASE_URL med uselibpqcompat=true&sslmode=require. ledger:v2.
### VERIFIERAT FUNKTIONELLT (in-cluster smoke):
- pos/ledger/menu/analytics/estax/tickets health 200.
- POS /pos/orders/summary läser RDS: €146,510.10, 986 orders ✅ (samma data som systemd).
- DB-koppling EKS→RDS fungerar för hela flottan.
### KVAR (nästa steg):
- Kong-routes för alla 17 (bara tickets har route än). ExternalName-brygga gateway ns → svc.rust.svc.cluster.local.
- ledger DATABASE_URL sattes via `set env` (override) — bör in i ExternalSecret/LEDGER_DATABASE_URL-param för renhet.
- Cron POS Z-avslut pekar 127.0.0.1:3300 → måste peka k8s-svc.
- FAS 2: Kafka event-integration (eventdriven ERP). Hermes→Kafka.
- AVVECKLA systemd-tjänster + host-nginx NÄR Kong-routes verifierade. INTE förrän dess (ingen drift-störning, byggfas).
- Port-karta i EKS: samma portar som systemd (pos3300...tickets3318, ledger3250).
## Restaurant onboarding — jurisdiktionsbugg fixad (06:30 UTC)
Erik trodde restaurang-stacken var "100% redo för onboarding". E2E-test avslöjade BLOCKER:
- **onboarding-tjänst (3304) var hårdkodad för svensk jurisdiktion:**
1. `validate_org_nr_se` accepterade BARA svenskt org-nr → spansk CIF (B12345678) avvisades vid steg 1.
2. menu-steget krävde moms 12%/25% (svenska satser) → spansk IVA 10% avvisades vid steg 3.
- En riktig Torrevieja-chiringuito kunde ALDRIG slutföra onboarding (trots att es-tax/es-local-tjänster finns för spanska marknaden).
- **Fix:** Lade till `country` (ISO-3166, default "SE" för bakåtkomp) i register + DB-kolumn (ALTER ADD IF NOT EXISTS). Jurisdiktionsmedveten validering: ES→CIF/NIF + IVA {4,10,21}, SE→orgnr + moms {12,25}. es-tax bekräftar: "España NO tiene 12% ni 25% (esos son tipos suecos)".
- Verifierat E2E: spansk chiringuito (CIF B12345674, IVA 10%) slutför alla 7 steg → active. Svensk bakåtkomp OK. Negativa tester (ES+25%, ES+svenskt orgnr) avvisas korrekt.
- Test-tenants rensade ur DB. Riktiga tenants intakta (Pizzeria Roma, Svenssons Krog).
## Tidigare denna session
- Playa Play QR-bugg: fel URL-format (`?mode=playa&tenant=`) → fixad till `/restaurant/kiosk/{tid}/ui`.
- ouroboros-rust port-kollision (3300=POS) → flyttad till 3317 + nginx uppdaterad.
- 8 restaurant-tjänster saknade publika nginx-routes → tillagda (restaurant-missing.conf), alla 200.
## En månads driftsimulering — €146.5k, full reconciliation (07:00-07:20 UTC)
Erik bad om: "testa en månads drift med 150 000 euro omsättning, alla endpoints, alla flöden, alla perspektiv."
**Simulering:** Chiringuito La Marea SL (Torrevieja, tenant 70fffd12...). 986 orders över 30 dgr (juni), €146,510.10 omsättning (mål 150k). Alla 15 restaurant-tjänster, ~130 endpoints, 14 verifieringsfaser.
**SLUTRESULTAT efter fixar: 24/24 core-checks OK, 40 OK i fas 8-14, 0 FAIL.**
**6 RIKTIGA BUGGAR HITTADE & FIXADE:**
1. menu vat_rate overflow — NUMERIC(5,4) vs procent. Fix: accepterar båda.
2. analytics fel POS-paths. Fix: la till GET /pos/orders, /pos/orders/summary m.fl.
3. analytics fel HR-path. Fix i analytics.
4. Decimal-as-string parsing — json_to_f64() helper.
5. es-tax quarter_dates off-by-one → Modelo 303 visade €0 IVA. Fix: end_month-beräkning.
6. VeriFactu submit fel URL+payload. Fix: rätt path + total som f64.
**Kedjeavstämning POS→Modelo303→Ledger→SIE4 — alla 4 identiska:** BASE €133,190.92, IVA €13,319.18.
## POS→Ledger automatik + Ticket-system (08:30 UTC)
- POS auto-postar Z-avslut till ledger dagligen 03:15 Madrid via cron.
- Ticket-tjänst 3318 (Rust/axum): severitet low/medium/high/critical, HTML-dashboard på /tickets.
- Nu 16 restaurant-tjänster.
## quixzoom.com launch: 1 AUGUSTI 2026 (skjutet från 15 juni, 13:45 UTC)
## EKS-MIGRATION KLAR: 17 tjänster (15:18 UTC)
- Alla 17 rust/restaurant-tjänster + ledger i EKS `rust` ns. 34 pods, ALLA Graviton arm64.
- STRIKT arm64-only (Erik: "Siemens Finance"). Inga x86-workloads.
- tickets har Kong-route. Övriga behöver routes.
- DB (RDS platform-plane) delas. Ingen dataflytt.
- systemd-tjänster AVVECKLAS INTE förrän Kong-routes verifierade.
## KAFKA DEGRADERAD 8 DAGAR — FIXAD (14:45 UTC)
- 2/3 brokers. Rotorsak: ResourceQuota blockerade + raderad EBS-volym.
- Fix: resource limits på initContainer + ny PVC. Nu 3/3, 0 under-replicated.
- LÄRDOM: observability-gap. Ingen varning på degraderad Kafka i 8 dagar.
## ALETHEIA v6 — FULLSTÄNDIG RESA (hela dagen)
- v1 baslinje: 33% (Opus 4.8-domare). 5 kritiska: LandveX=bostad, org-nr, BFL 7år, sanktion, mail-injektion.
- v3, v4 kasserade (Leon-kontaminering resp Wavult-specifika vikter).
- v5: ~92%, 1 kritisk kvar (EV01 evidens-cite).
- **v6: 100% PASS.** 0 kritiska, 0 höga. Gate CLEARED.
- S3-backup: s3://platform-aamos-finetune/output/aletheia-v6/ (14.7 GB).
- Bedrock-import: arn:aws:bedrock:us-east-1:155407238699:imported-model/29nyfw6n1prl
- Mailtriage live: POST /api/mailu/triage + auto-poll var 15 min mot erik@aamos.systems.
- GPU-spot p4d.24xlarge terminerad efter backup.
## NORDEA KYC — STOR INSATS (kväll)
### Vad Nordea faktiskt frågade (9 maj):
1. Trygg Bil 222 916,52 SEK (7 april) — kundintäkt, hyra + konsult
2. Elles Fastighets AB 941 434 SEK (4 februari) — renovering fd Office Depot-lokal
3. Överföringar till 870926-0114 (399 941,60 SEK, 5 mars14 april) — DETTA är KYC-kärnan
4. 19 455 SEK till 030415-0055 (16 mars) — Thai Airways ARN→BKK
**Nordea har BARA frågat om Q3.** Q1, Q2, Q4 besvarade i Eriks svar 13 maj.
### Dokument levererade:
- NORDEA-KYC-SVAR-V2.md — ren v2, inga tomma fält
- TRANSAKTIONSREGISTER-BAS.md — 110 poster, BAS-mappade, T&E-tabell
- WINSTON-EMPLOYMENT-CONTRACT.md — Scholarship Intern, 20 000 kr/mån, båda målsmän (Dennis + Eva Henriksen)
- KYC live: https://amos.aamos.systems/landvex-kyc-final.html
### KYC-slutstatus (granskat av annan Claude-instans: 9.2/10 → förbättringar gjorda):
- Winston = Scholarship Intern, Bilaga A, noll ekonomisk behörighet
- Erik = ensam ansvarig
- Kontantflödeskedja komplett: Nordea → Sommarliden/Revolut → ATM Bangkok
- Kontantkvitton Bangkok (70 993 kr) pending — Winston lämnar in
- "Cash withdrawn from LandveX AB corporate funds" — mening tillagd
- Expected Transaction Profile 2026 tillagd
- VYRA-projekt beskrivet (live FPS + haptik, Mr. Sun Shenzhen, Sinbad Motor)
## SOMMARLIDEN / LANDVEX — BOLAGSSTRUKTUR (kritisk notering)
Repot wolfoftyreso-debug/sommarliden-avtal visar:
- **Sommarliden Holding AB och LandveX AB delar org.nr 559141-7042** — samma juridiska person eller namnbyte. Måste klargöras för KYC och bokslut.
- Revolut-konto i Sommarliden Holding AB.
- Winston-kontakt i repot: winston@hypbit.com (ej winston@aamos.systems).
## TRYGG BIL STOCKHOLM AB — AVTAL (från GitHub)
- Hyresavtal + konsultavtal, signerat 2026-02-22
- Hyra: 53 333 kr netto (66 666,25 kr inkl moms) / mån
- Konsult: 125 000 kr netto (156 250 kr inkl moms) / mån
- Total: 222 916,25 kr / mån (förklarar Nordeas Q1 exakt)
- Kontaktperson Trygg Bil: Mert Sarioglu
- Period: mars 2026 februari 2027 (24 fakturor)
- Totalt avtalsvärde: 2 674 995 kr
## BOKSLUT FY 2025/2026 (1 maj 2025 30 april 2026) — STATUS
Deadline: 31 oktober 2026.
Känd omsättning: Elles 941 434 kr + Trygg Bil mars+april 445 832 kr = ~1 387 267 kr.
Känd omsättning löpande (Trygg Bil maj 2026): 222 916,25 kr/mån.
Kostnader dokumenterade: ~434 565 kr.
**SAKNAS för komplett bokslut:**
- Komplett kontoutdrag maj 2025april 2026 (hela FY)
- Alla fakturor (Elles)
- Lönespecifikationer alla månader
- Momsdeklarationer
- Skattekontoutdrag
- Alla transaktioner i aamos-ledger
- Revisor/redovisningskonsult
## WINSTONS LÖNEFÖRSKOTT
Winston fick 30 000 kr i juni (synligt i Nordea personkonto).
Kontrakt: 20 000 kr/mån. Differens 10 000 kr = löneförskott.
MEMORY-notering: löneförskott, ej löneändring.
## TEAMROLLER (LÅST, bekräftat upprepade gånger denna session)
- **Erik Svensson** — VD, grundare, ensam ekonomiskt ansvarig, firmatecknare
- **Johan Berglund** — CTO, tekniskt ansvarig, styrelsesuppleant
- **Winston Bjarnemark** — Scholarship Intern, 17 år (f. 090509), 20 000 kr/mån
- Målsmän: Dennis Bjarnemark + Eva Henriksen (båda godkänt)
- Tyresö Gymnasium informerade via Eriks personliga brev
- **Dennis Bjarnemark** — ENDAST Winstons målsman. Ingen operativ roll i bolaget.
## VYRA-PROJEKT (nytt, identifierat denna session)
Live-FPS plattform med spatial närvaro och haptisk återkoppling.
Ekosystem: Core (FPS/backend/matchmaking) + Haptics (aktuatorer/prototyper) + Hardware (PCB/batteri) + Manufacturing (Shenzhen/Dongguan).
Sinbad Motor = relevant komponentleverantör för haptikprototyper (coreless motors, micro actuators).
Mr. Sun = kontakt i Shenzhen, mötte Erik + Johan på Mandarin Oriental 5-6 juni 2026.
Projektmapp bör skapas under LandveX AB / VYRA/.
## AMOS WORKCAMP RECONSTRUCTION PACKAGE
7-volymers rapport under uppbyggnad:
- Klar: VOL1-3 (governance, dev log, infra)
- Pågår: VOL4-7
- Fil: /home/bernt/.openclaw/workspace/workcamp/
- Team (KORREKT): Erik + Johan + Winston (Dennis hoppade av INNAN start, finns ej i rapport)
## HEPHAISTOS-OMDÖPNING (pågår)
"Hermes" → HEPHAISTOS i hela systemet. Kollisionsrisk med Nous Hermes-modeller och Hermes message bus.