Commit Graph

5 Commits

Author SHA1 Message Date
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 6665004ec7 Härdning: kedjesvep i drift — och svepets första egna fynd
KEDJESVEPET. Verifieringen fanns men anropades bara vid tvist: ett brott
kunde stå oupptäckt i åratal och upptäckas i sämsta tänkbara ögonblick.
Nu går driften igenom varje kedja och varje försegling i varje
organisation — POST /api/kedjesvep för arbetsledaren, `node server.mjs
--kedjesvep` för nattlig cron utan server, med felkod vid brott så att
larmet är gratis. Endpoint och svep delar EN implementation
(kedjestatus): två implementationer av "är kedjan hel?" kommer att svara
olika den dag det betyder något — det var T-13/T-14:s rot, tillämpad i
förebyggande syfte.

SVEPETS FÖRSTA FYND VAR PÅ RIKTIGT. Första körningen mot
integrationsmiljön rapporterade TRE brott där testerna saboterat två.
Det tredje var en bugg: leverantörshändelser bär `enhet: undefined`, och
den kanoniska formen serialiserade nyckeln som null medan databasens
rundresa släpper den. Skriv-digest och läs-digest skilde sig — varje
leverantörshändelse bröt sin egen kedjelänk. Klienthändelser gick fria
av en slump: JSON.parse kan inte producera undefined. Fixat vid roten:
kanonisk form är nu exakt den form som överlever rundresan, inte en
nästan likadan. Mekanismen fungerade precis som avsett — dag ett, mot
sina egna upphovsmän.

TRANSPORTEN. Säkerhetshuvuden på varje API-svar: nosniff, no-store
(ett API vars svar är personuppgifter får inte bli en cacheträff),
frame-ancestors 'none', no-referrer, HSTS. För stor kropp svarar 413 i
stället för ett intetsägande 500. Kroppstak 4 MiB och batchtak 500
verifierade som redan på plats — bokfört, inte antaget.

En skriptläxa på vägen: cron-svepets felkod är själva poängen, men under
`set -e` dödade den testskriptet vid tilldelningen — felkoden måste
fångas i samma andetag.

Utgåva 3.4. API-specen dokumenterar svepet. TÜV-2-rapporten har bilaga A
med samma-dags-härdningen, inklusive svepets eget fynd.

768 enhetstester, 224 integrationskontroller mot riktig Postgres,
återställningsprov, genomgång 4/4, portalspärr, typkontroll och lint.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 20:55:21 +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 b2c2ce72a3 Språksidan: vad som är översatt, vad som är granskat, och skillnaden
En vanlig språkmeny påstår att produkten finns på tio språk och slutar
där. Sidan i foten redovisar i stället skillnaden mellan att en text ÄR
översatt och att den är GRANSKAD av någon som kan yrket — och visar det
på de strängar där skillnaden betyder något: grindens hinder, alltså de
meningar som nekar en tekniker att avsluta ett ärende.

Att välja just dem är avsiktligt. En spärr ingen förstår är en spärr
utan väg förbi, så det är rätt strängar att döma en översättning efter.
Väljaren byter språk direkt i provet; åtta av tio språk möts därefter av
beskedet att metodiken inte är fackgranskad på språket. Det är ett
obekvämt sätt att presentera sin egen produkt och hela poängen med
sidan: en verkstadschef i Rumänien som får veta det i förväg kan planera
för det, samma chef som får veta det av en tekniker som missförstått en
säkerhetsinstruktion kan inte.

Varningen står UNDER provet, inte över. Den som just läst fem meningar
på sitt eget språk ska mötas av vad de inte garanterar — inte varnas i
förväg och sedan lugnas av att texten ser bra ut.

Sidan ligger i foten och inte i portalens navigation. Den är
dokumentation snarare än ett arbetsverktyg, och portalraden har redan
tio poster.

Språkknapparna ligger i rutnät, inte flexradbrytning. Tio språk bröts av
flex till nio plus ett ensamt, och den ensamma knappen läste sig som en
eftertanke i stället för som ett språk bland tio. Två kolumner på telefon
och fem på skärm gör tio jämnt i båda riktningarna.

Utgåva 3.2 dokumenterad.

602 tester, typkontroll och lint rena. Artefakten byggd och mätt på 390
och 1280 px över femton vyer: inget spill, inga externa begäranden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 16:51:44 +00:00
Claude ae5acbed92 Fotograferad mätarställning, versionshistorik och tysk kravbild i foten
---- Mätarställningen ska fotograferas ----------------------------------

Klienten krävde redan fotot: värdefältet visas först efter bilden. Men
GRINDEN gjorde det inte, och en regel som bara finns i gränssnittet är en
vana — inte en spärr. Det är samma förhållande som QUALITET C-2 gällde,
fast åt andra hållet: här var servern svagare, vilket är värre, eftersom
servern är den auktoritativa.

Skillnaden är hela uppgiftens bevisvärde. En inskriven siffra är
teknikerns påstående om vad som stod på mätaren; ett foto visar vad som
stod där. Mätarställningen avgör garanti- och försäkringsfrågor i
efterhand och är den enda uppgift i ärendet någon kan ha ett intresse av
att skriva fel. Evidensgraderingen följer nu med: fotograferad ger E2,
inskriven ger E1 och märks som inskriven i rapporten.

Undantag finns och måste finnas — slocknad display, oåtkomlig timräknare
— men kräver motivering, som det nekade historiksvaret.

---- Versionen räknades aldrig upp --------------------------------------

Systemet påstod "ALVA 1.0" efter tre revisioner, en fakturamodul och en
stängd portal. Versionen sa alltså ingenting om vad man fick.

Historiken är HÄRLEDD UR VAD SOM FAKTISKT LEVERERATS och varje post pekar
på sin commit. En utgåva som inte går att peka på hör inte hemma i listan
— en påhittad ändringslogg är samma obefogade säkerhet som produkten
finns för att undvika. Första siffran höjs bara när GARANTIERNA ändras,
vilket hänt två gånger: 2.0 när fakturan blev ett härlett dokument, 3.0
när TÜV-härdningen ändrade vad loggen garanterar. Nuvarande: 3.1.

Och ett fynd på vägen: ritningsstämpeln läste versionen ur den AKTUELLA
konstanten, så ett ärende stängt under 1.0 visade 3.1 — precis det
stämpelns egen beskrivning säger att den inte ska göra. Avslutshändelsen
bär numera versionen, och stämpeln läser den därifrån. Äldre ärenden
säger uttryckligen "ej registrerad" i stället för att låna dagens siffra.

---- Tysk kravbild i foten ----------------------------------------------

Listan är tysk därför att § 5 DDG är den strängaste och mest utkrävbara i
EU: klarar man den klarar man de andra marknaderna på köpet.

Två fällor som är aktuella just nu, och bägge ser fortfarande ut som
upplysningar:

  ODR-LÄNKEN SKA BORT. Förordning 524/2013 upphävdes genom förordning
  (EU) 2024/3228 och plattformen stängdes 20 juli 2025. Länken har legat
  i tiotusentals fotnoter sedan 2016 och pekar numera ingenstans. Foten
  saknar den medvetet.

  § 5 TMG HETER § 5 DDG sedan 14 maj 2024.

Modulen hittar inte på uppgifter. Ett Impressum med påhittad adress är
inte ett halvfärdigt Impressum utan ett vilseledande, och skadan större
än den tomma rutans. Osatta fält redovisas som en åtgärdslista med
rättslig grund, så driften kan spärra en driftsättning på listan i
stället för att upptäcka bristen när brevet kommer.

460 enhetstester · genomgången 4/4 · typkontroll ren.

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