feat(base,learn): suggest changes within a shared studyset
ADR 0044's step 6b (D44, D46 to D48): a Viewer, and an agent, suggest changes within a shared studyset, which its Owner and Editors accept or decline. A suggestion or report is written as Explore's are, in its writer's own synced space, with kinds of its own (space-suggestion, space-report) and the space's id in feedback_thread's publicationId, so no synced table changes and older apps, skipping kinds they don't know, keep syncing. Where the studyset is private it is sealed with its key, bound to the space; a reply to it is sealed for its thread. Learn's server gathers a space's threads for its members alone (feedback.threadsInSpace, NotFound for anyone else): only threads and replies by members now, decisions only from rows in the space itself, where the engine lets its Owner and Editors alone write; sealed payloads pass in base64 with their key and nonce. The inbox adds the threads its caller decides on or wrote. The module tells a host a person's spaces and each space's members (sharedSpacesOf, membersOfSpaces). No migration: no table changes. In the app, a Viewer's card and note offer Suggest a change: the fields write into the suggestion alone, sent with a message. A shared studyset's menu lists its Suggestions, where its Owner and Editors accept a change as a revision, or a new card or note into the studyset, and decide in the space. A suggestion naming a file that isn't the studyset's, or bringing files of its own, isn't taken. Whats-New: In a studyset shared with you as a viewer, suggest a change to a card or note; its owner and editors find your suggestions under Suggestions in its menu and accept or decline them. Whats-New-De: In einem Lernset, das du nur ansehen darfst, schlägst du Änderungen an Karteikarten und Notizen vor; Besitzer:in und Bearbeiter:innen finden sie im Menü unter „Vorschläge“ und nehmen sie an oder lehnen sie ab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
7aee78bd87
commit
82c777b1a5
5 changed files with 2949 additions and 427 deletions
|
|
@ -2310,5 +2310,13 @@
|
|||
"inboxSharedOpen": "Öffnen",
|
||||
"studysetNew": "Neu",
|
||||
"shareRefusedAgentViewer": "Ein Agent kann nur Betrachter:in sein.",
|
||||
"shareAgent": "Agent"
|
||||
"shareAgent": "Agent",
|
||||
"feedbackOnNewCard": "Eine neue Karteikarte",
|
||||
"feedbackOnNewNote": "Eine neue Notiz",
|
||||
"feedbackDecider": "Besitzer:in oder Bearbeiter:in",
|
||||
"studysetSuggestions": "Vorschläge",
|
||||
"suggestInSpace": "Änderung vorschlagen",
|
||||
"suggestInSpaceIntro": "Besitzer:in und Bearbeiter:innen dieses Lernsets sehen es neben ihrer Fassung und übernehmen es oder nicht. Alle darin lesen es, mit deinem öffentlichen Profil.",
|
||||
"suggestingNote": "Du schlägst eine Änderung vor: Nichts ändert sich, bis Besitzer:in oder Bearbeiter:innen sie übernehmen.",
|
||||
"suggestSend": "Vorschlag senden"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2950,5 +2950,21 @@
|
|||
"shareRefusedAgentViewer": "An agent can only be a Viewer.",
|
||||
"@shareRefusedAgentViewer": {"description": "An agent invited or set to another role than Viewer, refused"},
|
||||
"shareAgent": "Agent",
|
||||
"@shareAgent": {"description": "Marks a member that is an agent, a program acting for its owner"}
|
||||
"@shareAgent": {"description": "Marks a member that is an agent, a program acting for its owner"},
|
||||
"feedbackOnNewCard": "A new flashcard",
|
||||
"@feedbackOnNewCard": {"description": "What a suggestion within a shared studyset proposes: a new flashcard"},
|
||||
"feedbackOnNewNote": "A new note",
|
||||
"@feedbackOnNewNote": {"description": "What a suggestion within a shared studyset proposes: a new note"},
|
||||
"feedbackDecider": "Owner or editor",
|
||||
"@feedbackDecider": {"description": "Marks a reply in a shared studyset by someone who decides on suggestions"},
|
||||
"studysetSuggestions": "Suggestions",
|
||||
"@studysetSuggestions": {"description": "The menu entry and sheet of a shared studyset's suggestions and reports"},
|
||||
"suggestInSpace": "Suggest a change",
|
||||
"@suggestInSpace": {"description": "A Viewer's button: change a card or note as a suggestion to the studyset's owner and editors"},
|
||||
"suggestInSpaceIntro": "The owner and editors of this studyset see it beside theirs, and take it in or not. Everyone in it reads it, with your public profile.",
|
||||
"@suggestInSpaceIntro": {"description": "Above the message of a suggestion within a shared studyset"},
|
||||
"suggestingNote": "You're suggesting a change: nothing changes until the owner or an editor takes it in.",
|
||||
"@suggestingNote": {"description": "The line above a card or note a Viewer changes as a suggestion"},
|
||||
"suggestSend": "Send suggestion",
|
||||
"@suggestSend": {"description": "Sends a Viewer's changed card or note as a suggestion"}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13645,6 +13645,54 @@ abstract class AppLocalizations {
|
|||
/// In en, this message translates to:
|
||||
/// **'Agent'**
|
||||
String get shareAgent;
|
||||
|
||||
/// What a suggestion within a shared studyset proposes: a new flashcard
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'A new flashcard'**
|
||||
String get feedbackOnNewCard;
|
||||
|
||||
/// What a suggestion within a shared studyset proposes: a new note
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'A new note'**
|
||||
String get feedbackOnNewNote;
|
||||
|
||||
/// Marks a reply in a shared studyset by someone who decides on suggestions
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Owner or editor'**
|
||||
String get feedbackDecider;
|
||||
|
||||
/// The menu entry and sheet of a shared studyset's suggestions and reports
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Suggestions'**
|
||||
String get studysetSuggestions;
|
||||
|
||||
/// A Viewer's button: change a card or note as a suggestion to the studyset's owner and editors
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Suggest a change'**
|
||||
String get suggestInSpace;
|
||||
|
||||
/// Above the message of a suggestion within a shared studyset
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The owner and editors of this studyset see it beside theirs, and take it in or not. Everyone in it reads it, with your public profile.'**
|
||||
String get suggestInSpaceIntro;
|
||||
|
||||
/// The line above a card or note a Viewer changes as a suggestion
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'You\'re suggesting a change: nothing changes until the owner or an editor takes it in.'**
|
||||
String get suggestingNote;
|
||||
|
||||
/// Sends a Viewer's changed card or note as a suggestion
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Send suggestion'**
|
||||
String get suggestSend;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
|
|
|||
|
|
@ -8721,4 +8721,30 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
|
||||
@override
|
||||
String get shareAgent => 'Agent';
|
||||
|
||||
@override
|
||||
String get feedbackOnNewCard => 'Eine neue Karteikarte';
|
||||
|
||||
@override
|
||||
String get feedbackOnNewNote => 'Eine neue Notiz';
|
||||
|
||||
@override
|
||||
String get feedbackDecider => 'Besitzer:in oder Bearbeiter:in';
|
||||
|
||||
@override
|
||||
String get studysetSuggestions => 'Vorschläge';
|
||||
|
||||
@override
|
||||
String get suggestInSpace => 'Änderung vorschlagen';
|
||||
|
||||
@override
|
||||
String get suggestInSpaceIntro =>
|
||||
'Besitzer:in und Bearbeiter:innen dieses Lernsets sehen es neben ihrer Fassung und übernehmen es oder nicht. Alle darin lesen es, mit deinem öffentlichen Profil.';
|
||||
|
||||
@override
|
||||
String get suggestingNote =>
|
||||
'Du schlägst eine Änderung vor: Nichts ändert sich, bis Besitzer:in oder Bearbeiter:innen sie übernehmen.';
|
||||
|
||||
@override
|
||||
String get suggestSend => 'Vorschlag senden';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8642,6 +8642,32 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
|
||||
@override
|
||||
String get shareAgent => 'Agent';
|
||||
|
||||
@override
|
||||
String get feedbackOnNewCard => 'A new flashcard';
|
||||
|
||||
@override
|
||||
String get feedbackOnNewNote => 'A new note';
|
||||
|
||||
@override
|
||||
String get feedbackDecider => 'Owner or editor';
|
||||
|
||||
@override
|
||||
String get studysetSuggestions => 'Suggestions';
|
||||
|
||||
@override
|
||||
String get suggestInSpace => 'Suggest a change';
|
||||
|
||||
@override
|
||||
String get suggestInSpaceIntro =>
|
||||
'The owner and editors of this studyset see it beside theirs, and take it in or not. Everyone in it reads it, with your public profile.';
|
||||
|
||||
@override
|
||||
String get suggestingNote =>
|
||||
'You\'re suggesting a change: nothing changes until the owner or an editor takes it in.';
|
||||
|
||||
@override
|
||||
String get suggestSend => 'Send suggestion';
|
||||
}
|
||||
|
||||
/// The translations for English, as used in the United Kingdom (`en_GB`).
|
||||
|
|
|
|||
Loading…
Reference in a new issue