What is new on the ToRun platform, newest first.
June 2026 — 53 changes
Le sélecteur de modèles intègre désormais Google Imagen et Gemini pour les images, ainsi qu'OpenAI Sora et Google Veo pour la vidéo, en plus des modèles que vous connaissez déjà. Choisissez précisément celui qu'il vous f…
Enchaînez plusieurs étapes IA dans un Workflow que vous lancez quand vous voulez, puis publiez-le sur le Marketplace ou explorez les créations partagées par d'autres créateurs. Le Workflow Editor, le Runner et le Marketp…
Ajoutez ToRun à votre écran d'accueil et ouvrez-le comme une véritable application : en plein écran, avec sa propre icône. ToRun n'est plus qu'à un geste, en attendant l'application mobile.
Un nouveau logo et une identité visuelle épurée dans toute l'application, parfaitement adaptés aux thèmes clair et sombre.
Choisissez le niveau de réflexion de l'IA, désormais même en mode Auto. Vos prompts d'image peuvent discrètement puiser dans votre mémoire enregistrée pour des résultats fidèles aux personnes et aux détails qui comptent…
La progression de la génération s'affiche désormais juste à côté du résultat plutôt que sous le formulaire, chaque page s'ouvre épurée, et votre dernière création reste au premier plan tandis que les plus anciennes rejoi…
L'historique de votre portefeuille est maintenant paginé et affiche les montants exacts, au centime près, et la suppression d'éléments de votre Library ne génère plus d'erreur.
Créez votre compte annonceur et soumettez vos campagnes à validation directement depuis votre compte, sans attendre de configuration manuelle.
En coulisses : un décompte des crédits gratuits plus équitable, des contrôles renforcés sur les versements et les autorisations des créateurs, une modération des médias plus sûre, et des exécutions de Workflow plus fiabl…
La traduction en direct vous laisse désormais choisir entre deux moteurs et opter pour celui qui convient le mieux à votre conversation — y compris une nouvelle option qui parle 77 langues, dont le turc et le russe. Chaq…
Les modèles que votre forfait ne couvre pas apparaissent maintenant avec un petit cadenas et un moyen, en un seul appui, de passer à un forfait supérieur ou de recharger votre portefeuille, au lieu d'échouer seulement ap…
Partagez une image une seule fois et l'assistant garde en mémoire ce qu'il a vu pour le reste de la conversation — vous pouvez ainsi l'interroger à son sujet bien des échanges plus tard, même après avoir changé de modèle…
Les réponses du chat dessinent désormais les diagrammes comme de vrais diagrammes, présentent les tableaux avec des bordures nettes et adaptent la taille des titres au message au lieu d'envahir l'écran — pour des réponse…
Lorsqu'un modèle nécessite une mise à niveau ou que votre solde est insuffisant, vous voyez maintenant un message convivial avec des boutons Mettre à niveau le forfait et Recharger le portefeuille directement à portée de…
Les enregistrements de facturation, l'historique et l'activité s'affichent maintenant à votre heure locale plutôt qu'en UTC, pour que les horodatages correspondent à l'horloge de votre mur.
Démarrer une nouvelle conversation réutilise désormais une conversation vide au lieu d'empiler les pages blanches, les conversations restées sans réponse n'encombrent plus votre liste, et les titres provisoires sont remp…
Les entreprises peuvent désormais créer un compte annonceur et mener leurs propres campagnes publicitaires de bout en bout — créer des campagnes, y ajouter les visuels publicitaires correspondants et les soumettre à une…
Apporter votre propre clé de fournisseur couvre désormais aussi la voix en temps réel, la traduction en direct et la transcription en direct : l'utilisation de l'IA passe par votre propre clé et nous ne facturons que les…
Nos pages publiques s'appuient désormais sur un contenu modifiable dans de nombreuses langues, les images importées sont analysées à la recherche de contenus dangereux avant d'être stockées, la création de compte et les…
Les réponses longues s'exécutent désormais sur le serveur et se poursuivent pendant que vous passez d'une conversation à l'autre, ouvrez une autre page ou fermez l'onglet. Revenez quand vous voulez : la réponse est encor…
Les conversations lancées dans un projet reprennent automatiquement ses instructions, ses connaissances importées et sa mémoire, affichent un badge de projet avec un lien de retour rapide et indiquent le nom du projet da…
La mémoire de votre assistant suit désormais la vitesse à laquelle chaque information évolue et signale celles qui risquent d'être obsolètes, afin de s'appuyer sur ce qui reste vrai. Un nouvel éditeur vous permet de cons…
Nous avons ajouté les derniers modèles d'image, de vidéo, de transcription et de voix en temps réel, et ouvert des pages indépendantes Traduire et Transcrire pour que vous accédiez à ces outils directement depuis le menu…
Parlez et laissez vos mots être traduits presque instantanément : choisissez deux langues, intervertissez-les d'un simple geste, et le traducteur capte votre voix et diffuse la traduction au fil de votre discours.
La page vidéo garde désormais ses vignettes synchronisées lorsque vous supprimez un élément depuis votre bibliothèque, vous laisse définir la durée du clip par modèle, supprimer des clips individuels et marque clairement…
L'assistant intégré affiche désormais des réponses joliment mises en forme, garde le dernier message visible pendant la saisie, enregistre de façon fiable la réponse terminée et donne à chaque conversation un titre autom…
Les réponses contenant des liens, des formules mathématiques ou des montants en devises ne s'affichent plus vides ou à moitié affichées, même après l'actualisation de la page, et les réponses de recherche approfondie inc…
Un vaste chantier en coulisses : un suivi de la consommation et des totaux de dépenses plus précis, des remboursements automatiques plus équitables, une messagerie en temps réel plus solide, des protections renforcées de…
Les articles de blog publics et les discussions du forum — y compris leurs réactions et leurs réponses — sont désormais visibles par les visiteurs non connectés.
L'utilisation est désormais facturée avec une marge unique et équitable, vos jauges de dépenses mensuelles et de budget restant sont exactes, et la liste des modèles a été nettoyée — modèles obsolètes retirés et nouveaux…
Les annonces de workflow et les offres groupées peuvent afficher une véritable image de couverture, rendant la marketplace plus agréable et plus facile à parcourir.
Demandez à l'assistant et il remplit les formulaires, clique sur les boutons et se déplace dans l'application pour vous — porté par une boîte à outils élargie qui couvre maintenant le contact, la FAQ, le forum, la mémoir…
Les réponses s'affichent désormais mot à mot au lieu d'apparaître d'un coup, et la bulle de l'assistant peut être glissée où bon vous semble, avec un aperçu en direct de ce sur quoi il travaille.
Créer un projet et y démarrer une nouvelle discussion fonctionne désormais sans heurts, pour garder ensemble les discussions, fichiers et contextes qui vont de pair.
Les vidéos se lisent de manière fiable, les médias privés se chargent via un proxy sécurisé, les avatars des créateurs et des personas s'affichent maintenant pour tout le monde, et les messages vocaux sont transcrits san…
Lorsqu'une partie du service rencontre un problème, l'avis est désormais plus facile à comprendre et n'expose plus les noms des fournisseurs internes.
Reliez des applications externes via une simple connexion ou une clé API, pour que l'assistant travaille directement avec les outils que vous utilisez déjà.
Les outils d'image choisissent désormais un modèle adapté à ce que vous faites, affichent un aperçu intégré instantané du résultat, et la retouche fonctionne à nouveau après un changement de modèle chez le fournisseur.
Lorsqu'une image ou une pièce jointe a été supprimée, votre historique de discussion, votre galerie multimédia et l'éditeur d'images affichent désormais un espace réservé convivial au lieu de s'arrêter sur une erreur.
Le traducteur propose désormais un sélecteur avec recherche, comptant une centaine de langues, chacune indiquée par son nom natif et son nom anglais.
Nous avons ajouté une série de nouveaux articles de blog et de fils de forum — y compris des questions avec réponse — pour avoir davantage à lire et à explorer dès le premier jour.
Le chat peut désormais effectuer des recherches dans vos fichiers téléversés, exécuter Python dans un bac à sable, modifier des images, transcrire et lire de l'audio, et déclencher vos workflows — le tout sans quitter la…
Laissez le chat effectuer des recherches sur le web en direct, conduire des recherches approfondies multi-sources, récupérer et lire des pages entières — chaque réponse est accompagnée des sources utilisées.
Votre assistant conserve désormais une mémoire légère entre les chats, peut lister ce qu'il retient, et respecte une demande d'oubli dans n'importe quelle langue.
Générez et retouchez des images, produisez de courts métrages et composez des chansons avec paroles — propulsés par de nouveaux moteurs d'image, de vidéo et de musique, avec un sélecteur de médias partagé et votre biblio…
Parlez à ToRun à voix haute — une nouvelle capacité vocale temps réel apporte les conversations orales et la transcription en direct au chat.
Les exécutions de workflows privilégient désormais des modèles de qualité supérieure, marquent une pause pour votre approbation lorsque c'est important, et peuvent être annulées, régénérées et reprises — chaque résultat…
Regroupez les chats, fichiers et contextes connexes dans des Projets pour que votre assistant dispose toujours du bon contexte pour la tâche en cours.
Rédigez et itérez sur du contenu long format et du code dans un panneau canvas dédié, directement à côté de votre chat.
Les résumés glissants, les fenêtres de contexte plus intelligentes et le défilement accéléré de l'historique maintiennent la cohérence et la fluidité des longues conversations, avec des commandes claires lorsqu'un échang…
Une allocation gratuite bienveillante qui se recharge sur une fenêtre glissante, des jauges de dépenses plus claires, des remboursements automatiques en cas d'échec de génération d'image ou de vidéo, et des contrôles d'e…
Des dizaines de modèles 2026 ont été ajoutés et les anciens retirés, plus une synchronisation automatique quotidienne qui maintient les modèles des fournisseurs et les tarifs à jour — gérés depuis un nouveau catalogue d'…
Publiez une conversation via un lien public et faites grandir la communauté autour de ce que vous créez.
May 2026 — 499 changes
Harnais console .NET autonome (test/ToRun.SmokeTests) qui s'authentifie auprès de l'hôte en cours d'exécution (grant par mot de passe OpenIddict) et teste chaque capacité principale de bout en bout via la vraie API HTTP…
Les médias de la plateforme résident dans une zone de stockage Bunny PRIVÉE, donc un simple
Complète la fonctionnalité de gestion de la mémoire pilotée par le chat, en s'appuyant sur
memory_forget renvoyait no_match pour des souvenirs qui existaient pourtant.
gemini-2.5-flash a commencé à renvoyer HTTP 400 sur thinkingBudget=128 (le minimum 52-N
Les deux pages d'administration hôte (/admin/model-catalog, /admin/model-onboarding)
La découverte ne correspondait que par ProviderModelId/ModelKey exact, ce qui faisait remonter des instantanés datés de fournisseurs
La porte d'accès à l'effort de raisonnement est désormais basée sur le financement, et non sur l'abonnement.
Fusion best-of-both dans la synchronisation 52-Q-MODEL-SYNC-JOB déjà déployée : quand OpenRouter
Le sélecteur d'effort de raisonnement était verrouillé dur sur l'abonnement avec une exemption admin/hôte issue d'une approche antérieure rejetée.
Livrable de la phase 1 : inventaire de la liste des 26-provider et de leurs sources de tarification, le
L'assistant d'intégration (phases A-D) ne fait que CRÉER des entrées dans le catalogue ; il n'existait aucune
Backend (torun.agent) : SharedChat gagne IsListed/ListedSlug/ListedAt + les champs de carte dénormalisés ; PublicCommunityAppService + PublicCommunityController (fil /community anonyme + visualiseur par slug) ; Community…
Les pièces jointes audio dans le chat étaient cassées ; les véritables causes profondes différaient de
PARTIE 1 — le menu déroulant « Gestion du débordement de contexte » dans l'en-tête de chat était bloqué sur
La suppression du plafond journalier (84178afab) a retiré DailyKey/MonthlyKey de BudgetBucketCacheItem
Partie 1 — corriger le plancher des tests d'intégration MongoDB.
Les chaînes du sélecteur d'effort de raisonnement (Effort:Tooltip, Effort:Locked:Tooltip,
Contrôle d'effort de raisonnement canonique et indépendant du fournisseur sur le compositeur de chat,
Passe finale de suppression du code mort après la réécriture du budget en fenêtre de session.
La jauge Dépenses mensuelles/journalières lit la télémétrie UserDailySummary (ScopeKey=userId,
Suivi d'audit de la réécriture du budget en fenêtre de session (2a33fd31f).
La jauge budget-bucket sur l'accueil (/) + me-home affichait "$0.00 / 0% / $0.00" à chaque fois
Le bucket budgétaire du niveau gratuit fonctionnait sur un modèle de goutte-à-goutte "$2 / 30d / 24h" : rechargement = $2/720/h et
Les jauges BUDGET BUCKET sur l'accueil (/) et me-home (/me) affichaient "$0.00 (2% / $0.01)" :
Bug de vision multi-tour.
Première mise en place de verrous de régression dans la couche smoke.
Correction de la cause profonde des 404 récurrents sur la génération de titre / chat public / vision : capacité
L'utilisateur a confirmé que la description d'image fonctionne désormais.
La portée propriétaire renvoyait 403 même pour le vrai propriétaire du chat : les pièces jointes créées par le gestionnaire
Cause profonde A3 RÉELLE (découverte par test navigateur en direct) : l'image de la pièce jointe au chat
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
La résolution de IQueuedRequestDispatcher provoquait un StackOverflow au démarrage (impossible à intercepter — un
Le sink de journalisation de l'environnement d'exécution Host (appsettings.json) et les loggers d'amorçage
Cause profonde récurrente : ChangelogBackfillDataSeedContributor testait l'idempotence sur
Exécution de extract-sprint-changelog.py + propagate-changelog-locales.py depuis main :
QueuedRequestRunner.DoWorkAsync resolved IQueuedRequestDispatcher at the TOP of
The chat overrun check compared raw history tokens against the TIER budget (ctxBudget.MaxInputTokens) only, so when the tier budget exceeded the routed model's context window the trim was skipped: e.g.
Proactive "concern toast" (Honest-UX DNA pattern #3).
Translate the 16 Chat:Context:* (Agent resource) overrun-prompt/footer/toast keys and the 13 MySettings:ContextOverrun:* (ToRun resource) settings keys from en.json into all 28 sibling locales (en-GB verbatim).
Propagate the EN-only humane-error + status-banner keys (ErrorHumanizerService
Phase B surface for the chat-canvas (ChatGPT Canvas / Claude Artifacts
Honest-UX DNA pattern #3.
Completes the wallet-funded context-overrun feature.
Propagates LEARNING-LOOP Phase 2 keys (Admin:UserExperience:ComplaintLoop:{Tab,Title,Subtitle,FixedInWindow} + Admin:UserExperience:TimeToFix:Empty) plus 5 earlier EN-only Permission:UserExperience.* strings from the sam…
Four parallel 52-Q chips landed code referencing symbols their sibling chips
Closes the 29-locale parity gap for the CHAT-CANVAS / ChatSummaries slices,
Phase 2 Scope B of the honest-UX-DNA pattern #5 loop.
Honest UX DNA pattern #2 (Reversibility) — make the auto-refund VISIBLE.
Honest UX DNA pattern #2 (Reversibility) — wire the projection layer
Honest UX DNA pattern #2 (Reversibility) — refund the user when something
Honest UX DNA pattern #2 (Reversibility) — user-facing read API for the
EN-only this commit — the paired slice52-Q-AUTO-REFUND-LOCALE chip fans
Honest UX DNA pattern #2 (Reversibility) — append-only audit row for
Paired locale fan-out for the /me/projects feature (components landed in
EnBillingSource.RealtimeVoice + seed de la capacité voice-realtime + jointure
Backend exception → frontend humane message + retry hint + status banner.
Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries
Miroir des clés UI du mode voix temps réel ajoutées à en.json dans
Native translations of the 40-key User Sentiment / Privacy Policy v3 Section 11 block (legal text per GDPR Art.
Suite-managed file edits (Permissions+MongoDB+ChatPipeline)
land additional parallel-chip WIP
Consolidates the working-tree state stashed during the
Adds IChatSummarizationService + concrete impl that compresses the dropped
Third of the four P0 chat tools — ChatGPT File Search parity.
Why: backend tier-budget context builder (slice52-Q-CHAT-CONTEXT-BUILDER)
Adds ImageEditTool (mirror of ImageGenerateTool) so the LLM can edit user-
Fans out the 46 Agent WebSearch + Menu:WebSearch + Permission:WebSearch.*
Why: P1 voice tools listed in feedback_chat_context_management.md — text
Closes the user-complaint → shipped-fix loop automatically so we never make
Backend:
The /me/web-search slice landed almost entirely via Serkan's recent
Post-streaming runner that drives Pyodide in a Web Worker and feeds
MyMediaUploadAppService.PurposeChatAttachment validation extended to
Two-endpoint AppService that bridges the server-side code_interpreter
Ship the ADR-043 Pyodide v1 backend slice — the LLM-facing IAgentTool
Why: long chats (100+ turns) bloat browser memory + slow ngx-markdown re-renders
Fourth of 4 P0 chat tools per feedback_chat_context_management.md roadmap and
Phase 1 design spike for code_interpreter chat tool (second P0 tool after
Public-chat launcher now boots a Cloudflare Turnstile widget at view
Locale key for the new Cloudflare Turnstile rejection banner shipped
The [AllowAnonymous] PublicChatAppService now verifies a Cloudflare
Marketing landing's anon chat now streams the assistant reply
Surface the three new WebSearchOptions knobs in appsettings.json so the
Three tools wired to the canonical authoring-tier IWebSearchProviderFactory.
Catalog seed for the dual-tier chat web-search tooling.
Adds the second half of the provider contract needed by the dual-tier chat
User report 2026-05-27 — public chat marketing surface 60s+ bekleyip
User: "ana sayfada neden markdown renderer yok, direk markdown olarak
Bridges the gap between DeepResearchSession CRUD (sat at default state forever)
Propagate Public:Chat:Error:NoModel / CallFailed / EmptyPrompt
User report 2026-05-27: pricing sayfasındaki Partner card'ın
User: "burayı geçen gün yaptık sağlamdı, yine bozuldu.
Slice 452-fu already shipped first-class Brave + Tavily IWebSearchProvider
Replaces the stub web_search tool with a config-selectable provider:
User: "deepseek response geldi ekran 2'de, sayfayı refresh edince
Native-quality translations for "Action completed.
User şikayet: "gpt 4o mini response boş geldi.
User: "her sayfa refresh ettiğimde chatlerin yerleri ve sıraları
Önceki commit (e2a74db8) sadece relativeTime/fullTimestamp helper'ını
Sprint 50-S backend fix made the wire format emit `Z`-suffixed ISO
User direktif: "arkada iş kalmasın".
Önceki "fix" (a56449db) Opus 4.7 / Sonnet 4.6 için preemptive olarak
Pre-fix rendered the warning triangle as an inline <i> followed by
Önceki rev (a56449db) sadece ilk-mount fallback'i çözüyordu —
Third regression of the same bug class in three sessions.
User reported four issues in a single round of chat smoke-testing:
Atladığım şey buydu.
Three iterations of the same bug (Monthly Spend $0 → $0.33 → $0.15) had
Mic-capture via MediaRecorder (chat composer Whisper STT, Sprint 52-O)
OpenAI gpt-4.1 family (Deprecated → Retired, isActive:false, version 3→4):
Close 10 pricing rows for the 5 retired models:
Anthropic (DeprecatedAt 2025-09-29, RetiresAt 2026-05-01):
User reported a wide swath of dropdown rows error on send:
User report: "reason yapar gibi baya bekliyor ama hareket yok, reason
Audit continuation after slice52-Q-FINANCIAL-AUDIT-1.
- PROGRESS.md: Sprint 52-Q-USER-BILLING-DAILY entry with all 4 commits,
User report: "monthly spend 0.33 olamaz, burada bir hata var, muhtemelen
- New IDataSeedContributor: UserBillingDailyBackfillDataSeedContributor
- New IInboxConsumer: GroupId "torun-user-billing-daily-summary"
- Suite entity JSON: modules/torun.subscription/.suite/entities/UserBillingDailySummary.json
User: "TelemetryUserDailySummaries tablomuz var gördüğün gibi içide dolu.
User report (continued from slice 52-O-NIGHT-TODO-IMPL/home-spend-fallback):
User report: "monthly spend her gün sıfırlanıyor — redis recycle ettiğimden,
activity routes done + remaining TODO inventory
User feedback: "kod içerisine daha önce yazdığımız TODO lara hiç
TODO cleanup audit ledger
User directive: "TODO ve benzeri yorumları ara, sonraya bırakılmış iş
morning report for Serkan — overnight locale + changelog ledger
These four ad-hoc scripts drove the overnight locale recovery:
extract-sprint-changelog.py wrote 364 sprint rows to
Followed up the placeholder fill (commit a3834ea4) with native-language
Audit found 1311 missing keys spread across 27 sibling locales (en-GB
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds the 11 EN-master entries the new SourceContext chip strip
Surfaces the new SourceContext metadata as a user-facing filter so
Closes the chat-attachment data-loss bug: previously the composer
ChatTurn interface gains audioTranscripts[] with an expanded flag.
Add CapabilityKeys.AudioInput ("audio-input") so the fallback condition is
The chat composer's prior path inlined image attachments as base64 data
Pre-fix, the composer cost badge only sized the draft text via
`:streamGenerateContent` without `alt=sse` returns a JSON-array transport
GetActivePricingAsync now falls back to model-level pricing rows when the
Adds 9 new Chat:Continue:* keys (Button, Tooltip, Loading, Error, MaxReached,
Angular proxy: +wasTruncated/continuedFromMessageId/hasContinuation on both DTOs;
OpenAI Chat Completions silently consumes reasoning tokens for the
PersistAssistantMessageAsync now sets FinishReason/WasTruncated/ContinuedFromMessageId
Extend ChatMessage.Extended.cs with 4 new virtual properties (FinishReason,
User reported the "Daily free limit reached — Charge wallet" yellow
Propagate the new MediaRecorder + Whisper STT composer keys from en.json to all 28
Why: legacy Web Speech path produced transcript-only with no audio artifact
User reported two chat UX papercuts after the chat-footer fix landed:
User-reported chat composer trio:
Propagated Changelog:Sprint:<slug>:Title and :Body keys for the 38 new sprints
Minor bump for the Phase 1 feature wave summarized in the changelog backfill
Ran extract-sprint-changelog.py against HEAD.
- New IChatPipelineAppService.GenerateTextAsync endpoint (creative-writer
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment introduced in 57c15021 used backticks around '/marketplace' which
**Bug 1 — Card titles render raw `WorkflowTemplate:foo:Title` keys:**
Per-step output variable snapshot so the resume-aware wave loop can
In-memory wait loop in WorkflowExecutorAppService.RunWaveLoopOnRowAsync (line 1797) is
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Inject HumanApproval (kind=12) node into all three birthday catalog
WorkflowTemplate:BirthdayCinema:Title + :Description propagated to all 26
User wanted the third leg of the birthday trio: "isteyen kullanıcı video
Birthday workflows expose a textarea field 'provided_lyrics'; when filled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
THE photo-binding bug.
User observation: "library bakınca sadece image görüyroum ne ses var ne
User report: merge step "Succeeded" but composite_url_duration_seconds
User report: "succeeded yazıyor da bunlar success degil ki hata veriyor
User directive 2026-05-25 — region prefix produced 401 Unauthorized on
Root cause (from Note column added in 0a9e941f):
Root cause: ImageCapabilityRunner with n>1 packs all generated URLs as a
Adds an "Or pick from your library" link/button beneath the workflow-wizard
Replaces the /me/audio direct file input (audio.component.html line 17 —
Replaces the /me/image Edit-tab mask widget (bespoke library-only modal +
Replaces the inline "Drop an image or click to upload" widget for character
Universal two-tab picker that replaces PC-only uploads across /me/* surfaces.
Pre-fix VideoPipelineAppService.GetCapabilitiesAsync (commit 5e39d434)
Pre-fix /me/video catalog query returned only sora-2 + sora-2-pro because no
Native translation per locale (prefix only; the numeric seconds cap
Pre-fix the duration slider on /me/music was hardcoded max=120s.
Pre-fix VideoPipelineAppService.GetCapabilitiesAsync returned a single
User generated music with `requestedDuration=120s` against Riffusion
User got
User got the UFE
User got HTTP 401 from Replicate after triggering musicgen and the
User reported the /me/music model dropdown stayed empty even with
Console showed:
Carry-forward from 05999c1c.
User reported video + music menus missing from My Account sidebar even
Mirrors fc625886 EN seeding into ar/cs/de/de-DE/en-GB/es/fi/fr/hi/hr/
Angular standalone component mirrors /me/voice + /me/image shape:
User-facing music generation pipeline mirroring ImagePipeline pattern:
The AuthoringPermissions.VideoPipeline.MyGenerate comment says the
Second-pass merge failure after b9dm94er4 + 21983ef0 still surfacing
Adds the Sprint 52-Q ModelOnboarding admin UI strings (Menu:ModelOnboarding +
Fans out the 32 EN keys added in commit be0190b2 (admin /cost-markup
39 MR keys (Menu:Admin:MarginReconciliation, Permission:MarginReconciliation, MarginReconciliation:*) added to every sibling locale under src/ToRun.Domain.Shared/Localization/ToRun/.
Sprint 52-Q-MODEL-ONBOARDING Phase D — round-trip bulk-import / bulk-export
Sprint 52-Q-MODEL-ONBOARDING Phase C — host-admin Angular UI at
Guardrail sweep finding from Phase D of the 52-O-MARGIN-AUDIT sprint.
Sprint 52-Q-MODEL-ONBOARDING Phase B.2 — adds the GenericRestClient that
Phase C UI of the 52-O-MARGIN-AUDIT sprint.
Sprint 52-O-REAL-COST-AUDIT phase C — each pipeline AppService that wraps
Sprint 52-Q-MODEL-ONBOARDING Phase B.1 — scaffolds the AiProviderClientStub
Phase C of the 52-O-MARGIN-AUDIT sprint.
Sprint 52-Q-MODEL-ONBOARDING Phase A — adds AdminModelOnboardingAppService
Sprint 52-O-REAL-COST-AUDIT phase B — every IAi*Client now stamps a
Sprint 52-O-REAL-COST-AUDIT phase A — parallel server-side-only ledger so
Phase B of the 52-O-MARGIN-AUDIT sprint.
Phase A of the 52-O-MARGIN-AUDIT sprint.
Error from DbMigrator on every restart:
Carry-forward from b4ab9daf music_v1 seed bump + feedback_pricing_
User feedback after 21983ef0 landed: looked at ElevenLabs analytics
- ToRun resource: 36 keys (Library:Share:* dialog + SharedMedia:* public page)
Pre-fix: workflow ArtifactSave nodes uploaded blobs to Bunny and stuffed
Sprint 51-M-fu2 completion pass.
Birthday-song-video template's `photos` multiphoto field reached Bunny CDN
Drops native v2.0 About/Terms/Privacy/Contact for 10 brand-new locales
EnhancePromptAsync wrote a BillingRecord and settled the budget but never
Root cause (two layers, one bug):
LoadHistoryAsync previously walked the leaf → ancestor chain by issuing one
Conformément à la règle 10 de CLAUDE.md.
Sortie de `python platform-plan/scripts/_validate-29-locales.py` après l'atterrissage de tous les 27 lots de traduction des langues soeurs + la passe de suppression des BOM :
Lots produits par 6 agents traducteurs Sonnet parallèles (tous intégrés au dépôt dès les tours précédents + dernier groupe finalisé) :
Serkan caught this — the Generate tab on /me/image has a card-shaped progress bar that walks through Preparing → Requesting → Generating → Fetching with a striped animated `progress-bar bg-info`, phase-specific icon + la…
The bug Serkan surfaced from /me/workflow-runs (Detail click on a Failed run): every workflow step that delegates to an ApplicationService with class-level [Authorize] (ImagePipelineAppService, all the pipelines) termina…
Completes the locale-fanout begun in 0da3c077 (Sprint 52-O-12-locale).
Passe d'audit en lecture seule sur ChatPipelineAppService + InAppAssistant + les clients fournisseurs + ProviderFallbackChain.
7 of 19 stub locales populated; 12 remaining (cs, sk, hu, ro-RO, hr, sl, ko, zh-Hans, zh-Hant, hi, ar, vi).
Sprint 52-O-18 added ModelLifecycleStatus.LegacyAvailable (used to mark Claude 4.5/4.1/Opus 4.6/Sonnet 4.5 etc.
Sprint 52-O-19 (provider runtime hardening) complete — 7 commits land:
Concrete unblock: AiModel rows whose ProviderKey was set to "musicgen" / "ltx-video" / "flux-1.1-pro" / "hunyuan-video" / "sd3.5-large" / "xtts-v2" / "bark" all route credential lookups through "replicate" when no per-mo…
New IProviderCircuitBreaker (Application.Contracts/AiClient/Resilience/) + default ProviderCircuitBreaker impl backed by IDistributedCache<CircuitState,string> keyed by torun:byok:circuit:{providerKey}:{capabilityKey} wi…
# Conflicts:
ProviderKey="elevenlabs".
ProviderKey=\"replicate\".
PayloadGrammarJson column declared on AiModelCapability.Extended.cs — backports the Sprint 52-O-17 chip's column that the worktree branched off main without (worktree base is 16 commits behind local main, so 52-O-17 wasn…
Adds ~60 new pricing rows in the 520180XX-...
ResolvedAiProvider DTO carries the read-only snapshot that generic adapters consume at request time — protocol drives which adapter class handles the request, BaseUrl is forwarded into the outbound HttpRequestMessage so…
SeedSlice52O18Async() runs at the end of SeedAsync regardless of count gate (idempotent EnsureCapabilityRowAsync calls, deterministic XOR-based GUIDs so reruns are no-ops).
Existing 108 rows: status / deprecatedAt / retiresAt patched per the deprecation calendar in 00-MASTER-SUMMARY.md §"Major Deprecation Calendar" — gpt-4o / 4.1 / 4.1-mini / 4.1-nano / o1 / o3-mini / gpt-image-1 land 2026-…
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New shared enum EnWireProtocol (11 named + Custom catch-all) covers the realistic provider population: OpenAiCompat (OpenAI/xAI/DeepSeek/Mistral/Groq/Cerebras/Together/Perplexity/Azure-OpenAI/Fireworks/DeepInfra/OpenRout…
EnqueueRawSpecAsync inserts a Pending WorkflowExecution row, stamps QueuedAt + Activity Center row, emits torun.authoring.workflowexecution.queued.v1 via transactional outbox (Rule 8), and returns the DTO so the wizard n…
Claude 4.5 / Opus 4.1 / Sonnet 4.5 / earlier Gemini 2.0 / xAI Grok 3 are all examples of models that stay on the API surface but the provider is steering new traffic to a newer release.
EnPricingUnit grows 12 → 15 to model 2026 billing meters the legacy enum couldn't represent.
The 2026 model generation introduced capabilities that the old 18-key vocabulary couldn't address: Claude's adaptive vs.
23 → 25 providers (stability re-introduced after slice 4xx removal, two OSS-serving newcomers fireworks + deepinfra added).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pre-52-O-15-fu the OpenAiImageClient hand-coded every model-specific quirk inline.
Backend (fu1): new POST /api/subscription/budget-preview/preview wraps IBudgetGuard.CheckAsync read-only.
OpenAI image API rejects unknown sizes outright with HTTP 400 + "Invalid size 'WxH'.
WorkflowSelectOptionsDataSeedContributor now does an idempotent per-(option, locale)
User feedback on Sprint 52-O-13: "tabi bunun için kullanıcıyı bi popup ile uyarmalıyoz." Letting the wallet bypass the daily cap is the right behaviour for paid credit (52-O-13 fixed the silent reject), but the user stil…
The Free-tier $0.10/day cap exists to spread $2/month allowance across days so a single user can't front-load the host's AI-cost reimbursement.
Sprint 52-O-12d completes the catalog story started by 52-O-12a (entity)
Hygiene-only follow-up to 52-O-12a/b.
User added a per-locale enrichment block to
Sprint 52-O-12a follow-up — DI bootstrap fail
Phase B (Angular wizard) for the 52-O-12a data-driven dropdowns.
Phase 1 backend stack for data-driven workflow wizard dropdowns.
Backend bug — Cache Manager shows 3 categories of ~10+, every Browse empty
UX bug — cryptic exception copy on /media/video-stream
Backend bug — empty Recent transactions list with non-zero balance
UI bug — multi-theme breakage
Backend bug — entire workflow editor surface ships raw keys
Backend bug — every workflow template run failed
Exception screenshot from Serkan (2026-05-23):
Serkan's motto (2026-05-23): "biz 25 farklı AI provider destekliyoruz...
THE ACTUAL ROOT CAUSE of the seven "title-gen yine bozdun" reports —
52-I excluded DeepSeek V4 from cheap-model picks, but on a deployment
50-LLL-2 added an ExcludeReasoningModels filter so the cost-saving
User reported VS Error List showing CS1501 "No overload for method
F15 (root cause: AgentAuditEntry table unused for the bubble's
Four backend regressions in InAppAssistantTurnAppService surfaced
Audit #14 — confirm Sprint 51-A's reasoning opt-in path is per-request,
Two more console warnings flagged in /me/chat after 52-E:
Bundles four small chat-pipeline polish fixes from the audit (#10, #11,
F10 (root cause: bare WriteSseEventAsync in the controller's outer
Three UX / a11y polish items from the sprint 52-D code-review pass.
Two DOM-side hygiene fixes from the sprint 52-D code-review pass:
Three concurrency / state-coherence regressions in the bubble component
Three SSE-stream regressions in the InAppAssistant bubble shipped with
Three chat-pipeline surfaces were emitting hardcoded strings in violation
Serkan flagged ~148 identical "The localization source separator (::)
C5: ResolveFallbackProviderKey returned the literal string "google"
Every state write in chat-pipeline.component.ts goes through a Signal
Three lifecycle / concurrency defects in the chat-pipeline component, all
Serkan flagged a visible dead band between the composer card and the
ChangelogBackfillDataSeedContributor reads from the embedded resource
> "bu contact formunda bütün maillerimizi açık açık yazdık spammerlara mail
Follow-up to Sprint 51-V (commit 373d84d9) which rewrote en.json only.
Smoke at 2026-05-22 showed `/personas` listing "Echo the Storyteller"
Three compounding bugs from 51-S → 51-U all visible in the same screenshot:
51-S / 51-T drifted from the catalog-first vocabulary and shipped a
Cleanup of regressions introduced by 51-S.
Sprint 51-S (28e76a7d) shipped lib-pricing-grid with a contact-sales price cell that
ONE pricing surface for all 6 plans (Free / Starter / Pro / Business /
User mandate (2026-05-22): "Bu description'ları biraz zenginleştir.
User mandate (2026-05-22): public surfaces leaked the visitor to a new
User report (2026-05-22): "Login durumdayken pricing geliyor, public
Two user-flagged issues on the same screenshot (2026-05-22, anon
User report (2026-05-22): "Login durumdayken pricing geliyor ama public
User report after 51-N landed: "DbMigrator çalıştırdım, proje yeniden
User report (2026-05-22): "ABP bunu hala 20 dil görüyor ve dilleri açtığımızda 20 dil çıkıyor.
User correction (2026-05-22): "bizim platformumuz 29 dilde." Legal seeds
User directive (2026-05-22): About too thin, Terms must hold up against
Three connected anasayfa bugs landed in the same commit because they all
User mandate from 2026-05-22: "release çıkmadan önce change loglarının seed
Three connected bugs from the anasayfa list (platform-plan/BUG_LIST_ANASAYFA_2026-05-22.md):
BUG-3+4+5 from anasayfa list closed.
Follow-up to 51-C — my own mistake.
BUG-1 closeout from anasayfa bug list (platform-plan/BUG_LIST_ANASAYFA_2026-05-22.md).
BUG-2 closeout (3-part user report + 1 rule refinement):
BUG-1 part 2.
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
- Workflow editor, wizard, templates, validation, preview, run history strings
Closes ADR-042 — previously Proposed, now Accepted.
`col-md-1 text-end` clipped the localized "Clear all" label at
Sprint 50-PPPP audit — most MessageKey expressions across the codebase
TEST_PLAN §4 deferred — capability key string literals (text-chat,
- persona-profile.component.ts: drop outer `lpx-content-container py-4` wrapper
Three deferred items landed (or were dismissed) since the previous closeout
Completes the slice50-workflow-engine audit pass for the QualityGate
Continues the slice50-media Phase1Note translation pass started by
Replaces 8 [en] placeholder Admin:StorageProviders:Phase1Note:* and
Sweeps the torun.media Localization resource for the 12 non-EN locales
Replaces ~110 [en] placeholder values in the Authoring resource's
[Cursor-aware var insert (slice50-S)]
Closes the loop on slice50-I's per-node budgetUsd intent layer with
User-driven polish on the /media/storage-providers surface:
Adds OptimizerOptions sub-block under BunnyCdnOptions for Pull-Zone-level
Closes chip #118 last deferred item:
Backend (modules/torun.persona):
Closes the deferred item from chip #118 wrap doc:
Two inspector enhancements that close the gap between author intent
WorkflowGraphComponent:
Closes the deferred item from chip #118 wrap doc:
Closes the deferred item from the workflow-editor wrap (chip #118):
Two related extensions to the advanced editor surface:
Rule 8 (transactional outbox) — after the executor's RunSpecAsync returns
StorageBrowse and UploadAsset landing card descriptions had leftover
The existing executor's QualityGate node (Slice 449/449b) already implements
Single AppService surfaces three endpoints:
Workflow-node-shaped wrapper over Sprint 50-LLL's IModelRoutingService.
User-facing wizard-catalogue endpoint.
Captures what landed this sprint (library landing + simple-mode wizard
Auto-propagated from the en.json additions in 9b95c79c (admin panel
Replaces the existing add-node dropdown with a permanent left-rail
Replaces the /me/workflow-editor entry that dropped users straight into
Idempotent host-pass DataSeedContributor that materialises the three wizard
Foundation for the six host-admin /media surfaces.
Catalog entity for wizard-surfaced workflow presets.
Public-site MVC Razor pages were rendering hardcoded fixture data
DbMigrator hit E11000 on BlogPostsDataSeedContributor: the legacy
BlogPostsDataSeedContributor adds the initial public marketing blog catalog
PublicWebsite layout header override:
- Anonymous browse for /marketplace (paged listings)
- Pages/Sitemap.cshtml (route /sitemap.xml) — returns sitemaps.org urlset
- Pages/Legal/Detail.cshtml (route /legal/{slug}) — Markdig-rendered long
- Pages/Pricing/Index.cshtml (route /pricing) — Monthly/Yearly toggle (real
- Pages/Docs/Index.cshtml (route /docs) — section grid landing + sidebar
- Anonymous browse for /personas (paged catalog)
Pull landing data from IPublicLandingAppService stub + pricing teaser from
- ToRun.Web.Public.csproj — add Markdig 0.37.0 for markdown rendering
- Anonymous read for /legal/{slug} — Terms, Privacy, Cookie, Refund,
- Anonymous read for /faq
- Anonymous read for /docs (tree + by-slug)
- Anonymous read for /changelog (paged, PublishedAt DESC)
- Threads list (paged, optional CategoryKey tag match against ForumThread.Tags)
- Anonymous read surface for /blog (list + by-slug)
smoke-backend.py a signalé un VERB_MISMATCH : Angular appelle un PUT nu
Moitié backend de Sprint 50-F : chat de démo en page d'accueil anonyme avec limite par IP
Le dictionnaire `Dictionary<(DateTime Date, Guid?
Ferme la seule fenêtre de course dans KeywordSettlementJob qui pouvait
Suite de la tâche #67 (balayage 50-SS).
Ferme le fondement 50-RRR (commits A/B/C) en câblant le composite réel
Remplissage de Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo dans les 28 locales non-anglaises (en.json disposait déjà du jeu complet depuis Sprint 50-CCC-2).
Reproduit Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction
Le pipeline dérive désormais la clé de capacité de la topologie d'entrée et utilise le
Contrat d'adaptateur pour le chemin composite multi-entrée.
Commit fondateur pour la refactorisation d'édition multi-image (Option C — capacité
Constat de périmètre : le câblage dans ChatPipelineAppService.cs:1415 appelle déjà
5 ajouts de journaux structurés pour que les échecs de production exposent leur contexte complet
Correctif à deux volets pour la bulle accumulant des sessions vides / indésirables :
Ferme le -2 différé de 50-YY (où l'attachement micro avait été mis de côté pour que le
Comble la lacune inter-pipeline laissée par 50-AAA.
L'utilisateur a signalé que « Pick a source image » et « Pick a mask image »
Journal de production :
L'utilisateur a signalé que le téléversement de source et de masque sur /me/image Édition
Dernière tranche du module bibliothèque.
Retour utilisateur : la bannière verte « Upload complete. » clignotait pour
Sprint 50-CCCC a tenté de corriger l'ObjectDisposedException du pipeline de téléversement
Cause racine du toast « Upload failed » persistant — même si les fichiers
L'utilisateur a signalé cinq problèmes distincts :
L'utilisateur a signalé que part_001.wav / part_002.wav supprimés de la bibliothèque mais
50-YYY avait laissé une régression : openAssetDetail ne déclenchait que le pré-chargement de texte
L'utilisateur a signalé l'onglet Documents vide après avoir téléversé des fichiers .md / .txt —
Le schéma d'URL publique CDN était incorrect pour /me/library — le contenu est par utilisateur
Deux bugs en un lot — les deux découverts lors d'un test utilisateur où 4 fichiers étaient « téléversés » selon la bannière verte mais la bibliothèque restait à 0 élément.
Utilisateur : « progress bar koy, uploading vs saniye yazsın, kullanıcı bilgilensin, böyle çok yavan duruyor »
Deux problèmes bloquants pour l'utilisateur lors des tests /me/library :
L'utilisateur a signalé une erreur 400 « Only image/* MIME types are accepted on this endpoint. » lors du téléversement d'un fichier non-image depuis l'onglet Tout.
L'utilisateur a signalé une erreur 500 admin Message Citations « Internal error ».
L'utilisateur a signalé que le téléversement en bibliothèque échouait avec « Bunny storage upload failed with HTTP 401 ».
L'utilisateur a signalé /me/image Generate cassé : « Image generation provider »
L'utilisateur a signalé que la refactorisation de position de panneau Sprint 50-III n'est TOUJOURS pas
Cause racine (variante scénario B) : `openSession()` appelle `messages.set(mapped)`
Utilisateur : « You don't have to use the same model for titles, these are »
L'utilisateur a signalé que le panneau continuait à s'ouvrir détaché du FAB malgré Sprint
Sprint 50-CCC avait relevé MaxOutputTokens 24 → 128 en attendant « ~100
L'utilisateur a signalé /me/activity-history vide malgré des heures de chat/image/voix/etc.
Deux régressions de test utilisateur trouvées et corrigées ; le troisième point
| # | Menu | Groupe | Chemin Angular | Route backend | Statut | Cause racine |
Utilisateur : « library dosya eklerken neden tek tek el ile eklemem gerekiyor »
Utilisateur : « source da upload from pc var da mask ta neden yok, bizim »
Bug critique signalé : chaque tentative de téléversement PC levait
L'utilisateur a signalé à plusieurs reprises depuis hier que /me/notifications/
La liste des chats récents dans /agent/chat-pipeline comportait Renommer/Supprimer par ligne
Les tests utilisateur ont soulevé 5 points ; 4 sont corrigés dans ce commit, 1
Worker AsyncPeriodicBackgroundWorker quotidien (tick 24h) balaie les entrées Paid
Sprint 47-O a créé des entités AdAuction plates sans FK de jointure ;
Worker ABP AsyncPeriodicBackgroundWorker quotidien (tick 24h) balaie les entrées en attente
Sprint 50-TT avait été lancé pour ceci mais a dévié (il a
L'utilisateur a demandé : indicateur de taille en haut de la bibliothèque, téléversement PC, quota par niveau de plan,
Étend le schéma 50-RR (VideoJobPollingWorker IAbpDistributedLock)
Sprint 50-P avait différé le téléversement PC car le backend manquait d'un Bunny
50-AA a été interrompu durant le balayage complet ; voici la reprise par lots
Sprint 50-U + 50-EE ont câblé le polling + le flux de remboursement mais supposaient un seul pod
Directive utilisateur (tour Sprint 50-E) : bell + activity sağdaki menü ikonlarının
Backend inaccessible sur https://localhost:44304 durant ce sprint ;
Sprint 47-H a construit un index composite dégradé pour le fil Creator/Post
Sprint 47-H a construit un scan dégradé (TenantId, CreationTime) pour PersonaPost
Sprint 50-W BillingReconciliationJob a détecté des lacunes (Paddle
Chaque modules/torun.*/angular/angular.json référençait
Les tests d'isolation tenant Sprint 50-CC ont révélé un défaut préexistant :
Le balayage MT Sprint 47-A..47-P a ajouté des index composites préfixés TenantId à chaque
Finalisation de la série Sprint 49.
Risque R2 avant lancement : Sprint 47-A..47-P a balayé plus de 219 entités pour
Sprint 50-U a révélé une lacune : IBillingRecorder ne disposait que de RecordAsync.
Plan §2.3 / audit R1 — Sprint 47-A...47-P a balayé plus de 219 entités pour
Carnet de bord §2.5 : propagation de 22 clés du pipeline ImageEdit (Sprint
Sprint 50-K a détecté une collision (config Paddle du plan d'abonnement
Phase 1.5 §2.1 #3 — troisième worker en arrière-plan.
Phase 1.5 §2.1 #4 — quatrième et dernier worker en arrière-plan avant lancement.
/api/app/run-input-upload renvoyait 404 car l'AppService était
Sprint 50-P a livré l'UI de l'onglet Édition /me/image + câblage backend mais
Le frontend (Angular | date pipe + constructeur Date) gère UTC → local
Phase 1.5 §2.1 — worker en arrière-plan prioritaire.
Phase 1.5 §2.1 #2 — deuxième worker en arrière-plan.
L'utilisateur a signalé que le tour de suivi « form doldurma » renvoyait « Message failed.
Bug A : le compositeur de chat ignorait Ctrl+V pour les images du presse-papiers.
La page de navigation Marketplace (angular/src/app/marketplace/
L'onglet Édition manquait la sélection du modèle (Auto/Manuel), la qualité
L'utilisateur a signalé que le positionnement par défaut Sprint 50-I (bottom:96 right:24) chevauche
Les tests utilisateur sur /me/notifications renvoyaient 404 sur
PaddleOptions.WalletTopUpPriceIds était un Dictionary<string,string>
Utilisateur : « paddle.js popup açması lazım, hata veriyor » lors de
Sprint 50-I corrige deux régressions UX apparues après Sprint 50-B + 50-E :
L'administrateur a enregistré la config Paddle d'un SubscriptionPlan ; le premier enregistrement fonctionnait.
Le tableau de ventilation des coûts sur /me/billing préfixait naïvement chaque
Sprint 49-B avait laissé deux URLs /api/app/* codées en dur dans le chat-pipeline
- 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint) : ajouté à en.json + les 28 autres locales avec traductions natives
Utilisateur : « sil tıkladığımda js confirm çıkıyor, biz neden leptonx e »
Correctif A (bug serveur CRITIQUE) :
Signalement utilisateur : le menu déroulant SourceKind affichait des blocs rose/bleu déformés (cassé
Retour utilisateur : les deux cloches flottantes (cloche de notification + centre d'activité)
Application du schéma Sprint 47-I + 45-M.
Sprint 46-A a introduit IBillingRecorder inter-modules + émission de BillingRecords
La normalisation structurelle Sprint 46-F (lowercase→PascalCase) s'est achevée mais a laissé 4 locales avec du contenu anglais issu des stubs Suite.
Application du schéma Sprint 45-M + 47-A à 47-N.
Application du schéma Sprint 47-M.
Application du schéma Sprint 45-M + 47-K.
Application du schéma Sprint 45-M + 47-A à 47-K.
Application du schéma Sprint 45-M + 47-A à 47-H.
Application du schéma Sprint 45-M + 47-A/B/C/D/E/F/G/O.
Application du schéma Sprint 45-M + 47-G.
Application du schéma Sprint 45-M + 47-A/B/C/D/E/F.
Application du schéma Sprint 45-M + 47-A/B/C/D/E.
Application du schéma Sprint 45-M + 47-A/B/C/E.
Application du schéma Sprint 45-M + 47-A + 47-B.
Application du schéma Sprint 45-M + 47-A/B/C.
Application du schéma Sprint 45-M + 47-A/B.
Application du schéma Sprint 45-M + 47-A.
Application du schéma Sprint 45-M : Suite n'émettait pas IMultiTenant sur les classes de base malgré IsMultiTenant: true dans le JSON.
Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):