Initial FeelAloud project
This commit is contained in:
129
docs/QA-CHECKLIST.md
Normal file
129
docs/QA-CHECKLIST.md
Normal 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
|
||||
Reference in New Issue
Block a user