feat(studyset): make a studyset private or not, and what a locked one shows (ADR 0019)

- A top-level studyset's options make it private, with everything inside
  it, or non-private again, after a dialog saying what changes and that
  the instance's backups keep readable copies until they expire; a device
  without the account's keys says how to get them there.
- A locked studyset (its key doesn't open here) is titled Locked, says
  why when opened, and offers only Delete.
- Publishing names the person's tags as the device reads them, and says
  what to do when the studyset is private or a tag has no name.
- The export sheet says an archive is readable by whoever has the file.

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 21:40:27 +02:00
commit 0e10afcc68
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -9,6 +9,9 @@ class FakePublishGateway({
/// The studysets published, by id.
final Map<String, Publication> publications = const {},
}) implements PublishGateway {
/// The tag names sent with the last publish.
Map<String, String>? lastTagNames;
late final _publications = {...publications};
/// Refusals to answer the next publishes with, the first first.
@ -63,7 +66,9 @@ class FakePublishGateway({
required String slug,
required String notes,
RichContent? description,
Map<String, String>? tagNames,
}) async {
lastTagNames = tagNames;
if (fail case final error?) {
throw error;
}