Skip to content

Release v1.9.1 (versionCode 72) - #384

Merged
S540d merged 125 commits into
mainfrom
testing
Nov 3, 2026
Merged

S540d merged 125 commits into
mainfrom
testing

Conversation

@S540d

@S540d S540d commented Nov 3, 2026

Copy link
Copy Markdown
Owner

Release 1.9.1 / versionCode 72 für den Play Store. Freigabe für den main-Merge liegt vom Nutzer vor.

Gegenüber main (1.9.0 / vc71, nie veröffentlicht):

🤖 Generated with Claude Code

S540d and others added 30 commits July 8, 2026 10:22
Play Store hat bereits 1.7.1 (vc 67, via nie-gemergtem Tag v1.7.1).
main stand auf 1.7.0/66 → auf 1.7.2/68 hochgezogen (vc > 67, neuer Name).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chore: Version 1.7.2 / versionCode 68
Beim SDK-54→55-Upgrade waren beide Module auf SDK-54-Versionen
zurückgeblieben (expo-file-system@18, expo-sharing@13) und brachen den
Android-Build mit Kotlin-Compile-Fehlern gegen expo-modules-core@55
(Unresolved reference 'AppDirectoriesModuleInterface', 'overrides nothing').

- expo-file-system ~18.0.12 → ~55.0.23
- expo-sharing ~13.0.1 → ~55.0.21 (+ Plugin-Eintrag in app.json)

Lokaler Production-Build (vc68) baut damit erfolgreich durch und ist
korrekt mit dem Play-Store-Key signiert.

Verbleibende Versions-Drifts (RN, expo-router, reanimated u.a.): #276

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ter docs/

Texte aus Issue #243 (live seit Juni 2026) als gepflegte Vorlage ins Repo
übernommen: Titel, manuell geprüfte Kurzbeschreibungen (7 Sprachen) und
Langbeschreibung (EN + DE) inkl. Pflege-Hinweisen. Docs-Index aktualisiert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dn1NRntX3V2MASwCQqNwjy
Reichweite außerhalb des Stores: die Web-Demo bekommt echte SEO-Metadaten
(Title, Description mit "Gedächtnistraining Kinder App", Keywords, OG-/
Twitter-Tags, JSON-LD) via expo-router/head, da der Web-Export im
"single"-Output-Modus app/+html.tsx ignoriert. Zusätzlich ein Web-only
Footer mit Play-Store-Link und Datenschutz-Versprechen auf der Startseite,
sowie ein per Env-Flag aktivierbares, privacy-freundliches Analytics-Script
(Plausible-kompatibel, no-op ohne EXPO_PUBLIC_PLAUSIBLE_DOMAIN) als
Messgrundlage für zukünftige Reichweiten-Entscheidungen.
* Add Android large-screen compatibility for Play Store (Issue #278)

Set orientation to "default" instead of forcing portrait, and add a
config plugin that patches the generated AndroidManifest.xml with
android:resizeableActivity="true" on MainActivity, since Expo has no
built-in app.json field for it. Verified via `expo config --type
introspect` that the generated manifest carries both changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ErESLx67f6bi4CYk5yUUgs

* style: Prettier-Formatierung nach Merge von testing

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: S540d <S540d@users.noreply.github.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
…276)

react-native 0.83.2→0.83.6, react-native-reanimated ~4.2.2→^4.2.1,
react-native-safe-area-context ~5.7.0→~5.6.2, babel-preset-expo ~55.0.8
ergänzt — Sollstand laut `npx expo install --check` für Expo SDK 55.

