Skip to content

Latest commit

 

History

History
149 lines (132 loc) · 7.93 KB

File metadata and controls

149 lines (132 loc) · 7.93 KB

Changelog

Format nach Keep a Changelog, ein Abschnitt pro Paket-Release (Tag <paket>/vX.Y.Z). Jeder Eintrag nennt, was sich ändert und was ein konsumierendes Tool beim Upgrade tun muss („Migration“) — dieses Changelog ist die Upgrade-Anleitung für die Tools.

[Unreleased]

basicbar-integrations (→ wird integrations/v0.2.0) und @basicbar/ui (→ wird ui/v0.3.0)

Veraltete Übersetzungen markieren (modulierbar#31, generisch für alle Tools): Wird eine Sprache nach der Übersetzung geändert, gilt die unveränderte Gegensprache als „möglicherweise veraltet“ — sichtbar im Editor, abfragbar im Release-Prozess, per „Als aktuell markieren“ quittierbar. Ändern sich beide Sprachen, wird nichts markiert (bewusste Doppel-Korrektur). Felder ohne aufgezeichneten Sync-Stand (Bestandsdaten) werden nie markiert.

  • basicbar_integrations.translation_sync (neu): content_hash, record_synced, changed_languages, stale_languages, stale_map, modeltranslation_values. Zustand lebt pro Model in einem vom Tool angelegten JSONField (eine Zeile + Migration).
  • @basicbar/ui TranslatableField: neue optionale Props stale (Sprachcodes → amber Tab-Punkt + Hinweiszeile), onMarkSynced („Als aktuell markieren“) und onTranslated (nach Maschinen- übersetzung — hier den Sync-Stand persistieren). Der Übersetzen-Button erscheint bei veralteten Sprachen auch auf gefülltem Feld (explizites Neu-Übersetzen); TranslationForm-Einträge unterstützen onTranslated ebenfalls („alle Felder übersetzen“ hält den Sync-Stand aktuell, überschreibt aber weiterhin nie gefüllte Felder).

Migration (Adoption ist opt-in — ohne neue Props/Aufrufe ändert sich nichts):

  1. Model: translation_sync = models.JSONField(default=dict, blank=True)
    • Migration.
  2. Beim Speichern übersetzungsrelevanter Endpunkte bzw. in einem eigenen „mark synced“-/onTranslated-Endpunkt: record_synced() aufrufen.
  3. Serializer: translation_stale = stale_map(instance.translation_sync, {feld: modeltranslation_values(instance, feld, ("de", "en")), …}) ausliefern; Frontend reicht es als stale-Prop durch und ruft bei onMarkSynced/onTranslated den Endpunkt aus Schritt 2.
  4. Release-Checks: stale_map() über die zu prüfenden Objekte.
  5. Neue Katalog-Schlüssel (de-Übersetzungen ergänzen): translation may be outdated, The other language was changed since this translation., Mark as up to date.

lti/v0.1.2 — 2026-07-19

basicbar-lti

  • LTI-1.3-Fundament (Phase 5), aus abstimmbar extrahiert: LtiPlatform/ LtiToolKey/LtiUserLink, build_tool_conf, lti_login/lti_jwks, Staff-Platform-API, JIT-Provisionierung mit E-Mail-Unifizierung (Opt-in pro Plattform), Constraint-Namen mit Paket-Präfix (koexistenz- sicher während der Umzugsmigration), Frame-Ancestors-Middleware (LTI_FRAME_PATH_PREFIXES konfigurierbar). 28 Tests inkl. simuliertem LMS-Handshake.
  • Bewusst Tool-seitig: Message-Launch, Deep Linking, Kontext-Link-Model (FK auf Fachmodelle) und Icon — komponiert aus den Paket-Primitiven.
  • Migration abstimmbar: Daten-Umzugsmigration (lti/0003) kopiert Plattformen/Keys/User-Links PK-erhaltend in die Paket-Tabellen und hängt den Kontext-Link-FK um — läuft als normales manage.py migrate, kein manueller Schritt.
  • ausleihbar: keine Änderung — die Fähigkeit kommt bei Bedarf über Paket + eigene Launch-App.

auth/v0.1.0 — 2026-07-19

basicbar-auth

  • Erstes Auth-Paket (Phase 4): OIDCBackend (Claim-Mapping, JIT- Provisionierung, IdP-Gruppen → Django-Admin), SilentLoginView, Back-Channel-Logout, provider_logout_url, is_oidc_admin, discovery.discover_endpoints, AbstractBasicUser (ADR-0003).
  • Die bewussten Tool-Unterschiede aus Phase 0 sind jetzt Konfiguration: MAX_USERS (Obergrenze; anonymized_at-Konvention zählt anonymisierte Konten nicht) und OIDC_MATCH_BY_USERNAME_FALLBACK (Subject-Drift- Heilung per Username-Match, Default aus). Betreiber-Doku zu Fristen und Kennungs-Wiedervergabe im Paket-README.
  • 25 Tests (aus beiden Tools portiert und vereinigt, inkl. der neuen Flag-Pfade), eigener CI-Job.
  • Migration beide Tools: accounts/oidc.py + config/oidc_discovery.py löschen; AUTHENTICATION_BACKENDS/OIDC_OP_LOGOUT_URL_METHOD auf basicbar_auth.oidc.*; Importe in urls/views/serializers umstellen; INSTALLED_APPS + basicbar_auth. User-Model bleibt unangetastet.
  • Migration abstimmbar zusätzlich: OIDC_MATCH_BY_USERNAME_FALLBACK=True setzen (bisheriges Verhalten, an der UOS unkritisch — Kennungen werden nicht neu vergeben).

ui/v0.2.1 — 2026-07-19

@basicbar/ui

  • Neu: TranslatableField + TranslationFormProvider/useTranslationForm — die vereinheitlichte Übersetzungs-Editor-Komponente beider Tools. Vertrag: per Sprache (values + onChange(lang, text)), n Sprachen aus SUPPORTED_LANGUAGES (UI-Sprache-zuerst), renderInput für Custom-Editoren, singleLanguage (Easy Mode) als Prop, format="html" (Statuspunkte ignorieren Markup, Übersetzung erhält es), MAX_TRANSLATE_LENGTH-Kappe. Der HTTP-Aufruf wird vom Tool injiziert: <TranslationFormProvider translate={…}>.
  • Neue Peer-Dependency: lucide-react.
  • Migration beide Tools: lokale TranslatableField/TranslationForm ersetzen; tailwind.config content um ./node_modules/@basicbar/ui/dist/**/*.js erweitern (Komponenten-Klassen müssen gescannt werden); Provider bekommt die translate-Funktion.
  • Migration ausleihbar: api.translate um format-Parameter erweitern; Aufrufstellen bleiben unverändert (gleicher Feld-Vertrag).
  • Migration abstimmbar: lokaler Wrapper behält value/onChange(next), variant="rich" (RichTextEditor) und Easy Mode; Tab-Reihenfolge folgt jetzt der UI-Sprache statt fix kanonisch-zuerst.

ui/v0.1.0 — 2026-07-19

@basicbar/ui

  • Erstes UI-Paket (Phase 3), Modell „ein Designsystem, pro Tool ein eigener Akzent“: createPreset({ colors }) (Font, Dark Mode per .dark-Klasse, Motion-Tokens; die slate/brand-Ramps bleiben als Identität im Tool), base.css (A11y-Basis: focus-visible-Ring, Skip-Link, reduced-motion, color-scheme, accent-color), ThemeProvider/useTheme/prePaintScript (Auto/Light/Dark, storageKey konfigurierbar), initI18n({ resources }) und contentLang.
  • Distribution: npm-Tarball via GitLab Generic Package Registry, CI-Publish beim Tag ui/vX.Y.Z.
  • Migration ausleihbar: tailwind.config auf Preset, index.css auf @import "@basicbar/ui/base.css", theme.tsx/i18n.ts/contentLang.ts löschen und Importe auf @basicbar/ui umstellen.
  • Migration abstimmbar: dito; zusätzlich ThemeProvider statt des lokalen Theme-Moduls (mit storageKey="abstimmbar_theme" für Bestandsnutzer).

integrations/v0.1.0 — 2026-07-19

basicbar-integrations

  • Erstes Paket (Phase 2): ai (LiteLLM-Client) und translation_service (LibreTranslate-Client) aus den konsolidierten Tool-Fassungen übernommen; Settings-Zugriff jetzt mit Paket-Defaults (conf.py) — unkonfiguriert ist alles aus, ein Tool ohne Settings-Block startet unverändert.
  • Kanonischer Translate-Endpunkt: POST {text, source, target, format?}{translated}; Sprachvalidierung, HTML-Sanitizing (html_sanitize.py aus abstimmbar, jetzt mit nh3-Abhängigkeit), englische Fehlertexte.
  • Neu: Capabilities-Endpoint (GET{"translation": bool, "ai": bool}, erweiterbar per extra_capabilities()).
  • Migration ausleihbar: Response-Key translationtranslated, URL /api/manage/translate/ → Paket-URL, TranslateView-Subclass für die IsLenderOrAdmin-Permission, Format-Validierung neu.
  • Migration abstimmbar: Fehlertexte nun englisch; Imports common.ai / common.translation_service / common.html_sanitizebasicbar_integrations.*.

Repo

  • Phase 1: Repo-Gerüst, ADRs 0001–0003, CI (SPDX-Check), Extraktionsplan.
  • CI: Testjob für basicbar-integrations (python:3.12-slim).