Skip to content

v1.7.130

Choose a tag to compare

@ddon ddon released this 04 Jun 11:08
· 45 commits to main since this release

Cumulative release since 1.7.128 — bundles the generic AI-translation pipeline (PR #582), the per-user Etcher color palette (PR #581), and follow-up security/quality fixes. No new migration (still V128).

Added

  • Generic AI-driven translation pipeline in core, so feature modules plug in via a small adapter instead of re-implementing the whole stack:
    • PhoenixKit.Modules.AI.Translatable behaviour (fetch/2, source_fields/2, put_translation/4, optional pubsub_topics/1), exposed via the optional ai_translatables/0 callback on PhoenixKit.Module and discovered through PhoenixKit.ModuleRegistry.
    • PhoenixKit.Modules.AI.Translations orchestration — availability, endpoint/prompt defaults, idempotent shared prompt, enqueue/1 + enqueue_all_missing/2, per-resource + global PubSub topics, missing_languages/3.
    • PhoenixKit.Modules.AI.TranslateWorker — generic one-job-per-language Oban worker with retry classification, {:snooze, 30} on rate-limit, and an ai.translation_added audit entry.
  • Shared AI-translate UIPhoenixKitWeb.Components.AITranslate (button/modal/progress/stall hint) + AITranslate.{FormGlue,FormBinding} LiveView glue behind a 3-callback binding.

Changed

  • AI-translation broadcasts keep translated content off broad topics: the full payload (with :fields) goes only to the per-resource topic; the global + adapter topics receive a content-free summary.

Fixed

  • Sanitize the per-user Etcher color palette on both write and read. MediaCanvasViewer filters the client-supplied etcher:colors-changed payload to short, color-shaped strings (deduped, capped at 24) before persisting, and load_user_colors/1 re-sanitizes on read — so a palette stored before the guard shipped, or written by any other path, never reaches <Etcher.layer colors={…}> untrusted.

📦 https://hex.pm/packages/phoenix_kit/1.7.130 · 📖 https://hexdocs.pm/phoenix_kit/1.7.130