feat(studyset): a studyset's marker says what the instance sees of it (ADR 0019)

The developer's decision of 21 Oct, on the library's cards and the
studyset's Share in its action row alike:
- a lock: private, end-to-end encrypted;
- an open lock: readable by the instance, not published;
- a globe: published.

The lock and the open lock open one dialog saying what that means and
changing it (Make non-private; Make private, or Publish…, which opens the
Publish sheet, while it isn't private); a topic's dialog says its privacy
is its tree's. The globe opens the Publish sheet, whose status for a
studyset not published now says so ("Not published") with an open lock,
as "Private" means something else now. Texts in en and de.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-21 23:07:31 +02:00
commit 9fb1ab2f6c
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
5 changed files with 425 additions and 48 deletions

View file

@ -1600,7 +1600,7 @@
"studysetSharePrivate": "Teilen: privat",
"studysetSharePublished": "Teilen: veröffentlicht",
"publishTitle": "Veröffentlichen",
"publishPrivate": "Privat · nur du siehst es",
"publishPrivate": "Nicht veröffentlicht · nur du siehst es in Learn",
"publishPublished": "Veröffentlicht · v{version} · {date}",
"publishIntro": "Eine Veröffentlichung ist dieses Lernset mit allem darin, so wie es jetzt ist. Andere können es finden, damit lernen und es kopieren. Jede Veröffentlichung bleibt, wie sie war; spätere Änderungen kommen in die nächste.",
"publishAnonymous": "Melde dich an, um ein öffentliches Profil zu haben und zu veröffentlichen.",
@ -2079,5 +2079,13 @@
"libraryOfferPrivateBody": "Neue Lernsets sind privat: Ende-zu-Ende-verschlüsselt, sodass nur deine Geräte sie lesen können. Die, die du vorher gemacht hast, bleiben für die Instanz lesbar, bis du sie auch privat machst. Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.",
"libraryOfferPrivateAction": "Alle privat machen",
"libraryOfferPrivateLater": "Jetzt nicht",
"exportReadableNote": "Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen."
"exportReadableNote": "Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen.",
"studysetVisibilityReadable": "Nicht privat, nicht veröffentlicht",
"studysetShareReadable": "Teilen: nicht privat",
"studysetPrivacyPrivateTitle": "„{title}“ ist privat",
"studysetPrivacyPrivateBody": "Alles darin ist Ende-zu-Ende-verschlüsselt: Nur deine Geräte können es lesen. Die Instanz kann es weder veröffentlichen noch Claude zeigen. Nicht mehr privat, wird es entschlüsselt und neu synchronisiert, sodass die Instanz es lesen kann.",
"studysetPrivacyReadableTitle": "„{title}“ ist nicht privat",
"studysetPrivacyReadableBody": "Die Instanz kann es lesen: Du kannst es veröffentlichen, und Claude kann es über den Connector lesen. Privat wird es auf deinen Geräten Ende-zu-Ende-verschlüsselt; Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.",
"studysetPrivacyTopic": "Seine Privatsphäre ist die des Lernsets, in dem es liegt.",
"studysetPrivacyPublish": "Veröffentlichen …"
}

View file

@ -1883,7 +1883,7 @@
"studysetSharePrivate": "Share: private",
"studysetSharePublished": "Share: published",
"publishTitle": "Publish",
"publishPrivate": "Private · only you can see it",
"publishPrivate": "Not published · only you see it in Learn",
"publishPublished": "Published · v{version} · {date}",
"@publishPublished": {"placeholders": {"version": {"type": "int"}, "date": {"type": "String"}}},
"publishIntro": "A release is this studyset with everything inside it, as it is now. Others can find it, learn from it and copy it. Each release stays as it was; later changes go into the next one.",
@ -2445,5 +2445,15 @@
"libraryOfferPrivateBody": "New studysets are private: end-to-end encrypted, so only your devices can read them. Those you made before stay readable by the instance until you make them private too. Copies in the instance's backups stay readable until those expire.",
"libraryOfferPrivateAction": "Make all private",
"libraryOfferPrivateLater": "Not now",
"exportReadableNote": "The archive isn't encrypted: whoever has the file can read it."
"exportReadableNote": "The archive isn't encrypted: whoever has the file can read it.",
"studysetVisibilityReadable": "Not private, not published",
"studysetShareReadable": "Share: not private",
"studysetPrivacyPrivateTitle": "“{title}” is private",
"@studysetPrivacyPrivateTitle": {"placeholders": {"title": {"type": "String"}}},
"studysetPrivacyPrivateBody": "Everything in it is end-to-end encrypted: only your devices can read it. The instance can't publish it, nor show it to Claude. Making it non-private decrypts it and syncs it again, so the instance can read it.",
"studysetPrivacyReadableTitle": "“{title}” isn't private",
"@studysetPrivacyReadableTitle": {"placeholders": {"title": {"type": "String"}}},
"studysetPrivacyReadableBody": "The instance can read it: you can publish it, and Claude can read it through the connector. Making it private encrypts it end to end on your devices; copies in the instance's backups stay readable until those expire.",
"studysetPrivacyTopic": "Its privacy is that of the studyset it's in.",
"studysetPrivacyPublish": "Publish…"
}

View file

