What is new on the ToRun platform, newest first.
June 2026 — 53 changes
이제 모델 선택기에서 기존 모델과 함께 이미지용 Google Imagen과 Gemini, 동영상용 OpenAI Sora와 Google Veo도 만나볼 수 있어요. 원하는 모델을 직접 고르거나, Auto에 맡겨 내 요금제에 가장 잘 맞는 모델을 알아서 선택하게 하세요.
여러 AI 단계를 하나의 Workflow로 엮어 원할 때마다 실행하고, Marketplace에 공개하거나 다른 크리에이터가 공유한 Workflow를 둘러보세요. 이제 Workflow Editor와 Runner, Marketplace를 메뉴에서 바로 이용할 수 있어요.
ToRun을 홈 화면에 추가하면 네이티브 앱처럼 전체 화면에 전용 아이콘으로 실행할 수 있어요. 모바일 앱이 나오기 전까지 한 번의 탭이면 충분합니다.
앱 전반에 새로운 로고와 한층 깔끔해진 브랜딩을 적용했어요. 라이트 테마와 다크 테마 모두에 어울리도록 다듬었습니다.
이제 Auto 모드에서도 AI가 얼마나 깊이 생각할지 직접 선택할 수 있어요. 이미지 프롬프트는 저장된 메모리를 자연스럽게 참고해, 내가 아끼는 인물과 세부 정보에 꼭 맞는 결과를 만들어 줍니다. 또한 거의 똑같은 메모리는 쌓이지 않고 자동으로 하나로 합쳐져요.
이제 생성 진행 상황이 입력 폼 아래가 아닌 결과 바로 옆에 표시돼요. 각 페이지는 깔끔한 상태로 열리고, 가장 최근에 만든 작업은 가운데 정면에 보이며 이전 작업들은 Library에 정리됩니다.
이제 지갑 내역이 페이지 단위로 나뉘어 표시되고 1센트 미만 금액까지 정확하게 보여줘요. Library에서 항목을 삭제할 때 더 이상 오류가 발생하지 않습니다.
계정에서 바로 광고주 계정을 만들고 광고 캠페인을 검토 요청으로 제출하세요. 수동 설정을 기다릴 필요가 없어요.
보이지 않는 곳에서: 더 공정한 무료 크레딧 정산, 크리에이터 정산금과 권한에 대한 한층 강화된 검증, 더 안전한 미디어 검수, 그리고 더 안정적인 Workflow 실행을 준비했어요.
이제 Live Translation에서 두 가지 엔진 중 대화에 더 잘 맞는 것을 선택할 수 있습니다. 터키어와 러시아어를 포함해 77개 언어를 구사하는 새 옵션도 추가됐어요. 선택할 때마다 가격이 미리 표시되며, 한 번만 탭하면 번역 방향이 바뀌어 상대방도 바로 답장할 수 있습니다.
이제 요금제에서 지원하지 않는 모델은 작은 자물쇠 표시와 함께 나타나, 메시지를 보낸 뒤에야 실패하는 대신 탭 한 번으로 요금제를 업그레이드하거나 지갑을 충전할 수 있습니다. 또한 더 강력한 모델을 Free plan에도 개방해, Haiku, Sonnet, Gemini Flash 같은 일상 모델을 결제 없이 사용할 수 있게 됐어요.
이미지를 한 번만 공유하면 어시스턴트가 본 내용을 대화 내내 기억합니다. 여러 차례 대화가 오간 뒤, 심지어 모델을 바꾼 뒤에도 그 이미지에 대해 물어볼 수 있으며, 이미지를 다시 업로드하거나 두 번 청구하지 않습니다.
이제 채팅 답변에서 다이어그램은 실제 다이어그램으로 그려지고, 표는 또렷한 테두리로 정리되며, 제목은 화면을 가득 채우는 대신 메시지에 맞는 크기로 표시됩니다. 덕분에 답변을 한눈에 더 쉽게 읽을 수 있어요.
모델에 업그레이드가 필요하거나 잔액이 부족할 때, 이제 그 자리에서 요금제 업그레이드와 지갑 충전 버튼이 담긴 친절한 안내 배너가 나타납니다. 생성할 수 없는 답변은 빈 말풍선을 남기는 대신 그 이유를 설명하며, 다른 채팅으로 갔다가 돌아와도 마찬가지입니다.
결제 내역, 기록, 활동이 이제 UTC가 아니라 현지 시간으로 표시됩니다. 그래서 타임스탬프가 벽시계 시각과 그대로 맞아떨어져요.
이제 새 채팅을 시작하면 빈 채팅을 쌓는 대신 비어 있는 채팅을 다시 활용하고, 답장이 한 번도 오지 않은 채팅은 더 이상 목록을 어지럽히지 않으며, 의미 있는 말을 입력하는 즉시 임시 제목이 실제 이름으로 바뀝니다.
이제 기업은 광고주 계정을 만들어 자체 광고 캠페인을 처음부터 끝까지 직접 운영할 수 있습니다. 캠페인을 만들고, 거기에 맞는 광고 소재를 추가한 뒤, 게재되기 전 간단한 검토를 위해 제출하면 됩니다.
이제 자신의 제공업체 키를 가져오면 실시간 음성, 실시간 번역, 실시간 받아쓰기까지 적용됩니다. AI 사용은 내 키를 통해 처리되며, 우리는 분당 소액의 플랫폼 수수료만 받습니다.
이제 공개 페이지는 여러 언어로 편집 가능한 콘텐츠로 운영되고, 업로드된 이미지는 저장되기 전에 유해 콘텐츠 검사를 거치며, 계정 가입과 확인 이메일이 안정적으로 작동합니다. 또한 보이지 않는 곳에서의 폭넓은 개선으로 플랫폼 전체가 한층 더 견고해졌습니다.
이제 긴 답변은 서버에서 처리되어, 다른 대화로 이동하거나 다른 페이지를 열거나 탭을 닫아도 계속 생성됩니다. 언제든 돌아오면 답변이 아직 생성 중이거나, 이미 완성되어 기다리고 있습니다.
프로젝트 안에서 시작한 대화는 해당 프로젝트의 지침, 업로드한 지식과 메모리를 자동으로 이어받고, 돌아갈 수 있는 링크가 있는 프로젝트 배지를 표시하며, 최근 대화 목록에 프로젝트 이름을 보여줍니다. PDF, Word, 텍스트 파일을 프로젝트 지식에 추가할 수도 있습니다.
이제 어시스턴트의 메모리가 각 정보가 얼마나 빨리 바뀌는지 추적하고, 오래되었을 수 있는 항목을 표시하여 여전히 유효한 정보에 더 무게를 둡니다. 새로운 편집기로 개별 메모리를 직접 확인하고 추가하고 삭제할 수 있습니다.
최신 이미지, 영상, 받아쓰기, 실시간 음성 모델을 추가하고, 독립된 번역 페이지와 받아쓰기 페이지를 열어 메뉴에서 바로 해당 도구를 사용할 수 있도록 했습니다.
말하면 거의 즉시 번역됩니다. 두 언어를 선택하고 한 번의 탭으로 서로 바꾸세요. 번역기가 음성을 인식해, 말하는 동안 번역을 실시간으로 들려줍니다.
이제 영상 페이지는 라이브러리에서 항목을 삭제할 때 타일도 함께 업데이트됩니다. 모델별로 클립 길이를 설정하고, 개별 클립을 삭제할 수 있으며, 미리보기 결과를 명확하게 표시해 지금 무엇을 보고 있는지 항상 알 수 있습니다.
이제 인앱 어시스턴트는 깔끔하게 서식이 적용된 답변을 보여주고, 답변을 작성하는 동안 최신 메시지가 화면에 계속 보이도록 하며, 완성된 답변을 안정적으로 저장하고, 각 대화에 자동으로 제목을 붙입니다.
링크, 수학 수식, 통화 금액이 포함된 답변이 더 이상 빈 화면이나 일부만 표시되는 일 없이 나타나며, 페이지를 새로 고친 뒤에도 마찬가지입니다. 또한 딥리서치 답변에는 항상 최종 요약이 포함됩니다.
눈에 보이지 않는 곳에서 폭넓은 개선을 진행했습니다. 더 정확한 사용량 측정과 지출 합계, 더 공정한 자동 환불, 더 견고한 실시간 메시징, 더 강력한 개인정보 및 보안 보호, 그리고 더 명확한 서비스 상태 안내입니다.
공개 블로그 글과 포럼 토론은 반응과 답글까지 포함하여 이제 로그아웃한 방문자에게도 표시됩니다.
이제 사용량이 단일하고 공정한 마크업으로 청구되며, 월 지출과 남은 예산 게이지도 정확하게 표시됩니다. 모델 목록도 정리하여 사용되지 않는 모델은 폐기하고 새로운 플래그십 모델을 연결했습니다.
워크플로 등록과 번들에 제대로 된 표지 이미지를 표시할 수 있어, 마켓플레이스를 더 쉽고 보기 좋게 둘러볼 수 있습니다.
어시스턴트에게 요청하기만 하면 양식 입력, 버튼 클릭, 앱 내 이동까지 대신 처리합니다. 문의, FAQ, 포럼, 메모리, 원스텝 워크플로 생성까지 확장된 더 풍부한 도구 모음이 이를 뒷받침합니다.
답변이 한 번에 모두 나타나는 대신 한 단어씩 스트리밍으로 표시됩니다. 어시스턴트 말풍선은 편한 위치로 끌어다 놓을 수 있으며, 지금 무엇을 하고 있는지도 실시간으로 알려 줍니다.
프로젝트를 만들고 그 안에서 새 채팅을 시작하는 작업이 이제 매끄럽게 작동하여, 관련된 채팅과 파일, 컨텍스트를 한곳에 모아 둘 수 있습니다.
동영상이 안정적으로 재생되고, 비공개 미디어는 보안 프록시를 통해 로드됩니다. 크리에이터와 페르소나 아바타가 모두에게 표시되며, 음성 메모도 오류 없이 텍스트로 변환됩니다.
서비스 일부에 문제가 발생하면 알림 내용이 더 이해하기 쉬워졌으며, 더 이상 내부 공급업체 이름을 노출하지 않습니다.
한 번의 로그인 또는 API 키로 외부 앱을 연결하여, 어시스턴트가 이미 사용 중인 도구와 직접 함께 작업할 수 있습니다.
이미지 도구가 이제 작업 내용에 맞는 모델을 자동으로 선택하고, 결과를 즉시 인라인으로 미리 보여 줍니다. 공급자의 모델 변경 이후에도 편집이 다시 정상 작동합니다.
이미지나 첨부 파일이 삭제된 경우에도 채팅 기록, 미디어 갤러리, 이미지 편집기가 오류로 멈추지 않고 친절한 자리 표시자를 보여 줍니다.
번역기에 약 100개 언어를 담은 검색 가능한 선택 도구가 추가되었습니다. 각 언어는 현지 이름과 영어 이름으로 함께 표시됩니다.
새로운 블로그 글과 포럼 스레드를 한 묶음 추가했습니다. 답변이 달린 질문도 포함되어 있어, 첫날부터 읽고 둘러볼 거리가 더 많아졌습니다.
이제 채팅에서 업로드한 파일 검색, 샌드박스에서 Python 실행, 이미지 편집, 오디오 전사 및 재생, 워크플로우 트리거 — 모두 대화를 벗어나지 않고 사용할 수 있습니다.
채팅이 실시간 웹을 검색하고, 다중 소스 심층 연구를 수행하며, 전체 페이지를 가져와 읽도록 합니다 — 모든 답변은 사용한 소스와 함께 반환됩니다.
이제 어시스턴트가 채팅 전반에 걸쳐 경량 메모리를 유지하고, 기억하는 내용을 나열하며, 어떤 언어로든 잊어달라는 요청을 처리합니다.
이미지를 생성 및 편집하고, 단편 영화를 제작하고, 가사와 함께 노래를 작곡하세요 — 새로운 이미지, 비디오 및 음악 엔진으로 구동되며, 공유 미디어 선택기와 라이브러리가 클릭 한 번으로 제공됩니다.
ToRun에 직접 말하세요 — 새로운 실시간 음성 기능이 채팅에 음성 대화와 실시간 전사를 제공합니다.
워크플로우 실행이 이제 프리미엄 품질 모델을 선호하고, 중요한 부분에서 승인을 일시 중지하며, 취소, 재생성 및 재개가 가능합니다 — 모든 출력물이 라이브러리에 바로 저장됩니다.
관련 채팅, 파일 및 컨텍스트를 프로젝트로 그룹화하여 어시스턴트가 항상 현재 작업에 맞는 배경 지식을 갖추도록 합니다.
채팅 옆에 전용 캔버스 패널에서 장문의 콘텐츠와 코드를 초안 작성하고 반복합니다.
롤링 요약, 더 스마트한 컨텍스트 윈도우, 빠른 기록 스크롤로 긴 대화를 일관되고 빠르게 유지하며, 대화가 모델 윈도우를 초과할 때 명확한 제어를 제공합니다.
롤링 윈도우에서 보충되는 합리적인 무료 허용량, 더 명확한 지출 게이지, 이미지 또는 비디오 생성 실패 시 자동 환불, 그리고 잔액으로 충당 가능한 기능만 잠금 해제되는 추론 노력 제어.
2026년의 수십 개 모델이 추가되고 오래된 모델이 퇴역되었으며, 프로바이더 모델과 가격을 최신 상태로 유지하는 일일 자동 동기화 — 새로운 관리자 카탈로그에서 관리됩니다.
대화를 공개 링크로 게시하고 만들어낸 콘텐츠 주변의 커뮤니티를 성장시키세요.
May 2026 — 499 changes
실행 중인 Host에 대해 인증 (OpenIddict 패스워드 그랜트)하고 실제 HTTP API를 통해 모든 핵심 기능을 엔드투엔드로 검사하는 독립 실행형 .NET 콘솔 하네스 (test/ToRun.SmokeTests): auth/me, memory CRUD, wallet, billing, library, workflow 샘플, web-search a...
플랫폼 미디어는 PRIVATE Bunny Storage Zone에 있으므로, 일반
다음 위에서 채팅 기반 메모리 관리 기능을 완성함
memory_forget이 존재하는 메모리에 대해 no_match를 반환함.
gemini-2.5-flash가 thinkingBudget=128 (52-N 하한 설정)에서 HTTP 400을 반환하기 시작함
두 개의 호스트 관리자 페이지 (/admin/model-catalog, /admin/model-onboarding)
검색이 정확한 ProviderModelId/ModelKey로만 일치하여 날짜별 프로바이더
추론 노력 게이트가 이제 티어 기반이 아닌 펀딩 기반으로 변경됨.
완료된 52-Q-MODEL-SYNC-JOB 동기화에 최선 병합: OpenRouter가
추론 노력 선택기가 이전의 거부된 접근 방식에서 나온 구독 티어 및 관리자/호스트 예외로 하드 게이팅되어 있었음.
단계 1 결과물: 26-provider 목록/가격 소스 목록,
온보딩 마법사 (단계 A-D)는 카탈로그 행만 생성함; 기존 항목에 대한
백엔드 (torun.agent): SharedChat에 IsListed/ListedSlug/ListedAt + 비정규화된 카드 필드 추가; PublicCommunityAppService + PublicCommunityController (익명 /community 피드 + slug별 뷰어); CommunityListingAppService + MyCommunityListingController…
채팅의 오디오 첨부 파일이 손상되었으며, 실제 근본 원인은 다음과 달랐음
PART 1 — 채팅 헤더 "Context overflow handling" 드롭다운이 다음 상태에서 고착됨
일일 한도 제거 (84178afab)로 BudgetBucketCacheItem에서 DailyKey/MonthlyKey가 삭제됨
Part 1 — MongoDB 통합 테스트 바닥을 정상화.
추론 노력 선택기 문자열 (Effort:Tooltip, Effort:Locked:Tooltip,
채팅 컴포저에서 표준적인 프로바이더 불가지론적 추론 노력 제어,
세션 윈도우 예산 재작성을 위한 최종 데드 코드 패스.
월별/일별 지출 게이지가 텔레메트리 UserDailySummary (ScopeKey=userId,
세션 윈도우 예산 재작성 (2a33fd31f)에 대한 감사 후속 조치.
홈 (/) + me-home 예산 버킷 게이지가 다음 경우 "$0.00 / 0% / $0.00"를 렌더링함
무료 티어 예산 버킷이 "$2 / 30d / 24h" 방식이었음: 보충량 = $2/720/h 및
홈 (/) 및 me-home (/me) BUDGET BUCKET 게이지에 "$0.00 (2% / $0.01)"가 표시됨:
멀티턴 비전 버그.
스모크 레이어에서 첫 번째 회귀 잠금.
반복되는 타이틀 생성 / 공개 채팅 / 비전 404의 근본 원인 수정: 능력
사용자가 이미지 설명이 이제 작동함을 확인함.
정당한 채팅 소유자도 소유자 범위에서 403 오류 발생: 관리자가 생성한
A3 실제 근본 원인 (라이브 브라우저 테스트로 발견): chat-attachment 이미지
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
IQueuedRequestDispatcher 해결 시 시작 시 스택 오버플로 발생 (잡히지 않는 —
Host 런타임 싱크 (appsettings.json)와 부트스트랩 로거 모두
반복적 근본 원인: ChangelogBackfillDataSeedContributor가 다음으로 멱등성을 검사함
main에서 extract-sprint-changelog.py + propagate-changelog-locales.py 실행:
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 능력 시드 + join
Backend exception → frontend humane message + retry hint + status banner.
Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries
en.json에서 추가된 실시간 음성 모드 UI 키의 미러
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
CLAUDE.md Rule 10에 따라.
27개 형제 번역기 배치가 모두 완료된 후 + BOM 제거 패스 이후 `python platform-plan/scripts/_validate-29-locales.py` 실행 결과:
6개 병렬 Sonnet 번역기 에이전트의 배치 (이전 턴에서 모두 저장소에 커밋됨 + 이제 플러시된 최종 그룹):
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).
ChatPipelineAppService + InAppAssistant + 프로바이더 클라이언트 + 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에서 VERB_MISMATCH 플래그: Angular가 베어 PUT을 호출합니다.
Sprint 50-F 백엔드: IP별 속도 제한이 있는 익명 랜딩 페이지 데모 채팅.
Dictionary<(DateTime Date, Guid? ...) 타입 추론 문제를 수정했습니다.
KeywordSettlementJob에서 발생 가능한 유일한 경쟁 조건을 닫습니다.
task #67 (50-SS 스윗) 계속.
50-RRR 기초(커밋 A/B/C)를 실제 복합 연결로 닫습니다.
Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo를 28개 비영어 로케일에 백필했습니다 (en.json은 Sprint 50-CCC-2에서 이미 완전한 세트 보유).
Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction) 패턴을 미러링합니다.
파이프라인이 이제 입력 토폴로지에서 capability 키를 도출하고 해당 키를 사용합니다.
멀티 입력 복합 경로의 어댑터 계약.
멀티 이미지 편집 리팩터의 기초 커밋 (Option C — capability 기반).
범위 발견: ChatPipelineAppService.cs:1415의 연결이 이미 호출하고 있습니다.
운영 장애의 전체 콘텍스트를 확인할 수 있도록 5개 구조적 로그를 추가했습니다.
버블에 빈/원치 않는 세션이 쌓이는 문제를 두 가지 방식으로 수정했습니다.
50-YY의 연기된 -2 항목을 닫습니다(마이크 첨부가 분리된 곳).
50-AAA에서 남진 크로스 파이프라인 누락을 닫습니다.
사용자가 '소스 이미지 선택'과 '마스크 이미지 선택' 모두 문제가 있다고 보고했습니다.
운영 로그:
사용자가 /me/image 편집의 소스 업로드와 마스크 업로드 모두 문제라고 보고했습니다.
최종 라이브러리 모듈 슬라이스.
사용자 피드백: 녹색 '업로드 완료.' 배너가 켜지다 꺼졌다 깨바보았습니다.
Sprint 50-CCCC에서 업로드 파이프라인 ObjectDisposedException 수정을 시도했습니다.
지속적인 '업로드 실패' 토스트의 근본 원인 — 파일이 실제로 전송되었음에도 발생.
사용자가 다섯 가지 별도 문제를 보고했습니다.
사용자가 라이브러리에서 part_001.wav / part_002.wav를 삭제했지만 여전히 보인다고 보고했습니다.
50-YYY에서 회귀가 남았습니다: openAssetDetail이 텍스트 사전 로드만 트리거했습니다.
사용자가 .md / .txt 파일 업로드 후 Documents 탭이 비어 있다고 보고했습니다.
CDN 공개 URL 패턴이 /me/library에서 올바르지 않았습니다 — 콘텐츠는 사용자별로 비공개입니다.
한 번의 테스트에서 4개 파일이 녹색 배너로 '업로드됨'으로 표시됩니다. 하지만 라이브러리 페이지는 0개 항목으로 남아 있는 두 가지 버그.
사용자: '업로드 작업에 프로그레스 바를 추가해 주세요, 몹 초가 걸리는지, 어떤 파일이 업로드뤌는지 알 수 있게요.'
/me/library 테스트에서 두 가지 사용자 차단 문제가 발생했습니다.
사용자가 All 탭에서 비이미지 파일 업로드 후 400 '이 엔드포인트는 image/* MIME 타입만 허용합니다'를 보고했습니다.
사용자가 Message Citations 관리자 500 '내부 오류'를 보고했습니다.
사용자가 라이브러리 업로드 'Bunny 스토리지 HTTP 401 실패'를 보고했습니다.
사용자가 /me/image Generate 실패를 보고: '이미지 생성 프로바이더 오류'.
사용자가 Sprint 50-III 패널 위치 리팩터 이후에도 여전히 문제가 있다고 보고했습니다.
근본 원인 (시나리오 B 변형): `openSession()`이 `messages.set(mapped)`를 호출합니다.
사용자: '제목에 같은 모델을 쓸 필요 없어요, 단순한 작업입니다'
사용자가 Sprint 이후에도 패널이 FAB에서 분리된 상태로 열린다고 보고했습니다.
Sprint 50-CCC에서 MaxOutputTokens를 24 → 128로 올렸습니다.
사용자가 채팅/이미지/음성 등 몇 시간 사용 후에도 /me/activity-history가 비어 있다고 보고했습니다.
두 가지 사용자 테스트 회귀가 발견되어 수정되었으며, 세 번째 우려 사항은 다음으로 연기되었습니다.
| # | 메뉴 | 그룹 | Angular 경로 | 백엔드 경로 | 상태 | 원인 |
사용자: '라이브러리에 파일을 추가할 때 왜 하나씩 수동으로 추가해야 하나요'
사용자: '소스에는 PC 업로드가 있는데 마스크에는 왜 없나요'
사용자 보고 중요 버그: 모든 PC 업로드 시도에서 예외가 발생했습니다.
사용자가 어제부터 /me/notifications/에서 404가 반복된다고 보고했습니다.
/agent/chat-pipeline의 주가는 채팅 목록에서 행별 이름변경/삭제 드롭다운이 날짜 구분선 뒤에 숨었습니다.
사용자 테스트에서 5가지 우려 사항이 발견됩니다. 이번 커밋에서 4가지를 처리했습니다.
일일 AsyncPeriodicBackgroundWorker(24시간 틱)가 지급된 항목을 처리합니다.
Sprint 47-O에서 조인 FK 없이 평탆한 AdAuction 엔티티를 생성했습니다.
일일 ABP AsyncPeriodicBackgroundWorker(24시간 틱)가 대기 중인 항목을 처리합니다.
Sprint 50-TT가 이 작업을 위해 디스패치되었지만 범위를 벗어났습니다.
사용자 요청: 라이브러리 상단 크기 표시기, PC 업로드, 플랜 티어 할당량.
50-RR 패턴(VideoJobPollingWorker IAbpDistributedLock) 확장.
Sprint 50-P에서 백엔드에 Bunny 사전 업로드가 없어 PC 업로드를 연기했습니다.
50-AA가 전체 스윗 도중 중단되었으며 이번이 재개된 배치 작업입니다.
Sprint 50-U + 50-EE에서 폴링 + 환불 흐름을 연결했지만 단일 파드를 가정했습니다.
사용자 지시 (Sprint 50-E 턴): 벨 + 활동 아이콘을 우측 메뉴 아이콘 옆에 배치해 달라는 요청.
이번 스프린트 중 https://localhost:44304에서 백엔드에 접근할 수 없었습니다.
Sprint 47-H에서 Creator/Post 피드를 위해 저하된 복합 인덱스를 구축했습니다.
Sprint 47-H에서 PersonaPost에 저하된 (TenantId, CreationTime) 스캔을 구축했습니다.
Sprint 50-W BillingReconciliationJob에서 누락(Paddle 거래)이 감지되었습니다.
각 modules/torun.*/angular/angular.json이 올바르지 않은 경로를 참조하고 있었습니다.
Sprint 50-CC 테넌트 격리 테스트에서 기존 결함이 발견됩니다.
Sprint 47-A..47-P MT 스윗에서 모든 엔티티에 TenantId 접두사 복합 인덱스를 추가했습니다.
Sprint 49 시리즈 완료.
출시 전 R2 위험: Sprint 47-A..47-P에서 219개 이상의 엔티티를 점검했습니다.
Sprint 50-U에서 누락이 발견됨: IBillingRecorder에 RecordAsync만 있었습니다.
Plan §2.3 / R1 감사 — Sprint 47-A...47-P에서 219개 이상의 엔티티를 점검했습니다.
Plan §2.5 백로그: 22개 ImageEdit 파이프라인 키를 전파했습니다.
Sprint 50-K에서 한 건의 충돌(구독 플랜 Paddle 설정)을 발견했습니다.
Phase 1.5 §2.1 #3 — 세 번째 백그라운드 워커.
Phase 1.5 §2.1 #4 — 네 번째이자 마지막 출시 전 백그라운드 워커.
/api/app/run-input-upload가 404를 반환했습니다. AppService가 등록되지 않았기 때문입니다.
Sprint 50-P에서 /me/image 편집 탭 UI + 백엔드 연결을 구현했으나 추가 작업이 남아 있었습니다.
프론트엔드(Angular | date pipe + Date 생성자)가 UTC → 로컈 변환을 담당합니다.
Phase 1.5 §2.1 — 최우선 백그라운드 워커.
Phase 1.5 §2.1 #2 — 두 번째 백그라운드 워커.
사용자가 '폼 채우기' 후속 요청에서 '메시지 전송 실패'가 반환된다고 보고했습니다.
버그 A: 채팅 작성기에서 클립보드 이미지에 대한 Ctrl+V가 무시되었습니다.
마켓플레이스 탐색 페이지(angular/src/app/marketplace/)에 이중 컨테이너가 있었습니다.
편집 탭에 모델 선택(Auto/Manual), 품질 설정이 누락되어 있었습니다.
사용자가 Sprint 50-I 기본값(bottom:96 right:24)이 다른 요소와 격친다고 보고했습니다.
사용자가 /me/notifications 테스트 중 404가 발생했습니다.
PaddleOptions.WalletTopUpPriceIds는 Dictionary<string,string>이었습니다.
사용자 보고: 'paddle.js 팝업이 열려야 하는데 오류가 발생합니다'.
Sprint 50-I는 Sprint 50-B + 50-E 이후 발견된 두 가지 UX 회귀를 수정합니다.
관리자가 SubscriptionPlan의 Paddle 설정을 저장했을 때 첫 번째 저장은 성공했습니다.
/me/billing의 비용 내역 표에서 모든 값에 $ 접두사를 붙이고 있었습니다.
Sprint 49-B에서 채팅 파이프라인에 하드코딩된 /api/app/* URL이 두 개 남아 있었습니다.
- 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint): en.json + 다른 28개 로케일에 네이티브 번역으로 추가됨.
사용자: '메모리 페이지에서 삭제 클릭 시 js confirm이 나타나는데 왜 LeptonX를 사용하지 않나요'
수정 A (서버 중요 버그):
사용자 보고: SourceKind 드롭다운이 이상한 분홍/파란 블록으로 표시됨 (손상된 렌더링).
사용자 피드백: 두 개의 부동 벨(알림 벨 + 활동 센터)이 격쳐 있었습니다.
Sprint 47-I + 45-M 패턴 적용.
Sprint 46-A에서 크로스 모듈 IBillingRecorder를 도입하고 BillingRecord를 생성했습니다.
Sprint 46-F 구조 정규화로 소문자→PascalCase 변환은 완료했으나 4개 로케일에 Suite 스터브 영어 콘텐츠가 남아 있었습니다.
Sprint 45-M + 47-A ~ 47-N 패턴 적용.
Sprint 47-M 패턴 적용.
Sprint 45-M + 47-K 패턴 적용.
Sprint 45-M + 47-A ~ 47-K 패턴 적용.
Sprint 45-M + 47-A ~ 47-H 패턴 적용.
Sprint 45-M + 47-A/B/C/D/E/F/G/O 패턴 적용.
Sprint 45-M + 47-G 패턴 적용.
Sprint 45-M + 47-A/B/C/D/E/F 패턴 적용.
Sprint 45-M + 47-A/B/C/D/E 패턴 적용.
Sprint 45-M + 47-A/B/C/E 패턴 적용.
Sprint 45-M + 47-A + 47-B 패턴 적용.
Sprint 45-M + 47-A/B/C 패턴 적용.
Sprint 45-M + 47-A/B 패턴 적용.
Sprint 45-M + 47-A 패턴 적용.
Sprint 45-M 패턴 적용: JSON에서 IsMultiTenant: true임에도 Suite가 Base 클래스에 IMultiTenant를 적용하지 않았습니다.
Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):