What is new on the ToRun platform, newest first.
June 2026 — 53 changes
De modelkiezer biedt nu Google Imagen en Gemini voor afbeeldingen, en OpenAI Sora en Google Veo voor video, naast de modellen die je al had. Kies precies het model dat je wilt, of laat Auto de beste keuze voor jouw abonn…
Koppel meerdere AI-stappen aan elkaar tot een Workflow die je op aanvraag kunt uitvoeren, en publiceer die vervolgens op de Marketplace of ontdek wat andere creators hebben gedeeld. De Workflow Editor, Runner en Marketpl…
Voeg ToRun toe aan je beginscherm en start het als een echte app, schermvullend en met een eigen pictogram, zodat het met één tik klaarstaat tot de mobiele app er is.
Een nieuw logo en strakkere branding door de hele app, afgestemd op zowel het lichte als het donkere thema.
Bepaal hoe diep de AI nadenkt, nu ook in de Auto-modus. Beeldprompts kunnen ongemerkt putten uit je opgeslagen geheugen, zodat resultaten aansluiten op de mensen en details die voor jou belangrijk zijn. En bijna identiek…
De voortgang van het genereren verschijnt nu direct naast het resultaat in plaats van onder het formulier, elke pagina opent overzichtelijk en je nieuwste creatie blijft centraal staan, terwijl oudere in je Library bewaa…
De geschiedenis van je portemonnee is nu opgedeeld in pagina's en toont exacte bedragen tot onder de cent, en items verwijderen uit je Library geeft geen foutmelding meer.
Maak je adverteerdersaccount aan en dien campagnes rechtstreeks vanuit je account ter beoordeling in, zonder te wachten op handmatige instellingen.
Achter de schermen: eerlijkere verrekening van gratis tegoed, strengere controles op uitbetalingen en rechten van creators, veiligere mediamoderatie en betrouwbaardere workflow-uitvoeringen.
Met Live Translation kies je nu uit twee engines en pak je die het best bij je gesprek past, inclusief een nieuwe optie die 77 talen spreekt, met Turks en Russisch daartussen. Bij elke keuze zie je vooraf de prijs, en me…
Modellen die niet bij je abonnement horen verschijnen nu met een klein slotje en een snelle manier om te upgraden of je wallet bij te vullen, in plaats van pas te mislukken nadat je iets hebt verstuurd. We hebben ook kra…
Deel één keer een afbeelding en de assistent onthoudt wat hij heeft gezien voor de rest van het gesprek, zodat je er veel berichten later nog naar kunt vragen, zelfs nadat je van model bent gewisseld. De afbeelding wordt…
Chatantwoorden tekenen diagrammen nu als echte diagrammen, geven tabellen weer met duidelijke randen en passen de grootte van koppen aan op het bericht in plaats van het scherm te vullen, zodat antwoorden in één oogopsla…
Wanneer een model een upgrade nodig heeft of je saldo bijna op is, krijg je nu meteen een vriendelijke melding met knoppen om je abonnement te upgraden en je wallet bij te vullen. Antwoorden die niet kunnen worden gegene…
Factuurgegevens, geschiedenis en activiteit worden nu weergegeven in je lokale tijd in plaats van in UTC, zodat tijdstempels overeenkomen met de klok aan je muur.
Een nieuwe chat starten hergebruikt nu een lege chat in plaats van lege chats op te stapelen, chats die nooit een antwoord kregen rommelen je lijst niet langer vol, en tijdelijke titels worden vervangen door een echte na…
Bedrijven kunnen nu een adverteerdersaccount opzetten en hun eigen advertentiecampagnes van begin tot eind beheren: campagnes maken, de bijbehorende advertentie-uitingen toevoegen en ze indienen voor een snelle controle…
Je eigen providersleutel meenemen geldt nu ook voor realtime spraak, live vertaling en live transcriptie: het AI-gebruik loopt via je eigen sleutel en wij rekenen alleen de kleine platformkosten per minuut.
Onze openbare pagina's worden nu aangestuurd door bewerkbare content in vele talen, geüploade afbeeldingen worden gecontroleerd op onveilige inhoud voordat ze worden opgeslagen, accountaanmelding en bevestigingsmails wer…
Lange antwoorden draaien nu op de server en gaan door terwijl je tussen chats wisselt, een andere pagina opent of het tabblad sluit. Kom op elk moment terug en het antwoord streamt nog steeds, of staat al klaar voor je.
Chats die je binnen een project start, nemen automatisch de instructies, geüploade kennis en herinneringen ervan over, tonen een projectlabel met een snelle link terug en vermelden het project in je recente chats. Je kun…
Het geheugen van je assistent houdt nu bij hoe snel elk feit verandert en markeert de feiten die mogelijk verouderd zijn, zodat het steunt op wat nog klopt. Met een nieuwe editor kun je afzonderlijke herinneringen zelf b…
We hebben de nieuwste modellen voor beeld, video, transcriptie en realtime spraak toegevoegd en aparte pagina's geopend om te vertalen en te transcriberen, zodat je die tools rechtstreeks vanuit het menu bereikt.
Spreek en laat je woorden vrijwel direct vertalen: kies twee talen, wissel ze met één tik en de vertaler legt je stem vast en streamt de vertaling terug terwijl je praat.
De videopagina houdt de tegels nu gelijk wanneer je iets uit je bibliotheek verwijdert, laat je de cliplengte per model instellen, afzonderlijke clips verwijderen en markeert voorbeeldresultaten duidelijk, zodat je altij…
De in-app-assistent toont nu netjes opgemaakte antwoorden, houdt het nieuwste bericht in beeld terwijl hij typt, slaat het voltooide antwoord betrouwbaar op en geeft elk gesprek automatisch een titel.
Antwoorden met links, wiskundige formules of valutabedragen verschijnen niet langer leeg of half weergegeven, zelfs niet na het vernieuwen van de pagina, en deep-research-antwoorden bevatten altijd hun definitieve samenv…
Een brede ronde werk achter de schermen: nauwkeurigere gebruiksmeting en uitgaventotalen, eerlijkere automatische terugbetalingen, robuustere realtime berichtgeving, sterkere waarborgen voor privacy en beveiliging, en du…
Openbare blogberichten en forumdiscussies — inclusief hun reacties en antwoorden — zijn nu zichtbaar voor uitgelogde bezoekers.
Gebruik wordt nu berekend met één eerlijke opslag, je meters voor maanduitgaven en resterend budget kloppen precies, en de modellijst is opgeschoond — verouderde modellen verwijderd en nieuwe topmodellen toegevoegd.
Workflow-aanbiedingen en bundels kunnen nu een echte omslagafbeelding tonen, waardoor de marktplaats prettiger en makkelijker te doorbladeren is.
Vraag het de assistent en hij vult formulieren in, klikt op knoppen en navigeert voor je door de app — ondersteund door een uitgebreidere set tools die nu contact, de FAQ, het forum, het geheugen en het in één stap aanma…
Antwoorden verschijnen nu woord voor woord in plaats van in één keer, en de assistentballon kun je verslepen waar je maar wilt, met een live hint van waar hij mee bezig is.
Een project aanmaken en daarin een nieuwe chat starten verloopt nu vlekkeloos, zodat je bij elkaar horende chats, bestanden en context bij elkaar houdt.
Video's spelen betrouwbaar af, privémedia worden via een beveiligde proxy geladen, avatars van creators en persona's zijn nu voor iedereen zichtbaar, en spraakberichten worden zonder fouten getranscribeerd.
Wanneer een deel van de dienst problemen heeft, is de melding nu beter te begrijpen en toont deze geen interne leveranciersnamen meer.
Koppel externe apps met één keer inloggen of een API-sleutel, zodat de assistent direct kan werken met de tools die je al gebruikt.
De afbeeldingstools kiezen nu een model dat past bij wat je doet, tonen het resultaat direct als inline-voorbeeld, en bewerken werkt weer na een modelwijziging bij de provider.
Is een afbeelding of bijlage verwijderd, dan tonen je chatgeschiedenis, mediagalerij en afbeeldingseditor nu een vriendelijke tijdelijke weergave in plaats van te stoppen met een foutmelding.
De vertaler biedt nu een doorzoekbare keuzelijst met ongeveer 100 talen, elk weergegeven met hun eigen naam en de Engelse naam.
We hebben een reeks nieuwe blogartikelen en forumdraadjes toegevoegd — inclusief beantwoorde vragen — zodat er vanaf dag één meer te lezen en te ontdekken valt.
De chat kan nu je geüploade bestanden doorzoeken, Python uitvoeren in een sandbox, afbeeldingen bewerken, audio transcriberen en afspelen, en je workflows starten — allemaal zonder het gesprek te verlaten.
Laat de chat het live web doorzoeken, uitgebreid multi-bronnenonderzoek uitvoeren en volledige pagina's ophalen en lezen — elk antwoord wordt geleverd met de gebruikte bronnen.
Je assistent bewaart nu lichte herinneringen over gesprekken heen, kan opnoemen wat hij onthoudt, en honoreert een vergeetverzoek in elke taal.
Genereer en bewerk afbeeldingen, maak korte films en componeer liedjes met teksten — aangedreven door nieuwe beeld-, video- en muziekengines, met een gedeelde mediakiezer en je bibliotheek op één klik afstand.
Praat hardop met ToRun — een nieuwe realtime spraakmogelijkheid brengt gesproken gesprekken en live-transcriptie naar de chat.
Workflow-uitvoeringen geven nu de voorkeur aan premium-kwaliteitsmodellen, pauzeren voor je goedkeuring waar dat nodig is, en kunnen worden geannuleerd, opnieuw gegenereerd en hervat — met elke uitvoer direct opgeslagen…
Groepeer gerelateerde gesprekken, bestanden en context in Projecten zodat je assistent altijd de juiste achtergrond heeft voor de taak.
Maak lange teksten en code in een speciaal canvaspaneel direct naast je chat en werk ze stap voor stap uit.
Rollende samenvattingen, slimmere contextvensters en sneller scrollen door de geschiedenis houden lange gesprekken coherent en vlot, met duidelijke besturing wanneer een gesprek het modelvenster overschrijdt.
Een menselijk gratis tegoed dat aanvult over een rollend venster, duidelijkere uitgavenmeters, automatische terugbetalingen wanneer het genereren van een afbeelding of video mislukt, en redeneerinspanningsbesturing die a…
Tientallen modellen uit 2026 toegevoegd en verouderde modellen verwijderd, plus een dagelijkse automatische synchronisatie die provider-modellen en prijzen actueel houdt — beheerd vanuit een nieuwe admincatalogus.
Publiceer een gesprek via een openbare link en bouw een community op rondom wat je maakt.
May 2026 — 499 changes
Standalone .NET console harness (test/ToRun.SmokeTests) die authenticaties uitvoert tegen de draaiende Host (OpenIddict password grant) en elke kernfunctionaliteit end-to-end test over de echte HTTP API: auth/me, geheuge…
Platform-media staat in een PRIVATE Bunny Storage Zone, dus een gewone
Voltooit de via-chat aangestuurde geheugenbeheerfunctie bovenop
memory_forget gaf no_match terug voor herinneringen die wel bestaan.
gemini-2.5-flash begon HTTP 400 te retourneren bij thinkingBudget=128 (de lage 52-N
De twee host-admin pagina's (/admin/model-catalog, /admin/model-onboarding)
Ontdekking matchte alleen op exacte ProviderModelId/ModelKey, zodat verouderde provider
De redeneerinspanning-gate is nu gebaseerd op financiering, niet op abonnementstier.
Beste-van-beide samenvoegen in de gelandde 52-Q-MODEL-SYNC-JOB synchronisatie: wanneer de OpenRouter
De redeneerinspanning-selector was hard vergrendeld op abonnementstier plus een admin/host-vrijstelling van een eerder, afgewezen aanpak.
Fase 1 oplevering: 26-provider lijst/prijsbron-inventarisatie, de
De onboarding wizard (fasen A-D) MAAKT alleen catalogusrijen aan; er was geen
Backend (torun.agent): SharedChat krijgt IsListed/ListedSlug/ListedAt + gedenormaliseerde kaartvelden; PublicCommunityAppService + PublicCommunityController (anonieme /community feed + by-slug viewer); CommunityListingAp…
Audiobijlagen in de chat waren defect; de werkelijke oorzaken verschilden van
DEEL 1 — de "Contextoverloopafhandeling" dropdown in de chat-header bleef hangen op
De verwijdering van de dagelijkse limiet (84178afab) verwijderde DailyKey/MonthlyKey uit BudgetBucketCacheItem
Deel 1 — herstel de MongoDB integratietestvloer.
Redeneerinspanning-selectorstrings (Effort:Tooltip, Effort:Locked:Tooltip,
Canonieke, provider-agnostische redeneerinspanningsbesturing op de chat-composer,
Definitieve dead-code-pass voor het herschrijven van het sessievensterbudget.
De Maandelijkse/Dagelijkse Uitgaven-meter leest telemetrie UserDailySummary (ScopeKey=userId,
Audit-vervolg op het herschrijven van het sessievensterbudget (2a33fd31f).
Home (/) + me-home budgetmeter toonde "$0.00 / 0% / $0.00" telkens wanneer
Het gratis-tier budgetbucket was een "$2 / 30d / 24h" druppeling: aanvulling = $2/720/u en
Home (/) en me-home (/me) BUDGET BUCKET meter toonde "$0.00 (2% / $0.01)":
Fout bij meerturnsgesprekken met afbeeldingen.
Eerste regressievergrendeling in de smoke-laag.
Oorzaakoplossing voor de terugkerende 404-fouten bij titels genereren / openbare chat / vision: capability
Gebruiker bevestigde dat beeldbeschrijving nu werkt.
Eigenaarsbereik gaf 403 zelfs voor de legitieme chateigenaar: door manager aangemaakte
A3 ECHTE oorzaak (gevonden via live browsertest): chat-bijlage afbeelding
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Het resolven van IQueuedRequestDispatcher veroorzaakte een StackOverflow bij het opstarten (niet te vangen — een
Zowel de Host-runtime sink (appsettings.json) als de bootstrap-loggers
Terugkerende oorzaak: ChangelogBackfillDataSeedContributor controleerde idempotentie op
Voerde extract-sprint-changelog.py + propagate-changelog-locales.py uit vanuit 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 + voice-realtime-capaciteitsseed + samenvoeging
Backend exception → frontend humane message + retry hint + status banner.
Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries
Spiegel van de realtime spraakmodussleutels die zijn toegevoegd aan 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
Conform CLAUDE.md Rule 10.
Uitvoer van `python platform-plan/scripts/_validate-29-locales.py` nadat alle 27 batches van de vertaalde taalbestanden waren binnengekomen + de BOM-strip-pass:
Batches van 6 parallelle Sonnet-vertaalagenten (alle eerder in de repo ingecheckt + nu-geflushed eindgroep):
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).
Alleen-lezen auditpass over ChatPipelineAppService + InAppAssistant + provider-clients + 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 markeerde een VERB_MISMATCH: Angular roept kale PUT aan
Backend helft van Sprint 50-F: anonieme landingspagina demo chat met per-IP
Het woordenboek `Dictionary<(DateTime Date, Guid?
Sluit het enige race-venster in KeywordSettlementJob dat kon
Vervolg van task #67 (50-SS doorloop).
Sluit de 50-RRR basis (commits A/B/C) af door de daadwerkelijke samengestelde
Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo aangevuld in alle 28 niet-Engelse landsinstellingen (en.json had al de volledige set van Sprint 50-CCC-2).
Spiegelt Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction
Pipeline leidt nu de capability-sleutel af van invoertopologie en gebruikt de
Adaptercontract voor het meervoudige invoer samengesteld pad.
Fundamenteel commit voor de meervoudige afbeelding bewerken herschrijving (Optie C — capability
Scope bevinding: de bekabeling op ChatPipelineAppService.cs:1415 roept al aan
5 gestructureerde logtoevoegingen zodat productiefouten hun volledige context tonen
Tweezijdige correctie voor de ballon die lege/ongewenste sessies accumuleert:
Sluit het uitgestelde -2 van 50-YY (waarbij de microfoonkoppeling werd uitgehouwen zodat de
Sluit het cross-pipeline gat dat 50-AAA heeft achtergelaten.
Gebruiker meldde dat zowel "Bronafbeelding kiezen" als "Maskerafbeelding kiezen"
Productielogboek:
Gebruiker meldde zowel bronupload als maskerupload op /me/image Bewerken
Definitieve bibliotheekmodule slice.
Gebruikersfeedback: de groene banner "Upload voltooid." flikkerde in/uit voor
Sprint 50-CCCC probeerde de upload-pipeline ObjectDisposedException te repareren
Oorzaak van de aanhoudende foutmelding "Upload failed" — ook al waren bestanden
Gebruiker meldde vijf afzonderlijke problemen:
Gebruiker meldde part_001.wav / part_002.wav verwijderd uit bibliotheek maar
50-YYY liet een regressie achter: openAssetDetail activeerde alleen tekst voorladen
Gebruiker meldde Documenttabblad leeg na uploaden van .md / .txt bestanden —
CDN openbare URL-patroon was onjuist voor /me/library — inhoud is per gebruiker
Twee bugs in één batch — beide aan het licht gebracht door een gebruikerstest waarbij 4 bestanden 'geüpload' waren volgens de groene banner maar de bibliotheekkpagina op 0 items bleef.
Gebruiker: 'voeg een voortgangsbalk toe voor uploads, toon uploadtijd per bestand, geef aan welk bestand is geüpload, het ziet er nu erg kaal uit.'
Twee gebruikersblokkeringsproblemen uit /me/library testen:
Gebruiker meldde bibliotheekupload 400 'Alleen afbeelding/* MIME-typen worden geaccepteerd op dit eindpunt.' na het uploaden van een niet-afbeeldingsbestand via het tabblad Alle.
Gebruiker meldde Berichtcitaten admin 500 'Interne fout'.
Gebruiker meldde bibliotheekupload 'Bunny opslag upload mislukt met HTTP 401'.
Gebruiker meldde dat /me/image Genereren kapot was: "Image generation provider
Gebruiker meldde dat de Sprint 50-III paneelpositieherschrijving NOG STEEDS niet
Hoofdoorzaak (Scenario B variant): `openSession()` roept `messages.set(mapped)` aan
Gebruiker: "You don't have to use the same model for titles, these are
Gebruiker meldde dat paneel losgekoppeld van FAB bleef openen ondanks Sprint
Sprint 50-CCC verhoogde MaxOutputTokens 24 → 128 met verwachting "~100
Gebruiker meldde /me/activity-history leeg ondanks uren chat/afbeelding/stem/etc.
Twee gebruikerstestende regressies gevonden en opgelost; het derde aandachtspunt
| # | Menu | Groep | Angular pad | Backend route | Status | Hoofdoorzaak |
Gebruiker: "library dosya eklerken neden tek tek el ile eklemem gerekiyor,
Gebruiker: "source da upload from pc var da mask ta neden yok, bizim
Door gebruiker gemelde kritieke fout: elke PC-uploadpoging gooide
Gebruiker meldde herhaaldelijk sinds gisteren dat /me/notifications/
Recente-chatlijst in /agent/chat-pipeline had per rij Hernoemen/Verwijderen
Gebruikerstest bracht 5 aandachtspunten aan het licht; 4 ervan aangepakt in deze commit, 1
Dagelijkse AsyncPeriodicBackgroundWorker (24u tik) veegt Betaald
Sprint 47-O maakte platte AdAuction entiteiten zonder join FK's;
Dagelijkse ABP AsyncPeriodicBackgroundWorker (24u tik) veegt openstaande
Sprint 50-TT was hiervoor ingezet maar week af van het script (het deed
Gebruiker vroeg: bibliotheek bovenste grootte-indicator, PC-upload, planlaag-quota,
Breidt het 50-RR patroon uit (VideoJobPollingWorker IAbpDistributedLock)
Sprint 50-P stelde PC-upload uit omdat backend een Bunny
50-AA afgebroken tijdens de volledige doorloop; dit is de hervatte batched
Sprint 50-U + 50-EE bekabelde polling + terugbetalingsstroom maar ging uit van enkelpod
Gebruikersdirectief (Sprint 50-E): bel + activiteit naast rechter menu-icoontjes
Backend niet bereikbaar op https://localhost:44304 tijdens deze sprint;
Sprint 47-H bouwde een gedegradeerde samengestelde index voor Creator/Post feed
Sprint 47-H bouwde een gedegradeerde (TenantId, CreationTime) scan voor PersonaPost
Sprint 50-W BillingReconciliationJob detecteerde gaten (Paddle
Elk modules/torun.*/angular/angular.json verwees naar
Sprint 50-CC tenantafzondering tests onthulden een reeds bestaand defect:
Sprint 47-A..47-P MT-doorloop voegde TenantId-voorvoegseld samengestelde indexen toe aan elk
Sprint 49-reeks afgerond.
Pre-lancerings R2-risico: Sprint 47-A..47-P veegde 219+ entiteiten om
Sprint 50-U bracht gat aan het licht: IBillingRecorder had alleen RecordAsync.
Plan §2.3 / R1-audit — Sprint 47-A...47-P veegde 219+ entiteiten om
Plan §2.5 achterstand: 22 ImageEdit-pipelinesleutels doorgevoerd (Sprint
Sprint 50-K detecteerde één botsing (subscription plan Paddle-configuratie
Phase 1.5 §2.1 #3 — derde achtergrondwerker.
Phase 1.5 §2.1 #4 — vierde en laatste achtergrondwerker voor lancering.
/api/app/run-input-upload gaf 404 terug omdat de AppService
Sprint 50-P leverde de /me/image Bewerktabblad-UI + backend-bekabeling op, maar
Frontend (Angular | date pipe + Date constructor) verwerkt UTC -> lokaal
Phase 1.5 §2.1 — hoogstprioritaire achtergrondwerker.
Phase 1.5 §2.1 #2 — tweede achtergrondwerker.
Gebruiker meldde dat "form doldurma" vervolgbeurt "Message failed." retourneerde.
Bug A: chat-editor negeerde Ctrl+V bij afbeeldingen op klembord.
De Marketplace-bladerpagina (angular/src/app/marketplace/
Bewerktabblad miste de modelkeuze (Auto/Handmatig), Kwaliteit
Gebruiker meldde dat de Sprint 50-I standaard (bottom:96 right:24) overlapt
Gebruikerstest /me/notifications gaf 404 op
PaddleOptions.WalletTopUpPriceIds was een Dictionary<string,string>
Gebruiker meldde "paddle.js popup açması lazım, hata veriyor" bij
Sprint 50-I pakt twee UX-regressies aan die na Sprint 50-B + 50-E zijn opgedoken:
Beheerder sloeg een SubscriptionPlan Paddle-configuratie op; de eerste opslag werkte.
Kostenuitsplitsingstabel op /me/billing plaatste naïef een prefix voor elke
Sprint 49-B liet twee hardgecodeerde /api/app/* URL's achter in de chat-pipeline
- 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint): toegevoegd aan en.json + alle 28 andere landsinstellingen met eigen vertalingen
Gebruiker: 'geheugen pagina verwijder klik toont js confirm — waarom geen LeptonX
Correctie A (server KRITIEKE fout):
Gebruiker meldde: SourceKind-dropdown toonde vreemde roze/blauwe blokken (kapot
Gebruikersfeedback: de twee zwevende bellen (notificatiebel + activiteitencentrum)
Sprint 47-I + 45-M patroon toegepast.
Sprint 46-A introduceerde cross-module IBillingRecorder + emitteerde BillingRecords
Sprint 46-F structurele normalisatie afgerond lowercase→PascalCase, maar liet 4 landsinstellingen achter met Suite-stub Engelse inhoud.
Sprint 45-M + 47-A t/m 47-N patroon toepassen.
Sprint 47-M patroon toegepast.
Sprint 45-M + 47-K patroon toegepast.
Sprint 45-M + 47-A t/m 47-K patroon toegepast.
Sprint 45-M + 47-A t/m 47-H patroon toegepast.
Sprint 45-M + 47-A/B/C/D/E/F/G/O patroon toegepast.
Sprint 45-M + 47-G patroon toegepast.
Sprint 45-M + 47-A/B/C/D/E/F patroon toegepast.
Sprint 45-M + 47-A/B/C/D/E patroon toegepast.
Sprint 45-M + 47-A/B/C/E patroon toegepast.
Sprint 45-M + 47-A + 47-B patroon toegepast.
Sprint 45-M + 47-A/B/C patroon toegepast.
Sprint 45-M + 47-A/B patroon toegepast.
Sprint 45-M + 47-A patroon toegepast.
Sprint 45-M patroon toegepast: Suite emitteerde IMultiTenant NIET op basisklassen ondanks IsMultiTenant: true in JSON.
Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):