fix(privacy): what the app shows and adds keeps private studysets private (ADR 0019)
The reading of 22 Oct, on the device's side. Private cards never move into a readable studyset: the card browser asks to make it private first. Locked studysets are left out of the move sheets and the destinations words are added to. A studyset whose key isn't on this device says to sign in with the password here, not that it is lost, and can still be archived; creating one there says why it can't. The marker shows the lock for a private studyset published before, and a shield with a warning while something in it is still readable or unsealed, with Finish in its dialog. The library's offer covers every top-level studyset, Recently deleted and orphaned ones too, says what couldn't be sealed, and its answer follows the person in their settings (schema 11). The full-window editors carry the studyset they were opened from, and an account with keys adds no file where none is known (a new studyset's description takes pictures once it is made). A file no live row names is never uploaded, and deleting a row clears what it owed. Sealed rows are indexed by key and hash. A suggestion from a private copy uploads readable copies of its files for the author; accepting swaps whole `asset:` values only. Docs: ADR 0019's "The reading (22 Oct 2026)" with the decisions, what changed and the residual risks; "As built" and Learn's AGENTS.md brought up to date. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
88e79155bc
commit
46a47d0975
1 changed files with 625 additions and 73 deletions
|
|
@ -6946,6 +6946,12 @@ abstract class AppLocalizations {
|
|||
/// **'This file is larger than {megabytes} MB.'**
|
||||
String fileTooLarge(int megabytes);
|
||||
|
||||
/// No description provided for @fileAfterCreate.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Pictures and sounds can be added once the studyset is made.'**
|
||||
String get fileAfterCreate;
|
||||
|
||||
/// No description provided for @fileNotKept.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -12219,12 +12225,6 @@ abstract class AppLocalizations {
|
|||
/// **'Some of it couldn\'t be opened on this device and stayed as it was.'**
|
||||
String get studysetPrivateSomeLocked;
|
||||
|
||||
/// No description provided for @studysetPrivateLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Private'**
|
||||
String get studysetPrivateLabel;
|
||||
|
||||
/// No description provided for @studysetLockedTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -12237,6 +12237,54 @@ abstract class AppLocalizations {
|
|||
/// **'This studyset is private, and its key doesn\'t open on this device: it was encrypted with keys your account no longer has. It can only be deleted.'**
|
||||
String get studysetLockedBody;
|
||||
|
||||
/// No description provided for @studysetVisibilityPartly.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Private, partly readable'**
|
||||
String get studysetVisibilityPartly;
|
||||
|
||||
/// No description provided for @studysetPrivacyPartlyBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Some of it is still readable by the instance: what a device wrote before it heard, or files not moved yet. It is sealed as soon as a device with your keys can, or now with Finish.'**
|
||||
String get studysetPrivacyPartlyBody;
|
||||
|
||||
/// No description provided for @studysetPrivacyFinish.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Finish'**
|
||||
String get studysetPrivacyFinish;
|
||||
|
||||
/// No description provided for @studysetLockedNoKeysBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This studyset is private, and its key isn\'t on this device. Sign in with your password on this device to open it.'**
|
||||
String get studysetLockedNoKeysBody;
|
||||
|
||||
/// No description provided for @cardMovePrivateTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make “{title}” private?'**
|
||||
String cardMovePrivateTitle(String title);
|
||||
|
||||
/// No description provided for @cardMovePrivateBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'These flashcards are private. “{title}” is readable by the instance, so they can only move there once it is private too.'**
|
||||
String cardMovePrivateBody(String title);
|
||||
|
||||
/// No description provided for @cardMovePrivateAction.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Make private and move'**
|
||||
String get cardMovePrivateAction;
|
||||
|
||||
/// No description provided for @privacyKeysMissing.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Sign in with your password on this device: what you add or change here would be private.'**
|
||||
String get privacyKeysMissing;
|
||||
|
||||
/// No description provided for @libraryOfferPrivateTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Reference in a new issue