feat(feedback): report, suggest, and an inbox in the Profile tab

The app's side of stage 4 (ADR 0005, rule 11). The card's Report sheet
offers "Send to the author too" on a card from a release; a copy's menu
reports the studyset as a whole and lists what is reported and
suggested on it, as Explore's summary does; the editors of cards, notes
and steps suggest them to the author as the learner has them, never
under "no derivatives". The Profile tab holds the inbox: the threads on
the person's published studysets and those they wrote, the newest
activity first, with a count on the tab. A thread shows a suggestion
beside the author's own item and its replies; its writer and the author
reply, and the author accepts (the content becomes their own edit, its
files fetched from the writer's), declines, closes, hides or blocks.
Writing needs an identity; reading what is public doesn't.

ADR 0005 gets an addendum for stage 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-10 01:29:09 +02:00
commit 1c1a1aada8
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -5351,6 +5351,166 @@ class AppLocalizationsEn extends AppLocalizations {
String exploreBasedOn(String location) {
return 'based on $location';
}
@override
String get feedbackReport => 'Report';
@override
String get feedbackSuggestion => 'Suggestion';
@override
String get feedbackOnStudyset => 'On the studyset';
@override
String get feedbackOnCard => 'On a flashcard';
@override
String get feedbackOnNote => 'On a note';
@override
String get feedbackOnStep => 'On a step';
@override
String feedbackByOn(String name, String date) {
return '$name · $date';
}
@override
String get feedbackStatusClosed => 'Closed';
@override
String get feedbackStatusAccepted => 'Accepted';
@override
String get feedbackStatusDeclined => 'Declined';
@override
String get feedbackStatusHidden => 'Hidden';
@override
String get feedbackReplyHint => 'Write a reply…';
@override
String get feedbackSend => 'Send';
@override
String get feedbackAccept => 'Accept';
@override
String get feedbackDecline => 'Decline';
@override
String get feedbackClose => 'Close';
@override
String get feedbackReopen => 'Reopen';
@override
String get feedbackHide => 'Hide';
@override
String get feedbackShow => 'Show';
@override
String feedbackBlock(String name) {
return 'Block $name';
}
@override
String feedbackBlockTitle(String name) {
return 'Block $name?';
}
@override
String get feedbackBlockMessage =>
'What they wrote on your studysets, and write, shows to nobody but them.';
@override
String get feedbackProposed => 'Proposed';
@override
String get feedbackYours => 'Yours now';
@override
String get feedbackAuthor => 'Author';
@override
String get feedbackAccepted =>
'Taken into your studyset. The next release credits its writer.';
@override
String get feedbackDecided => 'Done.';
@override
String get feedbackReplied => 'Reply sent.';
@override
String get feedbackBlocked => 'Blocked.';
@override
String get feedbackNotTaken =>
'This can\'t be taken: what it is about isn\'t in your studyset any more.';
@override
String get feedbackFailed => 'Couldn\'t reach your instance. Try again.';
@override
String get feedbackUnreachable =>
'Reports and suggestions can\'t be reached right now.';
@override
String get feedbackRetry => 'Retry';
@override
String get inboxTitle => 'Inbox';
@override
String get inboxIntro =>
'Reports and suggestions on your published studysets, and those you wrote.';
@override
String get inboxEmpty => 'Nothing yet.';
@override
String get studysetFeedback => 'Reports and suggestions';
@override
String get studysetFeedbackEmpty =>
'Nobody has reported or suggested anything yet.';
@override
String get reportToAuthor => 'Report to the author';
@override
String get cardReportToAuthor => 'Send to the author too';
@override
String get cardReportToAuthorHint =>
'Public: everyone learning it reads it, with your public profile.';
@override
String get feedbackReportSent => 'Sent to the author.';
@override
String get suggestToAuthor => 'Suggest to the author';
@override
String get suggestHint => 'What it changes, and why';
@override
String get suggestIntro =>
'The author sees it as you have it now, beside theirs. Public: everyone learning it reads it, with your public profile.';
@override
String get suggestSent => 'Suggestion sent.';
@override
String get suggestNoDerivatives =>
'Its licence forbids adaptations: no suggestions.';
@override
String get feedbackNeedsIdentity =>
'Sign in with GitHub to report to the author and suggest.';
}
/// The translations for English, as used in the United Kingdom (`en_GB`).
@ -5439,4 +5599,8 @@ class AppLocalizationsEnUs extends AppLocalizationsEn {
@override
String get exploreReadLicence => 'Read the license';
@override
String get suggestNoDerivatives =>
'Its license forbids adaptations: no suggestions.';
}