9.3 KiB
Dead-Code Cleanup
Status: completed Task-ID: #25 Phase: 01 Estimated Effort: 2-3h (single commit, kein Sub-Sprint) Owner: claude (opus-4-7)
Problem
Im Codebase liegen mehrere ungenutzte Funktionen, auskommentierte Caller und orphan Env-Keys herum. Sie verzerren die Codebase-Analyse, lassen TypeScript-Helper-Pfade unklar und produzieren irreführende .env-Diffs. Konkret:
updateTenantUserinapps/web/app/utils/db/tenants.db.server.ts:454-461— kein einziger lebender Caller. Einziger ehemaliger Caller inapps/web/app/routes/app.$tenant/settings/members/edit.$id.tsx:92ist seit Monaten auskommentiert.compile()-Helper inapps/web/app/modules/workflowEngine/services/WorkflowsVariablesService.ts:26-50— nirgends importiert; der echte Pfad läuft überinterpolateVariables().AUTH_RECAPTCHA_SECRET_KEYinpackages/config/src/catalog.ts:539plus 3 Verwendungs-Stellen, von denen 0 tatsächlich gegen den Key prüfen (alle nutzenAUTH_RECAPTCHA_SITE_KEY).- Lokale
.enventhältGITHUB_TOKENundNOTIFICATIONS_NOVU_APP_IDohne jeden Codepfad..env.examplezieht diese Keys weiter, neue Devs setzen sie unnötig.
Aufwand für diesen Cleanup ist gering, der psychologische Effekt für Folgetasks (saubere Grep-Ergebnisse) ist hoch — deshalb ganz vorne in Phase 01.
Depends on
- Keine. Diese Task hat keine internen Abhängigkeiten und kann sofort starten.
Blocks
01-tech-debt-foundation/dep-updates.md(#28) — Dep-Updates touchen u.a.tenants.db.server.ts. Wenn dead-code dort drinbleibt, müssen Diffs zweimal reviewed werden. Best: zuerst löschen.01-tech-debt-foundation/password-policy.md(#27) — Password-Policy-Refactor greppt nach Auth-Env-Keys. OrphanAUTH_RECAPTCHA_SECRET_KEYwürde false-positives produzieren.
Approach
Single-commit Cleanup. Keine Migration, kein Feature-Flag, keine Rollback-Komplexität. Wir nehmen vier kleine Patches und packen sie in einen atomic commit 01/dead-code: remove unused helpers and orphan env keys.
Alternativen verworfen:
- Pro Stelle ein Commit — overkill bei vier reinen Löschungen, würde nur Log aufblähen.
- Deprecation-Phase — die Funktionen werden nicht extern konsumiert (kein Export aus packages/*-public-API), eine Deprecation-Phase würde keinen Mehrwert bringen.
Implementation Steps
- Verify-Suche bevor gelöscht wird — pro Symbol einmal
rg, dokumentieren ob es wirklich keine Caller gibt.- Files: keine; nur Recherche
- Output: kurze Liste in PR-Body
- Remove
updateTenantUser+ Caller-Stub — Funktion inapps/web/app/utils/db/tenants.db.server.ts(Zeilen 454-461) löschen; auskommentierte Block inapps/web/app/routes/app.$tenant/settings/members/edit.$id.tsx:92(samt umgebenden Kommentaren) entfernen.- Files:
apps/web/app/utils/db/tenants.db.server.ts,apps/web/app/routes/app.$tenant/settings/members/edit.$id.tsx
- Files:
- Remove
compile()-Helper — Funktion inapps/web/app/modules/workflowEngine/services/WorkflowsVariablesService.ts:26-50löschen; falls dort am Dateianfang Imports nur fürcompileda waren, mit entfernen.- Files:
apps/web/app/modules/workflowEngine/services/WorkflowsVariablesService.ts
- Files:
- Remove
AUTH_RECAPTCHA_SECRET_KEY— Eintrag inpackages/config/src/catalog.ts:539raus; alle Code-Stellen (rg-Liste aus Step 1) entfernen; fallsgetEnv("AUTH_RECAPTCHA_SECRET_KEY")irgendwo gerufen wird, ersetzen mit dem tatsächlich verwendetenAUTH_RECAPTCHA_SITE_KEYoder ganz entfernen wenn redundant.- Files:
packages/config/src/catalog.ts, ggf. weitere
- Files:
- Remove orphan env keys aus lokaler
.envund.env.example—GITHUB_TOKENundNOTIFICATIONS_NOVU_APP_IDaus.env.example(lokale.envist nicht im Repo, wird nur dokumentiert).- Files:
.env.example
- Files:
- Single atomic commit — alle vier Patches zusammen.
- Commit:
01/dead-code: remove unused helpers and orphan env keys
- Commit:
Test Requirements
- Unit-Tests: keine neuen — alle vier Löschungen sind Code, der nicht getestet ist (das ist Teil des Problems). Bestehende Test-Suite muss weiterhin grün laufen.
- Integration-Tests:
pnpm testglobal laufen lassen; speziell der workflowEngine-Test-Block (pnpm --filter=web test workflowEngine) und der tenant-route-Block. - Typecheck:
pnpm typecheckmuss grün sein (Imports müssen aufgelöst werden auch nach Löschung). - Lint:
pnpm lint --max-warnings=0muss grün sein (keine neuen ungenutzten-Import-Warnings). - Grep-Verify nach Commit:
rg "updateTenantUser|AUTH_RECAPTCHA_SECRET_KEY|NOTIFICATIONS_NOVU_APP_ID"darf nur noch indocs/oder gar nicht mehr matchen. - Coverage-Target: kein neuer Code — Coverage-Quote für die touched Files muss mindestens gleich bleiben.
- Test-Files: keine neuen.
NICHT als completed markieren bevor alle Tests grün sind.
Acceptance Criteria
updateTenantUserausapps/web/app/utils/db/tenants.db.server.tsentfernt- Auskommentierter Caller in
apps/web/app/routes/app.$tenant/settings/members/edit.$id.tsxentfernt compile()-Helper ausWorkflowsVariablesService.tsentferntAUTH_RECAPTCHA_SECRET_KEYauspackages/config/src/catalog.tsplus alle Code-References entferntGITHUB_TOKENundNOTIFICATIONS_NOVU_APP_IDaus.env.exampleentferntpnpm lint,pnpm typecheck,pnpm testgrün- Single atomic commit, push auf
agent/01-dead-code - Detail-MD Progress-Log aktualisiert
- PROGRESS.md Status auf
completed
Rollback Strategy
Single commit → git revert <sha> reicht. Keine DB-Migration, keine Daten-Veränderung, keine Production-Konfig-Änderung. Rollback ist sicher in <30s.
Wenn nach Rollback noch ein follow-up-Problem auftritt (z.B. ein Caller stellt sich doch heraus): erneuter Cleanup mit präziserer Grep-Recherche.
Security Notes
- Recaptcha-Removal: Sicherstellen, dass durch das Entfernen von
AUTH_RECAPTCHA_SECRET_KEYkeine Server-seitige Captcha-Prüfung wegfällt, die aktuell aktiv genutzt wird. Recherche in Step 1 muss explizit prüfen: gibt es einen Code-Pfad der/siteverifyo.ä. ruft? Wenn ja → diesen Pfad separat inpassword-policy.mdoder einem neuen Security-Task adressieren, nicht hier hidden mit löschen. - Keine sonstigen Security-Implikationen — die gelöschten Helper sind ungenutzt.
Subagent Recommendations
- Planning: unnötig — Task ist trivial.
- Research:
general-purpose-Subagent mit Auftrag: "Verifiziere per ripgrep dass folgende Symbole keinen lebenden Caller haben:updateTenantUser,WorkflowsVariablesService.compile,AUTH_RECAPTCHA_SECRET_KEY,GITHUB_TOKEN,NOTIFICATIONS_NOVU_APP_ID. Liefer-Format: pro Symbol entweder 'no callers' oder Liste der Caller-Files." - Implementation:
general-purpose-Subagent mit Brief: "Wende die 5 Löschungen aus dead-code.md Steps 2-5 an. Run lint+typecheck+test. Wenn grün → ein atomic commit gemäß Step 6." - Tests: kein separater Subagent — Reuse der bestehenden Suite reicht.
- Verification:
general-purpose-Subagent mit Acceptance-Criteria-Checkliste, liefert[ ] / [x]-Status. - Code-Review:
gsd-code-reviewernach Phase-Abschluss (nicht pro Task).
Staging-Deployment-Steps
Nicht nötig — reiner Code-Cleanup ohne Service-Side-Effects. Wenn CI grün, ist Production-Deploy sicher.
Deviations from Plan
- Step 5 (
.env.exampleorphan-key removal) ist no-op. WederGITHUB_TOKENnochNOTIFICATIONS_NOVU_APP_IDnochAUTH_RECAPTCHA_SECRET_KEYsind im aktuellen.env.exampleenthalten. Die Datei führt nur die tatsächlich verwendeten OAuth-/Provider-Keys (GITHUB_OAUTH_CLIENT_ID,GITHUB_OAUTH_CLIENT_SECRET,NOTIFICATIONS_NOVU_API_KEY,AUTH_RECAPTCHA_SITE_KEY). Detail-MD war out-of-date; das eigentliche Cleanup-Ziel ist trotzdem erreicht (keine Orphans im.env.example). Kein Code-Change nötig. - Precursor-Commit für Lefthook-Hook. Der lefthook
lint-staged-Step versagt mit--max-warnings=0für jede Datei, die unterapps/web/app/**liegt, weil.eslintrcline 20app/inignorePatternsführt und ESLint v8 dann "File ignored because of a matching ignore pattern" als Warning emittiert. Frühere Commits müssen den Hook umgangen haben. Per AGENT-INSTRUCTIONS Regel 9 (--no-verifyverboten) habe ich einen Precursor-Commit (ed9a1654) gemacht, derscripts/eslint-staged.mjsals Wrapper einführt und die staged-files vor dem Linten durchESLint.isPathIgnored()filtert. Dauerhafte Fix bis ESLint v9 (mit nativem--no-warn-ignored) eingeführt wird (Phase 01 #28). - Test-Files für
AUTH_RECAPTCHA_SECRET_KEYmussten mit-angepasst werden (3 statt 1 Stelle):packages/config/src/catalog.test.ts,env-access-inventory.test.ts,env-examples.test.tspluspackages/config/README.md. Im atomic commit enthalten.
Progress Log
- 2026-05-17 00:30 —
135718f3— Planning-Baseline committed (improvement-plan + STAGING-ACCESS.md stub, dieser Commit liegt auf main). - 2026-05-17 00:32 —
ed9a1654— Precursor: lefthooklint-stagedWrapper-Script (scripts/eslint-staged.mjs) eingeführt, filtert ESLint-ignored Files vor dem Linten. - 2026-05-17 00:33 —
b4de00bf—updateTenantUser,compile()-Helper,AUTH_RECAPTCHA_SECRET_KEY-Entry und 3 Test/Doc-Referenzen entfernt. 8 Files, -54 LOC.pnpm lint,pnpm typecheck,pnpm test(1890/1890) grün.