Skip to content

maintain: Frameworks aktualisieren statt Security-Overrides löschen#7

Open
kaihaase wants to merge 3 commits into
mainfrom
feat/maintain-framework-updates
Open

maintain: Frameworks aktualisieren statt Security-Overrides löschen#7
kaihaase wants to merge 3 commits into
mainfrom
feat/maintain-framework-updates

Conversation

@kaihaase

Copy link
Copy Markdown
Member

Anlass

Ein realer Wartungslauf (offers, 2026-07) hat über 20 Security-Overrides gelöscht, den Nuxt-Peer-Graph zerlegt und musste vollständig zurückgerollt werden. Beide Ursachen standen im Plugin selbst.

1. Die Override-Regel war zirkulär

Der Agent bekam vorgegeben:

„If override was for security and pnpm audit shows no vulnerability → REMOVE override"

Das Audit ist aber nur deshalb sauber, weil der Override greift. Die Regel garantierte damit, dass jeder wirksame Security-Override gelöscht wird — und genau das ist passiert (axios, lodash, kysely, drizzle-orm, unhead, qs, hono, …).

Neu: Overrides werden angehoben, nicht gelöscht. Entfernen verlangt positiven Beweis via pnpm why, dass das Paket den Dependency-Baum verlassen hat. Der häufigste reale Befund ist ohnehin ein anderer: Pins, die exakt eine Patch-Version unter ihrem Fix liegen (im Realfall 8 von 36, u. a. vite auf 7.3.2 statt >=7.3.5) — exakt, gepflegt aussehend, trotzdem verwundbar.

2. Frameworks waren aus dem Scope ausgeschlossen

nest-server und nuxt-extensions pinnen ihre Dependencies exakt. Eine CVE in einer solchen Dependency ist per Override nicht schließbar — der Override überstimmt nur das Framework und erzeugt eine Kombination, die niemand getestet hat. Bei better-auth ging das Audit dadurch auf grün und ein API-Test auf rot. Der richtige Fix war nest-server 11.25.2 → 11.27.6, das die gepatchte Version selbst mitbringt.

/lt-dev:maintenance:maintain ist jetzt ein Orchestrator:

Phase Inhalt
0 Topologie erkennen — Fullstack? npm- oder Vendor-Mode je Projekt (projects/api/src/core/, projects/app/app/core/)
1 Framework-Updates, nach Modus geroutet: Vendor → nest-server-core-updater / nuxt-extensions-core-updater; npm-Major → nest-server-updater (hat die Migration Guides); npm-Minor → direkt
2 Peers des Frameworks angleichen (@nestjs/* …)
3 Übergabe an npm-package-maintainer
4 Verifikation (check + E2E)

Dazu ein Rollback-Protokoll: Snapshot vor Phase 1; bei nicht reparierbarem Bruch zurückrollen, statt einen halb migrierten Dependency-Baum zu hinterlassen.

Phase 2 wird zuverlässig vergessen und äußert sich als scheinbar unzusammenhängender Typfehler: Nach dem nest-server-Update existierte @nestjs/schedule zweimal (aufgelöst gegen @nestjs/common@11.1.19 und @11.1.23), und der Build brach mit Class 'CronJobs' incorrectly extends base class 'CoreCronJobs'.

Vendor-Grenze

Der npm-package-maintainer darf src/core/ bzw. app/core/ nicht anfassen — das ist Sache der core-updater, die der Command vorher fährt.

Geändert

  • commands/maintenance/maintain.md — Orchestrator (Phasen, Modus-Erkennung, Rollback)
  • commands/maintenance/maintain-check.md — analysiert Framework-Drift und zu niedrige Pins statt „was könnte weg"
  • commands/maintenance/maintain-post-feature.md — Overrides anheben statt löschen
  • commands/maintenance/maintain-security.md — Ausnahme für framework-gepinnte Pakete
  • agents/npm-package-maintainer.md — Priority 4 (anheben statt löschen), Priority 5 (Framework-Alignment), Vendor-Grenze
  • skills/maintaining-npm-packages/SKILL.md — Override-Retention-Regel, „Frameworks vor Paketen"

🤖 Generated with Claude Code

kaihaase and others added 3 commits July 12, 2026 19:44
…s zu löschen

Ein realer Wartungslauf (offers, 2026-07) hat 20+ Security-Overrides gelöscht,
den Build zerlegt und musste komplett zurückgerollt werden. Ursache waren zwei
Anweisungen im Plugin selbst.

1) Zirkuläre Override-Regel

Der Agent bekam vorgegeben: "If override was for security and pnpm audit shows
no vulnerability -> REMOVE override". Das ist zirkulär — das Audit ist ja nur
deshalb sauber, WEIL der Override greift. Die Regel garantierte damit, dass
jeder wirksame Security-Override entfernt wird.

Neu: Overrides werden ANGEHOBEN, nicht gelöscht. Entfernen verlangt positiven
Beweis via `pnpm why`, dass das Paket den Baum verlassen hat. Der häufigste
reale Befund ist ohnehin ein anderer: Pins, die exakt eine Patch-Version unter
ihrem Fix liegen (im Realfall 8 von 36, u.a. vite 7.3.2 statt >=7.3.5) — exakt,
gepflegt aussehend und trotzdem verwundbar.

2) Frameworks waren aus dem Scope ausgeschlossen

nest-server und nuxt-extensions pinnen ihre Dependencies exakt. Eine CVE in
einer solchen Dependency ist per Override NICHT schließbar — der Override
überstimmt nur das Framework und erzeugt eine ungetestete Kombination. Genau
das passierte mit better-auth: Audit grün, API-Test rot. Der richtige Fix war
nest-server 11.25.2 -> 11.27.6, das die gepatchte Version selbst mitbringt.

maintain ist jetzt ein Orchestrator:
- Phase 0 erkennt die Topologie (Fullstack? npm- oder vendor-Mode je Projekt,
  anhand projects/api/src/core/ bzw. projects/app/app/core/).
- Phase 1 aktualisiert die Frameworks und routet nach Modus: vendor an
  nest-server-core-updater / nuxt-extensions-core-updater, npm-Major an
  nest-server-updater (der die Migration Guides hat), npm-Minor direkt.
- Phase 2 gleicht die Peers des Frameworks an (@nestjs/* usw.). Wird sonst
  vergessen und äußert sich als scheinbar unzusammenhängender Typfehler: nach
  dem nest-server-Update existierte @nestjs/schedule zweimal (gegen
  @nestjs/common 11.1.19 und 11.1.23) und der Build brach mit "Class 'CronJobs'
  incorrectly extends base class 'CoreCronJobs'".
- Phase 3 übergibt an npm-package-maintainer, Phase 4 verifiziert (check + E2E).
- Rollback-Protokoll: Snapshot vor Phase 1, bei nicht reparierbarem Bruch
  zurückrollen statt einen halb migrierten Dependency-Baum zu hinterlassen.

Der npm-package-maintainer darf in Vendor-Projekten src/core/ bzw. app/core/
nicht anfassen — das ist Sache der core-updater.

Angepasst: maintain, maintain-check, maintain-post-feature, maintain-security
(dort die Ausnahme für framework-gepinnte Pakete), der Agent und der Skill.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
enforce draft-only PRs and forbid merges in core contributors
add e2e DB isolation reference and harden update/check workflows
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant