feat(meditate): dreams spoken: a microphone in the dream's editor, and Today's Speak it

The editor dictates where the cursor stands with halkyon_app's Dictation,
showing it listens and the words heard, listening again after each pause
until stopped or three silent listens, in the app's language. No
microphone where the device has no recogniser (Linux). On Android it asks
for recognition on the device; the privacy page says what each platform
does. Android's, iOS's and macOS's microphone declarations as Learn's.
ADR 0038, D15.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-03 14:47:35 +01:00
commit 433e544d44
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -42,6 +42,20 @@ void main() {
return methodConnector.call(sessionBuilder.build(), parameters);
}
test('the privacy page says what Meditate keeps sealed, and that a '
"dream spoken is written by the device's own speech recognition, "
'which on Android may send the sound to Google (ADR 0038, D15)', () {
final points = meditateBase().privacyPagePoints;
expect(points, isNotEmpty);
final english = points.map((point) => point.english).join(' ');
final german = points.map((point) => point.german).join(' ');
expect(english, contains('dreams'));
expect(english, contains('speech recognition'));
expect(english, contains('Google'));
expect(german, contains('Spracherkennung'));
expect(german, contains('Google'));
});
test('its basics name the app it serves, `meditate`, so only Meditate '
'takes it for an instance of its own', () async {
final basics = (await call('instance', 'basics'))! as InstanceBasics;