11 Commits

Author SHA1 Message Date
Claude 28bfc29a5c Betalarspåret: beviskraven följer den som betalar — ALVA 3.6
Garantistandarden FGS-1.0 (fabriksgaranti, vagnskadegaranti,
försäkring, extern garantigivare, leasing/fleet, goodwill) inarbetad i
regelmotorn och bokförd i docs/GARANTISTANDARD-FGS.md (ALVA-DOC-0011):
vad som redan var uppfyllt, vad som införs nu, och den ärliga gränsen —
ODIS/DISS/SAGA2 är tillverkarsystem; ALVA bär bevispaketet och
eskaleringsspåret, den ersätter dem inte.

Tre nya händelsetyper i det stängda schemat: betalare (spår, namn,
claim-/skadereferens, godkännande), eskalering (öppnad/besvarad, kanal,
referens) och reservdel (artikelnummer, serienummer, batch, sparad
del). Grinden kräver fastställd betalare för de ärendetyper där någon
annan än kunden betalar, godkännande för goodwill och externa
garantigivare, och spärrar avslut när en eskalering är öppnad utan
dokumenterat svar — matchad per referens. Claim- och skadenummer kan
komma ur betalaren, inte bara ur skannad arbetsorder. Tre nya
ärendetyper med regelpaketskrav: Body damage warranty, Extended
warranty, Leasing or fleet. Betalare, eskalering och reservdel är
interna i delningsfiltret — kunden ser åtgärden, inte förhandlingen.

Fyndet på vägen, åtgärdat med regressionstest: serverns ärendetypskrav
var en tyst no-op. Servern matade den distribuerade paketformen
(arendetypRegler) in i en grindfunktion som bara läste den slimmade
(arendetyper[typ].krav) — garanti- och försäkringskraven upprätthölls
bara som råd i klienten. C-2-mönstret, återuppstånden genom ett
filformat. Grinden läser nu båda formerna, och regressionstestet låser
att den distribuerade formen spärrar på servern.

UI: betalar- och eskaleringspaneler i ärendevyn (panelen visas när
ärendetypen kräver den), grindnyckeln grind.eskalering på alla tio
språken, regelpaket 2.1 speglat klient/server med likhetstestet intakt.

781 enhetstester, genomgång 4/4 inom budget, portalspärr,
integrationstest mot Postgres, typkontroll, lint på baslinjen,
artefaktmätning och språkrunda gröna.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-07 08:55:02 +00:00
Claude 4dea6d2818 Fackgranskning av metodikinnehållet — ALVA 3.5
Sex oberoende domängranskningar av metodikbiblioteket, den enda text i
systemet som säger åt en tekniker vad den ska göra med ett fordon:
chassi, elsystem, högvolt, motor/drivlina, övriga system, plus en
maskinell granskning av bibliotekets egna tre regler. Varje fynd
verifierat före åtgärd, varje ersättning applicerad med träffkrav.
Bokfört i docs/FACKGRANSKNING-2026-08.md (ALVA-DOC-0009); protokollet
som gör den mänskliga granskningen per marknad utförbar i
docs/FACKGRANSKNINGSPROTOKOLL.md (ALVA-DOC-0010). Granskat-flaggorna
är oförändrade — detta höjer golvet, marknadens fackman sätter flaggan.

Tio kritiska fynd åtgärdade. Tyngst: högvoltens skyddsutrustning och
avspärrning låg SIST i säkerhetssekvensen — efter spänningsfrihets-
mätningen — och står nu först med EN 60903/60900-krav; mätningen
kräver CAT III och prova–mät–prova; frånskiljaren låses mot
återinkoppling; metodiken säger nu vad som är förbjudet utan
behörighet. Därtill: klimatets saknade f-gasgrind (nytt säkerhetssteg,
högvoltens mönster), ADAS-provkörningen som instruerade att provocera
nödbromsingrepp i trafik, öppna-aldrig-varmt för kylsystemet,
trycksänkning och högtrycksförbud för bränsle, deaktiverad tändning/
insprutning före kompressionsprov, avgasutsug, provkörningsförbud vid
bränsle-/bromsvätskeläckage, SRS-mätförbud — och klistringsfelet som
lät engelska styrningsklagomål matcha högvoltsmetodiken (styrningens
nyckelord låg i högvoltens lista; bekräftat av fyra granskare
oberoende av varandra).

