feat(learn): Explore by what a licence allows, a skeleton while the library loads, and an assistant's agreement per provider (ADR 0005, rule 12; ADR 0021, D66)

- Explore filters by what a studyset's licence lets a learner do: adapt
  it (no NoDerivatives) and use it commercially (no NonCommercial),
  which the instance reads from the release's licence
  (ExploreQuery.adaptable, commercial) and the app the same way
  (LicenseUse). An instance from before ignores both.
- While the studysets are read, the Library shows shimmering skeletons
  of their cards rather than a spinner: halkyon_ui's new Shimmer and
  SkeletonBox, still where the system asks for no animations.
- The scope's "Include private studysets" is offered only while the
  person has a private studyset.
- An agreement to what goes where is per provider (protocol and host):
  agreeing to one assistant agrees to every assistant of that provider,
  those granted later too, and the agreement sheet says so. No
  migration: it is written on every grant of the provider, so taking
  one back keeps it for the others, and read per provider from any of
  them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-02 01:09:04 +01:00
commit 5641285d31
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1642,6 +1642,13 @@
"exploreKindPaths": "Lernpfade",
"exploreKindPdfs": "PDFs",
"exploreKindsIntro": "Nur Lernsets, die all das enthalten.",
"exploreLicense": "Lizenz",
"exploreLicenseChosen": "Lizenz: {count}",
"exploreLicenseIntro": "Nur Lernsets, deren Lizenz dir jedes davon erlaubt. Alles hier darf kopiert und weitergegeben werden.",
"exploreLicenseAdapt": "Bearbeiten",
"exploreLicenseAdaptDetail": "Verändern und das Ergebnis weitergeben: keine Lizenzen mit NoDerivatives.",
"exploreLicenseCommercial": "Kommerziell nutzen",
"exploreLicenseCommercialDetail": "Für bezahlte Arbeit oder Unterricht nutzen: keine Lizenzen mit NonCommercial.",
"exploreClearFilters": "Filter zurücksetzen",
"exploreNothingMatches": "Nichts Veröffentlichtes passt dazu.",
"exploreBy": "von {author}",