Adjusts the paywall strategy from withholding toward insight-first:
- Free-tier instructions rewritten around the monetization philosophy:
the goal is not to interrupt the conversation but to build trust. The
free experience should leave the user feeling understood, respected
and curious to continue, and should help the user reach a meaningful
insight of their own. The rule is included verbatim: 'Never
manufacture suspense. Create genuine curiosity by helping the user
reach a meaningful insight, then offer a deeper level of analysis in
Premium.'
- Premium transition sharpened: analysis_ready may only fire when the
conversation has reached a meaningful point and the natural next step
is a complete analysis, structured framework, personalised strategy,
practical exercises or a step-by-step action plan — pausing
immediately before that delivery, never mid-sentence or mid-
explanation. Transition example updated to the new wording. Product
feeling encoded: always 'I genuinely want to continue this
conversation', never 'they stopped me just to make me pay'.
- Pricing: paywall now shows plan prices — localized prices fetched
from the store via react-native-iap, falling back to $5.99/month and
$49.99/year (~30% below monthly) until store config exists — plus
the Premium includes list (unlimited conversations, unlimited
analyses, personalised guidance, future feature updates).
- README: monetization philosophy, product feeling and pricing sections
updated to match.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
Reconciles the implementation against the final MVP brief:
- Data model: rename users.provider to auth_provider and
users.subscription_status to subscription, matching the brief's schema
exactly (id, email, auth_provider, subscription, created_at). External
API field names are unchanged.
- Suggestions: replace the starter list with the brief's eight examples.
- Instructions: personality updated to calm, warm, intelligent, curious,
respectful, pedagogical — never judging, manipulative, dramatic,
overly positive, overconfident or preaching. Added per-reply goals:
feel personal, be calm, instill safety, give hope without promising
results, deepen thinking, and always contain at least one genuinely
new thought or question. Added the conversation outcome goal (greater
clarity, greater calm, a new perspective, increased trust in one's own
ability) and 'not a chatbot for general questions' to positioning.
- Paywall transition example updated to the brief's wording ('I'm
starting to see some recurring patterns… Unlock Premium to continue.').
- Knowledge base completed per the brief: communication models
(perceptual positions, observation vs interpretation, chunking,
backtracking, boundaries), reflection exercises (meaning audit,
meta-question, five frames, observer replay, well-formed outcome,
evening question) and a question library organized by purpose.
Appreciation in the Lift step must be anchored in what the user
actually expressed; the Challenge step never preaches.
- README: product principle (one user, one conversation, one analysis,
one recommendation), the removal rule, design words per the brief,
Definition of Done (7 steps), V2 not-now list (journal, saved
insights, community, coaches, courses, voice), and a closed-beta plan
for 20-50 testers with what the minimal data model can already
measure.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
Refines the product philosophy in the system instructions, the knowledge
base and the README:
- Meet users where they are: never assume the user is struggling — some
seek change or guidance, others are simply curious and want to grow.
- Human Experience Doctrine: every user should feel seen, respected,
understood, capable and hopeful. The system must never create
dependency or imply it alone has the answers.
- Conversation philosophy: every conversation follows a four-step arc —
acknowledge (reflect meaning, not words), explore (discover
perspectives together, no interrogating or over-analyzing), lift
(concrete, credible praise of resources and strengths — no generic
compliments), challenge (leave at least one new perspective).
- Personality: experienced coach, calm mentor, skilled teacher, wise
conversation partner — never therapist, salesperson, preacher or guru.
A thoughtful mentor rather than a stage performance.
- Educational philosophy: teach the user how to reflect so they
gradually need the tool less.
- Roadmap in README: V1 is person-to-Semantika only; reflection groups
(V2) and coaches/live sessions/courses (V3) come after the core
product is strong. Community is deliberately absent from V1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
Applies the brand platform consistently across the codebase:
- Name: Semantika everywhere — app name/slug/scheme, bundle ids
(com.semantika.app), workspace package names, CDK stack, Cognito
domain prefix, secret name (semantika/app), database name, product
ids (semantika_monthly/_yearly), and storage keys.
- System instructions: Semantika is positioned as an intelligent
reflection partner — not therapy, not self-help, not a course. It
starts by exploring how the user interprets their situation and
supports reflection and perspective-taking rather than delivering
finished answers. Tone rules added: never judging, dramatic,
overenthusiastic or preaching; always calm, curious, clear,
respectful, structured, thoughtful.
- Honest claims: instructions and knowledge base now explicitly frame
neurosemantics and NLP as models and inspiration for reflection, not
scientifically established methods — including a note that several
NLP claims lack support in controlled studies. Claiming or implying
proven effects is forbidden.
- README: brand section (position, promise, mission, vision,
positioning, tone, design words) and updated product philosophy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
Replaces the hardcoded message limit with a model-driven paywall and
removes registration before the first question:
- Onboarding: the app opens directly into the chat. Dynamic conversation
starters are served by GET /suggestions (services/api/suggestions.json),
updatable with a deploy — no app release needed. Guests chat via
POST /guest/chat, identified by an app-generated device id; sign-in
moves to the paywall, where a purchase must attach to an account.
- Free experience: the model runs in discovery mode — follow-up
questions, pattern identification, visible understanding — building an
analysis without delivering the full solution.
- Intelligent paywall: the model returns structured output (reply +
analysis_ready). Only when the problem is described, the information is
sufficient and an action plan is ready does it write a calm transition
and pause the conversation. Manufactured urgency, emotional pressure,
fake readiness and mid-answer stops are explicitly forbidden.
- Premium: on unlock the app resends the transcript and the backend
immediately delivers the full analysis, strategies and exercises, then
the dialogue continues without restriction.
- The old FREE_MESSAGE_LIMIT becomes MESSAGE_CAP (default 200/30 days),
kept purely as an abuse backstop — it is not the paywall.
- WelcomeScreen removed; the app is now two views (Chat, Paywall).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
Ersätter den tidigare webappen på denna branch med ett fokuserat monorepo:
- apps/mobile: Expo/React Native med tre vyer (Welcome, Chat, Paywall),
Cognito hosted UI-inloggning (Apple/Google/e-post) och In-App
Purchase/Play Billing via en gemensam purchases-modul.
- services/api: en enda Lambda-backend — OpenAI Responses API med
Markdown-kunskapsbas som systeminstruktioner, free tier-gräns i
PostgreSQL (HTTP 402 -> paywall) och kvittoverifiering bakom ett
delat PaymentProvider-interface (Apple/Google, Stripe kan läggas
till för webb senare).
- infra: AWS CDK-stack med API Gateway (JWT-authorizer), Lambda,
Cognito, Aurora Serverless v2 och Secrets Manager.
- db/migrations: minimal datamodell (users + usage), inga
konversationer sparas.
- GitHub Actions: CI (lint, typecheck, test) och deploy från main.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
Infrastrukturen får en definition som går att läsa: infra/terraform, där
karta.tf beskriver hela systemet en gång som data — tjänster, portar,
routing, vilken tjänst som ser vilken hemlighet, dataflöden och gränser.
Resten av filerna läser därifrån i stället för att upprepa namn och
portar, och `terraform output karta` skriver ut samma innehåll i klartext
direkt ur definitionen. Filerna är numrerade i läsordning.
Genomgången hittade sex saker som är åtgärdade här:
Uppslaget mot märkesspecifika kopplingar kunde riktas inåt. Bas-URL:en
sätts av kundens administratör men anropet görs av vår server —
169.254.169.254 eller ett internt tjänstenamn hade nått molnets
metadatatjänst respektive klustrets insida, och svaret kommit tillbaka
mappat genom svarsfälten. En tenant-administratör är inte
infrastrukturens ägare. Nu stoppas IP-literaler, namn som resolvar till
privata adresser och .local/.internal innan något anrop görs, och
nätverkspolicyn undantar samma nät. TILLAT_INTERNA_UPPSLAG öppnar för
verkstäder som har OEM-servern på eget nät.
Delningsfiltret var en nekalista, alltså blev varje ny händelsetyp
automatiskt synlig i kundens delningslänk tills någon kom ihåg att neka
den — fel håll att fela åt på en integritetsgräns. Nu räknas i stället
upp vad som får delas per nivå, och ett test kräver att varje
händelsetyp i domänmodellen är klassificerad. Samma ändring i
Supabase-funktionen via ny migration. Beteendet i dag är oförändrat;
det är riktningen som vänts.
Ingressen saknade kroppsgräns och hade därmed nginx standard på 1 MB
medan tjänsten tar 4 MB — foto- och videodokumentation hade avvisats i
produktion men aldrig i testerna. Satt till 8 MB i båda vägarna.
Vidare: nätverkspolicyer som stänger namnrymden och bara öppnar de
faktiska flödena, CORS-lista via TILLATNA_URSPRUNG i stället för "*",
och säkerhetskontext + startprob på databaspodden.
Kustomize-/Argo CD-vägen finns kvar men ska inte köras mot samma kluster
som Terraform — selfHeal och prune motarbetar terraform apply. Val och
bytesväg dokumenterade.
Verifierat: 87 vitest-tester, typkontroll, eslint, OpenAPI-validering,
terraform fmt och integrationstest mot riktig Postgres inklusive den nya
spärren. terraform validate kunde inte köras här — registry.terraform.io
är blockerad av sessionens egress-policy.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Historik-routing kräver att sidan serveras från roten. Ligger den under
en sökväg — som en publicerad enfilsförhandsvisning gör — matchar ingen
route och besökaren får 404-sidan i stället för appen.
Förhandsvisningsläget (VITE_HASH_ROUTER) går därför via hash, och dess
startsida är Guidad Felsökning i stället för värdapplikationens
startsida. Verifierat genom att ladda bygget från en djupt nästlad
sökväg: startskärmen, navigering vidare och djuplänk till inställningar.
Byggkommandot är nu dokumenterat i MVP.md tillsammans med npm run
typkontroll, så förhandsvisningen inte byggs fel igen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Verkstaden har redan sina avtal: Volvo-verkstaden har VIDA, VAG-verkstaden
har erWin, den fria verkstaden har en fordonsdataleverantör. Kopplingarna
konfigureras därför av kunden själv under Inställningar, med sina egna
uppgifter — vi tillhandahåller ramen, inte kontot.
Uppgifterna når aldrig webbläsaren. De krypteras med AES-256-GCM
(INTEGRATION_NYCKEL) innan de skrivs till tabellen integrationer, och
API:t returnerar hemliga fält maskerade. Alla uppslag görs av servern.
Saknas krypteringsnyckeln sparas ingenting alls — 503 och en förklaring i
gränssnittet i stället för klartext i databasen. Endast
systemadministratören hanterar uppgifterna; kopplingarna är
organisationsknutna som all annan ärendedata.
Leverantörer är data, inte kod: URL-mall, autentiseringstyp
(bearer/header/basic/query) och svarsmappning beskrivs i
services/plattform/integrationer.json, utbytbar via ConfigMap
(INTEGRATIONER_FIL). Nya märken läggs till utan att appen byggs om.
Varje uppslag skriver senast_testad och senaste_status på kopplingen, så
ett utgånget abonnemang syns i inställningarna i stället för att ge tysta
tomma svar.
Två latenta krascher hittade av klicktestet och åtgärdade: TextFalt och
UNDANTAGSORSAKER användes utan import. vite build typkontrollerar inte,
så de passerade bygget — därav nya npm-skriptet typkontroll, nu del av
verifieringen.
Verifierat: 80 vitest-tester, typkontroll, eslint, OpenAPI-validering,
integrationstest mot riktig Postgres (rollstyrning, kryptering i vila,
maskering, organisationsisolering, fail closed, borttagning) och
klickgenomgång mot en körande plattform.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Kunden kan nu godkänna eller avböja åtgärdsförslaget direkt i sin
Live Share-länk — API:ts enda skrivande publika väg, med sex spärrar
som var och en verifieras i integrationstestet:
1. endast delningar på kundnivå (partner-/internlänkar får aldrig svara
åt kunden) och aldrig återkallade
2. ärendets ursprungliga delningskod saknar registrerad nivå och kan
inte heller svara
3. det måste finnas ett åtgärdsförslag att svara på
4. ett besked per ärende — svaret kan inte ändras i efterhand
5. endast godkant/avbojt/delvis plus kommentar på högst 500 tecken;
inget annat kan skrivas till loggen den vägen
6. takt-begränsning per delningskod (429)
Beskedet loggas som kundbeslut med kanal "Delningslänk" och avsändaren
"Kund via delningslänk"; verkstadens egna registreringar (telefon, på
plats …) fungerar precis som förut, och kvalitetsgrindens krav gäller
oförändrat. Beslutspanelen visas bara på den publika kundlänken —
interna och partnervyer förblir helt skrivskyddade.
73 vitest-tester, integrationstest (åtta nya kontroller för spärrarna)
och OpenAPI-validering gröna. Därmed är även den sista dokumenterade
avgränsningen utöver externa fordonsdatabaser avklarad.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Sista posten i "objektidentifiering först" — och den sista avgränsningen
från MVP:ns första version.
- Kameraströmmen läser QR, Code 39/128, Data Matrix och PDF417 via
webbläsarens BarcodeDetector; träffen fyller identifieraren och sätter
rätt identifieringsmetod automatiskt
- Avläst kod klassificeras alltid innan den används: VIN (17 tecken utan
I/O/Q), svenskt regnr (båda serierna) eller serienummer. Identifieraren
plockas ut även ur QR-innehåll som URL:er och vin=/regnr=-fält, medan
fritext och nakna URL:er avvisas
- Saknar webbläsaren API:t (iOS/Safari) fotograferas typskylten i stället
och plattformens bildtolkning läser av den — kameran är gränssnittet
oavsett enhet
- Kameraströmmen stoppas alltid: vid träff, avbryt och avmontering.
play() väntas medvetet inte in — på enheter där löftet resolvar först
vid första bildrutan skulle avläsningen annars aldrig starta (fångat
av klicktestet)
73 vitest-tester (nya: klassificeringen i alla varianter) och ett
klicktest som kör båda vägarna — med och utan streckkods-API.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Verkstaden kan inte längre utföra föreslaget arbete utan spårbart besked
från kunden.
- Ny händelse atgardsforslag: föreslagen åtgärd (förifylld ur
felorsaksanalysen) med uppskattad kostnad — kunddelbar och visad i
Live Share, där kunden ser förslaget och sitt registrerade besked
- Ny händelse kundbeslut: godkänt/avböjt/delvis med obligatorisk kanal
(telefon, på plats, e-post, SMS, delningslänk) och motivering vid
avböjt/delvis; loggposten bär vem i verkstaden som tog emot beskedet
- "Dokumentera utförd åtgärd" är låst medan ett förslag saknar besked
och förblir låst vid avböjt — vägen "Ingen åtgärd utförd" är öppen
och hänvisar till beskedet
- Kvalitetsgrinden: besked obligatoriskt när arbete utförts, plus hård
flagga "Utfört arbete trots avböjt åtgärdsförslag"
- Rapporten får avsnittet "Åtgärdsförslag och kundens besked";
demoärendet visar hela kedjan förslag → godkännande → åtgärd
Avgränsning: kunden lämnar sitt besked via kontakt med verkstaden som
registrerar det. Publikt godkännande direkt i delningslänken kräver en
skrivande publik endpoint och hanteras separat.
69 vitest-tester, integrationstest, OpenAPI-validering och klicktest
(blockerat arbete utan/vid avböjt besked) gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Ärendet slutade tidigare vid rekommenderad åtgärd. Nu dokumenteras hela
kedjan: symptomverifiering → felorsak → åtgärd → kvalitetskontroll.
- Ny händelse atgard_utford: vad som gjordes (med delar) — eller varför
ingen åtgärd utfördes, med orsak ur regelpaketet (kunden avböjde,
väntar på reservdel, endast utredning beställd …)
- Ny händelse kvalitetskontroll: symptomet borta / kvarstår / delvis /
kunde inte verifieras, med beskrivning av hur verifieringen gjordes —
under samma förhållanden som symptomet en gång reproducerades
- Kvalitetsgrinden: "Åtgärd dokumenterad eller motiverad" obligatorisk
vid avslut, "Kvalitetskontroll genomförd" obligatorisk när en åtgärd
faktiskt utförts. Kvarstående symptom flaggas — ärendet bör inte
avslutas som åtgärdat
- Avslutsknappen spärrad tills kedjan är komplett; rapporten har eget
avsnitt "Utförd åtgärd och verifiering" i beviskedjan
- Demoärendet bär hela kedjan (ombalansering → verifierad provkörning)
65 vitest-tester, integrationstest och OpenAPI-validering gröna;
klicktestet bekräftar att avslut öppnas först när kedjan är hel.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Video med ljud är nu en riktig evidenstyp — den sista luckan i
evidensskalan E0–E6:
- Ny händelse video (beskrivning + dataUrl): Video-knappen i
Dokumentera-panelen spelar in/väljer ett kort klipp via kameran,
beskrivningen är obligatorisk ("det som låter eller rör sig") och
hård storleksgräns avvisar för långa klipp med tydligt besked
- Evidence Engine: video katalogiseras som E3 och räknas som oberoende
källa mot E6; underlagskällan "Video" i felorsaksanalysen valideras
nu mot loggen precis som foto/mätresultat
- Originalfilen bevaras och visas i arbetsloggen, kundrapporten och
Live Share-vyn
Signerat avslut (ur Completion-checklistan): "Avsluta felsökning"
loggar teknikerns signatur — "Felsökning avslutad — signerad av …" —
och kvalitetsgrinden redovisar signaturen.
61 vitest-tester, integrationstest, OpenAPI-validering och
preview-klicktest (beskrivningskrav, storleksgräns, videospelare i
loggen, signerat avslut) gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Fordonshistoriken är nu verklig i stället för självrapporterad:
- GET /api/fordon/{identifierare}/historik: organisationens tidigare
ärenden på samma objekt (regnr/VIN, case-okänsligt) med dokumenterade
felorsaker — organisationsgränsen gäller alltid
- Pre-diagnostikens historiksteg visar tidigare ärenden automatiskt
(servern i inloggat läge, lokala storen offline) och orsakskedjan
kopplas med ett tryck: "kopplat till tidigare ärende #N — …"
- GET /api/statistik/felorsaker (arbetsledare/admin): flottdata —
orsakskategorierna ur alla felorsaksanalyser aggregerade per
organisation, visade som stapelöversikt i arbetsledarvyn
Egen ikongrafik i stället för emojis (src/felsokning/ikoner.tsx):
enkla industriella linjeikoner i SVG (kamera, förstoringsglas, länk,
diagram, kugghjul, bock, kryss, varning, mikrofon, uppdatera, klocka)
och färgpunkter för tillförlitlighets- och statusnivåer. Etiketterna
är ren text ("Hög/Medel/Låg", "Hypotes (ej verifierad)") — maskinellt
verifierat emojifritt i klicktestet.
58 vitest-tester, integrationstest (historik, isolering, statistikens
behörighet) och OpenAPI-validering gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Arbetsordergranskningens fältgrupp heter nu Personbil (tidigare Fordon),
liksom raden i rapportens fordonsinformation.
ECM Knowledge Library: regelbiblioteket är nu serverdistribuerat —
regler uppdateras i driften utan appändring, precis som rekommenderat:
- Compliance-reglerna är deklarativ data (krav-typ i stället för kod):
services/plattform/ecm-regler.json serveras på GET /api/ecm/regler,
i klustret utbytbar via ConfigMap (ECM_REGLER_FIL)
- Klienten hämtar paketet vid sidladdning, cachar det och faller
tillbaka till inbyggt standardpaket offline; trasiga paket och okända
krav-typer filtreras (normaliseraRegelpaket)
- Kvalitetsgrinden, orsakskategorierna, evidenskällorna och
undantagsorsakerna läses ur det aktiva paketet; spårbarhetspaketet
bär regelpaketets version
- Testat: paritet server/standardpaket, fallback, att ett uppdaterat
paket ändrar grinden utan appändring; integrationstestet verifierar
serveringen (57 vitest-tester gröna)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Skillnaden mellan VAD som är fel och VARFÖR felet uppstått är nu kodad:
ett ärende kan aldrig avslutas med enbart "komponent defekt, byt
komponent", och en kundbeskrivning blir aldrig ett konstaterat fel utan
verifiering.
Symptom Verification Protocol:
- Ny händelse reproducering (ja/delvis/nej): ja kräver hur/förhållanden,
delvis vad som kunde respektive inte kunde återskapas, nej kräver
motivering
- Generiska metodiken utökad med SVP-frågorna var/hur
- Rapportens beviskedja skiljer kundens beskrivning, verifierad
observation, felorsaksanalys och rekommenderad åtgärd; "kunde inte
reproduceras under de förhållanden som rådde" i stället för "felet
konstaterat" — kodat även i orkesterns grundprompt
Felorsaksanalys (Root Cause Analysis):
- Ny händelse felorsak: avvikelse + orsakskategorier + underlag +
säkerhetsnivå + rekommenderad åtgärd
- Kvalitetsregeln avvisar generella formuleringar ("trasig", "defekt",
"sliten", "behöver bytas") utan förklaring
- Valda evidenskällor valideras mot loggen — "Foto" godtas bara om ett
foto faktiskt finns
- Okänd orsak kräver motivering; medel/låg säkerhet kräver vilka
ytterligare kontroller som stärker bedömningen
- Avslutsknappen spärrad tills SVP + felorsak dokumenterats;
kvalitetsgrinden gör båda obligatoriska vid stängning
Demoärendet bär hela beviskedjan; 54 vitest-tester, integrationstest
och OpenAPI-validering gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Regelmotorn är nu plattformens styrande subsystem — systemet kan inte
skriva en slutsats som ECM inte godkänt.
Sex motorer (src/felsokning/ecm.ts):
- Evidence: evidensposter ur loggen med nivå E0–E6, tekniker och
deterministisk innehållshash
- Rule: dokumentationskrav + undantagsregeln med obligatorisk orsak
- Compliance: ärendetypen (garanti/goodwill/försäkring/reklamation/
begagnatgaranti …) styr extra krav — claim, skadenummer, historik,
miltal, bildbevis
- Validation: "Evidens saknas" i stället för antaganden (orkesterns
grundprompt + projektioner + grind)
- Completion: utökad kvalitetsgrind som spärrar slutrapporten
- Traceability: spårbarhetspaket (regelversion, grindstatus per
regel-id, evidensposter med hash) i varje export
Pre-Diagnostic Validation — metodiken låses upp först när:
- fordonshistoriken kontrollerats (eller motiverats: kvalitetsvarning),
med orsakskedja för tidigare arbeten
- ingående mätarställning fotograferats (bildtolkningen föreslår värdet)
- kundens felbeskrivning verifierats
- tidiga observationer hanterats
Utgående mätarställning fotograferas inför avslut och blir obligatorisk
i grinden när ärendet stängs.
Ärendeidentitet (Case Identity): fordonsobjektet utökat med VIN, miltal,
AO-, claim- och skadenummer (läses ur arbetsordern) — registreras en
gång, synligt i identitetsraden i arbetsytan (med ärendetypsval), låst
panel i Live Share, slutrapportens första sida och exporten.
49 vitest-tester; integrationstest och OpenAPI-validering gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Regelmotorn kodar plattformens viktigaste princip: systemet får aldrig
anta att en kontroll är utförd eller att dokumentation finns. Varje
påstående måste kunna härledas till evidens i händelseloggen.
- Nytt versionshanterat regelbibliotek (src/felsokning/ecm.ts, ECM v1.0):
evidensnivåer E0–E6 härledda ur loggen, fullbordansregler och
kvalitetsgrind — skilt från applikationslogiken
- Fullbordansregel i guiden: en kontroll slutförs med evidens ELLER
uttryckligt undantag "Underlag kan inte tas fram" med obligatorisk
orsak — loggas och flaggas ⚠ i brief, överlämning och rapport
- Kvalitetsgrind före slutrapport: utskriften spärrad tills
objektidentifiering, metodikens kontroller, fotokrav och evidensnivå
är gröna; varje röd rad visar exakt vad som saknas
- Orkesterns grundprompt utökad: aldrig "OK/kontrollerad/inga fel" utan
evidens — skriv "Evidens saknas" och begär rätt underlag (foto/video/
mätvärde/skärmfoto)
- Visual-first instrumentavläsning: ny vision-uppgift läser multimetrar,
diagnosskärmar m.m. — värden/enheter/felkoder med konfidens, teknikern
bekräftar, originalbilden loggas alltid bredvid strukturerad data;
kameran är integrationslagret, inga verktygsintegrationer krävs
- Terminologi: "AI" ersatt med systemspråk i hela gränssnittet
(Beslutsstöd, Systemet analyserar, Granskning av underlaget …)
- Dokumentation: docs/moduler/evidensmotor.md; 41 vitest-tester
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Primärvägen när ett ärende startas: teknikern fotar arbetsorderns
framsida, orkesterns nya dokumenttolkningsuppgift (Sonnet 5, vision)
läser dokumentet layoutoberoende och returnerar strukturerade fält
(kund, fordon, verkstad, felbeskrivning) med konfidens per värde.
- Konfidensvalidering: ≥95 % godkänns automatiskt, 80–95 % markeras
för genomläsning, <80 % kräver aktiv bekräftelse — teknikern
granskar bara osäkra fält
- Visuell granskning: dokumentet bredvid fälten; klick på ett fält
markerar ungefärlig position i bilden
- "Starta diagnos" skapar hela ärendet: objekt ur fordonsfälten,
metodikval ur felbeskrivningen, tolkningen loggad som ny
organisationsintern händelse arbetsorder_skannad (filtreras ur
kund- och partnerdelningar i server, RPC och klient)
- Schema-bunden vision-uppgift i båda orkestertjänsterna; bild som
data-URL, validerad på servern
- Inloggade användare tillfrågas aldrig om namn — kontot används
- Manuell inmatning kvar som andrahandsväg; tydligt märkt
demo-tolkning i lokalt läge
- 37 vitest-tester; integrationstestet verifierar filtreringen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Hela felsökningsmodulen omdesignad enligt tysk verkstadstradition
(ETKA/Bosch/Siemens-känsla): plana ljusgrå ytor, skarpa kanter, djup
marinblå primärfärg i stället för amber, tät typografi 11–15 px,
rektangulära knappar (max 4 px radie) och låg verktygsrad (~44 px)
med breadcrumb.
Ärendesidan får klassisk trekolumnslayout på skrivbord:
- Vänster: navigationsträd med ärendevyer + metodikstegens status
- Mitten: arbetsytan (guiden, en fråga i taget)
- Höger: kontextpanel med teknisk information, tillförlitlighet,
rekommenderat nästa steg och senaste tekniska rekommendation (AI)
Smala skärmar behåller flikrad och en kolumn.
Dessutom: objekttypen "Fordon" heter nu "Personbil" och
"Registreringsnummer" har kortats till "Regnr".
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Ny inställningssida (/felsokning/installningar) där systemadmin väljer
vad som visas när ett ärende startas. På plattformen sparas valet på
organisationen (alla läser via GET /api/organisation, bara admin ändrar
via POST /api/organisation/installningar); i lokalt läge gäller valet
enheten. Nytt ärende-vyn filtrerar knapparna efter valet.
- Klientmodul med normalisering: okända värden filtreras, tomma listor
faller tillbaka till standard (går aldrig att låsa ute allt)
- installningar-kolumn (jsonb) på organisationer, idempotent migrering
- OpenAPI-specen utökad; paritets- och enhetstester
- Integrationstest: läsning för alla, 403 för tekniker, org-bred
effekt, 400 för tomma listor
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Startsidans AI-panel pratade arkitektur (orkester, modellroller,
backend, AI-nycklar) — obegripligt för den som står i verkstaden.
Nu beskriver den vad AI:n gör för användaren: föreslår nästa steg,
granskar ärendet, skriver överlämningsutkast, skiljer alltid på
verifierat och hypotes. Samma justering i inloggningspanelen och
granskningsknappens text. Arkitekturen är oförändrad och beskrivs
fortsatt i docs/DRIFT.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
VITE_HASH_ROUTER vid bygget byter till HashRouter så att appen kan
köras som en enda statisk HTML-fil utan SPA-rewrites (förhandsvisning/
demo). Standardbygget använder historik-routing precis som förut.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Ansvarig per ärende härleds ur händelseloggen: skaparen är ansvarig
tills en överlämning eller den nya händelsen ansvarig_satt pekar ut
någon annan. Arbetsledaren kan omfördela pågående ärenden direkt i
översikten; händelsen är organisationsintern och filtreras bort ur
kund- och partnerdelningar i klient, plattformstjänst och Supabase-RPC.
- Ny händelsetyp ansvarig_satt + projektion ansvarig() (testad)
- Briefen visar ansvarig tekniker; översikten visar ansvarig/skapare
- Arbetsledare får lista användare (skapa kräver fortfarande admin)
- Översikts-SQL:en härleder ansvarig och skapare ur loggen
- OpenAPI-specen uppdaterad; integrationstestet utökat (omfördelning,
behörigheter, delningsnivåernas filtrering)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Klustret följer git — ingen CI-process har kubectl-åtkomst:
- Nytt publiceringsflöde (.github/workflows/publicera.yml): varje
main-push bygger de tre bilderna, publicerar till GHCR taggade med
git-SHA (endast GITHUB_TOKEN, inga externa hemligheter), uppdaterar
produktions-overlayens taggar med kustomize edit set image och
committar tillbaka — overlayen ombyggs som verifiering före commit,
och paths-ignore + [skip ci] förhindrar triggerloopar.
- Produktions-overlay (infra/overlays/produktion): GitOps-sanningen
för vad som kör; bas = infra/k8s. Rollback = git revert.
- Argo CD-applikation (infra/gitops/argocd-application.yaml):
automatisk synk med prune + selfHeal; hemligheten ligger medvetet
utanför både git och synken. Bootstrap = ett kubectl apply.
- DRIFT.md: CI/CD-avsnitt med flödesdiagram, bootstrap, rollback och
repo-variabeln PLATTFORM_URL.
Verifierat med riktig kustomize v5.4.3: overlayen bygger 17 objekt,
bildbytet slår igenom på alla tre tjänsterna, postgres-init genereras,
och workflowens exakta edit set image-kommandon fungerar. Alla
workflow-/manifest-YAML validerade; 29 vitest-tester gröna.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Modulspecifikationens sista del implementerad:
- Ny tabell delningar: återkallbara länkar med behörighetsnivå
(kund/partner/intern), organisationsknutna via ärendet.
- Nivåstyrd filtrering på serversidan i GET /api/delad/{kod}:
kund utesluter kategoribyten, hypoteser och AI-dialog; partner
utesluter kategoribyten och AI-dialog (hypoteser visas, märkta ej
verifierade); intern visar allt. Ärendets ursprungliga delningskod
fungerar bakåtkompatibelt som kundnivå. Svaret bär nivån.
- Nya endpoints: skapa/lista delningar per ärende och återkalla per
kod — alltid organisationskontrollerat; en återkallad länk ger 404.
- Klienten: delningshanterare i rapportfliken (självhostat läge) med
skapa per nivå, kopiera och återkalla — varje åtgärd loggas i
ärendet; publika delningssidan visar nivåanpassad notis och renderar
serverfiltrerade händelser utan att dölja partner-/interninnehåll.
- OpenAPI-specen utökad (Delning, DelningsNiva, tre nya operationer)
och maskinvaliderad.
Verifierat: integrationstestets 25 kontroller gröna mot Postgres 16 —
inkl. att kundkoden filtrerar hypoteser, partnernivån visar dem men
döljer kategoribyten, internnivån visar allt, org B inte kan skapa
delning av org A:s ärende och att återkallad länk ger 404. 29
vitest-tester gröna, produktionsbygge ok, Playwright-röktest grönt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
- services/plattform/openapi.yaml dokumenterar hela ytan: auth
(registrera organisation, logga in), användarhantering (admin),
ärenden + append-only händelselogg (idempotent synk), arbetsledar-
översikten, publik Live Share-delning och AI-orkestern — inklusive
scheman för alla 15 händelsetyper, roller, JWT-anspråken och
API:ts bärande principer (append-only, multi-tenant-404).
- Specen serveras live av plattformstjänsten på GET /api/openapi.yaml
och följer med i containern.
- Verifierad i tre lager: maskinell validering (swagger-cli),
paritetstest i vitest (varje dokumenterad väg finns i servern,
händelsetyperna är kompletta) och integrationsteststeg som hämtar
specen från den körande tjänsten.
Verifierat: integrationstestets 18 kontroller gröna mot Postgres 16,
29 vitest-tester gröna, produktionsbygge ok.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Backend, multi-tenant och Claude-orkestern finns sedan tidigare —
avgränsningarna listar nu det som faktiskt återstår (omfördelning,
QR/OCR/bildanalys, Live Share-nivåer, OpenAPI).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
Rollen arbetsledare får sin vy enligt Master Prompt ('se alla ärenden,
följa status, skapa statistik'):
- Ny behörighetsstyrd endpoint GET /api/oversikt (arbetsledare/admin):
organisationens alla ärenden med status, antal händelser, deltagande
tekniker, objekt och felbeskrivning — allt härlett ur händelseloggen
i en SQL-fråga, aldrig lagrat separat. Tekniker nekas med 403.
- Ny sida /felsokning/oversikt: statistikpanel (totalt/pågående/
avslutade + genomsnittlig ledtid), ärendelista med status och
'Öppna ärendet' som hämtar händelserna till enheten — konfliktfri
flätning om en lokal kopia redan finns. Länkas från kontopanelen
för arbetsledare/admin.
- Integrationstestet utökat: tekniker nekas översikten, arbetsledaren
ser organisationens ärenden och härledningarna (felbeskrivning,
status, händelseantal) stämmer.
Ej implementerat (medvetet): omfördelning av ärenden — överlämnings-
händelsen täcker handover tills en ansvarig-modell införs.
Verifierat: integrationstestets 17 kontroller gröna mot Postgres 16,
28 vitest-tester gröna, produktionsbygge ok, Playwright-röktest grönt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
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
Hypoteser är internt arbetsmaterial och får aldrig riskera att läsas
som konstaterade fel: de visas inte i Live Share-vyn, kundrapportens
tidslinje eller databasens delningsfunktion. De finns kvar i den
interna loggen, briefen och överlämningsrapporten.
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