What is new on the ToRun platform, newest first.
June 2026 — 53 changes
O seletor de modelos passa a incluir o Google Imagen e o Gemini para imagens, e o OpenAI Sora e o Google Veo para vídeo, a par dos modelos que já tinha. Escolha exatamente o que pretende ou deixe o Auto encontrar a melho…
Combine vários passos de IA num workflow que pode executar quando quiser e publique-o no Marketplace ou explore o que outros criadores já partilharam. O Workflow Editor, o Runner e o Marketplace estão agora ao seu alcanc…
Adicione o ToRun ao ecrã principal e abra-o como uma aplicação nativa, em ecrã inteiro e com o seu próprio ícone, ficando a um toque de distância até chegar a aplicação móvel.
Um novo logótipo e uma imagem mais clara em toda a aplicação, otimizada tanto para o tema claro como para o escuro.
Escolha o quanto a IA reflete antes de responder, agora também no modo Auto. Os prompts de imagem podem recorrer discretamente à sua memória guardada para que os resultados correspondam às pessoas e aos detalhes que lhe…
O progresso da geração aparece agora mesmo ao lado do resultado, em vez de por baixo do formulário, cada página abre limpa e a sua criação mais recente fica em destaque, enquanto as anteriores ficam guardadas na sua Libr…
O histórico da sua carteira passa a estar paginado e mostra montantes exatos abaixo do cêntimo, e remover itens da sua Library já não causa erros.
Crie a sua conta de anunciante e submeta campanhas para revisão diretamente a partir da sua conta, sem esperar por configurações manuais.
Nos bastidores: uma contabilização mais justa dos créditos gratuitos, verificações mais robustas nos pagamentos e nas permissões dos criadores, moderação de conteúdos mais segura e execuções de workflows mais fiáveis.
A Tradução em Direto permite-lhe agora escolher entre dois motores e optar pelo que melhor se adapta à sua conversa — incluindo uma nova opção que fala 77 idiomas, entre eles o turco e o russo. Cada escolha mostra o preç…
Os modelos que o seu plano não cobre passam a surgir com um pequeno cadeado e uma forma de, com um toque, fazer upgrade do plano ou carregar a sua carteira, em vez de falharem só depois de enviar. Disponibilizámos também…
Partilhe uma imagem uma vez e o assistente guarda o que viu durante o resto da conversa — assim pode perguntar sobre ela muitas mensagens depois, mesmo após mudar de modelo, sem nunca voltar a carregar a imagem nem cobra…
As respostas do chat desenham agora os diagramas como verdadeiros diagramas, apresentam as tabelas com limites bem definidos e ajustam o tamanho dos títulos à mensagem, em vez de encherem o ecrã — para que as respostas s…
Quando um modelo precisa de um upgrade ou o seu saldo fica baixo, recebe agora um aviso amigável com os botões Fazer upgrade do plano e Carregar carteira mesmo ali. As respostas que não podem ser geradas explicam porquê,…
Os registos de faturação, o histórico e a atividade são agora apresentados na sua hora local em vez de UTC, para que as datas e horas correspondam ao relógio à sua frente.
Iniciar um novo chat passa a reaproveitar um que esteja vazio, em vez de acumular chats em branco; os chats que nunca tiveram resposta deixam de sobrecarregar a sua lista; e os títulos provisórios são substituídos por um…
As empresas podem agora criar uma conta de anunciante e gerir as suas próprias campanhas de publicidade de ponta a ponta — criar campanhas, adicionar os criativos publicitários que as acompanham e submetê-las para uma re…
Usar a chave do seu próprio fornecedor passa a abranger também a voz em tempo real, a tradução em direto e a transcrição em direto: a utilização de IA passa pela sua própria chave e nós cobramos apenas a pequena taxa de…
As nossas páginas públicas passam a ser geridas por conteúdo editável em vários idiomas, as imagens carregadas são analisadas em busca de conteúdo inseguro antes de serem armazenadas, o registo de conta e os e-mails de c…
As respostas longas passam agora a correr no servidor e prosseguem enquanto mudas de conversa, abres outra página ou fechas o separador. Volta quando quiseres: a resposta ainda está a ser gerada ou já está à tua espera.
As conversas iniciadas dentro de um projeto assumem automaticamente as suas instruções, o conhecimento carregado e a memória, mostram um distintivo do projeto com uma ligação rápida de regresso e indicam o nome do projet…
A memória do teu assistente passa agora a acompanhar a rapidez com que cada facto muda e assinala os que podem estar desatualizados, para se apoiar no que ainda é verdadeiro. Um novo editor permite-te rever, adicionar e…
Adicionámos os mais recentes modelos de imagem, vídeo, transcrição e voz em tempo real e abrimos páginas autónomas de Traduzir e Transcrever, para que chegues a essas ferramentas diretamente a partir do menu.
Fala e deixa que as tuas palavras sejam traduzidas quase de imediato: escolhe dois idiomas, troca-os com um único toque, e o tradutor capta a tua voz e transmite a tradução à medida que falas.
A página de vídeo mantém agora as miniaturas sincronizadas quando apagas algo da tua biblioteca, permite-te definir a duração do clipe por modelo, remover clipes individuais e marca claramente os resultados de pré-visual…
O assistente integrado mostra agora respostas bem formatadas, mantém a última mensagem à vista enquanto escreve, guarda de forma fiável a resposta concluída e atribui a cada conversa um título automático.
As respostas que contêm ligações, fórmulas matemáticas ou valores monetários deixam de aparecer em branco ou apresentadas a meio, mesmo depois de atualizar a página, e as respostas de investigação aprofundada incluem sem…
Uma vasta ronda de trabalho nos bastidores: medição de utilização e totais de despesa mais exatos, reembolsos automáticos mais justos, mensagens em tempo real mais robustas, salvaguardas reforçadas de privacidade e segur…
As publicações públicas do blogue e os debates do fórum — incluindo as reações e respostas — passam a estar visíveis para os visitantes sem sessão iniciada.
A utilização passa a ser cobrada com uma única margem justa, os indicadores de gasto mensal e de orçamento restante apresentam valores rigorosos e a lista de modelos foi depurada — os modelos obsoletos foram retirados e…
Os anúncios de fluxos de trabalho e os pacotes podem apresentar uma verdadeira imagem de capa, tornando o marketplace mais fácil e agradável de explorar.
Peça ao assistente e ele preenche formulários, carrega em botões e desloca-se pela aplicação por si — apoiado por um conjunto de ferramentas mais alargado que agora chega ao contacto, às perguntas frequentes, ao fórum, à…
As respostas surgem agora palavra a palavra em vez de aparecerem todas de uma vez, e a bolha do assistente pode ser arrastada para onde lhe for mais cómodo, com uma indicação em direto daquilo em que está a trabalhar.
Criar um projeto e iniciar uma nova conversa no seu interior funciona agora sem problemas, para que possa manter juntos as conversas, os ficheiros e o contexto relacionados.
Os vídeos são reproduzidos de forma fiável, o conteúdo multimédia privado é carregado através de um proxy seguro, os avatares de criadores e personas passam a ser visíveis para todos e as notas de voz são transcritas sem…
Quando uma parte do serviço está com problemas, o aviso é agora mais fácil de compreender e deixa de revelar os nomes internos dos fornecedores.
Associe aplicações externas com um único início de sessão ou uma chave de API, para que o assistente possa trabalhar diretamente com as ferramentas que já utiliza.
As ferramentas de imagem escolhem agora um modelo adequado àquilo que está a fazer, mostram uma pré-visualização instantânea do resultado e a edição volta a funcionar após uma mudança de modelo do fornecedor.
Quando uma imagem ou um anexo foi removido, o seu histórico de conversas, a galeria multimédia e o editor de imagens passam a mostrar um marcador de posição claro, em vez de pararem com um erro.
O tradutor oferece agora um seletor com pesquisa entre cerca de 100 idiomas, cada um apresentado pelo seu nome nativo e em inglês.
Adicionámos um conjunto de novos artigos de blogue e tópicos de fórum — incluindo perguntas respondidas — para que haja mais para ler e explorar desde o primeiro dia.
O chat consegue agora pesquisar nos seus ficheiros carregados, executar Python numa sandbox, editar imagens, transcrever e reproduzir áudio, e acionar os seus fluxos de trabalho — tudo sem sair da conversa.
Deixe o chat pesquisar na web em tempo real, realizar investigação aprofundada com múltiplas fontes e obter e ler páginas completas — cada resposta regressa com as fontes que utilizou.
O seu assistente mantém agora uma memória ligeira entre chats, pode listar o que se recorda e honra um pedido de esquecimento em qualquer idioma.
Gere e edite imagens, produza curtas-metragens e componha músicas com letra — novos motores de imagem, vídeo e música, com um seletor de média partilhado e a sua biblioteca a um clique de distância.
Fale com o ToRun em voz alta — uma nova capacidade de voz em tempo real traz conversas faladas e transcrição ao vivo para o chat.
As execuções de fluxos de trabalho preferem agora modelos de qualidade superior, fazem pausa para a sua aprovação quando necessário, e podem ser canceladas, regeneradas e retomadas — com cada resultado guardado diretamen…
Agrupe chats, ficheiros e contexto relacionados em Projetos para que o seu assistente tenha sempre o enquadramento certo para a tarefa em mãos.
Rascunhe e aperfeiçoe conteúdo extenso e código num painel de canvas dedicado, lado a lado com o seu chat.
Resumos deslizantes, janelas de contexto mais inteligentes e rolagem mais rápida do histórico mantêm as conversas longas coerentes e ágeis, com controlos claros quando uma conversa ultrapassa a janela do modelo.
Um subsídio gratuito humanizado que se recarrega numa janela deslizante, indicadores de despesas mais claros, reembolsos automáticos quando a geração de uma imagem ou vídeo falha, e controlos de esforço de raciocínio que…
Dezenas de modelos de 2026 adicionados e obsoletos retirados, mais uma sincronização automática diária que mantém os modelos e preços dos fornecedores atualizados — gerido a partir de um novo catálogo de administração.
Publique uma conversa com uma ligação pública e faça crescer a comunidade em torno do que cria.
May 2026 — 499 changes
Conjunto de testes de consola .NET autónomo (test/ToRun.SmokeTests) que autentica contra o Host em execução (concessão de senha OpenIddict) e exercita todas as capacidades principais de ponta a ponta via a API HTTP real:…
Os média da plataforma residem numa Zona de Armazenamento PRIVADA do Bunny, pelo que um simples
Conclui a funcionalidade de gestão de memória orientada por chat, construída sobre
memory_forget devolvia no_match para memórias que existiam.
gemini-2.5-flash começou a devolver HTTP 400 com thinkingBudget=128 (o limite mínimo 52-N
As duas páginas de administrador do anfitrião (/admin/model-catalog, /admin/model-onboarding)
A descoberta correspondia apenas pelo ProviderModelId/ModelKey exato, pelo que versões desatualizadas do fornecedor
O bloqueio do esforço de raciocínio passa a basear-se em financiamento, e não em nível de subscrição.
Fusão do melhor de ambos no sincronismo 52-Q-MODEL-SYNC-JOB já concluído: quando o OpenRouter
O selector de esforço de raciocínio estava rigidamente bloqueado no nível de subscrição, com uma isenção de admin/anfitrião de uma abordagem anterior rejeitada.
Entregável da Fase 1: inventário de lista/fonte de preços de 26-provider, o
O assistente de integração (fases A-D) apenas CRIA entradas no catálogo; não existia
Backend (torun.agent): SharedChat recebe IsListed/ListedSlug/ListedAt + campos de cartão desnormalizados; PublicCommunityAppService + PublicCommunityController (feed /community anónimo + visualizador por slug); Community…
Os anexos de áudio no chat estavam avariados; as causas raiz reais diferiam do
PARTE 1 — o menu suspenso de gestão de overflow de contexto no cabeçalho do chat ficava bloqueado em
A remoção do limite diário (84178afab) eliminou DailyKey/MonthlyKey do BudgetBucketCacheItem
Parte 1 — restaurar o nível verde dos testes de integração com MongoDB.
As cadeias do selector de esforço de raciocínio (Effort:Tooltip, Effort:Locked:Tooltip,
Controlo canónico e agnóstico em relação ao fornecedor para o esforço de raciocínio no compositor de chat,
Passagem final de remoção de código morto para a reescrita do orçamento por janela de sessão.
O indicador de Despesas Mensais/Diárias lê a telemetria UserDailySummary (ScopeKey=userId,
Seguimento da auditoria à reescrita do orçamento por janela de sessão (2a33fd31f).
O indicador de budget-bucket na página inicial (/) + me-home apresentava "$0.00 / 0% / $0.00" sempre que
O bucket de orçamento do nível gratuito funcionava como um débito "$2 / 30d / 24h": recarga = $2/720/h e
O indicador BUDGET BUCKET na página inicial (/) e em me-home (/me) mostrava "$0.00 (2% / $0.01)":
Erro de visão em múltiplas rondas.
Primeiro bloqueio de regressão na camada de smoke.
Correção da causa raiz dos 404s recorrentes na geração de títulos / chat público / visão: capacidade
O utilizador confirmou que a descrição de imagens funciona agora.
O âmbito de proprietário resultava em 403 mesmo para o legítimo proprietário do chat: criado pelo gestor
Causa raiz REAL do A3 (detetada por teste ao vivo no browser): imagem de anexo de chat
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A resolução de IQueuedRequestDispatcher causava StackOverflow no arranque (não capturável — um
Tanto o sink de runtime do Host (appsettings.json) como os loggers de arranque
Causa raiz recorrente: ChangelogBackfillDataSeedContributor verificava idempotência em
Executado extract-sprint-changelog.py + propagate-changelog-locales.py a partir do 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 capacidade voice-realtime + junção
Backend exception → frontend humane message + retry hint + status banner.
Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries
Espelho das chaves de UI do modo de voz em tempo real adicionadas ao en.json em
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
Por CLAUDE.md Rule 10.
Resultado de `python platform-plan/scripts/_validate-29-locales.py` após todos os 27 lotes de tradução de idiomas-irmãos concluídos + a passagem de remoção de BOM:
Lotes de 6 agentes tradutores Sonnet paralelos (todos confirmados no repositório em iterações anteriores + grupo final agora enviado):
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).
Auditoria de leitura do ChatPipelineAppService + InAppAssistant + clientes de fornecedor + 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)
O smoke-backend.py sinalizou um VERB_MISMATCH: o Angular chama PUT simples.
Metade do backend do Sprint 50-F: chat demo da página de destino anónima com limite de taxa por IP.
O dicionário `Dictionary<(DateTime Date, Guid?`.
Fecha a única janela de corrida no KeywordSettlementJob que poderia.
Continuação da task #67 (varrimento 50-SS).
Fecha a fundação 50-RRR (commits A/B/C) ao ligar o caminho composto real.
Preenchimento de Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo em todos os 28 locais não-English (en.json já tinha o conjunto completo desde Sprint 50-CCC-2).
Reflecte o Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction).
O pipeline deriva agora a chave de capability a partir da topologia de entrada e usa.
Contrato do adaptador para o caminho composto de múltiplas entradas.
Commit de fundação para a refactorização de edição multi-imagem (Opção C — capability).
Conclusão da investigação: a ligação em ChatPipelineAppService.cs:1415 já chama.
5 adições de registo estruturado para que falhas em produção mostrem o contexto completo.
Correcção em duas frentes para o balão a acumular sessões vazias / indesejadas:
Fecha o -2 adiado do 50-YY (onde o anexo de microfone foi separado para que o.
Fecha a lacuna entre pipelines deixada pelo 50-AAA.
O utilizador reportou que tanto 'Escolher imagem de origem' como 'Escolher imagem de máscara'.
Registo de produção:
O utilizador reportou que tanto o upload de origem como o upload de máscara em /me/image Edit.
Última parcela do módulo biblioteca.
Feedback do utilizador: o banner verde 'Upload concluído.' aparecia e desaparecia para.
O Sprint 50-CCCC tentou corrigir a ObjectDisposedException no pipeline de upload.
Causa raiz do persistente toast 'Falha no upload' — mesmo que os ficheiros.
O utilizador reportou cinco problemas distintos:
O utilizador reportou que part_001.wav / part_002.wav eliminados da biblioteca continuavam a aparecer.
O 50-YYY deixou uma regressão: openAssetDetail apenas iniciava o pré-carregamento de texto.
O utilizador reportou o separador Documentos vazio após fazer upload de ficheiros .md / .txt —
O padrão de URL público do CDN estava errado para /me/library — o conteúdo é por utilizador.
Dois bugs num único lote — ambos revelados num teste de utilizador onde 4 ficheiros eram 'carregados' segundo o banner verde, mas a página da biblioteca ficava com 0 itens.
Feedback do utilizador: 'adiciona uma barra de progresso para os uploads, mostra o tempo restante, qual foi carregado, informa o utilizador, está muito simples assim.'
Dois problemas a bloquear o utilizador em /me/library:
O utilizador reportou erro 400 'Apenas tipos MIME image/* são aceites neste endpoint.' ao fazer upload de um ficheiro não-imagem no separador Todos.
O utilizador reportou 500 'Erro interno' no administrador de Message Citations.
O utilizador reportou 'falha no upload Bunny com HTTP 401' na biblioteca.
O utilizador reportou /me/image Generate com falha: 'O fornecedor de geração de imagem.'.
O utilizador reportou que a refactorização de posição do painel Sprint 50-III AINDA não.
Causa raiz (variante Cenário B): `openSession()` chama `messages.set(mapped)`.
Utilizador: 'Não tens de usar o mesmo modelo para os títulos, são só alguns tokens.'
O utilizador reportou que o painel continuava a abrir desancorado do FAB apesar do Sprint.
O Sprint 50-CCC aumentou MaxOutputTokens de 24 para 128 esperando '~100 tokens'.
O utilizador reportou /me/activity-history vazio apesar de horas de chat/imagem/voz/etc.
Duas regressões encontradas e corrigidas nos testes do utilizador; a terceira preocupação.
| # | Menu | Grupo | Caminho Angular | Rota backend | Estado | Causa raiz |
Utilizador: 'porque tenho de adicionar ficheiros um a um à biblioteca, devia poder seleccionar todos de uma vez.'
Utilizador: 'na fonte há upload do PC mas na máscara porque não há, o nosso sistema de upload está disponível.'
Bug crítico reportado pelo utilizador: cada tentativa de upload de PC lançava uma excepção.
O utilizador reportou repetidamente desde ontem que /me/notifications/.
A lista de conversas recentes em /agent/chat-pipeline tinha um dropdown Renomear/Apagar por linha.
Os testes do utilizador revelaram 5 problemas; 4 foram resolvidos neste commit, 1 adiado.
AsyncPeriodicBackgroundWorker diário (tick de 24h) varre entidades Paid.
O Sprint 47-O criou entidades AdAuction simples sem FK de junção;
AsyncPeriodicBackgroundWorker ABP diário (tick de 24h) varre liquidações pendentes.
O Sprint 50-TT foi distribuído para isto mas saiu do guião (fez outra coisa).
O utilizador pediu: indicador de tamanho no topo da biblioteca, upload de PC, cota por nível de plano.
Alarga o padrão 50-RR (VideoJobPollingWorker IAbpDistributedLock).
O Sprint 50-P adiou o upload de PC porque o backend não tinha um endpoint Bunny.
O 50-AA foi interrompido a meio da varredura completa; este é o lote retomado.
O Sprint 50-U + 50-EE ligou polling + fluxo de reembolso assumindo pod único.
Directiva do utilizador (turno Sprint 50-E): sino + actividade devem ficar adjacentes aos ícones do menu da direita.
Backend inacessível em https://localhost:44304 durante este sprint;
O Sprint 47-H construiu um índice composto degradado para o feed Creator/Post.
O Sprint 47-H construiu uma análise degradada (TenantId, CreationTime) para PersonaPost.
O BillingReconciliationJob Sprint 50-W detectou lacunas (Paddle).
Cada modules/torun.*/angular/angular.json referenciava.
Os testes de isolamento de inquilino Sprint 50-CC revelaram um defeito pré-existente:
A varredura MT Sprint 47-A..47-P adicionou índices compostos prefixados com TenantId a todas as.
Conclusão da série Sprint 49.
Risco R2 pré-lançamento: Sprint 47-A..47-P varreu mais de 219 entidades para.
O Sprint 50-U revelou a lacuna: IBillingRecorder tinha apenas RecordAsync.
Plano §2.3 / auditoria R1 — Sprint 47-A...47-P varreu mais de 219 entidades para.
Backlog do Plano §2.5: propagadas 22 chaves do pipeline ImageEdit (Sprint).
O Sprint 50-K detectou uma colisão (configuração Paddle do plano de subscrição).
Fase 1.5 §2.1 #3 — terceiro worker em segundo plano.
Fase 1.5 §2.1 #4 — quarto e último worker em segundo plano pré-lançamento.
/api/app/run-input-upload retornava 404 porque o AppService estava em falta.
O Sprint 50-P lançou o UI do separador Edit em /me/image + ligação ao backend, mas.
O frontend (Angular | date pipe + construtor Date) trata UTC → local.
Fase 1.5 §2.1 — worker em segundo plano de prioridade máxima.
Fase 1.5 §2.1 #2 — segundo worker em segundo plano.
O utilizador reportou que uma segunda mensagem de acompanhamento retornava 'Message failed.'.
Bug A: o compositor do chat ignorava Ctrl+V com imagens da área de transferência.
A página de navegação do Marketplace (angular/src/app/marketplace/).
O separador Edit não tinha a selecção de Modelo (Auto/Manual), Qualidade.
O utilizador reportou que o padrão Sprint 50-I (bottom:96 right:24) se sobrepõe.
O teste de /me/notifications resultou em 404.
PaddleOptions.WalletTopUpPriceIds era um Dictionary<string,string>.
O utilizador reportou 'paddle.js devia abrir um popup, está a dar erro' ao efectuar o checkout.
O Sprint 50-I resolve duas regressões de UX surgidas após Sprint 50-B + 50-E.
O administrador gravou a configuração Paddle de um SubscriptionPlan; a primeira gravação funcionou.
A tabela de detalhamento de custos em /me/billing prefixava ingenuamente cada linha com $.
O Sprint 49-B deixou dois URL /api/app/* codificados no pipeline de chat.
- 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint): adicionado a en.json + todos os outros 28 locais com traduções nativas.
Utilizador: 'na página memory ao clicar em apagar aparece um confirm JS, porque é que não usamos o LeptonX.'
Correcção A (bug CRÍTICO no servidor):
O utilizador reportou: o dropdown SourceKind mostrava blocos cor-de-rosa/azul estranhos (componente corrompido).
Feedback do utilizador: os dois sinos flutuantes (sino de notificação + centro de actividade) sobrepunham-se à etiqueta de administrador.
Aplicação do padrão Sprint 47-I + 45-M.
O Sprint 46-A introduziu IBillingRecorder entre módulos e emitiu BillingRecords.
A normalização estrutural Sprint 46-F (minúsculas → PascalCase) foi concluída, mas deixou 4 locais com conteúdo English de stub gerado pelo Suite.
Aplicação do padrão Sprint 45-M + 47-A a 47-N.
Aplicação do padrão Sprint 47-M.
Aplicação do padrão Sprint 45-M + 47-K.
Aplicação do padrão Sprint 45-M + 47-A a 47-K.
Aplicação do padrão Sprint 45-M + 47-A a 47-H.
Aplicação do padrão Sprint 45-M + 47-A/B/C/D/E/F/G/O.
Aplicação do padrão Sprint 45-M + 47-G.
Aplicação do padrão Sprint 45-M + 47-A/B/C/D/E/F.
Aplicação do padrão Sprint 45-M + 47-A/B/C/D/E.
Aplicação do padrão Sprint 45-M + 47-A/B/C/E.
Aplicação do padrão Sprint 45-M + 47-A + 47-B.
Aplicação do padrão Sprint 45-M + 47-A/B/C.
Aplicação do padrão Sprint 45-M + 47-A/B.
Aplicação do padrão Sprint 45-M + 47-A.
Aplicação do padrão Sprint 45-M: o Suite não emitia IMultiTenant nas classes Base apesar de IsMultiTenant: true no JSON.
Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):