Der Bump zieht Gradle 9.0.0 über @react-native/gradle-plugin mit, dessen
gebündelter foojay-resolver-convention 0.5.0 aber inkompatibel ist
(NoSuchFieldError: JvmVendorSpec.IBM_SEMERU, entfernt in Gradle 8.8+).
Bekannter Upstream-Bug (react/react-native#56287). Fix via patch-package:
foojay 0.5.0→1.0.0. postinstall-Hook wendet den Patch auch im EAS-npm-install an.

Lokaler EAS-Preview-Build grün, APK auf Testgerät installiert, 415 Tests grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Native Projekte werden bei jedem Build frisch generiert (expo prebuild /
EAS Local Build) und gehören nie ins Repo — expo-doctor warnt aktiv davor.
Konfiguration läuft über app.json + plugins/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
npm run build:doctor prüft vor dem Build die Fallstricke, die real Zeit
gekostet haben: Disk (<5 GB Skia-Blocker), JDK/Toolchain, foojay-Pin
(Issue #276), Expo-Dependency-Sollstand, hängende Gradle-Daemons, Branch.
Verwandelt kryptische Gradle-Abbrüche in klare ✅/⚠️/❌-Diagnosen.

Hintergrund: Die Build-Reibung dieser (simplen) App stammt komplett aus dem
mehrschichtigen Expo/RN/Gradle/JDK-Stack, nicht aus dem App-Code. Der Doctor
macht Toolchain-Drift früh und verständlich sichtbar, statt ihn erst im
Gradle-Stacktrace auftauchen zu lassen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat: SEO basics for web landing page (title, meta description, OG tags, robots.txt, sitemap.xml)

Expo web export (output: "single") ignores app/+html.tsx, so the served
index.html only got title/description/theme-color from app.json. Extended
scripts/post-build.js to inject robots meta, Open Graph and Twitter Card
tags, and a canonical link into the deployed index.html (and only that
page, to avoid duplicate-content signals on the privacy-policy pages).
Also adds public/robots.txt and public/sitemap.xml.

Part of S540d/project-templates#95

* style: prettier formatting for post-build.js

---------

Co-authored-by: S540d <S540d@users.noreply.github.com>
Sammelt seit dem letzten Store-Release (1.7.2/vc68) angesammelten Feature-Content
(Mascot & Altersstufen, Themen-Packs, Tablet-Layout, SEO-Basics, foojay/Gradle-9-Fix)
für den nächsten main-Merge.
…questClose)

- scripts/post-build.js: Title-Rewrite nur noch für index.html anwenden,
  wenn expo-router bereits einen nicht-leeren Titel gesetzt hat — verhindert,
  dass privacy-policy.html/-en.html/PRIVACY_POLICY.html beim GitHub-Pages-Deploy
  den App-Titel statt ihres eigenen erhalten.
- components/AgeGroupModal.tsx: onRequestClose ergänzt (No-Op, da das Modal als
  verpflichtendes Erst-Start-Gate ohne Abbrechen-Option gedacht ist) — konsistent
  mit allen anderen Modals im Code, die onRequestClose setzen.
Retention-Verbesserung: Primäraktionen werden sichtbar hervorgehoben und
alle wichtigen Tap-Ziele geben taktiles Feedback.

Neue wiederverwendbare Primitiven in AnimatedPrimitives.tsx:
- PressableScale: generischer Pressable mit Spring-Scale-Down beim Drücken,
  taktiles Feedback für schmucklose Kacheln (prefers-reduced-motion-aware)
- PulseView: sanfter Dauer-Puls als Aufmerksamkeits-Hinweis für Primär-CTAs
  (enabled-Prop, prefers-reduced-motion-aware)
- AnimatedButton respektiert jetzt ebenfalls prefers-reduced-motion

Anwendung:
- Home: Hero-CTA "Spiel starten" pulsiert dezent und reagiert auf Press;
  Daily-Challenge und Sekundär-Kacheln bekommen Press-Feedback + gestaffelte
  Eingangs-Animation (AnimatedCard-Stagger)
- Result: "Weiter"/"Nochmal"-CTA pulsiert nach Bewertung (zieht in die
  nächste Runde) + Press-Feedback
- Draw: primäre "Fertig"-Aktion mit Press-Feedback

Tests: neue AnimatedPrimitivesExtras-Suite (PressableScale/PulseView inkl.
reduced-motion-Verhalten); AnimatedPrimitives-Mock in GamePhaseComponents und
reanimated-Mock in HomeScreen entsprechend ergänzt. Alle 421 Tests grün,
ESLint sauber.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QxVwP7sLZr4K5kZ54HGBq
…ative behoben

Onboarding-Flow (klarere Nutzerführung, First-Run):
- markOnboardingDone() wird jetzt bereits beim bewussten Tippen auf „Spielen!"
  gesetzt, nicht erst nach der ersten Sternebewertung. Zuvor erschien der
  Vollbild-OnboardingModal bei JEDEM App-Start erneut, wenn ein Erst-Nutzer die
  erste Runde abbrach (Home/Zurück) — eine typische Reibung, die neue Nutzer
  vertreibt. Die In-Game-Coach-Marks (?tutorial=1) führen weiterhin durch die
  erste Runde. Der bestehende Post-Rating-Aufruf in game.tsx bleibt als
  idempotentes Sicherheitsnetz.

TypeScript:
- ShareService.native.ts nutzt jetzt `expo-file-system/legacy` — Expo SDK 54+
  verschob die klassische Datei-API (cacheDirectory, writeAsStringAsync,
  EncodingType) dorthin; der Default-Export bietet nur noch die neue
  File/Paths-Klassen-API. Behebt die zwei vorbestehenden tsc-Fehler ohne
  Verhaltensänderung. `npx tsc --noEmit` ist jetzt vollständig sauber (0 Fehler).

Tests: neue OnboardingModal-Suite (Start markiert Onboarding als erledigt +
startet Tutorial; Skip markiert erledigt + schließt). Alle 423 Tests grün,
ESLint sauber.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QxVwP7sLZr4K5kZ54HGBq
…-r7df11

feat: Micro-Animationen, klarere First-Run-Führung + TS-Cleanup
…Feedback) (#292)

* Freies Malen statt Kreativ, Icons in Über & Support entfernt

Startbildschirm: "Kreativ" -> "Freies Malen", Emoji vor dem Button-Text
entfernt. Einstellungen: Icons im Über & Support-Grid entfernt, nur
noch Text-Labels.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q632GFu8Zky7cApYi8E5j6

* docs: CLAUDE.md um Startbildschirm-/Einstellungen-Anpassungen (PR #292) ergänzen

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: S540d <S540d@users.noreply.github.com>
npm audit fix behebt die HIGH-severity brace-expansion-Schwachstelle
(GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895) sowie die moderate
postcss-Lücke (GHSA-fxqj-rqcc-2cmp), ohne Breaking Changes — nur
package-lock.json betroffen. CI (npm audit --audit-level=high) wäre
sonst beim nächsten Push fehlgeschlagen.

Verbleibend: 12 moderate Findings (uuid-Chain über xcode/@expo/config-
plugins), nur via --force mit Downgrade auf expo@46.0.21 behebbar —
bewusst nicht automatisiert, siehe CLAUDE.md Security-Sektion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJE41SBJh9ufy8Az43vtzV
Die required Status Checks wurden repo-übergreifend aus dem testing-Gate
entfernt (neues Ruleset protect-testing: deletion + non_fast_forward +
pull_request, aber keine CI-Checks). CI-Läufe auf testing-PRs sind damit
nicht mehr merge-relevant und reine Ressourcenverschwendung.

Der push-Trigger bleibt unverändert; das Gate greift voll beim PR
testing → main.

Co-authored-by: S540d <S540d@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
claude and others added 26 commits October 22, 2026 20:38
…ebrochener Breite

Das canvas-Attribut schneidet Nachkommastellen ab, getImageData und
floodFillPixels rechneten aber mit der übergebenen (gebrochenen) Breite.
Bei z. B. screenWidth * 0.44 = 184,8 stimmte die Zeilenadressierung nicht
mehr und Fills verschwanden still (auf dem Ergebnis-Screen und auf Geräten
mit gebrochener Fensterbreite auch in der Zeichenphase).

width/height werden jetzt am Komponentenanfang abgerundet. Regressionstest
prüft ganzzahlige Canvas-Maße und getImageData-Argumente; im Browser bei
420 px Viewport verifiziert (vorher keine Fills im Ergebnis, jetzt sichtbar).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
Konflikt nur in components/__tests__/DrawingCanvas.web.test.tsx (beide PRs
hängen neue describe-Blöcke am Dateiende an): beide Testgruppen behalten.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
…tive-Dialog (#360)

- utils/platform.ts: confirmDestructive({ title, message, confirmLabel,
  cancelLabel, onConfirm }) — window.confirm im Web, Alert.alert mit
  destruktivem Button nativ
- creative.tsx, gallery.tsx, DrawPhase.tsx: eigene Web/Native-Verzweigungen,
  // platform-safe-Kommentare und ungenutzte Platform/Alert-Imports entfernt
- SoundManager, SentryService: isWeb statt Platform.OS; redundanter
  Web-Check in den Haptics-Guards entfällt (Haptics wird nur nativ geladen)
- Tests: Web- und Native-Zweig des Helpers (isoliert pro Plattform)

ReviewManager und ParentalGate bleiben bewusst bei Platform.OS (Laufzeit-
Check, ihre Tests setzen Platform.OS dynamisch).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
#359)

Bounding Box der Striche → Skalierung/Offset stand fast identisch in
DrawingCanvas.web.tsx, DrawingCanvas.native.tsx (getScaledPaths),
ShareService.ts und ShareService.native.ts (computeScaleOffset); nur das
Padding unterschied sich (10 Canvas, 40 Export).

- utils/drawingTransform.ts: computeFitTransform(paths, width, height,
  padding) + IDENTITY_TRANSFORM, ohne React-Native-Abhängigkeit
- alle vier Stellen nutzen den Helper (-138 Zeilen)
- Tests: Randfälle (leer, nur Fills, Einzelpunkt, Linie, Padding) und ein
  Äquivalenztest gegen die bisherige Implementierung für 300 zufällige
  Zeichnungen

Verhalten unverändert; im Browser pixelidentisch (Ergebnis-Canvas,
Replay-Mitte, Replay-Ende) gegenüber dem Stand davor.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
Konflikt nur in CHANGELOG.md (beide PRs ergänzen einen Eintrag unter
"Changed"): beide Einträge behalten.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
…unde

lastCheckedRatingRef wurde beim Zurücksetzen des Ratings auf 0 (neue Runde)
nicht zurückgesetzt, daher wurde z.B. 5 Sterne nach 5 Sternen übersprungen:
kein Konfetti, keine Abzeichen-Prüfung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
Nirgends referenziert (app.json, Code, Docs, Scripts).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
- CHANGELOG: [Unreleased] zu [1.9.0] konsolidiert (doppelte Abschnitte
  zusammengeführt), fehlende Änderungen seit Play-Store-Version 1.8.0
  ergänzt (Pause-Dialog, Einstellungs-Gruppierung, Impressum, Icon/Farben,
  Darkmode-Fix, Konfetti-Fix #371)
- CLAUDE.md: Versionsstand (Store 1.8.0/69, testing 1.9.0/71) korrigiert
- validate-release.sh: stammte aus dem 1x1-Trainer (App.tsx, Android/
  Gradle) und lief hier ins Leere; jetzt projektspezifisch (Versionen,
  versionCode > letzter Tag, CHANGELOG, Lint, tsc, SVG, Jest, Audit-Gate,
  Web- und Android-Bundle)
- .audit-allowlist.json: braces-Eintrag ohne Treffer entfernt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
Vorlage aus der Store-Ersteinrichtung, verwies auf nicht vorhandene Docs
(PLAY_STORE_METADATA.md, DEPLOYMENT_GUIDE.md). Release-Prüfung übernimmt
npm run validate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
- Root-zod (via eslint-plugin-react-hooks) 4.4.3 -> 4.6.7, nur Lockfile
- zod@3 unter @expo/cli: kein gepatchter 3.x-Release, @expo/cli verlangt
  ^3.25.76 -> befristet bis 2026-12-31 in .audit-allowlist.json (Build-
  Tooling, nicht im App-Bundle; Muster wie node-forge, #348)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AfCKFu51beRuwRbDYQRaJd
chore: Release 1.9.0 (versionCode 71) auf testing vorbereiten
Behebt GHSA-7wch-p9px-956x, GHSA-jc66-7q78-782g, GHSA-8hrf-8g6f-7xwp,
GHSA-hqq3-7jhf-c5jx, GHSA-5x38-2vff-x55p. Nur Build-Tooling
(expo -> @expo/cli), gezielt per npm update statt audit fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-forge-Eintrag entfernen

GHSA-qr28-fpjm-wq7f: Fix nur in decode-uri-component 0.5.1 (ESM-only,
inkompatibel mit query-string@7 aus expo-router) bzw. expo-router 58
(SDK-Major). Befristet bis 2026-12-31, mit dem nächsten SDK-Upgrade
auflösen. GHSA-86w9-cpqp-85rv ist durch node-forge 1.4.2 behoben.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(deps): node-forge 1.4.2 + Audit-Allowlist (decode-uri-component)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: CHANGELOG-Datum für 1.9.0 setzen
…ver-Crash)

Play-Store-Crash v1.8.0 (ZTE P963F91, Android 12): JSApplicationIllegalArgumentException
'connectAnimatedNodes: Animated node with tag (parent) does not exist'.

iconRotation.interpolate() und die Transform-Arrays wurden bei jedem Render neu
erzeugt. Re-Renders des Root-Layouts während des Splash (Sprach-/Font-/Theme-Init)
hängten so Native-Driver-Nodes ab und neu an; auf Fabric kann connectAnimatedNodes
dann einen bereits verworfenen Node referenzieren. Jetzt per useMemo stabil,
Komponente zusätzlich memoisiert. Regressionstest ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(splash): Native-Driver-Crash connectAnimatedNodes beheben
Ersetzt die nicht veröffentlichte 1.9.0/vc71 und enthält zusätzlich den
Splash-Crash-Fix (#381, #382).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore(release): v1.9.1 (versionCode 72)
Löst die Squash-Scheinkonflikte für den Release-PR v1.9.1 auf. Alle Konflikte
zugunsten von testing (ours); der Inhalt ist identisch mit testing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore: main in testing zusammenführen (Squash-Scheinkonflikte v1.9.1)
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown

🔀 Mergeability-Report

✅ Konfliktfrei mergebar (blocked).
⚠️ Ziel-Branch main – laut Policy gehen Feature-PRs gegen testing, nicht direkt gegen main.

CI-Checks: ✅ keine fehlgeschlagenen Checks

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

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

@S540d
S540d merged commit a7483ef into main Nov 3, 2026
26 checks passed
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