Master Prompts tenant- och rollmodell implementerad i den självhostade
plattformen:
- Registrering skapar organisation + systemadministratör (transaktion);
admin skapar övriga användare (tekniker/arbetsledare/admin) i sin
organisation via nytt UI och POST /api/anvandare. Roll + organisation
ligger i JWT-anspråken och verifieras alltid på servern.
- All ärendedata organisationsknuten: ärenden skapas i användarens
organisation, händelse-API:t verifierar tillhörighet per anrop och
GET /api/arenden listar bara egna organisationens ärenden.
- Schemat flyttat till infra/k8s/postgres-init.sql och genereras in som
ConfigMap via kustomize — samma fil används av integrationstestet.
Nya tabeller: organisationer; anvandare med organisation_id + roll
(check-constraint); arenden med organisation_id + index.
- Integrationstest (services/plattform/integrationstest.sh) mot riktig
Postgres, kört grönt lokalt och tillagt i CI: registrering, synk,
idempotens (händelser skrivs aldrig över), append-only-triggern,
organisationsisolering (404 över gränsen), publik delning med
filtrering, rollstyrning (tekniker nekas användarhantering) och
delad arbetsyta inom organisationen.
- Klienten: registreringsformulär med organisationsfält, kontopanel
med roll och organisation, admin-panel för användarhantering.
Verifierat: integrationstestets 12 kontroller gröna mot Postgres 16,
28 vitest-tester gröna, produktionsbygge ok, YAML validerad,
Playwright-röktest grönt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Sista externa beroendet borta — hela stacken kör i eget kluster:
- Ny plattformstjänst (services/plattform): egen inloggning
(registrering + inloggning, lösenord bcrypt-hashade med pgcrypto,
HS256-JWT), append-only händelse-API för synken (endast insert,
on conflict do nothing) och publik delningsendpoint för Live Share
med samma filtrering som Supabase-funktionen. Fail closed utan
hemligheter; inga update/delete-operationer exponeras.
- Postgres som StatefulSet med PVC och init-schema; append-only
garanterat i databasen med triggers på både händelser och ärenden —
historik kan inte ändras oavsett ansluten roll. CloudNativePG
rekommenderas för produktion i docs.
- JWT-hemligheten delas mellan plattform och AI-orkester (orkestern
läser JWT_SECRET med SUPABASE_JWT_SECRET som fallback) — flödet
livetestat: plattformens token accepteras av orkestern, fel
hemlighet och utgångna tokens avvisas.
- Klienten får självhostat läge via VITE_PLATTFORM_URL: inloggnings-
panel på startsidan, synk mot plattformens API (samma konfliktfria
flätning), Live Share via /api/delad och AI via klustrets orkester.
Utan variabeln är Supabase-läget oförändrat.
- Ingress routar /api/ai → orkestern, /api + /halsa → plattformen,
/ → webben; kustomize inkluderar hela stacken; CI bygger alla tre
bilderna; DRIFT.md omskriven för självhostad drift.
Verifierat: 28 vitest-tester gröna (inkl. append-only-triggers och
API-ytan), plattformstjänsten livetestad (hälsa, 401, fail closed),
JWT-paritet mellan tjänsterna testad, alla manifest YAML-validerade,
produktionsbygge ok, Playwright-röktest grönt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Målarkitekturen ur Master Prompt som kod:
- Webben containeriserad (flerstegs-Dockerfile → oprivilegierad nginx
med SPA-fallback, hashade assets cachas hårt, säkerhetsheaders).
- AI-orkestern som egen tjänst (services/ai-orkester): samma routing
och AI-regler som edge-funktionen men körbar som pod — egen
HS256-JWT-verifiering (fail closed), /halsa, storleksgränser,
read-only container som kör som node-användaren. Livetestad:
hälsokontroll ok, 401 utan/med ogiltig token, 400-validering bakom
giltig JWT.
- Kubernetes-manifest (infra/k8s, kustomize): namespace, Deployments
med readiness/liveness och åtstramad securityContext, Services,
HPA 2–10 pods på 70 % CPU, PodDisruptionBudgets, Ingress med TLS
via cert-manager, secret-mall (riktiga värden skapas utanför git).
- Klienten väljer AI-väg vid bygget: VITE_AI_ORKESTER_URL → tjänsten
i klustret, annars Supabase-edge-funktionen. Samma orkester i båda,
låst av paritetstest.
- CI-arbetsflöde: tester + produktionsbygge + verifierande
containerbyggen av båda bilderna på varje push/PR.
- docs/DRIFT.md: arkitekturdiagram, driftsättningssteg, skalning,
och vad som återstår mot full självhostning.
Verifierat: 27 vitest-tester gröna, produktionsbygge ok, alla
K8s-manifest YAML-validerade, orkestertjänsten livetestad,
Playwright-röktest grönt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Plattformens AI-endpoint är nu en modellorkester — servern äger hela
routingtabellen (modell, effort, systemprompt, schema per uppgift), så
den justeras utan klientändringar:
- handledning → Claude Sonnet 5 (medium): realtidssvar på varje
bekräftad dokumentation — latenskänsligt på golvet.
- granskning → Claude Opus 5 (hög effort): motsägelser, luckor och
förhastade slutsatser i hela arbetsloggen; ny knapp
'AI-granska underlaget' i briefen.
- sammanfattning → Claude Sonnet 5 (låg effort): AI-komplettering av
överlämningen med risker & osäkerheter; ny knapp i
överlämningsdialogen.
- metodikval → Claude Haiku 4.5: klassificerar felbeskrivningen
när nyckelordsvalet inte träffar en specifik metodik;
valet sparas på ärendet (nytt fält metodikId).
Alla uppgifter delar AI-reglerna och det klassificerade svarsschemat;
modellen som svarade loggas i varje ai_svar-händelse och visas i UI:t.
Felbeskrivningsfältet fick även röstinmatning.
Verifierat: 26 vitest-tester gröna (inkl. att endpointen routar till
tre distinkta modeller och att granskningsprompten innehåller hela
loggen), produktionsbygge ok, båda Playwright-sviterna gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
- Ny edge-funktion supabase/functions/felsokning-ai: äger Claude
API-nyckeln (serverhemligheten ANTHROPIC_API_KEY), systemprompten,
modellvalet (claude-opus-5) och svarsschemat. Kräver inloggad
användare (verify_jwt = true), validerar promptlängd och hanterar
refusal/fallback på serversidan.
- Klienten anropar plattformens endpoint via functions.invoke —
@anthropic-ai/sdk borttagen ur klientberoendena, ingen nyckel
hanteras eller lagras någonsin i webbläsaren.
- Nyckelpanelen på startsidan ersatt med statuspanel: AI-handledning
ingår i tjänsten; i lokalt läge (ej inloggad) guidar den
deterministiska metodiken ensam, utan felbrus.
- Master Prompt: onboarding utan API-nyckelsteg; nytt stycke om att
AI:n drivs av plattformen och att AI-reglerna inte kan kringgås
från klientsidan.
- Test låser att endpointen äger systemprompt, modell och schema.
Verifierat: 25 vitest-tester gröna, produktionsbygge ok, båda
Playwright-sviterna gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
- AI-motor (ai.ts): Claude Opus 5 via officiella TypeScript-SDK:n.
Teknikerns bekräftade dokumentation skickas med ärendebriefen som
kontext; svaret är schema-bundet (structured outputs) och strikt
klassificerat enligt AI-reglerna: observation, verifierat, hypotes
(kräver alltid verifiering) och rekommendation, plus ETT konkret
nästa steg. Fryst systemprompt med promptcache; automatisk
server-side fallback till Anthropics rekommenderade reservmodell
när säkerhetsklassificerarna avböjer; refusal hanteras innan
innehållet läses.
- Onboarding enligt direktivet: organisationens Claude API-nyckel
läggs in på startsidan (maskerat fält). Utan nyckel guidar den
deterministiska metodiken ensam. MVP-varning: nyckeln lagras på
enheten och anropet görs från webbläsaren — i produktion via
backend.
- AI-svaren loggas som händelser med modellnamn och visas i guiden;
de är arbetsmaterial och filtreras ur kundrapport, Live Share och
databasens delningsfunktion, precis som hypoteser.
- Master Prompt uppdaterad: AI-wrapper ovanpå Claude API, standard-
modell claude-opus-5.
Verifierat: 25 vitest-tester gröna (inkl. promptbygge, svarstolkning
och systemprompt-regler), produktionsbygge ok, Playwright-röktest
genom hela flödet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
- Demoärende med ett klick: komplett vibrationsärende (Volvo XC60)
med 1 tim 35 min historik — besvarade symptomfrågor, fyra hjulfoton,
mätvärden, provkörning, inaktivitetsförklaring, överlämning mellan
två tekniker och en hypotes. Testat: tidsordning, arbetstid, kvar-
varande kontroller så guiden kan fortsätta live i demon.
- Dashboard enligt direktivet: räknare och filter Alla/Pågående/Klara.
- Publik delningssida /felsokning/delad/:kod som läser via
hamta_delat_arende utan inloggning och pollar för liveuppdatering;
delad vykomponent med interna förhandsvisningen; Kopiera
delningslänk i rapportfliken.
- Utskriftsvänlig kundrapport: svart på vitt vid utskrift, knappar
och fält döljs automatiskt.
- Demomanus i docs/DEMO.md med steg-för-steg-flöde och tabell över
demoläge kontra produktion.
Verifierat: 21 vitest-tester gröna, produktionsbygge ok, Playwright-
röktest inkl. demoflödet i färsk profil.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
- Supabase-migration: felsokning_arenden + felsokning_handelser med
RLS för inloggade och append-only garanterat i databasen (inga
update/delete-rättigheter). Live Share förberedd via security
definer-funktionen hamta_delat_arende(delningskod) så att anonyma
läsare aldrig når tabellerna direkt; kategoribyten filtreras bort.
Realtime-publicering aktiverad för händelsetabellen.
- Synklager i klienten (synk.ts): deterministisk, konfliktfri
ihopflätning av händelser per id (testad: dedupe, tidsordning,
idempotens), push av lokala och pull av kollegors händelser var
15:e sekund. Utan inloggning: lokalt läge, status i ärendehuvudet.
- Live Share-vy (/felsokning/dela/:id): skrivskyddad livevy med
status ✔/🔄/⏳, bilder, mätvärdestabell, tidslinje och rekommenderat
nästa steg. Varje ärende får slumpad delningskod vid skapande.
- Ny metodik: Elsystem/strömförsörjning enligt relä-exemplet i
visionen, med mätvärdeskrav på alla mätpunkter.
Verifierat: 17 vitest-tester gröna, produktionsbygge ok, Playwright-
röktest inkl. Live Share-vyn.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Dokumentation:
- MASTER-PROMPT.md uppdaterad till v2.0 (SaaS/AI-wrapper, roller,
multi-tenant, onboarding, beta-fokus).
- Nya moduler: kommunikationsmodell (tal in/text ut, Push-to-Talk,
redigering före skick), Live Share (behörighetsstyrd realtidslänk,
versionsmärkta exporter), verifierade checklistor (bevis och kontext
per kontrolltyp).
Implementation i MVP:t:
- Push-to-Talk-röstinmatning via webbläsarens taligenkänning (sv-SE):
lyssnar endast efter aktivt tryck, röd indikator med realtids-
transkript, texten hamnar i redigerbart fält och skickas aldrig
automatiskt. Döljs i webbläsare utan talstöd.
- Verifierade checklistor: varje kontroll i metodikerna har minimikrav
(foto/mätvärde/kommentar); fotokontroller verifieras med bild och
mätkontroller kan inte markeras verifierade utan värde.
- Versionsmärkt JSON-export ur händelseloggen; exporten loggas själv
som händelse med format, version och användare.
Verifierat: 12 vitest-tester gröna, produktionsbygge ok, utökat
Playwright-röktest genom hela flödet inkl. fotokravet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Körbar kärna enligt Master Prompt v1.0:
- Append-only händelselogg som enda sanningskälla (domain.ts);
brief, tidsfördelning, överlämningstext och kundrapport är rena
projektioner av loggen (projektioner.ts) med tester som låser att
briefen alltid kan regenereras.
- Deterministisk metodikmotor (metodik.ts): en fråga i taget,
vibrationsmetodik + generisk metodik vald utifrån felbeskrivningen.
Framtida AI-integration ansluter i nastaSteg utan modelländringar.
- Flöde: identifiera objekt → bekräfta → felbeskrivning → guidad
felsökning med foto, mätvärden, observationer och hypoteser
(hypoteser märks alltid som ej verifierade).
- Tidredovisning med kategorier, inaktivitetsfråga efter 20 min,
överlämning med ett klick, kundrapport med tidslinje och utskrift.
- Fabriksverktygs-UI: hög kontrast, stora knappar, få val per skärm.
- Lagring i localStorage i MVP:t; docs/MVP.md beskriver omfattning
och medvetna avgränsningar.
Verifierat: 11 vitest-tester gröna, produktionsbygge ok, Playwright-
röktest genom hela flödet utan sidfel.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Levande ärendesammanfattning som uppdateras löpande: strukturerad
brief med utförda kontroller, observationer, ej kontrollerat och
tillförlitlighet; fleranvändararbetsyta per ärende; överlämning med
ett klick vid skiftbyte och eskalering; multi-tenant-arkitektur med
underhållen AI-kontext i stället för omläsning av hela historiken.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
- Exempelflöde 'Bilen vibrerar runt 88 km/h' som visar den
reproducerbara metoden steg för steg (verifiera symptom, visuell
kontroll, rekommenderade kontroller, provkörning, sammanfattning).
- Modul: Delningsbar kundrapport (Kundvy) med tidslinje som
debiteringsunderlag, härledd ur samma händelselogg som arbetsloggen.
- Ledstjärna i VISION.md: systemet presenterar aldrig en hypotes som
ett konstaterat fel.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Specificerar tidsatt arbetslogg med automatisk tidslinje, kategoriserad
arbetstid, kontextfrågor vid inaktivitet, AI som dokumentationsstöd och
automatisk slutrapport. Länkas från visionsdokumentet via ny
Moduler-sektion.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Dokumenterar visionen: en digital felsökningshandledare som guidar
tekniker steg för steg, med tillförlitlighetsnivåer, objektidentifiering,
tillverkarintegrationer, revisionslogg, export/API, avskalat UI och
säkerhetskrav.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt