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
This commit is contained in:
@@ -730,6 +730,45 @@ paths:
|
||||
"400": { $ref: "#/components/responses/Fel" }
|
||||
"401": { $ref: "#/components/responses/Fel" }
|
||||
|
||||
/api/kedjesvep:
|
||||
post:
|
||||
tags: [Ärenden]
|
||||
summary: Verifiera varje kedja i organisationen (ALVA-SPEC-070)
|
||||
description: >
|
||||
Driftens fråga "är allt fortfarande sant?". Går igenom samtliga
|
||||
ärenden och pekar ut varje kedjebrott och varje ogiltig
|
||||
försegling. Kräver arbetsledare eller administratör. Samma svep
|
||||
körs nattligen av driften via `node server.mjs --kedjesvep`, som
|
||||
avslutar med felkod vid brott.
|
||||
responses:
|
||||
"200":
|
||||
description: Svepets utfall.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
arenden: { type: integer }
|
||||
brutna:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
arende: { type: string }
|
||||
brott:
|
||||
type: object
|
||||
properties:
|
||||
index: { type: integer }
|
||||
id: { type: string }
|
||||
ogiltigaForseglingar:
|
||||
type: array
|
||||
items: { type: string }
|
||||
oforseglade:
|
||||
type: integer
|
||||
description: Ärenden med kedjade händelser men ingen försegling (t.ex. ännu inte avslutade).
|
||||
"401": { $ref: "#/components/responses/Fel" }
|
||||
"403": { $ref: "#/components/responses/Fel" }
|
||||
|
||||
/api/arenden/{arendeId}/kedja:
|
||||
parameters:
|
||||
- name: arendeId
|
||||
|
||||
Reference in New Issue
Block a user