Därutöver: referensvärden och villkor på mätningarna (startspänning,
spänningsfall, laddspänning med smart laddning-reservation, vilostrom,
CAN-terminering med gateway-reservation, AC-tryck vid föreskrivet
varvtal), rätt metod där fel stod (säkringar mäts under last, krypström
via mV-fall, spolskifte i stället för resistans, glappkontroll med
avlastning efter fjädringstyp), och 23 nya kontroller där granskningen
fann diagnostiska hål. 153 → 176 kontroller, samtliga med evidenskrav.

Fasmodellen fick sista ordet där den och en granskare drog åt olika
håll: vibrationens provkörning står kvar sist (Action går inte före
Localization) och kör-först-substansen bor i symptomsteget; bromsarnas
nya vägprov heter reproduktion och klassas som lokalisering —
temperaturjämförelsen per hjul är avgränsning, inte åtgärd.

Grindtexten för spänningslöshet kräver nu uttryckligen verifiering
genom mätning, på alla tio språken. Grindfixturen fick sitt tredje
foto när skyddsnätets felkodskontroll kom till — fixturen följer
regeln, inte tvärtom (jfr T-13).

775 enhetstester, genomgång 4/4 inom interaktionsbudgeten (vibration
81/90 med de nya kontrollerna), portalspärr, integrationstest,
typkontroll, lint på baslinjen, artefaktmätning och språkrunda gröna.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-07 08:37:25 +00:00
Claude 8072ea61af Språkrevision, del 3: pl, nl, ro samt revisionsdokumentet
De tre sista katalogerna åtgärdade enligt granskningarna: polskans
räkneordsgrammatik i grind.foton.detalj (formen stämde bara för 5+),
kasusfel i webb.sprak.matt, "napisał wiersz" (lästes "skrev en dikt"),
reflexivt "Zaloguj się" och pozbawiony napięcia-facktermen;
nederländskans "Valt stilzwijgend terug", hoogvolt i stället för
elnätstermen hoogspanning, corrigerende maatregel konsekvent och
endonymsäkra {sprak}-konstruktioner; rumänskans "de"-regel vid tal
över 20, măsurătoare-formerna, revizuit/verificat-distinktionen
(reviewed respektive verified föll ihop i samma ord), singular-
imperativ konsekvent med appkatalogen, och propagerade källtextfix i
alla tre (symptom verified as resolved, omission/absence justified).

Hela revisionen bokförd i docs/SPRAKREVISION-2026-08.md
(ALVA-DOC-0008): metod, fynden per område, de avvisade fynden med
skäl, och avgränsningen mot fackgranskning per marknad — granskat-
flaggorna är oförändrade, revisionen höjer golvet men flyttar inte
den gränsen.

Verifierat efter åtgärd: alla tio katalogerna kompletta med intakta
variabelhållare, 775 enhetstester, genomgång 4/4, portalspärr,
integrationstest mot riktig Postgres (ordlistorna bär ALVA-RULE-200
och prövas där), typkontroll, lint på baslinjen, artefaktmätning och
språkrunda 11/11 mot den bakade artefakten.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 23:58:25 +00:00
Claude c334786bb3 Språkrevision, del 2: källtexten, ordlistorna och sju kataloger
Tio parallella granskningar (nio språk plus engelska källtexten), varje
fynd verifierat innan åtgärd. Detta är de första sju katalogerna plus
det tvärgående; pl, nl och ro följer i nästa commit, och hela
revisionen bokförs i ALVA-DOC-0008.

Källtexten (en): ett kritiskt fynd — grind.kvalitetskontroll sa
"symptom verified", vilket på verkstadsengelska betyder att symtomet
BEKRÄFTATS FÖREKOMMA (som i grind.reproducering), medan grinden avser
kontrollen efter åtgärd. Nu "symptom verified as resolved", speglat i
ECM-regelmotorns rubrik och propagerat till alla översättningar. Två
större ellipser rättade: "history checked or justified" och "action
documented or justified" band "justified" till fel led — det är den
uteblivna kontrollen respektive frånvaron som motiveras. Därtill:
enhetlig amerikansk stavning, "instrument cluster" i stället för
"instrument panel" om mätarhuset (även i ärendevyn och genomgångens
selektor), "Assigned to", "Calibration valid until", artikel- och
kommateringsfel, terminologin application/registration enhetlig.

