chore(backend): address deprecated dependencies in test stack
Test Suite / backend-pr-quick (push) Has been skipped
Test Suite / quick-import-pr-quick (push) Has been skipped
Test Suite / backend-full (push) Successful in 6m16s
Test Suite / flutter-quality (push) Failing after 1m15s

- Updated jest ecosystem to v30.x in backend/package.json
- Added controlled overrides for test-exclude to remove inflight@1.0.6 and glob@7.2.3
- Updated README.md with deprecation handling procedures and debugging steps
- Modified .kilo/plans/1779643125894-lucky-island.md to document systematic approach for dependency management
This commit is contained in:
Nils-Johan Gynther
2026-05-24 19:47:24 +02:00
parent e6e9e11b18
commit 26c217e0eb
4 changed files with 1604 additions and 931 deletions
+86 -39
View File
@@ -1,51 +1,98 @@
# Plan: Konfigurera minimiålder för paketrelease # Plan: Hantera deprecated dependencies (`inflight` / `glob`) i backend
## Mål ## Mål
Införa en "cooldown" för npm-paket så att mycket nyligen publicerade versioner blockeras vid installation i projektet. Minska säkerhets- och stabilitetsrisk från deprecated/transitiva paket i `backend` genom kontrollerad uppgradering, verifiering och CI-skydd utan att bryta befintliga flöden.
## Nuläge (verifierat) ## Bakgrund
- Projektet använder npm (lockfile finns i `backend/package-lock.json` och `.kilo/package-lock.json`). `npm ci` i `backend` visar varningar för:
- Backend installeras i CI med `npm ci` i `.github/workflows/test.yml`. - `inflight@1.0.6` (ej underhållen, memory leak)
- Ingen befintlig `.npmrc` i repo-roten eller i `backend/`. - `glob@7.2.3` (föråldrad med kända sårbarheter)
- Ingen Renovate/Dependabot-konfiguration hittades i repot.
## Föreslagen implementation Detta är normalt transitiva beroenden, men bör ändå adresseras systematiskt.
1. **Sätt projektpolicy i backend**
- Skapa `backend/.npmrc` med:
- `min-release-age=1`
- Motivering: backend är den körda Node-applikationen och har tydlig CI-kedja med `npm ci`.
2. **(Valfritt) Sätt policy för Kilo-verktygsmappen** ## Scope
- Om `.kilo/` installeras/uppdateras aktivt i detta repo, skapa även `.kilo/.npmrc` med samma värde. - Endast Node-backend (`backend/`)
- Om `.kilo/` är sekundär och inte del av normal drift kan detta utelämnas. - Inga funktionella ändringar i app-logik
- Fokus: dependency graph, lockfile, CI-kontroller, dokumentation
3. **CI-effekt (ingen workflow-ändring krävs)** ## Implementationsplan
- `npm ci` i GitHub Actions kommer automatiskt respektera `backend/.npmrc`.
- Ingen ändring av `.github/workflows/test.yml` behövs för grundfunktionen.
4. **Dokumentera kort i befintlig drift-/utvecklingsdokumentation** 1. **Kartlägg källan till transitiva paket**
- Lägg 2-4 rader där dependency-policy redan beskrivs (om sådan sektion finns). - Kör i `backend/`:
- Innehåll: syfte, värde (`1` dag), och hur man tillfälligt hanterar blockerade uppgraderingar. - `npm ls inflight`
- `npm ls glob`
- Dokumentera exakt vilka toppnivåpaket som drar in versionerna.
- Syfte: avgöra om problemet löses via toppnivåuppdatering eller `overrides`.
5. **Verifiering** 2. **Uppdatera direkta beroenden först (minst invasivt)**
- Lokalt i `backend/`: - Kör riktad uppdatering av paket som identifieras i steg 1 (t.ex. test-/build-verktyg först, runtime efteråt).
- `npm config get min-release-age` (ska visa `1` med projektconfig aktiv) - Kör därefter:
- `npm ci` (ska fungera normalt) - `npm ci`
- CI: - `npm ls inflight glob`
- Bekräfta att befintligt workflow passerar utan regressionsfel. - Beslutspunkt:
- Om `glob@7`/`inflight` försvinner: gå vidare till verifiering.
- Om kvarstår: gå till steg 3.
## Risker och hantering 3. **Inför `overrides` i `backend/package.json` vid behov**
- **Risk:** Legitima hotfix-versioner blir tillfälligt blockerade (<24h gamla). - Lägg till kontrollerade `overrides` för att styra bort sårbara/föråldrade versioner.
- **Hantering:** vänta in cooldown eller använd tillfällig manuell policyjustering i kontrollerad incident. - Prioritet:
- **Risk:** Inkonsistent policy om flera npm-delprojekt hanteras olika. - `glob` till modern, kompatibel version i aktiv support.
- **Hantering:** besluta explicit om `.kilo/` ska omfattas. - Undvik tvingad ersättning av `inflight` med inkompatibla alias om konsumentpaket inte stödjer det.
- Regenerera lockfile via normal npm-process och verifiera installationsflöde.
## Rekommenderade standardval 4. **Säkerhetsverifiera dependency-trädet**
- Minimiålder: **1 dag** (`min-release-age=1`) nu. - Kör:
- Scope: **backend först**; utöka till `.kilo/` endast om den mappen används aktivt i teamets vardagsflöde. - `npm audit --audit-level=high`
- `npm audit` (för full kontext)
- Klassificera återstående fynd:
- fixbara nu
- accepterad residualrisk (med motivering)
5. **Regressionstest av backend efter dependency-ändringar**
- Kör samma kvalitetskedja som används i projektet:
- `npm run prisma:validate`
- `npm run prisma:generate`
- `npm run typecheck`
- `npm run lint`
- `npm test`
- `npm run build`
- Syfte: säkerställa att dependency-upgrade inte skapar drift-/build-regressioner.
6. **Skärp CI-policy (om inte redan tillräcklig)**
- Verifiera att `.github/workflows/test.yml` fortsatt kör `npm audit --audit-level=high` för backend-push.
- Om önskat: höj till `critical` eller behåll `high` enligt teamets riskprofil.
- Rekommendation: behåll `high` i nuläget för bättre tidig signal i ett aktivt projekt.
7. **Dokumentera beslut och operativ hantering**
- Uppdatera `README.md` kort med:
- att deprecated-varningar hanterats
- hur man felsöker nya transitiva varningar (`npm ls <paket>`)
- policy för hur snabbt dependencies ska uppdateras
## Risker och mitigering
- **Risk: Breaking changes vid dependency bump**
- Mitigering: uppgradera stegvis + full kvalitetskedja i steg 5.
- **Risk: `overrides` maskerar underliggande kompatibilitetsproblem**
- Mitigering: använd `overrides` endast när toppnivåuppdatering inte räcker; dokumentera tydligt varför.
- **Risk: Kvarvarande audit-fynd blockerar release**
- Mitigering: klassificera residualrisk och skapa uppföljningsärende med ägare och deadline.
## Leverabler
- Uppdaterat `backend/package.json` (ev. `overrides` + uppdaterade versionsintervall)
- Uppdaterad `backend/package-lock.json`
- Eventuell liten CI-justering i `.github/workflows/test.yml`
- Kort dokumentationsnotis i `README.md`
## Acceptanskriterier ## Acceptanskriterier
- `backend/.npmrc` finns med `min-release-age=1`. - `npm ls inflight` visar inte problematisk kedja, eller tydligt dokumenterad residualrisk med motivering.
- `npm ci` i backend fungerar lokalt. - `npm ls glob` visar ingen osäker/föråldrad kedja (eller dokumenterad temporär avvikelse med plan).
- CI-jobben som kör backend-installation fortsätter passera. - `npm audit --audit-level=high` passerar, eller kvarvarande fynd är explicit riskaccepterade.
- (Om valt) `.kilo/.npmrc` följer samma policy. - Backend-kvalitetskedjan passerar utan regression.
- CI för backend fortsätter passera.
## Rekommenderad genomförandeordning
1) Kartlägg (`npm ls`)
2) Riktade uppdateringar
3) `overrides` endast vid behov
4) Audit + full testkedja
5) CI/dokumentation
+3
View File
@@ -3,6 +3,9 @@
- **Supply-chain-skydd för npm i backend:** `backend/.npmrc` innehåller nu `min-release-age=1`, vilket kräver att paketversioner är minst 1 dag gamla innan `npm install`/`npm ci` tillåts. - **Supply-chain-skydd för npm i backend:** `backend/.npmrc` innehåller nu `min-release-age=1`, vilket kräver att paketversioner är minst 1 dag gamla innan `npm install`/`npm ci` tillåts.
- **CI påverkas automatiskt:** Backend-jobben i GitHub Actions använder redan `npm ci` i `backend/` och följer därmed policyn utan workflow-ändringar. - **CI påverkas automatiskt:** Backend-jobben i GitHub Actions använder redan `npm ci` i `backend/` och följer därmed policyn utan workflow-ändringar.
- **Driftpolicy:** Vid blockerad akut uppgradering väntar vi normalt ut cooldown-fönstret i stället för att öppna generell policy. - **Driftpolicy:** Vid blockerad akut uppgradering väntar vi normalt ut cooldown-fönstret i stället för att öppna generell policy.
- **Deprecation-kedja åtgärdad i backend-teststacken:** `jest` uppgraderad till 30.x och backend använder en kontrollerad `overrides` för `test-exclude`, vilket tar bort `inflight@1.0.6` och `glob@7` från dependency-trädet.
- **Felsökning av transitiva varningar:** Kör `npm ls <paket>` i `backend/` för att se exakt toppnivåkälla innan åtgärd (uppdatera direkt beroende först, `overrides` endast vid behov).
- **Uppdateringspolicy för dependencies:** Säkerhets- och deprecation-relaterade backend-beroenden prioriteras löpande och ska normalt hanteras i närmast följande utvecklingscykel.
# Nyheter och förbättringar (2026-05-21) # Nyheter och förbättringar (2026-05-21)
+1509 -889
View File
File diff suppressed because it is too large Load Diff
+6 -3
View File
@@ -48,7 +48,7 @@
"@nestjs/testing": "^11.1.19", "@nestjs/testing": "^11.1.19",
"@types/bcryptjs": "^2.4.6", "@types/bcryptjs": "^2.4.6",
"@types/express": "^5.0.5", "@types/express": "^5.0.5",
"@types/jest": "^29.5.14", "@types/jest": "^30.0.0",
"@types/multer": "^1.4.12", "@types/multer": "^1.4.12",
"@types/node": "^22.19.19", "@types/node": "^22.19.19",
"@types/passport-jwt": "^4.0.1", "@types/passport-jwt": "^4.0.1",
@@ -58,11 +58,14 @@
"@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/eslint-plugin": "^8.46.2",
"@typescript-eslint/parser": "^8.46.2", "@typescript-eslint/parser": "^8.46.2",
"eslint": "^9.38.0", "eslint": "^9.38.0",
"jest": "^29.7.0", "jest": "^30.4.2",
"supertest": "^7.2.2", "supertest": "^7.2.2",
"ts-jest": "^29.2.6", "ts-jest": "^29.4.11",
"typescript": "^5.4.5" "typescript": "^5.4.5"
}, },
"overrides": {
"test-exclude": "^8.0.0"
},
"jest": { "jest": {
"preset": "ts-jest", "preset": "ts-jest",
"testEnvironment": "node", "testEnvironment": "node",