What is new on the ToRun platform, newest first.
June 2026 — 53 changes
Il selettore dei modelli ora include Google Imagen e Gemini per le immagini, e OpenAI Sora e Google Veo per i video, accanto ai modelli che già avevi. Scegli esattamente quello che desideri, oppure lascia che Auto trovi…
Concatena più passaggi AI in un workflow da avviare quando vuoi, poi pubblicalo sul Marketplace o esplora quello che altri creator hanno condiviso. Workflow Editor, Runner e Marketplace sono ora disponibili direttamente…
Aggiungi ToRun alla schermata Home e avvialo come un'app nativa, a schermo intero e con la sua icona: a un solo tocco di distanza, in attesa dell'app mobile.
Un nuovo logo e un branding più pulito in tutta l'app, ottimizzato sia per il tema chiaro che per quello scuro.
Scegli quanto a fondo deve ragionare l'AI, ora anche in modalità Auto. I prompt per le immagini possono attingere in modo discreto alla tua memoria salvata, così i risultati rispecchiano le persone e i dettagli che ti st…
L'avanzamento della generazione appare ora accanto al risultato, anziché sotto il modulo, ogni pagina si apre pulita e la tua ultima creazione resta sempre in primo piano, mentre quelle precedenti trovano posto nella tua…
La cronologia del tuo wallet è ora suddivisa in pagine e mostra gli importi esatti anche sotto il centesimo, e rimuovere elementi dalla tua Library non genera più errori.
Crea il tuo account inserzionista e invia le campagne per la revisione direttamente dal tuo account, senza dover attendere alcuna configurazione manuale.
Dietro le quinte: una contabilizzazione più equa dei crediti gratuiti, controlli più rigorosi su pagamenti e permessi dei creator, una moderazione dei contenuti multimediali più sicura ed esecuzioni dei workflow più affi…
La Traduzione in tempo reale ora ti permette di scegliere tra due motori e selezionare quello più adatto alla tua conversazione, inclusa una nuova opzione che parla 77 lingue, tra cui turco e russo. Ogni scelta mostra su…
I modelli non inclusi nel tuo piano ora compaiono con un piccolo lucchetto e un modo per passare a un piano superiore o ricaricare il portafoglio con un solo tocco, invece di darti errore solo dopo l'invio. Abbiamo anche…
Condividi un'immagine una volta sola e l'assistente conserva ciò che ha visto per tutto il resto della conversazione, così puoi farci domande anche molti messaggi dopo, persino dopo aver cambiato modello, senza mai ricar…
Le risposte in chat ora disegnano i diagrammi come veri diagrammi, presentano le tabelle con bordi ben definiti e dimensionano i titoli in base al messaggio invece di riempire lo schermo, così le risposte sono più facili…
Quando un modello richiede un piano superiore o il tuo saldo è basso, ora ricevi un avviso amichevole con i pulsanti Cambia piano e Ricarica portafoglio direttamente lì. Le risposte che non possono essere generate spiega…
I record di fatturazione, la cronologia e le attività vengono ora visualizzati nella tua ora locale anziché in UTC, così le marche temporali corrispondono all'orologio davanti a te.
Avviare una nuova chat ora riutilizza quella vuota già esistente invece di accumulare chat in bianco, le chat rimaste senza risposta non ingombrano più l'elenco e i titoli provvisori vengono sostituiti da un nome vero no…
Le aziende possono ora creare un account inserzionista e gestire le proprie campagne pubblicitarie dall'inizio alla fine: crea le campagne, aggiungi le creatività che le accompagnano e inviale per una rapida revisione pr…
Usare la chiave del tuo provider ora copre anche la voce in tempo reale, la traduzione dal vivo e la trascrizione dal vivo: l'utilizzo dell'AI passa attraverso la tua chiave e noi addebitiamo solo la piccola tariffa al m…
Le nostre pagine pubbliche sono ora basate su contenuti modificabili in tante lingue, le immagini caricate vengono controllate alla ricerca di contenuti non sicuri prima di essere archiviate, la registrazione dell'accoun…
Le risposte lunghe ora vengono elaborate sul server e proseguono mentre passi da una chat all'altra, apri un'altra pagina o chiudi la scheda. Torna quando vuoi: la risposta è ancora in arrivo, oppure è già pronta per te.
Le chat avviate all'interno di un progetto ne ereditano automaticamente le istruzioni, le conoscenze caricate e la memoria, mostrano un badge del progetto con un collegamento rapido di ritorno e ne riportano il nome tra…
La memoria del tuo assistente ora tiene traccia della rapidità con cui cambia ogni informazione e segnala quelle che potrebbero essere superate, così da basarsi su ciò che è ancora vero. Un nuovo editor ti permette di ri…
Abbiamo aggiunto gli ultimi modelli per immagini, video, trascrizione e voce in tempo reale e attivato pagine indipendenti Traduci e Trascrivi, così puoi raggiungere questi strumenti direttamente dal menu.
Parla e lascia che le tue parole vengano tradotte quasi all'istante: scegli due lingue, invertile con un solo tocco e il traduttore acquisisce la tua voce e trasmette la traduzione mentre parli.
La pagina video ora mantiene allineate le sue anteprime quando elimini un elemento dalla libreria, ti consente di impostare la durata della clip per ogni modello, rimuovere singole clip e contrassegna chiaramente i risul…
L'assistente in-app ora mostra risposte ben formattate, mantiene in vista l'ultimo messaggio mentre scrive, salva in modo affidabile la risposta completata e assegna a ogni conversazione un titolo automatico.
Le risposte che contengono link, formule matematiche o importi in valuta non appaiono più vuote o visualizzate a metà, nemmeno dopo aver ricaricato la pagina, e le risposte di ricerca approfondita includono sempre il rie…
Un ampio lavoro dietro le quinte: misurazione dell'utilizzo e totali di spesa più precisi, rimborsi automatici più equi, messaggistica in tempo reale più solida, maggiori tutele per privacy e sicurezza e messaggi sullo s…
I post pubblici del blog e le discussioni del forum — comprese le reazioni e le risposte — ora sono visibili anche ai visitatori che non hanno effettuato l'accesso.
L'utilizzo ora viene addebitato con un unico ricarico equo, gli indicatori della spesa mensile e del budget residuo sono accurati e l'elenco dei modelli è stato ripulito — i modelli obsoleti sono stati ritirati e quelli…
Gli annunci di workflow e i pacchetti possono mostrare un'immagine di copertina vera e propria, rendendo il marketplace più piacevole e facile da esplorare.
Chiedi all'assistente e lui compilerà i moduli, premerà i pulsanti e si muoverà nell'app per te — il tutto grazie a un set di strumenti più ampio, che ora arriva fino ai contatti, alle FAQ, al forum, alla memoria e alla…
Le risposte ora compaiono parola dopo parola anziché tutte insieme, e la bolla dell'assistente può essere trascinata dove preferisci, con un'anteprima in tempo reale di ciò su cui sta lavorando.
Creare un progetto e avviare una nuova chat al suo interno ora funziona senza problemi, così puoi tenere insieme chat, file e contesto correlati.
I video vengono riprodotti in modo affidabile, i contenuti multimediali privati si caricano tramite un proxy sicuro, gli avatar di creator e persona ora sono visibili a tutti e le note vocali vengono trascritte senza err…
Quando una parte del servizio ha problemi, l'avviso ora è più facile da capire e non rivela più i nomi interni dei fornitori.
Connetti app esterne con un solo accesso o una chiave API, così l'assistente può lavorare direttamente con gli strumenti che già usi.
Gli strumenti per le immagini ora scelgono un modello adatto a ciò che stai facendo, mostrano un'anteprima istantanea del risultato e la modifica funziona di nuovo dopo un cambio di modello del provider.
Quando un'immagine o un allegato è stato rimosso, la cronologia delle chat, la galleria multimediale e l'editor di immagini ora mostrano un segnaposto chiaro invece di interrompersi con un errore.
Il traduttore ora offre un selettore con ricerca tra circa 100 lingue, ciascuna indicata con il proprio nome nativo e quello inglese.
Abbiamo aggiunto una serie di nuovi articoli del blog e discussioni nel forum — comprese domande con risposta — così c'è subito molto altro da leggere ed esplorare.
La chat può ora cercare nei tuoi file caricati, eseguire Python in un sandbox, modificare immagini, trascrivere e riprodurre audio, e avviare i tuoi workflow — tutto senza uscire dalla conversazione.
Lascia che la chat cerchi sul web in tempo reale, esegua ricerche approfondite multi-fonte e recuperi e legga pagine complete — ogni risposta include le fonti utilizzate.
Il tuo assistente ora mantiene una memoria leggera tra le chat, può elencare ciò che ricorda e rispetta una richiesta di dimenticanza in qualsiasi lingua.
Genera e modifica immagini, produci cortometraggi e componi canzoni con testi — grazie ai nuovi motori di immagine, video e musica, con un selettore multimediale condiviso e la tua libreria a portata di clic.
Parla con ToRun ad alta voce — una nuova funzionalità vocale in tempo reale porta conversazioni parlate e trascrizione live nella chat.
Le esecuzioni del workflow ora preferiscono modelli di qualità premium, si mettono in pausa per la tua approvazione dove necessario e possono essere annullate, rigenerate e riprese — con ogni output salvato direttamente…
Raggruppa chat correlate, file e contesto in Progetti così il tuo assistente avrà sempre il giusto contesto per il compito da svolgere.
Redigi e perfeziona contenuti di lunga durata e codice in un pannello canvas dedicato affiancato alla tua chat.
Riepiloghi progressivi, finestre di contesto più intelligenti e scorrimento rapido della cronologia mantengono le conversazioni lunghe coerenti e fluide, con controlli chiari quando una conversazione supera la finestra d…
Una franchigia gratuita equa che si ricarica su una finestra mobile, gauge di spesa più chiari, rimborsi automatici quando la generazione di immagini o video non va a buon fine, e controlli dello sforzo di ragionamento c…
Decine di modelli 2026 aggiunti e quelli obsoleti ritirati, più una sincronizzazione automatica giornaliera che mantiene aggiornati i modelli e i prezzi dei provider — gestiti da un nuovo catalogo admin.
Pubblica una conversazione su un link pubblico e fai crescere la community attorno a ciò che crei.
May 2026 — 499 changes
Harness console .NET standalone (test/ToRun.SmokeTests) che si autentica contro l'Host in esecuzione (grant password OpenIddict) e verifica ogni funzionalità core end-to-end tramite la vera API HTTP: auth/me, CRUD memori…
I media della piattaforma risiedono in una Storage Zone Bunny PRIVATA, quindi una semplice
Completa la funzionalità di gestione della memoria via chat sopra
memory_forget restituiva no_match per i ricordi che esistono.
gemini-2.5-flash ha iniziato a restituire HTTP 400 con thinkingBudget=128 (il valore basso 52-N
Le due pagine host-admin (/admin/model-catalog, /admin/model-onboarding)
La discovery corrispondeva soltanto per ProviderModelId/ModelKey esatto, quindi i provider datati
Il gate dello sforzo di ragionamento è ora basato sul finanziamento, non sul livello.
Fusione best-of-both nel sync 52-Q-MODEL-SYNC-JOB già atterrato: quando OpenRouter
Il selettore dello sforzo di ragionamento era rigidamente bloccato al livello di abbonamento più un'esenzione admin/host da un approccio precedente, rifiutato.
Deliverable di fase 1: inventario lista/fonte-prezzi di 26-provider, il
La procedura guidata di onboarding (fasi A-D) crea SOLTANTO righe nel catalogo; non era disponibile nessun
Backend (torun.agent): SharedChat aggiunge IsListed/ListedSlug/ListedAt + campi carta denormalizzati; PublicCommunityAppService + PublicCommunityController (feed /community anonimo + visualizzatore by-slug); CommunityLis…
Gli allegati audio nella chat erano non funzionanti; le cause radice effettive differivano da
PARTE 1 — il menu a tendina "Gestione overflow del contesto" nell'intestazione chat era bloccato su
La rimozione del limite giornaliero (84178afab) ha eliminato DailyKey/MonthlyKey da BudgetBucketCacheItem
Parte 1 — ripristino del livello di test di integrazione MongoDB in rosso.
Stringhe del selettore dello sforzo di ragionamento (Effort:Tooltip, Effort:Locked:Tooltip,
Controllo dello sforzo di ragionamento canonico e indipendente dal provider sul compositore chat,
Passaggio finale di rimozione del codice morto per la riscrittura del budget a finestra di sessione.
Il gauge Spesa Mensile/Giornaliera legge la telemetria UserDailySummary (ScopeKey=userId,
Follow-up di audit alla riscrittura del budget a finestra di sessione (2a33fd31f).
Il gauge del budget-bucket nella home (/) + me-home mostrava "$0.00 / 0% / $0.00" ogni volta che
Il budget bucket del livello gratuito era un gocciolamento "$2 / 30d / 24h": ricarica = $2/720/h e
Il gauge BUDGET BUCKET nella home (/) e nella me-home (/me) mostrava "$0.00 (2% / $0.01)":
Bug di visione multi-turn.
Primo blocco di regressione nel livello smoke.
Correzione della causa radice per i ricorrenti 404 di title-gen / public-chat / vision: la capability
Utente confermato: la descrizione delle immagini funziona ora.
L'ambito del proprietario restituiva 403 anche per il legittimo proprietario della chat: chat create dal manager
A3 VERA causa radice (trovata dal test live nel browser): immagine allegato chat
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
La risoluzione di IQueuedRequestDispatcher causava StackOverflow all'avvio (non intercettabile — una
Sia il sink runtime dell'Host (appsettings.json) sia i logger di bootstrap
Causa radice ricorrente: ChangelogBackfillDataSeedContributor verificava l'idempotenza su
Eseguito extract-sprint-changelog.py + propagate-changelog-locales.py da 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 capability voice-realtime + join
Backend exception → frontend humane message + retry hint + status banner.
Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries
Replica delle chiavi UI voice-realtime aggiunte a en.json in
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
Per CLAUDE.md Regola 10.
Output di `python platform-plan/scripts/_validate-29-locales.py` dopo l'atterraggio di tutti e 27 i batch dei traduttori di lingua sorella + il passaggio BOM-strip:
Batch da 6 agenti Sonnet traduttori in parallelo (tutti già registrati nel repo dai turni precedenti + gruppo finale appena scaricato):
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).
Analisi di sola lettura su ChatPipelineAppService + InAppAssistant + client provider + 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 ha rilevato un VERB_MISMATCH: Angular chiama PUT nudo
Backend di Sprint 50-F: chat demo landing page anonima con per-IP
Il dizionario `Dictionary<(DateTime Date, Guid?
Chiude l'unica finestra di race in KeywordSettlementJob che poteva
Continuazione del task #67 (spazzata 50-SS).
Chiude la fondazione 50-RRR (commit A/B/C) cablando l'effettivo composito
Backfill di Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo in tutti i 28 locale non inglesi (en.json aveva già il set completo da Sprint 50-CCC-2).
Rispecchia Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction
La pipeline ora deriva la chiave capability dalla topologia di input e usa
Contratto adapter per il percorso composito multi-input.
Commit fondamentale per il refactoring modifica multi-immagine (Opzione C — capability
Risultato dell'analisi: il cablaggio in ChatPipelineAppService.cs:1415 già chiama
5 aggiunte di log strutturati affinché i fallimenti in produzione mostrino il contesto completo
Correzione su due fronti per la bolla che accumulava sessioni vuote/indesiderate:
Chiude il -2 rimandato da 50-YY (dove il mic-attach era stato escluso affinché
Chiude la lacuna cross-pipeline lasciata da 50-AAA.
Utente ha segnalato sia "Pick a source image" che "Pick a mask image"
Log di produzione:
Utente ha segnalato sia il caricamento sorgente che quello maschera su /me/image Modifica
Ultima slice del modulo libreria.
Feedback utente: il banner verde "Upload complete." sfarfalleggiava per
Sprint 50-CCCC ha tentato di correggere l'ObjectDisposedException della pipeline upload
Causa radice del toast persistente "Upload failed" — anche se i file
Utente ha segnalato cinque problemi distinti:
Utente ha segnalato part_001.wav / part_002.wav eliminati dalla libreria ma
50-YYY ha lasciato una regressione: openAssetDetail attivava solo il precaricamento del testo
Utente ha segnalato la scheda Documenti vuota dopo aver caricato file .md / .txt —
Il pattern URL pubblico CDN era errato per /me/library — il contenuto è per utente
Due bug in un unico lotto — entrambi emersi da un test utente in cui 4 file risultavano 'caricati' secondo il banner verde ma la pagina libreria rimaneva a 0 elementi.
Utente: 'upload işlemleri için progress bar koy, uploading vs saniye yazsın hangisi upload oldu kullanıcı bilgilensin, böyle çok yavan duruyor.'
Due problemi bloccanti per l'utente dai test /me/library:
Utente ha segnalato upload libreria 400 'Only image/* MIME types are accepted on this endpoint.' dopo aver caricato un file non immagine dalla scheda Tutti.
Utente ha segnalato Message Citations admin 500 'Internal error'.
Utente ha segnalato caricamento libreria 'Bunny storage upload failed with HTTP 401'.
Utente ha segnalato /me/image Genera non funzionante: "Image generation provider
Utente ha segnalato che il refactoring posizione pannello di Sprint 50-III NON è ancora
Causa radice (variante Scenario B): `openSession()` chiama `messages.set(mapped)`
Utente: "Non è necessario usare lo stesso modello per i titoli, questi sono
Utente ha segnalato che il pannello continuava ad aprirsi staccato dal FAB nonostante Sprint
Sprint 50-CCC ha alzato MaxOutputTokens 24 → 128 aspettandosi "~100
Utente ha segnalato /me/activity-history vuoto nonostante ore di chat/image/voice/ecc.
Due regressioni rilevate nei test utente e corrette; il terzo problema
| # | Menu | Gruppo | Percorso Angular | Route backend | Stato | Causa radice |
Utente: "library dosya eklerken neden tek tek el ile eklemem gerekiyor,
Utente: "source da upload from pc var da mask ta neden yok, bizim
Bug critico segnalato dall'utente: ogni tentativo di caricamento da PC generava
Utente ha segnalato ripetutamente da ieri che /me/notifications/
L'elenco chat recenti in /agent/chat-pipeline aveva Rinomina/Elimina per riga
I test utente hanno evidenziato 5 problemi; 4 affrontati in questo commit, 1
AsyncPeriodicBackgroundWorker giornaliero (tick 24h) elabora i Paid
Sprint 47-O ha creato entità AdAuction flat senza FK di join;
ABP AsyncPeriodicBackgroundWorker giornaliero (tick 24h) elabora in sospeso
Sprint 50-TT era stato assegnato a questo ma è andato fuori copione (ha
Utente ha richiesto: indicatore dimensione in cima alla libreria, caricamento da PC, quota per livello piano,
Estende il pattern 50-RR (VideoJobPollingWorker IAbpDistributedLock)
Sprint 50-P ha rimandato il caricamento da PC perché il backend mancava di un Bunny
50-AA interrotto durante la spazzata completa; questo è il lotto ripreso
Sprint 50-U + 50-EE ha cablato polling + flusso rimborso ma assumeva single-pod
Direttiva utente (turno Sprint 50-E): bell + activity sağdaki menü ikonlarının
Backend non raggiungibile su https://localhost:44304 durante questo sprint;
Sprint 47-H ha costruito un indice composto degradato per il feed Creator/Post
Sprint 47-H ha costruito una scansione degradata (TenantId, CreationTime) per PersonaPost
Sprint 50-W BillingReconciliationJob ha rilevato lacune (Paddle
Ogni modules/torun.*/angular/angular.json faceva riferimento a
I test di isolamento tenant di Sprint 50-CC hanno rilevato un difetto preesistente:
La spazzata MT di Sprint 47-A..47-P ha aggiunto indici composti con prefisso TenantId a ogni
Completamento serie Sprint 49.
Rischio R2 pre-lancio: Sprint 47-A..47-P ha ispezionato oltre 219 entità per
Sprint 50-U ha scoperto una lacuna: IBillingRecorder aveva solo RecordAsync.
Piano §2.3 / audit R1 — Sprint 47-A...47-P ha ispezionato oltre 219 entità per
Backlog Piano §2.5: propagate 22 chiavi pipeline ImageEdit (Sprint
Sprint 50-K ha rilevato una collisione (config Paddle del piano abbonamento
Fase 1.5 §2.1 #3 — terzo worker in background.
Fase 1.5 §2.1 #4 — quarto e ultimo worker in background pre-lancio.
/api/app/run-input-upload restituiva 404 perché l'AppService era
Sprint 50-P ha realizzato UI scheda Modifica /me/image + cablaggio backend ma
Il frontend (Angular | date pipe + costruttore Date) gestisce UTC -> locale
Fase 1.5 §2.1 — worker in background a massima priorità.
Fase 1.5 §2.1 #2 — secondo worker in background.
Utente segnalato che il turno di follow-up "form doldurma" restituiva "Message failed.
Bug A: il compositore chat ignorava Ctrl+V sulle immagini dagli appunti.
La pagina di esplorazione Marketplace (angular/src/app/marketplace/
Alla scheda Modifica mancava la selezione Modello (Auto/Manuale), Qualità
Utente segnalato che il default Sprint 50-I (bottom:96 right:24) sovrappone
Test utente su /me/notifications ha restituito 404 su
PaddleOptions.WalletTopUpPriceIds era un Dictionary<string,string>
Utente segnalato "paddle.js popup açması lazım, hata veriyor" quando
Sprint 50-I risolve due regressioni UX emerse dopo Sprint 50-B + 50-E:
L'amministratore ha salvato la config Paddle di un SubscriptionPlan; il primo salvataggio ha funzionato.
La tabella di dettaglio costi in /me/billing aggiungeva ingenuamente il prefisso a ogni
Sprint 49-B ha lasciato due URL /api/app/* hardcoded in chat-pipeline
- 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint): aggiunto a en.json + tutti gli altri 28 locale con traduzioni native
Utente: 'memory sayfasında sil tıkladığımda js confirm çıkıyor biz neden leptonx e
Correzione A (bug server CRITICO):
Utente segnalato: il dropdown SourceKind mostrava blocchi rosa/blu anomali (rotto
Feedback utente: le due campane flottanti (notification-bell + activity-center)
Applicazione pattern Sprint 47-I + 45-M.
Sprint 46-A ha introdotto IBillingRecorder cross-modulo + emissione BillingRecords
La normalizzazione strutturale di Sprint 46-F (lowercase→PascalCase) ha lasciato 4 locale con contenuto inglese stub di Suite.
Applicazione pattern Sprint 45-M + da 47-A a 47-N.
Applicazione pattern Sprint 47-M.
Applicazione pattern Sprint 45-M + 47-K.
Applicazione pattern Sprint 45-M + da 47-A a 47-K.
Applicazione pattern Sprint 45-M + da 47-A a 47-H.
Applicazione pattern Sprint 45-M + 47-A/B/C/D/E/F/G/O.
Applicazione pattern Sprint 45-M + 47-G.
Applicazione pattern Sprint 45-M + 47-A/B/C/D/E/F.
Applicazione pattern Sprint 45-M + 47-A/B/C/D/E.
Applicazione pattern Sprint 45-M + 47-A/B/C/E.
Applicazione pattern Sprint 45-M + 47-A + 47-B.
Applicazione pattern Sprint 45-M + 47-A/B/C.
Applicazione pattern Sprint 45-M + 47-A/B.
Applicazione pattern Sprint 45-M + 47-A.
Applicazione pattern Sprint 45-M: Suite NON generava IMultiTenant sulle classi Base nonostante IsMultiTenant: true nel JSON.
Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):