refactor(branding): rename app Tanemaki → Tane

Public name is now Tane (種, "seed"); Tanemaki (種まき, "to scatter seeds")
is kept only as etymology in the About screen and onboarding.

App not yet distributed, so format tokens rename cleanly with no migration:
backup extension .tanemaki→.tane, QR scheme tanemaki://→tane://, file
prefixes tane-*. Website link and species-catalog User-Agent →
tane.comunes.org. Android label capitalised to "Tane".

Identity/crypto constants already use org.comunes.tane (derivation, HKDF
backup, sync namespace, TANE1 recovery tag) — left untouched, so keys,
backups and sync are unaffected. Tests updated; analyze + full suite green.
This commit is contained in:
vjrj 2026-07-12 13:04:16 +02:00
parent b22db7d0cb
commit 064248144a
34 changed files with 180 additions and 180 deletions

View file

@ -109,12 +109,12 @@ void main() {
expect(find.text('Copy saved'), findsOneWidget);
});
testWidgets('saving a backup writes a sealed .tanemaki file', (tester) async {
testWidgets('saving a backup writes a sealed .tane file', (tester) async {
await tester.pumpWidget(section());
await tester.tap(find.text('Save a backup'));
await tester.pumpAndSettle();
expect(files.savedName, endsWith('.tanemaki'));
expect(files.savedName, endsWith('.tane'));
expect(BackupBox.looksSealed(files.savedBytes!), isTrue);
expect(find.text('Copy saved'), findsOneWidget);
});
@ -210,7 +210,7 @@ void main() {
await tester.pumpAndSettle();
expect(
find.text('This file could not be read as a Tanemaki copy'),
find.text('This file could not be read as a Tane copy'),
findsOneWidget,
);
});
@ -228,7 +228,7 @@ void main() {
await tester.tap(find.byKey(const Key('backup.recoverySave')));
await tester.pumpAndSettle();
expect(files.savedName, 'tanemaki-recovery.pdf');
expect(files.savedName, 'tane-recovery.pdf');
expect(String.fromCharCodes(files.savedBytes!.take(5)), '%PDF-');
// The seed itself never appears in the clear in the PDF stream metadata;
// the QR encodes the human code, which IS the secret that's the point