Initial FeelAloud project

This commit is contained in:
MrDiderot
2026-07-22 22:18:33 +02:00
commit 10fca0756d
48 changed files with 8942 additions and 0 deletions

129
docs/QA-CHECKLIST.md Normal file
View File

@@ -0,0 +1,129 @@
# QA- und Release-Checkliste
Diese Liste ist für einen Release Candidate auf einem echten iPhone gedacht.
Simulator-Tests allein reichen wegen Foundation Models, lokaler
Spracherkennung, Notifications und Action Button nicht aus.
## Build und Installation
- [ ] Clean Build mit der Release-Konfiguration erfolgreich
- [ ] Keine neuen Compilerwarnungen
- [ ] Automatisches Signing verwendet das erwartete Team
- [ ] Bundle-ID entspricht App Store Connect
- [ ] Marketing-Version und Build-Nummer sind korrekt
- [ ] App-Icon erscheint scharf auf Home Screen, Spotlight und Einstellungen
- [ ] Display Name lautet **FeelAloud**
- [ ] App läuft nur als iPhone-Target und nicht versehentlich als iPad-App
## Erststart und Berechtigungen
- [ ] Erststart zeigt keine unnötige Berechtigungsabfrage
- [ ] Mikrofonabfrage erscheint erst beim ersten Spracheintrag
- [ ] Speech-Abfrage erscheint nur für die Spracheingabe
- [ ] Ablehnung des Mikrofons erzeugt eine verständliche Meldung
- [ ] Ablehnung der Spracherkennung erzeugt eine verständliche Meldung
- [ ] Mitteilungsabfrage erscheint erst beim Aktivieren der Erinnerungen
- [ ] Bei abgelehnten Mitteilungen wird der Toggle zurückgesetzt
## Spracheintrag
- [ ] Aufnahme startet und die rote Stop-Schaltfläche ist erreichbar
- [ ] Teiltranskript erscheint während der Aufnahme
- [ ] Stoppen beendet Mikrofon und Audio Session
- [ ] Deutsche lokale Spracherkennung funktioniert im Flugmodus
- [ ] Nicht verfügbare lokale Spracherkennung fällt nicht auf Cloud zurück
- [ ] Leeres Transkript zeigt eine hilfreiche Meldung
- [ ] Manuelle Eingabe ist jederzeit möglich
## Lokale KI und Prüfmaske
- [ ] Foundation-Models-Status wird unter **Mehr** korrekt angezeigt
- [ ] Ein typischer deutscher Text wird sinnvoll strukturiert
- [ ] Nicht erwähnte Songnamen oder Aktivitäten werden nicht erfunden
- [ ] Alle KI-Felder lassen sich vor dem Speichern korrigieren
- [ ] Musik im Kopf blendet Ohrwurmfelder ein
- [ ] Ohne Musik im Kopf wird stattdessen Stress angeboten
- [ ] Nicht verfügbares Modell führt zur manuellen Eingabe
- [ ] Flugmodus verändert den lokalen KI-Pfad nicht
## Momentaufnahmen und Follow-up
- [ ] Manuelle Check-in-Schaltfläche öffnet genau fünf Gesichter
- [ ] Jede Stufe speichert exakt einen Snapshot
- [ ] Mehrfaches schnelles Tippen erzeugt keine Duplikate
- [ ] Haptisches Erfolgsfeedback wird ausgelöst
- [ ] **Gut** erzeugt keine Kontextfrage
- [ ] **Mittel** erzeugt keine Kontextfrage
- [ ] **Sehr gut** fragt beim nächsten normalen Öffnen am selben Tag nach
- [ ] **Schlecht** fragt beim nächsten normalen Öffnen am selben Tag nach
- [ ] **Sehr schlecht** fragt beim nächsten normalen Öffnen am selben Tag nach
- [ ] Kontextantwort wird gespeichert und im Verlauf angezeigt
- [ ] **Heute nicht mehr fragen** unterdrückt nur diesen Snapshot
- [ ] Offene Kontextfragen eines Vortags erscheinen nicht am Folgetag
## Erinnerungen
- [ ] Auswahl zwischen zwei und drei Erinnerungen funktioniert
- [ ] Alle konfigurierten Uhrzeiten erzeugen lokale Requests
- [ ] Ändern einer Uhrzeit ersetzt alte Requests
- [ ] Deaktivieren entfernt alle drei stabilen Requests
- [ ] Banner erscheint im Vordergrund
- [ ] Tipp auf Banner im Hintergrund öffnet den Check-in
- [ ] Tipp auf Banner nach Kaltstart öffnet den Check-in
- [ ] Notification-Öffnung löst nicht sofort eine alte Kontextfrage darüber aus
- [ ] Zeitzonen- und Sommerzeitwechsel wurden plausibilisiert
## Persistenz und Verlauf
- [ ] Gespeicherte Einträge bleiben nach App-Neustart erhalten
- [ ] Gespeicherte Check-ins bleiben nach App-Neustart erhalten
- [ ] 7-Tage-Filter enthält heute und die sechs vorherigen Kalendertage
- [ ] 30-Tage-Filter enthält heute und die 29 vorherigen Kalendertage
- [ ] Gesamtzeitraum beginnt beim ältesten Datensatz
- [ ] Eigener Zeitraum funktioniert auch bei vertauschten Von-/Bis-Daten
- [ ] Durchschnitt stimmt rechnerisch mit den sichtbaren Punkten überein
- [ ] Diagramm zeigt Werte 1 bis 5 korrekt
- [ ] Eintragsdetail zeigt alle bedingten Felder korrekt
## Export
- [ ] Export ist ohne Daten deaktiviert
- [ ] XLSX-Dateiname enthält den gewählten Datumsbereich
- [ ] XLSX öffnet ohne Reparaturmeldung in Apple Numbers
- [ ] XLSX öffnet ohne Reparaturmeldung in Microsoft Excel
- [ ] Arbeitsblatt **Übersicht** enthält Anzahl und korrekten Durchschnitt
- [ ] Arbeitsblatt **Momentaufnahmen** enthält Kontext und Quelle
- [ ] Arbeitsblatt **Tagebuch** enthält die Einträge des gewählten Zeitraums
- [ ] Umlaute, Emoji, Zeilenumbrüche, `&`, `<`, `>` und Anführungszeichen bleiben erhalten
- [ ] CSV besitzt UTF-8-BOM und Semikolon-Trennung
- [ ] CSV escaped Semikolon, Anführungszeichen und Zeilenumbrüche korrekt
- [ ] Abbrechen des Share-Sheets verändert keine gespeicherten Daten
## Systemintegration
- [ ] Kurzbefehl **Eintrag aufnehmen** erscheint nach Installation
- [ ] Kurzbefehl öffnet die App im Aufnahmefluss
- [ ] Action Button kann dem Kurzbefehl zugewiesen werden
- [ ] Action Button startet die Aufnahme zuverlässig aus gesperrtem/aktivem Zustand
## Oberfläche und Barrierefreiheit
- [ ] Light Mode und Dark Mode sind lesbar
- [ ] Größte Dynamic-Type-Größen verdecken keine primären Aktionen
- [ ] VoiceOver liest die fünf Bewertungen eindeutig vor
- [ ] Aufnahme-/Stop-Aktion besitzt ein eindeutiges Accessibility Label
- [ ] Farbige Informationen sind zusätzlich durch Text oder Symbol erkennbar
- [ ] Bedienung funktioniert auf der kleinsten unterstützten iPhone-Größe
- [ ] Deutsche Texte sind frei von abgeschnittenen oder überlappenden Elementen
## Datenschutz und Release Gate
- [ ] Netzwerkverkehr des Release Builds zeigt keinen eigenen Datenupload
- [ ] Keine personenbezogenen Testdaten liegen in Git oder Build-Artefakten
- [ ] `PrivacyInfo.xcprivacy` ist im erzeugten App-Bundle enthalten
- [ ] Xcode Privacy Report enthält keine unerklärten Required-Reason-APIs
- [ ] App-Store-Datenschutzangaben entsprechen dem finalen Build
- [ ] Öffentliche Datenschutz- und Support-URLs sind erreichbar
- [ ] Medizinischer Hinweis ist in App und Metadaten vorhanden
- [ ] TestFlight-Testhinweise nennen Geräte- und iOS-Voraussetzungen
- [ ] Bekannte Blocker sind dokumentiert und akzeptiert