Ordlistorna (ord.mjs): luckor som släppte igenom icke-svar ("faulty",
"fertig", "jw.", "hors service", "boh", "defect" på rumänska) och
luckor som nekade korrekt skrivna resonemang ("gdyż", "ya que",
"waardoor", "se datorează", "zurückzuführen", "donc") — det senare är
falsklarmsriktningen och väger tyngst. Svenska EVIDENSORD tappade
trebokstavsdelsträngen "mat" som träffade inuti "information".
Stammar i stället för enstaka böjningsformer där jämförelsen är
delsträng; jämförelsen mot hela fältet fick formvarianter.

Katalogerna: per språk rättade betydelseskiften (slutsats.ickesvar sa
"inte en slutsats" där källan säger "inte ett svar" — i sex språk),
kongruens runt {falt}-hållaren (fem språk), räkneordsgrammatik (pl,
ro), kalkeringar ("intake", "Endlich", "napisał wiersz", "dépannage"),
terminologisk konsekvens (expediente/pratica/processo/Vorgang/dossier
genomgående, punkter-av-kontroll enhetligt, clôturer/encerrar), och
fransk typografi med hårt mellanslag före ?!:; och i «».

Avvisade fynd bokförs i dokumentet — bl.a. it webb.kallor.rubrik
(familjegemensam läsning av "Operational Knowledge Infrastructure")
och omdöpning av mätarställnings-nycklarna (hade brutit synk med
ärendevyns paneltitlar utan språklig vinst).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 23:53:15 +00:00
Claude d1753febeb Språkrevision, mekanisk del: en apostrofform per katalog
Revisionens maskinella genomgång fann blandade apostrofformer inom
en-, fr- och it-katalogerna: de äldre nycklarna använde rak apostrof
(') medan webb.-nycklarna använder typografisk (’). Normaliserat till
typografisk genomgående — 5 ersättningar i engelskan, 41 i franskan,
17 i italienskan. Övriga sju kataloger var redan enhetliga, utan
otrimmade värden, dubbelblanksteg eller kontrolltecken.

Ordlistorna i ord.mjs rörs inte: de jämförs mot användarens inmatning,
och en typografisk apostrof där hade slutat matcha det som skrivs på
ett tangentbord.

Granskningen per språk pågår; fynden bokförs i ALVA-DOC-0008 när de
är verifierade.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 23:37:47 +00:00
Claude 0068ef9844 Webbplatsen på alla tio språken
Sajten var hårdkodad engelska medan diagnostikytan redan talade tio
språk. Nu hämtar hela den publika webben — startsidan, ansökan,
inloggningen, språksidan, navigationen och sidfoten — sin text ur
samma katalog som resten av produkten, under nytt prefix webb.
(153 nycklar × 10 språk).

Språkval på webben: besökarens eget val (väljare i sidfoten, sparat i
localStorage med minnesfallback för privat läge) → webbläsarens språk
→ engelska. Rangordningen bor kvar i valjSprak; ny modul
alva/webbsprak.ts bär bara lagring och React-kroken. Portalens länkar
står medvetet kvar på engelska — portalen är produkten och styrs av
konto och organisation, inte av ett besöksval i en sidfot.

Gränsen håller: ordmärket, utläsningen och fasnamnen är ALVA:s
struktur och står likadant i varje språk; lang-attributet följer
valet; språksidans förhandsvisning behåller egen väljare och utgår
från besökarens språk.

Test: startsidans hjälterad och faskort låses mot systemdefinitionen
(två källor för samma mening driver isär tyst), webbnycklarna krävs i
varje språk, och designtesterna jämför nu katalognycklar i stället för
strängar — starkare, eftersom samma nyckel är samma ord på alla språk.
Ny språkrunda mot den bakade artefakten: väljare, sidbyte,
webbläsarspråk och engelsk fallback, 11/11.

775 enhetstester, genomgång 4/4, portalspärr, integrationstest,
artefaktmätning, typkontroll och lint gröna.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 22:38:18 +00:00
Claude 1ba5aaaefa Härdning efter panelgranskningen: kedjad logg, förseglat avslut, härledd säkerhetsnivå
Fyra av granskningens fynd åtgärdade, i bevisvärdesordning.

HASHKEDJAN (ALVA-SPEC-070). Triggrar skyddar loggen mot applikationen,
inte mot den som äger databasen — det var granskningens allvarligaste
invändning mot ett system vars hela värde är bevisvärde. Varje händelse
bär nu en hash av sitt innehåll och föregående händelses hash, beräknad
av servern vid insättningen. All skrivning går genom en enda kedjande
funktion; en händelse vid sidan av kedjan är ett hål i beviset, så den
bekväma vägen förbi finns inte. Digest tas över den LAGRADE händelsen,
efter kryptering: verifieringen ska kunna räkna om den ur databasen för
all framtid, och krypto-shredding förstör nycklar, inte rader, så kedjan
överlever en radering. Radlås per ärende hindrar att två samtidiga
batchar forkar kedjan — en falsk larmande verifiering avfärdas snart som
trasig, och då är den värdelös.

Integrationstestet provar hotmodellen ordagrant: triggern släpps, en rad
ändras med full databasbehörighet, triggern återskapas. Verifieringen
pekar ut raden — inte bara att något är fel, utan vilken.

FÖRSEGLINGEN. Avslut skriver kedjans rot och en HMAC med en nyckel som
aldrig finns i databasen, i samma transaktion som avslutshändelsen. Den
som räknar om hela kedjan efter sin ändring stoppas av att förseglingen
inte går att räkna om utan nyckeln. Engångs: triggern vägrar ändra en
satt försegling. Svaret säger vad det bevisar och inte — innehållet är
oförändrat sedan mottagandet, ingenting om tiden före, ingenting om
sanningshalten. Den texten följer med in i varje rapport som citerar
svaret, för det är precis den skillnad en motpartsjurist annars hittar.

SIGNATUREN. Fältet hette signatur men var teknikerns egen text — det
inbjöd en jurist att tro något som inte gällde. Det skrivs nu ur
verifierad token som övriga härkomstfält och intygar exakt vad det kan
intyga: vem som var inloggad när avslutet togs emot.

SÄKERHETSNIVÅN (ALVA-SPEC-071). Var teknikerns fria val — ett
självskattat värde som ser ut som en mätning. Nu ett tak härlett ur
underlaget: hög kräver reproducerat symptom OCH spårbart mätvärde ur
mätdonsregistret; enbart observationer bär inte ens medel. Teknikern kan
sänka men aldrig höja — asymmetrin är poängen, ärlig osäkerhet är
information. Grinden spärrar påståenden över taket på alla tio språken,
och gränssnittet visar taket medan arbetet pågår i stället för att spara
beskedet till avslutsknappen. "Delvis reproducerat" bär inte hög: delvis
är ett annat ord för att felet inte är förstått.

Taket bet direkt i två av våra egna testfixturer som påstod hög utan
spårbart mätdon — vilket är regeln som fungerar, inte testet som är fel.
Genomgången avslöjade följdkravet: vid medel/låg kräver panelen att
teknikern anger vilka ytterligare kontroller som skulle stärka
bedömningen, och det fältet fylls nu i som en tekniker skulle.

Kvar ur granskningens lista, medvetet: extern förankring (RFC 3161),
klienthashat foto vid upptagning, gränsvärden som data, OIDC/SAML.

766 tester, 200 integrationskontroller mot riktig Postgres — inklusive
sabotage som databasägare — genomgång 4/4, portalspärr, typkontroll,
lint och artefaktmätning gröna. Utgåva 3.3, API-specen uppdaterad,
åtgärderna bokförda i panelrapportens bilaga A.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 19:26:16 +00:00
Claude 8aae3a2a97 Regelverk, ärendetyper och säkerhetssvar på engelska — med arv där data byter språk
ecm.ts bar regelverkets rådtexter: undantagsorsaker, orsakskategorier,
underlagskällor, evidensgrader och de meningar som säger vad som fattas.
Cirka hundra strängar, nu på engelska tillsammans med serverns
ecm-regler.json — klienten och regelpaketet måste säga samma sak, annars
är det inte samma regel.

Tre av dem var inte text utan DATA, och där gjordes bytet med arv i
stället för rakt av.

ÄRENDETYPEN ligger i loggen och slår upp regelpaketets extra krav. Ett
gammalt garantiärende vars typ heter "Garanti" hade inte matchat
"Warranty", fått noll extra krav, och släppts igenom grinden med FÄRRE
krav än när det öppnades — utan att någonting i gränssnittet visade det.
ARENDETYP_ARV normaliserar typen vid uppslaget, aldrig i loggen.

GALLRINGSTIDEN slås upp på samma nyckel, och det var värre. Ett
garantiärende hade fallit ur tabellen och tagit standardtiden 36 månader
i stället för 120 — alltså raderat garantiunderlaget sju år i förtid,
tyst och oåterkalleligt. Ett uppslag som missar ska ge det försiktigaste
utfallet; här gav det det farligaste. Två tester låser det.

SÄKERHETSSPÄRREN avgörs av en textsträng. När knappen bytte från "Ja"
till "Yes" gick klient och server isär: klienten skrev "Yes", servern
jämförde mot "Ja". Utfallet blev fail-closed — högvoltsärenden gick inte
att avsluta alls — vilket är rätt riktning för ett fel att falla åt, men
det var en slump och inte en konstruktion. `arJakande` känner igen ett ja
på alla språken. Att en säkerhetsspärr avgörs av fritext är i sig felet;
rätt lösning är ett booleskt fält, och att arvet står synligt i koden är
en påminnelse om det.

Pre-diagnostikens kvitteringar känns igen på sin text och har fått samma
behandling: gamla ärenden hade annars visat en ogjord kontroll för arbete
som faktiskt utförts, och teknikern hade kvitterat en gång till — två
kvitteringar för samma sak i en append-only logg.

Genomgången drev gränssnittet på svenska knappnamn och gick sönder på
rätt sätt: den hittade "+ Dokumentera felorsak", "Registrera besked" och
kundkanalerna "Telefon"/"E-post", som alla missats av de tidigare
svepen. Fyra av fyra ärenden avslutas igen.

609 tester, 186 integrationskontroller mot riktig Postgres, genomgång,
portalspärr, typkontroll och lint gröna. Mutationsprövat: utan
ARENDETYP_ARV faller två tester, utan `arJakande` ett.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 18:05:19 +00:00
Claude 322d228c80 ALVA-RULE-200 gällde bara på svenska — nu på tio språk
Slutsatsgranskningen avvisar icke-svar med en ordlista: "klart", "ok",
"trasig". Listan var enbart svensk. En tysk tekniker som skrev
"erledigt" i motiveringsfältet passerade filtret — inte därför att
texten dög, utan därför att filtret bara kände igen "klart". Grinden
släppte igenom avslutet och rapporten såg fullständig ut.

Det var alltså inte en översättningsbrist utan ett hål i den regel som
är hela produktens värde, och hålet fanns på varje marknad utom en.

Samma sak åt andra hållet: orsaksorden som visar att en text innehåller
ett resonemang var svenska, liksom evidensorden. Engelskans "photo"
innehåller inte "foto", så "the photo shows the arcing at pin 14"
räknades inte som en hänvisning till underlag. Följden hade varit värre
än ett släppt avslut — en korrekt skriven motivering hade nekats, och en
spärr som nekar rätt svar är en spärr man lär sig kringgå.

Listorna ligger nu i sprak/ord.mjs, per språk, och slås ihop till en
union i stället för att väljas efter inställning. Ett icke-svar är ett
icke-svar oavsett språk — jämförelsen görs mot hela fältet, så en
tekniker som skriver på ett annat språk än organisationens ska inte
kunna passera på den vägen. Orsaks- och evidensorden går åt motsatt
håll: unionen gör kontrollen mer tillåtande, aldrig strängare, och det
är rätt riktning att fela åt.

Medvetet utanför listorna: "inget", "keine", "none". Att ingenting
kvarstår osäkert är ett giltigt och ofta korrekt svar; att göra det till
ett icke-svar hade tvingat fram utfyllnad, och utfyllnad är sämre än ett
kort sant svar. Ett test låser det.

Bristernas texter kommer nu ur katalogen och bär sin nyckel, precis som
grindens hinder. Fältnamnet översätts med resten av meningen —
"Begründung fehlt.", inte "Motivering fehlt.".

Mutationsprövat: med listan återställd till enbart svenska föll nio
tester, ett per språk. Svenska och engelska är genomgångna; övriga
listor är en första uppsättning och står som ogranskade i filhuvudet,
av samma skäl som `granskat` i SPRAK — de är metodik, inte gränssnitt.

597 tester, 186 integrationskontroller, typkontroll, lint och genomgång
gröna.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 16:44:57 +00:00
Claude be10704349 Grinden talar organisationens språk — engelska som standard
Kvalitetsgrinden formulerade sina hinder på svenska, hårdkodat. I en
produkt där engelska är standardspråket betyder det att en spärr kan
neka ett avslut på ett språk teknikern inte läser. Det är en spärr utan
väg förbi: teknikern ser att systemet vägrar men inte varför, och den
enda utvägen blir att ringa någon. Det är då regeln slutar vara en regel
och blir ett hinder man lär sig kringgå.

Varje hinder bär nu både nyckel och färdig text. Nyckeln därför att en
klient som byter språk ska kunna rendera om utan att fråga servern;
texten därför att ett hinder som hamnar i en logg eller en PDF måste gå
att läsa utan katalogen. Hindrets id och nyckel är språkoberoende — det
är bara texten som byter.

Språket är organisationens, inte användarens. En verkstad i Tyskland med
en polsk tekniker ska ha ett gemensamt dokumentationsspråk; rapporten
ska inte byta språk beroende på vem som råkade stänga ärendet. Det
lagras i organisationens inställningar, och en felstavad landskod blir
engelska i stället för ett fel — språkinställningen är en etikett och
ska inte hindra någon från att spara sina objekttyper.

SPARRFRAGOR bär nu nycklar i stället för svensk text. Testet som jämför
serverns lista med klientens jämför nycklar, så listorna kan fortfarande
inte glida isär.

Två tester prövade svenska ord i grindens utdata och gick sönder, vilket
var rätt av dem. De prövar nu nyckeln — texten är översatt och byter
språk med organisationen, och att pröva svenska ord hade gjort dem till
tester av vilket språk som råkar vara standard. Ett nytt test prövar det
som faktiskt betyder något: samma id, samma nyckel, olika text.

Integrationstestet följer språket hela vägen — organisationens
inställning, genom servern, ut i det 409-svar som nekar avslutet: engelska
som standard, tyska efter byte, engelska igen vid okänd kod.

582 tester, 186 integrationskontroller mot riktig Postgres, genomgång och
portalspärr gröna.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 16:36:53 +00:00
Claude 995858174d Språk: engelska som källa, tio EU-språk, och en struktur som inte får översättas
Engelska är standard- och källspråk. Nio översättningar till: tyska,
franska, spanska, italienska, polska, nederländska, portugisiska,
rumänska och svenska.

Två sorters text, behandlade olika. GRÄNSSNITTSTEXT faller tillbaka på
engelska tyst — en engelsk knapp hos en tysk användare är irriterande
men ofarlig. METODIKINNEHÅLL gör det aldrig tyst: det märks som
ogranskat, med språket namngivet. Skälet står i modulhuvudet och är hela
poängen med uppdelningen: engelska SYNS som ett annat språk, medan en
felaktig översättning ser ut som en instruktion. En maskinöversatt
säkerhetsanvisning som ingen fackman läst är därför sämre än en engelsk.
Bara engelska och svenska är `granskat: true`.

Strukturen översätts inte. ALVA-SPEC-001 §2 slår fast att fasnamn och
statusord skrivs likadant i varje land — en revisor ska kunna läsa en
rumänsk och en tysk rapport utan att veta vilket språk verkstaden
arbetar på. Det hade gått att skriva in dem oöversatta i varje katalog
och låsa dem med ett test; det är svagare, för en översättare som ser
"Passed" i den polska filen översätter den, och testet blir en tvist i
stället för en regel. Nycklarna saknas i stället helt i
översättningarna och `t()` hämtar dem alltid ur engelskan. Då finns
ingenting att översätta fel.

Testet räknar inte bara nycklar — det går att få grönt genom att
kopiera engelskan till tio filer. Det prövar fyra saker: att katalogen
är komplett, att strukturen inte är översatt, att inget språk är
engelska i förklädnad (tak på 25 % identiska strängar), och att
variabelhållarna överlevde. {procent} som blir {percent} i den franska
filen ger inget fel — den ger "{percent} % de l'interface" på skärmen,
för alltid.

Mutationsprövat: en borttagen nyckel, en översatt statussträng, en
trasig variabelhållare och en polsk fil som var en kopia av engelskan
gav sex röda tester. Polskan har dessutom en egen anmärkning i
filhuvudet: {sprak} sätter in "Polski" i nominativ, och "w języku
Polski" är fel — meningarna är därför omskrivna så att namnet står som
etikett i parentes.

581 tester, typkontroll och lint rena.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 16:27:45 +00:00