Skip to content

refactor: Simplify-Audit (toter Code, Helper-Reuse, Effizienz) - #356

Merged
S540d merged 1 commit into
testingfrom
chore/simplify-audit
Oct 12, 2026
Merged

S540d merged 1 commit into
testingfrom
chore/simplify-audit

Conversation

@S540d

@S540d S540d commented Oct 11, 2026

Copy link
Copy Markdown
Owner

Pull Request

Beschreibung

Wiederkehrender /simplify-Durchlauf (CLAUDE.md [SIMPLIFY-AUDIT]) über app/, components/, services/, constants/. Enthält nur kleine Refactorings, die das Verhalten nicht ändern sollen. Unsichere Funde sind ausgelassen und unten aufgelistet.

Toter Code entfernt

  • components/AnimatedHero.tsx (+ Test und Mock), wird nirgends gerendert
  • constants/WebAccessibility.ts, hatte keine einzige Referenz
  • In app/game.tsx ungenutzte Imports (Platform, getDifficultyForLevel, Default-DrawingCanvas) und der Handler handleRestartCurrentLevel; in app/settings.tsx ungenutzte Imports; in TutorialOverlay die Konstante TOTAL_STEPS
  • colors.surface ?? Colors.surface: Der Fallback kann nie greifen, weil surface ein Pflichtfeld ist (BadgesModal, ParentDashboard)
  • Colors.accents.dailyChallengeText und streakBadge werden seit Startseite entschlacken, ruhiger Merke-Timer, Icon-Farbe & -Assets vereinheitlichen #354 nicht mehr verwendet

Vorhandene Helfer statt Kopien

  • getTotalStars() (MascotManager) in QuickStatsCards
  • getLocalDateKey() (StreakManager) in DailyChallengeManager und SessionTracker
  • SITE_URL und PLAY_STORE_URL aus constants/ExternalLinks in app/_layout.tsx
  • Colors.difficulty statt Hex-Kopien in RatingManager.getStarColor und Badge
  • Colors.accents.dailyChallenge statt des Literals #F59E0B in gallery.tsx

Effizienz

  • Level-Auswahl: ein getProgress() statt 20× getLevelRating() (jeweils ein Storage-Read plus JSON-Parse)
  • SettingsModal: ein getSettings() statt zweimal getSetting() (12 → 6 Reads)
  • saveSettings: die 6 Writes laufen parallel statt nacheinander
  • LevelImageDisplay: Der SVG-Baum inkl. Outline-/Dark-Transformation wird gecacht und nicht mehr bei jedem Timer-Tick der Merke-Phase neu gebaut
  • Native Canvas: Fertige Striche werden gecacht und nicht mehr bei jedem Touch-Move neu als Skia-Path gebaut; außerdem fällt eine doppelte Render-Schleife weg
  • Web-Canvas: getContext('2d', { willReadFrequently: true }) auch im Redraw-Effekt. Der erste Aufruf legt die Kontext-Optionen fest, deshalb wurde das Flag beim Flood-Fill bisher ignoriert

Bewusst ausgelassen (Folge-Issues / Produktentscheidung)

  • Mascot-Accessoires werden nie gezeichnet: Mascot bekommt nirgends accessory übergeben, der Unlock-Toast kündigt also Accessoires an, die nie erscheinen. Das ist eine Produktentscheidung.
  • restartFromLevel1 setzt im Gegensatz zu den anderen Reset-Pfaden savedToGallery nicht zurück. Das wäre eine Verhaltensänderung.
  • ResultPhase ruft getRatingFeedback im Render auf und rückt dabei Rotationszähler weiter. Der Text kann sich deshalb beim Re-Render ändern.
  • Größere Deduplikationen: Skalierungs-Logik viermal kopiert (Canvas web/native, ShareService web/native); Bestätigungsdialog web/native dreimal; Web-Canvas zeichnet beim Malen alle Fills neu; ThemeColors-Tokens, die niemand liest; platform.ts mit Funktionen, die nur Tests verwenden; Button.tsx, das nur Tests verwenden.

Art der Änderung

  • Bugfix
  • Neue Funktion
  • Breaking Change
  • Dokumentation Update
  • Refactoring (soll das Verhalten nicht ändern)

Cross-Platform Kompatibilität

Betrifft dieser PR plattformspezifischen Code? Ja: DrawingCanvas.native.tsx (Memoisierung) und DrawingCanvas.web.tsx (Kontext-Option). Keine neuen Web-APIs.

Testing Checklist

  • Lokaler Build erfolgreich (expo export --platform web)
  • Keine TypeScript Errors, keine ESLint Warnings, Prettier sauber
  • npm run test:ci: 454/454 grün (4 Tests weniger durch das entfernte AnimatedHero), Coverage-Schwellen erfüllt
  • validate:svg-counts
  • Native Canvas auf Android-Gerät (Memoisierung der Striche) noch nicht manuell getestet

🤖 Generated with Claude Code

https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2


Generated by Claude Code

…Effizienz

Toter Code: AnimatedHero (+Test/Mock), constants/WebAccessibility.ts,
ungenutzte Imports/Handler in game.tsx/settings.tsx, TOTAL_STEPS,
unerreichbare `?? Colors.surface`-Fallbacks, ungenutzte Colors.accents-Tokens.

Reuse: getTotalStars (QuickStatsCards), getLocalDateKey (DailyChallenge-
Manager, SessionTracker), SITE_URL/PLAY_STORE_URL aus ExternalLinks
(_layout), Colors.difficulty statt Hex-Kopien (RatingManager, Badge),
Colors.accents.dailyChallenge statt Literal (gallery).

Effizienz: Level-Screen liest Progress einmal statt 20x; SettingsModal
ein getSettings() statt zwei; saveSettings schreibt parallel;
LevelImageDisplay memoisiert den SVG-Baum (kein Rebuild pro Timer-Tick);
native Canvas memoisiert fertige Striche (kein Rebuild pro Touch-Move);
Web-Canvas-Kontext mit willReadFrequently.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
@github-actions

Copy link
Copy Markdown

🔀 Mergeability-Report

✅ Konfliktfrei mergebar (unstable).
✅ Ziel-Branch testing ist policy-konform.

CI-Checks: ✅ keine fehlgeschlagenen Checks

⏳ 🔐 Docs Privacy Check
⏳ 🔧 Platform Compatibility
⏳ 🔍 Code Quality & Linting
⏳ 🔒 Security Audit
⏳ ⚙️ Workflow Linting / actionlint
⏳ 🔑 Keystore & Credential Scan
⏳ mergeability / mergeability
⏳ Analyze (javascript-typescript)
⏳ Analyze (actions)

Merge-Checkliste

  • CI-Checks grün
  • Keine Merge-Konflikte
  • Ziel-Branch korrekt
  • (Optional) tiefes KI-Review via /review aus Claude Code (Pro-Abo, ohne API-Kosten)

Kostenlos generiert von reusable-mergeability.yml · keine API-Kosten · review-gate: success

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.

2 participants