@ -9468,7 +9468,7 @@ abstract class AppLocalizations {
/// No description provided for @publishPrivate.
///
/// In en, this message translates to:
/// **'Private · only you can see it'**
/// **'Not published · only you see it in Learn'**
String get publishPrivate;
/// No description provided for @publishPublished.
@ -12266,6 +12266,54 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'The archive isn\'t encrypted: whoever has the file can read it.'**
String get exportReadableNote;
/// No description provided for @studysetVisibilityReadable.
///
/// In en, this message translates to:
/// **'Not private, not published'**
String get studysetVisibilityReadable;
/// No description provided for @studysetShareReadable.
///
/// In en, this message translates to:
/// **'Share: not private'**
String get studysetShareReadable;
/// No description provided for @studysetPrivacyPrivateTitle.
///
/// In en, this message translates to:
/// **'“{title}” is private'**
String studysetPrivacyPrivateTitle(String title);
/// No description provided for @studysetPrivacyPrivateBody.
///
/// In en, this message translates to:
/// **'Everything in it is end-to-end encrypted: only your devices can read it. The instance can\'t publish it, nor show it to Claude. Making it non-private decrypts it and syncs it again, so the instance can read it.'**
String get studysetPrivacyPrivateBody;
/// No description provided for @studysetPrivacyReadableTitle.
///
/// In en, this message translates to:
/// **'“{title}” isn\'t private'**
String studysetPrivacyReadableTitle(String title);
/// No description provided for @studysetPrivacyReadableBody.
///
/// In en, this message translates to:
/// **'The instance can read it: you can publish it, and Claude can read it through the connector. Making it private encrypts it end to end on your devices; copies in the instance\'s backups stay readable until those expire.'**
String get studysetPrivacyReadableBody;
/// No description provided for @studysetPrivacyTopic.
///
/// In en, this message translates to:
/// **'Its privacy is that of the studyset it\'s in.'**
String get studysetPrivacyTopic;
/// No description provided for @studysetPrivacyPublish.
///
/// In en, this message translates to:
/// **'Publish…'**
String get studysetPrivacyPublish;
}
class _AppLocalizationsDelegate

View file

@ -5951,7 +5951,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get publishTitle => 'Veröffentlichen';
@override
String get publishPrivate => 'Privat · nur du siehst es';
String get publishPrivate =>
'Nicht veröffentlicht · nur du siehst es in Learn';
@override
String publishPublished(int version, String date) {
@ -7772,4 +7773,35 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get exportReadableNote =>
'Das Archiv ist nicht verschlüsselt: Wer die Datei hat, kann es lesen.';
@override
String get studysetVisibilityReadable => 'Nicht privat, nicht veröffentlicht';
@override
String get studysetShareReadable => 'Teilen: nicht privat';
@override
String studysetPrivacyPrivateTitle(String title) {
return '„$title“ ist privat';
}
@override
String get studysetPrivacyPrivateBody =>
'Alles darin ist Ende-zu-Ende-verschlüsselt: Nur deine Geräte können es lesen. Die Instanz kann es weder veröffentlichen noch Claude zeigen. Nicht mehr privat, wird es entschlüsselt und neu synchronisiert, sodass die Instanz es lesen kann.';
@override
String studysetPrivacyReadableTitle(String title) {
return '„$title“ ist nicht privat';
}
@override
String get studysetPrivacyReadableBody =>
'Die Instanz kann es lesen: Du kannst es veröffentlichen, und Claude kann es über den Connector lesen. Privat wird es auf deinen Geräten Ende-zu-Ende-verschlüsselt; Kopien in den Sicherungen der Instanz bleiben lesbar, bis diese ablaufen.';
@override
String get studysetPrivacyTopic =>
'Seine Privatsphäre ist die des Lernsets, in dem es liegt.';
@override
String get studysetPrivacyPublish => 'Veröffentlichen …';
}

View file

@ -5898,7 +5898,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get publishTitle => 'Publish';
@override
String get publishPrivate => 'Private · only you can see it';
String get publishPrivate => 'Not published · only you see it in Learn';
@override
String publishPublished(int version, String date) {
@ -7700,6 +7700,37 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get exportReadableNote =>
'The archive isn\'t encrypted: whoever has the file can read it.';
@override
String get studysetVisibilityReadable => 'Not private, not published';
@override
String get studysetShareReadable => 'Share: not private';
@override
String studysetPrivacyPrivateTitle(String title) {
return '“$title” is private';
}
@override
String get studysetPrivacyPrivateBody =>
'Everything in it is end-to-end encrypted: only your devices can read it. The instance can\'t publish it, nor show it to Claude. Making it non-private decrypts it and syncs it again, so the instance can read it.';
@override
String studysetPrivacyReadableTitle(String title) {
return '“$title” isn\'t private';
}
@override
String get studysetPrivacyReadableBody =>
'The instance can read it: you can publish it, and Claude can read it through the connector. Making it private encrypts it end to end on your devices; copies in the instance\'s backups stay readable until those expire.';
@override
String get studysetPrivacyTopic =>
'Its privacy is that of the studyset it\'s in.';
@override
String get studysetPrivacyPublish => 'Publish…';
}
/// The translations for English, as used in the United Kingdom (`en_GB`).