Changelog

What is new on the ToRun platform, newest first.

v@release.Version

minor
14 thg 6 2026

June 2026 — 53 changes

  • Added
    Thêm nhiều mô hình tạo ảnh và video để bạn lựa chọn

    Trình chọn mô hình giờ đã có Google Imagen và Gemini cho ảnh, cùng OpenAI Sora và Google Veo cho video, bên cạnh những mô hình bạn vẫn đang dùng. Hãy chọn đúng mô hình bạn muốn, hoặc để Auto tự chọn lựa chọn phù hợp nhất…

  • Added
    Workflow AI không cần lập trình và Marketplace của nhà sáng tạo đã ra mắt

    Kết nối nhiều bước AI thành một workflow để chạy bất cứ lúc nào, rồi đăng lên Marketplace hoặc khám phá những gì các nhà sáng tạo khác đã chia sẻ. Workflow Editor, Runner và Marketplace giờ đã có sẵn ngay trên menu.

  • Added
    Cài ToRun ngay trên điện thoại của bạn

    Thêm ToRun vào màn hình chính và mở như một ứng dụng thực thụ — toàn màn hình, có biểu tượng riêng — để chỉ cách bạn một chạm cho đến khi ứng dụng di động chính thức ra mắt.

  • Added
    Diện mạo mới mẻ của ToRun.ai

    Logo mới và nhận diện thương hiệu gọn gàng hơn trên toàn bộ ứng dụng, được tinh chỉnh cho cả giao diện sáng và tối.

  • Added
    Câu trả lời thông minh hơn, cá nhân hóa hơn

    Chọn mức độ suy nghĩ của AI, giờ ngay cả trong chế độ Auto. Lời nhắc tạo ảnh có thể âm thầm tận dụng bộ nhớ đã lưu của bạn để kết quả khớp với những người và chi tiết bạn quan tâm. Và những ký ức gần như trùng lặp sẽ đượ…

  • Fixed
    Studio tạo ảnh, video và nhạc gọn gàng hơn

    Tiến trình tạo nội dung giờ hiển thị ngay bên cạnh kết quả thay vì bên dưới biểu mẫu, mỗi trang đều mở ra sạch sẽ, và tác phẩm mới nhất của bạn luôn nổi bật ở vị trí trung tâm trong khi những tác phẩm cũ hơn được lưu tro…

  • Fixed
    Ví rõ ràng hơn và Library mượt mà hơn

    Lịch sử ví của bạn giờ được chia trang và hiển thị chính xác cả những khoản nhỏ dưới một xu, và việc xóa mục khỏi Library không còn báo lỗi nữa.

  • Added
    Trở thành nhà quảng cáo, tự thao tác hoàn toàn

    Tạo tài khoản nhà quảng cáo và gửi chiến dịch để xét duyệt ngay từ tài khoản của bạn, không phải chờ thiết lập thủ công.

  • Fixed
    Tăng cường độ ổn định, độ chính xác thanh toán và bảo mật

    Phía sau hậu trường: hạch toán tín dụng miễn phí công bằng hơn, kiểm tra chặt chẽ hơn với khoản chi trả và quyền hạn của nhà sáng tạo, kiểm duyệt nội dung an toàn hơn, và các lượt chạy workflow đáng tin cậy hơn.

  • Added
    Thêm một công cụ dịch trực tiếp thứ hai, hỗ trợ 77 ngôn ngữ

    Dịch Trực Tiếp giờ đây cho phép bạn lựa chọn giữa hai công cụ và chọn công cụ phù hợp với cuộc trò chuyện của mình — bao gồm một tùy chọn mới hỗ trợ 77 ngôn ngữ, trong đó có cả tiếng Thổ Nhĩ Kỳ và tiếng Nga. Mỗi lựa chọn…

  • Added
    Bộ chọn mô hình rõ ràng hơn — và thêm nhiều mô hình cho Free plan

    Những mô hình mà gói của bạn chưa bao gồm giờ sẽ hiện một biểu tượng khóa nhỏ kèm cách nâng cấp hoặc nạp tiền vào ví chỉ với một chạm, thay vì chỉ báo lỗi sau khi bạn đã gửi. Chúng tôi cũng mở thêm nhiều mô hình mạnh mẽ…

  • Added
    Trợ lý ghi nhớ những hình ảnh bạn chia sẻ

    Chỉ cần gửi một bức ảnh một lần và trợ lý sẽ ghi nhớ những gì đã thấy trong suốt cuộc trò chuyện — nhờ vậy bạn có thể hỏi về nó nhiều lượt sau đó, kể cả khi đã đổi mô hình, mà không bao giờ phải tải ảnh lên lại hay bị tí…

  • Added
    Sơ đồ, bảng biểu và định dạng gọn gàng hơn trong trò chuyện

    Câu trả lời trong trò chuyện giờ đây vẽ sơ đồ thành sơ đồ thực sự, trình bày bảng biểu với đường viền rõ ràng, và điều chỉnh kích thước tiêu đề cho vừa với nội dung thay vì lấp đầy màn hình — nhờ vậy các câu trả lời dễ đ…

  • Fixed
    Luôn rõ ràng khi có điều gì chưa được bao gồm — không bao giờ là ngõ cụt

    Khi một mô hình cần nâng cấp hoặc số dư của bạn sắp hết, bạn sẽ thấy ngay một thông báo thân thiện kèm nút Nâng cấp gói và Nạp tiền vào ví. Những câu trả lời không thể tạo ra sẽ giải thích lý do thay vì để lại một bong b…

  • Fixed
    Thời gian giờ đây hiển thị theo múi giờ của bạn

    Hồ sơ thanh toán, lịch sử và hoạt động giờ đây hiển thị theo giờ địa phương của bạn thay vì UTC, để các mốc thời gian khớp với đồng hồ ngay bên bạn.

  • Fixed
    Danh sách trò chuyện gọn gàng hơn

    Bắt đầu một cuộc trò chuyện mới giờ sẽ tái sử dụng một cuộc trống thay vì chồng chất các cuộc rỗng, những cuộc trò chuyện chưa từng được trả lời sẽ không còn làm rối danh sách của bạn, và tiêu đề tạm thời sẽ được thay bằ…

  • Added
    Quảng cáo trên ToRun

    Doanh nghiệp giờ đây có thể thiết lập tài khoản nhà quảng cáo và chạy chiến dịch quảng cáo của riêng mình từ đầu đến cuối — tạo chiến dịch, thêm các mẫu quảng cáo đi kèm, và gửi chúng để được duyệt nhanh trước khi xuất h…

  • Added
    Dùng API key của riêng bạn cho giọng nói và dịch trực tiếp

    BYOK giờ đây cũng bao gồm giọng nói thời gian thực, dịch trực tiếp và phiên âm trực tiếp: phần sử dụng AI sẽ đi qua key của riêng bạn và chúng tôi chỉ thu một khoản phí nền tảng nhỏ tính theo phút.

  • Fixed
    Làm mới trang công khai, tải lên an toàn hơn và đăng ký mượt mà hơn

    Các trang công khai của chúng tôi giờ đây được điều khiển bằng nội dung có thể chỉnh sửa ở nhiều ngôn ngữ, hình ảnh tải lên được quét nội dung không an toàn trước khi lưu trữ, việc đăng ký tài khoản và email xác nhận hoạ…

  • Added
    Cuộc trò chuyện vẫn tiếp tục tạo phản hồi, ngay cả khi bạn rời đi

    Những câu trả lời dài giờ đây chạy trên máy chủ và tiếp tục diễn ra khi bạn chuyển cuộc trò chuyện, mở trang khác hoặc đóng thẻ. Quay lại bất cứ lúc nào và câu trả lời vẫn đang được truyền tới, hoặc đã sẵn sàng chờ bạn.

  • Added
    Dự án giờ đây mang đến cho mỗi cuộc trò chuyện đúng ngữ cảnh

    Các cuộc trò chuyện bắt đầu trong một Dự án sẽ tự động tiếp nhận hướng dẫn, kiến thức đã tải lên và bộ nhớ của dự án, hiển thị huy hiệu dự án kèm liên kết quay lại nhanh, và nêu tên dự án trong các cuộc trò chuyện gần đâ…

  • Added
    Bộ nhớ hiểu được thời gian — và bạn có thể chỉnh sửa

    Bộ nhớ của trợ lý giờ đây theo dõi mỗi thông tin thay đổi nhanh đến mức nào và đánh dấu những thông tin có thể đã lỗi thời, để dựa vào những gì vẫn còn đúng. Một trình chỉnh sửa mới cho phép bạn tự xem lại, thêm và xóa t…

  • Added
    Những mô hình mới nhất, cùng các trang Dịch và Ghi lời chuyên dụng

    Chúng tôi đã bổ sung các mô hình mới nhất về hình ảnh, video, ghi lời và giọng nói thời gian thực, đồng thời mở các trang Dịch và Ghi lời độc lập để bạn có thể truy cập những công cụ này ngay từ menu.

  • Added
    Trình dịch giọng nói trực tiếp

    Nói và lời của bạn được dịch gần như tức thì: chọn hai ngôn ngữ, hoán đổi chúng chỉ bằng một lần chạm, trình dịch sẽ thu giọng nói của bạn và truyền bản dịch trở lại ngay khi bạn đang nói.

  • Added
    Xưởng video rõ ràng và trung thực hơn

    Trang video giờ đây giữ các ô đồng bộ khi bạn xóa khỏi Thư viện, cho phép bạn đặt độ dài đoạn phim theo từng mô hình, xóa từng đoạn phim riêng lẻ, và đánh dấu rõ ràng các kết quả xem trước để bạn luôn biết mình đang xem…

  • Fixed
    Trợ lý trong ứng dụng được tinh chỉnh hơn

    Trợ lý trong ứng dụng giờ đây hiển thị các câu trả lời được định dạng đẹp mắt, giữ tin nhắn mới nhất trong tầm nhìn khi đang gõ, lưu câu trả lời hoàn chỉnh một cách đáng tin cậy, và tự động đặt tiêu đề cho mỗi cuộc trò c…

  • Fixed
    Câu trả lời trò chuyện hiển thị đáng tin cậy — liên kết, công thức và tiền tệ

    Những câu trả lời có chứa liên kết, công thức toán học hoặc số tiền không còn hiển thị trống hoặc dở dang nữa, kể cả sau khi làm mới trang, và các câu trả lời nghiên cứu chuyên sâu luôn kèm theo bản tóm tắt cuối cùng.

  • Fixed
    Tăng cường độ tin cậy, độ chính xác thanh toán và bảo mật

    Một đợt làm việc sâu rộng phía sau hậu trường: đo lường mức sử dụng và tổng chi tiêu chính xác hơn, hoàn tiền tự động công bằng hơn, nhắn tin thời gian thực ổn định hơn, các biện pháp bảo vệ quyền riêng tư và bảo mật mạn…

  • Fixed
    Đọc nội dung blog và cộng đồng mà không cần đăng nhập

    Các bài blog công khai và thảo luận trên diễn đàn — bao gồm cả lượt tương tác và phản hồi — giờ đã hiển thị cho khách chưa đăng nhập.

  • Fixed
    Giá rõ ràng hơn và danh sách mô hình gọn gàng hơn

    Mức dùng giờ được tính với một khoản phụ thu duy nhất và công bằng, các đồng hồ chi tiêu hằng tháng và ngân sách còn lại của bạn hiển thị chính xác, và danh sách mô hình đã được dọn dẹp — loại bỏ mô hình ngừng hoạt động…

  • Added
    Mục đăng và gói trên marketplace giờ hiển thị ảnh bìa

    Các mục đăng quy trình và gói có thể hiển thị ảnh bìa đúng nghĩa, giúp việc duyệt marketplace dễ dàng và dễ chịu hơn.

  • Added
    Trợ lý trong ứng dụng giờ có thể thao tác thay bạn

    Chỉ cần yêu cầu, trợ lý sẽ điền biểu mẫu, nhấn nút và di chuyển trong ứng dụng thay bạn — được hỗ trợ bởi bộ công cụ mở rộng nay vươn tới phần liên hệ, FAQ, diễn đàn, bộ nhớ và tạo quy trình chỉ trong một bước.

  • Added
    Trợ lý gõ câu trả lời trực tiếp, trong một bong bóng bạn có thể di chuyển

    Câu trả lời giờ hiện ra từng từ một thay vì xuất hiện cùng lúc, và bạn có thể kéo bong bóng trợ lý đến bất cứ đâu thuận tiện, kèm gợi ý trực tiếp về việc nó đang xử lý.

  • Fixed
    Tạo và sắp xếp Dự án một cách trơn tru

    Việc tạo một dự án và bắt đầu cuộc trò chuyện mới bên trong nó giờ hoạt động mượt mà, để bạn giữ các cuộc trò chuyện, tệp và ngữ cảnh liên quan ở cùng một nơi.

  • Fixed
    Video, ảnh đại diện và giọng nói mượt mà hơn

    Video phát ổn định, media riêng tư tải qua một proxy an toàn, ảnh đại diện của nhà sáng tạo và persona giờ hiển thị cho mọi người, và ghi chú thoại được chuyển thành văn bản không lỗi.

  • Fixed
    Thông báo trạng thái dịch vụ rõ ràng hơn

    Khi một phần của dịch vụ gặp sự cố, thông báo giờ dễ hiểu hơn và không còn để lộ tên nhà cung cấp nội bộ.

  • Added
    Kết nối các ứng dụng yêu thích với trợ lý

    Liên kết ứng dụng bên ngoài chỉ với một lần đăng nhập hoặc một khóa API, để trợ lý làm việc trực tiếp với những công cụ bạn đang dùng.

  • Fixed
    Tạo và chỉnh sửa ảnh đáng tin cậy hơn

    Công cụ ảnh giờ chọn một mô hình phù hợp với việc bạn đang làm, hiển thị bản xem trước nội tuyến tức thì của kết quả, và việc chỉnh sửa đã hoạt động trở lại sau khi nhà cung cấp đổi mô hình.

  • Fixed
    Tệp đã xóa không còn làm hỏng cuộc trò chuyện hay thư viện của bạn

    Khi một hình ảnh hoặc tệp đính kèm đã bị xóa, lịch sử trò chuyện, thư viện media và trình chỉnh sửa ảnh giờ hiển thị một ảnh giữ chỗ thân thiện thay vì dừng lại với lỗi.

  • Added
    Dịch giữa khoảng 100 ngôn ngữ

    Trình dịch giờ cung cấp bộ chọn có tìm kiếm với khoảng 100 ngôn ngữ, mỗi ngôn ngữ hiển thị theo tên bản địa và tên tiếng Anh.

  • Added
    Bài blog mới và thảo luận cộng đồng mới

    Chúng tôi đã thêm một loạt bài blog và chủ đề diễn đàn mới — bao gồm cả những câu hỏi đã có lời giải đáp — để bạn có thêm nhiều thứ để đọc và khám phá ngay từ ngày đầu.

  • Added
    Công cụ mới trong chat: tệp, code, hình ảnh, giọng nói và nhiều hơn nữa

    Chat giờ đây có thể tìm kiếm trong các tệp bạn tải lên, chạy Python trong sandbox, chỉnh sửa hình ảnh, phiên âm và đọc âm thanh, và kích hoạt workflow của bạn — tất cả mà không rời khỏi cuộc trò chuyện.

  • Added
    Tìm kiếm web và nghiên cứu chuyên sâu, có trích dẫn

    Cho chat tìm kiếm web trực tiếp, thực hiện nghiên cứu chuyên sâu đa nguồn, và tải về đọc toàn bộ trang — mỗi câu trả lời đều đi kèm với các nguồn đã sử dụng.

  • Added
    Chat có thể nhớ — và quên theo yêu cầu

    Trợ lý của bạn giờ đây lưu giữ bộ nhớ nhẹ qua các cuộc trò chuyện, có thể liệt kê những gì nó nhớ và thực hiện yêu cầu quên bằng bất kỳ ngôn ngữ nào.

  • Added
    Tạo hình ảnh, video và âm nhạc trong một studio

    Tạo và chỉnh sửa hình ảnh, sản xuất phim ngắn và sáng tác bài hát có lời — được hỗ trợ bởi các công cụ tạo hình ảnh, video và âm nhạc mới, với bộ chọn phương tiện dùng chung và thư viện của bạn chỉ một cú nhấp chuột.

  • Added
    Chế độ giọng nói thời gian thực

    Nói chuyện với ToRun bằng giọng nói — khả năng giọng nói realtime mới mang đến các cuộc trò chuyện bằng lời nói và phiên âm trực tiếp cho chat.

  • Added
    Workflow: chạy ưu tiên chất lượng, phê duyệt và tiếp tục

    Các lần chạy workflow giờ đây ưu tiên các model chất lượng cao, dừng lại để xin phê duyệt khi cần, và có thể được hủy, tạo lại và tiếp tục — với mọi đầu ra được lưu thẳng vào thư viện của bạn.

  • Added
    Dự án: tổ chức công việc của bạn

    Nhóm các cuộc trò chuyện, tệp và ngữ cảnh liên quan vào Dự án để trợ lý của bạn luôn có đúng thông tin nền cho nhiệm vụ đang thực hiện.

  • Added
    Canvas: không gian làm việc cạnh nhau

    Soạn thảo và chỉnh sửa nội dung dài và code trong bảng canvas chuyên dụng ngay bên cạnh cuộc trò chuyện của bạn.

  • Added
    Cuộc trò chuyện thông minh hơn, dài hơn

    Tóm tắt cuộn, cửa sổ ngữ cảnh thông minh hơn và cuộn lịch sử nhanh hơn giúp các cuộc trò chuyện dài vẫn mạch lạc và nhanh nhẹn, với các điều khiển rõ ràng khi cuộc trò chuyện vượt quá cửa sổ model.

  • Added
    Thanh toán trung thực, minh bạch

    Trợ cấp miễn phí nhân văn được nạp lại theo cửa sổ cuộn, đồng hồ đo chi tiêu rõ ràng hơn, hoàn tiền tự động khi tạo hình ảnh hoặc video thất bại, và các điều khiển cường độ suy luận chỉ mở khóa những gì số dư của bạn có…

  • Added
    Danh mục model phong phú và mới nhất

    Hàng chục model 2026 đã được thêm vào và các model lỗi thời bị ngừng sử dụng, cùng với tính năng tự động đồng bộ hàng ngày để cập nhật model và giá từ nhà cung cấp — được quản lý từ danh mục admin mới.

  • Added
    Chia sẻ những cuộc trò chuyện hay nhất của bạn

    Xuất bản cuộc trò chuyện lên liên kết công khai và phát triển cộng đồng xung quanh những gì bạn tạo ra.

v@release.Version

minor
31 thg 5 2026

May 2026 — 499 changes

  • Changed
    52-Q-SMOKE-HARNESS: bộ kiểm tra smoke đầu cuối có thể lặp lại + báo cáo hồi quy đầu tiên

    Bộ kiểm tra console .NET độc lập (test/ToRun.SmokeTests) xác thực đối với Host đang chạy (cấp mật khẩu OpenIddict) và kiểm tra từng đầu cuối đến đầu cuối qua HTTP API thực: auth/me, bộ nhớ CRUD, wallet, billing, library,…

  • Fixed
    52-Q-AI-MEDIA-ACCESS: đọc Bunny có xác thực cho tất cả các lần tải phương tiện trong pipeline

    Phương tiện nền tảng nằm trong Vùng Lưu trữ Bunny RIÊNG TƯ, nên một yêu cầu đơn giản

  • Added
    52-Q-MEMORY-CHAT: công cụ memory_list + tính năng forget hoạt động đa ngôn ngữ

    Hoàn thành tính năng quản lý bộ nhớ dựa trên chat trên nền tảng

  • Fixed
    52-Q-MEMORY-FORGET-I18N: khớp fold đa ngôn ngữ + dự phòng ngữ nghĩa

    memory_forget trả về no_match cho các ký ức tồn tại.

  • Fixed
    52-Q-GEMINI-FLASH-400: tăng ngưỡng thấp flash thinkingBudget 128->512 + ghi log nội dung Google 400

    gemini-2.5-flash bắt đầu trả về HTTP 400 với thinkingBudget=128 (giá trị thấp 52-N

  • Fixed
    52-Q-MODEL-MENU: gộp model-catalog + onboarding vào nhóm điều hướng ByokVault

    Hai trang admin máy chủ (/admin/model-catalog, /admin/model-onboarding)

  • Fixed
    52-Q-MODEL-SYNC-DEDUP: bỏ qua các biến thể model theo snapshot đã lỗi thời trong quá trình khám phá

    Quá trình khám phá chỉ khớp theo ProviderModelId/ModelKey chính xác, do đó các nhà cung cấp đã lỗi thời

  • Changed
    52-Q-CHAT-EFFORT-UX-LOCALE: phân phối bản sao khóa effort locked + WalletCta sang 28 locale

    Cổng kiểm soát cường độ suy luận hiện dựa trên số dư, không phải theo gói.

  • Added
    52-Q-MODEL-SYNC-AI: phân tích AI trang giá dự phòng cho việc đồng bộ model

    Kết hợp tốt nhất vào tính năng đồng bộ 52-Q-MODEL-SYNC-JOB đã hoàn thành: khi OpenRouter

  • Fixed
    52-Q-CHAT-EFFORT-UX: cổng kiểm soát cường độ dựa trên wallet/số dư

    Bộ chọn cường độ suy luận bị khóa cứng theo gói đăng ký cộng với tính năng miễn trừ admin/host từ một cách tiếp cận trước đó đã bị từ chối.

  • Changed
    52-Q-MODEL-SYNC-JOB: nghiên cứu đồng bộ nhà cung cấp + bản đồ kiến trúc

    Kết quả bàn giao Giai đoạn 1: danh sách 26-provider và kho nguồn giá,

  • Added
    52-Q-MODEL-ONBOARDING: quản lý danh mục model của host-admin (danh sách/chỉnh sửa/xóa)

    Trình hướng dẫn onboarding (các giai đoạn A-D) chỉ TẠO các hàng danh mục; không có

  • Added
    52-P-SHARE: chia sẻ công khai + bề mặt phát triển cộng đồng

    Backend (torun.agent): SharedChat được bổ sung IsListed/ListedSlug/ListedAt + các trường thẻ denormalized; PublicCommunityAppService + PublicCommunityController (nguồn cấp /community ẩn danh + trình xem theo slug); Commu…

  • Fixed
    52-Q-CHAT-AUDIO-BRIDGE: phiên âm âm thanh đã tải lên + sửa trình phát âm thanh

    Tệp đính kèm âm thanh trong chat bị hỏng; nguyên nhân gốc rễ thực sự khác so với

  • Fixed
    52-Q-CHAT-CONTEXT-SLASH: lưu chế độ tràn ngữ cảnh + các cài đặt nhanh slash UX trung thực

    PHẦN 1 — menu thả xuống "Xử lý tràn ngữ cảnh" trên tiêu đề chat bị kẹt ở

  • Fixed
    52-Q-BUDGET-BUILD: loại bỏ IsCurrentMonth mồ côi đang tham chiếu BudgetBucketCacheItem.DailyKey đã bị xóa

    Việc xóa daily-cap (84178afab) đã xóa DailyKey/MonthlyKey khỏi BudgetBucketCacheItem

  • Changed
    52-Q-SMOKE-INTEG: xóa lỗi đỏ Mongo (AiModels dup _id + vòng đời giao dịch UoW) + kiểm tra tích hợp transport-isolation ResolveAsync

    Phần 1 — xóa lỗi đỏ ở tầng tích hợp MongoDB.

  • Changed
    52-Q-CHAT-EFFORT-LOCALE: phân phối 7 khóa ChatComposer:Effort sang 28 locale

    Các chuỗi bộ chọn cường độ suy luận (Effort:Tooltip, Effort:Locked:Tooltip,

  • Added
    52-Q-CHAT-EFFORT: bộ chọn cường độ suy luận theo từng model được kết nối đầu cuối

    Bộ điều khiển cường độ suy luận chuẩn, không phụ thuộc nhà cung cấp trên giao diện soạn thảo chat,

  • Changed
    52-Q-BUDGET-DAILYCAP-REMOVE: xóa daily-cap + active-minutes không còn dùng

    Bước dọn dẹp dead-code cuối cùng cho quá trình viết lại ngân sách cửa sổ phiên.

  • Changed
    52-Q-MONTHLY-SPEND-FIX: sửa chú thích nguồn chi tiêu + XML doc sang telemetry UserDailySummary

    Đồng hồ đo Chi tiêu Tháng/Ngày đọc telemetry UserDailySummary (ScopeKey=userId,

  • Changed
    52-Q-BUDGET-DEADCFG: xóa các tùy chỉnh cấu hình Allowance đã lỗi thời

    Theo dõi kiểm tra sau khi viết lại ngân sách cửa sổ phiên (2a33fd31f).

  • Fixed
    52-Q-BUDGET-BUCKET-GAUGE-ZERO: xem trước dung lượng phiên đã cấu hình khi cache-miss bucket

    Đồng hồ đo ngân sách bucket trên trang chủ (/) + me-home hiển thị "$0.00 / 0% / $0.00" mỗi khi

  • Added
    52-Q-BUDGET-HUMANE: trợ cấp miễn phí theo cửa sổ phiên cuộn (dung lượng $0.20 / 5h)

    Ngân sách bucket của gói miễn phí là dạng nhỏ giọt "$2 / 30d / 24h": nạp lại = $2/720/h và

  • Fixed
    52-Q-BUDGET-BUCKET-GAUGE-UX: đồng hồ đo bucket dễ đọc - độ chính xác 4 chữ số thập phân + gợi ý khoảng thời gian miễn phí

    Đồng hồ đo NGÂN SÁCH trên trang chủ (/) và me-home (/me) hiển thị "$0.00 (2% / $0.01)":

  • Fixed
    52-Q-CHAT-HISTORY-VISION-LEAK: loại bỏ các phần hình ảnh trong lịch sử cho các model chỉ xử lý văn bản

    Lỗi vision nhiều lượt.

  • Changed
    52-Q-SMOKE: khóa phân loại định tuyến realtime + reasoning (bảo vệ không cần DB)

    Khóa hồi quy đầu tiên ở tầng smoke.

  • Added
    52-Q-INVOCATION-PROTOCOL: tách biệt transport của các model khỏi định tuyến hoàn thành

    Sửa nguyên nhân gốc rễ cho các lỗi 404 lặp đi lặp lại của title-gen / public-chat / vision: khả năng

  • Fixed
    52-Q-VISION-BRIDGE: loại trừ các SKU realtime khỏi định tuyến vision dựa trên hoàn thành — ĐÃ XÁC MINH

    Người dùng xác nhận mô tả hình ảnh hiện hoạt động.

  • Fixed
    52-Q-CHAT-IMG-PROXY: xác minh quyền sở hữu đính kèm qua chuỗi ChatMessageId

    Phạm vi chủ sở hữu bị lỗi 403 ngay cả đối với chủ sở hữu chat hợp lệ: các đính kèm do manager tạo

  • Fixed
    slice52-Q-CHAT-IMG-PROXY: hình ảnh lịch sử chat hiển thị qua stream-proxy backend (sửa lỗi Bunny 503)

    A3 NGUYÊN NHÂN GỐC RỄ THỰC SỰ (phát hiện qua kiểm thử trình duyệt trực tiếp): hình ảnh đính kèm chat

  • Changed
    slice52-Q-AUDIT: nhật ký kiểm tra lỗi nghiêm trọng trong pipeline — C1 DI-cycle đã sửa, M1 Quartz được chỉ định, TODO theo từng pipeline

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Fixed
    slice52-Q-QUEUE-DI-CYCLE: phá vỡ vòng lặp DI của queued-dispatcher qua phụ thuộc công cụ workflow-run lazy

    Việc giải quyết IQueuedRequestDispatcher gây StackOverflow khi khởi động (không thể bắt —

  • Fixed
    slice52-Q-LOG-ROLLING: xoay vòng + giới hạn dung lượng file sink Serilog (trước đây âm thầm chết ở 1 GB)

    Cả sink thời gian chạy của Host (appsettings.json) và các logger khởi động

  • Fixed
    slice52-Q-CHANGELOG-IDEMPOTENT: khóa seed changelog bằng Slug, không phải ExternalId (sửa E11000 vĩnh viễn)

    Nguyên nhân gốc rễ lặp lại: ChangelogBackfillDataSeedContributor kiểm tra tính idempotency trên

  • Changed
    slice52-Q-CHANGELOG: bổ sung sprint changelog + 29-locale keys (93 sprint mới)

    Đã chạy extract-sprint-changelog.py + propagate-changelog-locales.py từ main:

  • Fixed
    slice52-Q-QUEUE-DI-CRASH: gate dispatcher resolution behind non-empty queue

    QueuedRequestRunner.DoWorkAsync resolved IQueuedRequestDispatcher at the TOP of

  • Added
    slice52-Q-CHAT-CTX-WINDOW-CLAMP: clamp context budget to model window (covers tier-budget > window gap)

    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.

  • Changed
    slice52-Q-PROACTIVE-CONCERN/locale: fan out 29 concern-toast keys to 28 siblings

    Proactive "concern toast" (Honest-UX DNA pattern #3).

  • Changed
    slice52-Q-CHAT-WALLET-OVERRIDE/locale: fan out overrun + ContextOverrun keys to 28 siblings

    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).

  • Changed
    slice52-Q-HUMANE-ERRORS/locale: fan out 70 StatusBanner + Error keys to 28 siblings

    Propagate the EN-only humane-error + status-banner keys (ErrorHumanizerService

  • Added
    slice52-Q-CHAT-CANVAS/frontend: canvas proxy + side-panel surface

    Phase B surface for the chat-canvas (ChatGPT Canvas / Claude Artifacts

  • Changed
    slice52-Q-PROACTIVE-CONCERN: EN keys for concern toast + settings opt-out + admin effectiveness panel

    Honest-UX DNA pattern #3.

  • Added
    slice52-Q-CHAT-WALLET-OVERRIDE: per-chat overrun PATCH endpoint + Agent locale keys

    Completes the wallet-funded context-overrun feature.

  • Changed
    slice52-Q-LEARNING-LOOP/locale: fan out 10 Admin/Permission UserExperience keys to 28 siblings

    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…

  • Fixed
    slice52-Q-BUILD-GREEN: resolve cross-chip integration errors blocking main build

    Four parallel 52-Q chips landed code referencing symbols their sibling chips

  • Changed
    slice52-Q-CHAT-CANVAS/locale: fan out 28 Canvas/Artifacts + Chat:Summary keys to 28 siblings

    Closes the 29-locale parity gap for the CHAT-CANVAS / ChatSummaries slices,

  • Added
    slice52-Q-LEARNING-LOOP/phase2-dashboard: admin ComplaintLink panel

    Phase 2 Scope B of the honest-UX-DNA pattern #5 loop.

  • Added
    slice52-Q-AUTO-REFUND/frontend: refund toast + /me/billing highlight + /me/wallet badge

    Honest UX DNA pattern #2 (Reversibility) — make the auto-refund VISIBLE.

  • Added
    slice52-Q-AUTO-REFUND/dispatcher: two consumers on torun.billing.refunded.v1

    Honest UX DNA pattern #2 (Reversibility) — wire the projection layer

  • Added
    slice52-Q-AUTO-REFUND/triggers: wire RefundAsync at image/video failure points

    Honest UX DNA pattern #2 (Reversibility) — refund the user when something

  • Added
    slice52-Q-AUTO-REFUND/api: IMyRefundAppService + DTOs + 5-min cache

    Honest UX DNA pattern #2 (Reversibility) — user-facing read API for the

  • Changed
    slice52-Q-AUTO-REFUND/locale: EN strings + PublicChangelogEntry

    EN-only this commit — the paired slice52-Q-AUTO-REFUND-LOCALE chip fans

  • Added
    slice52-Q-AUTO-REFUND/entity: AutoRefundLog entity + EnAutoRefundTrigger enum

    Honest UX DNA pattern #2 (Reversibility) — append-only audit row for

  • Changed
    slice52-Q-CHAT-PROJECTS/locale: Projects keys across 29 locales + de/zh JSON hotfix

    Paired locale fan-out for the /me/projects feature (components landed in

  • Added
    52-Q-voice-realtime-catalog: EnBillingSource.RealtimeVoice + hạt giống khả năng voice-realtime + nối

    EnBillingSource.RealtimeVoice + hạt giống khả năng voice-realtime + nối

  • Added
    slice52-Q-HUMANE-ERRORS: humane error surfaces (honest-UX DNA #1 Şeffaflık)

    Backend exception → frontend humane message + retry hint + status banner.

  • Fixed
    slice52-Q-CHAT-CANVAS: dedup ChatSummaries collection + add Volo.Abp.Authorization using

    Consolidator landed both 52-Q-CHAT-CONTEXT-BUILDER's ChatSummaries

  • Added
    52-Q-voice-realtime-locale: phân phối 25 khóa chế độ giọng nói sang 28 ngôn ngữ anh chị em

    Phản chiếu các khóa UI chế độ giọng nói realtime được thêm vào en.json trong

  • Changed
    slice52-Q-USER-SENTIMENT-LOCALE: Privacy Policy Section 11 + UX dashboard keys in ar, hi, zh-Hans, zh-Hant, ja (5 locales)

    Native translations of the 40-key User Sentiment / Privacy Policy v3 Section 11 block (legal text per GDPR Art.

  • Added
    slice52-Q-CHAT-PROJECTS: Suite-managed file edits (Permissions+MongoDB+ChatPipeline)

    Suite-managed file edits (Permissions+MongoDB+ChatPipeline)

  • Changed
    slice52-Q-consolidate-2: land additional parallel-chip WIP

    land additional parallel-chip WIP

  • Changed
    slice52-Q-consolidate: land stashed parallel-chip WIP onto main

    Consolidates the working-tree state stashed during the

  • Added
    slice52-Q-CHAT-SUMMARY-SERVICE: rolling chat summary service + ChatSummary entity

    Adds IChatSummarizationService + concrete impl that compresses the dropped

  • Added
    slice52-Q-TOOL-FILE-SEARCH: file_search chat tool + chat-attachment RAG ingest pipeline

    Third of the four P0 chat tools — ChatGPT File Search parity.

  • Added
    slice52-Q-CHAT-SUMMARY-UX: rolling summary pill + ChatSummary endpoint

    Why: backend tier-budget context builder (slice52-Q-CHAT-CONTEXT-BUILDER)

  • Added
    slice52-Q-TOOL-IMAGE-EDIT: image_edit P1 chat tool + URL→MediaAsset helper

    Adds ImageEditTool (mirror of ImageGenerateTool) so the LLM can edit user-

  • Changed
    slice52-Q-ME-WEBSEARCH/locale: propagate Agent::WebSearch:* keys to 28 siblings

    Fans out the 46 Agent WebSearch + Menu:WebSearch + Permission:WebSearch.*

  • Added
    slice52-Q-TOOL-TTS-STT: P1 chat tools tts_generate + stt_transcribe

    Why: P1 voice tools listed in feedback_chat_context_management.md — text

  • Added
    slice52-Q-LEARNING-LOOP: UserComplaintLink + nightly fix matcher (pattern #5 honest-UX DNA)

    Closes the user-complaint → shipped-fix loop automatically so we never make

  • Added
    slice52-Q-EPISTEMIC-HONESTY: chip + system prompt for Honest-UX DNA pattern #4

    Backend:

  • Added
    slice52-Q-ME-WEBSEARCH/shared-enum: add missing EnWebSearchKind enum

    The /me/web-search slice landed almost entirely via Serkan's recent

  • Added
    slice52-Q-CODE-INTERPRETER/runner: Pyodide host orchestrator + Web Worker

    Post-streaming runner that drives Pyodide in a Web Worker and feeds

  • Added
    slice52-Q-CODE-INTERPRETER/upload: chat-attachment MIME whitelist + EN keys

    MyMediaUploadAppService.PurposeChatAttachment validation extended to

  • Added
    slice52-Q-CODE-INTERPRETER/bridge: pending + completion endpoints + flat-fee billing

    Two-endpoint AppService that bridges the server-side code_interpreter

  • Added
    slice52-Q-CODE-INTERPRETER/backend: code_interpreter tool + scoped tool context

    Ship the ADR-043 Pyodide v1 backend slice — the LLM-facing IAgentTool

  • Added
    slice52-Q-CHAT-VIRTUALIZATION: cursor-paginated chat history + render-window pattern

    Why: long chats (100+ turns) bloat browser memory + slow ngx-markdown re-renders

  • Added
    slice52-Q-TOOL-WORKFLOW-RUN/backend: add workflow_run chat tool (list/describe/run modes)

    Fourth of 4 P0 chat tools per feedback_chat_context_management.md roadmap and

  • Changed
    slice52-Q-CODE-INTERPRETER/adr: ADR-043 Pyodide v1 sandbox + 5MB attachment scope

    Phase 1 design spike for code_interpreter chat tool (second P0 tool after

  • Added
    slice52-Q-PUBLIC-CHAT-TURNSTILE/frontend: mount Cloudflare widget + ship token in stream POST

    Public-chat launcher now boots a Cloudflare Turnstile widget at view

  • Changed
    slice52-Q-PUBLIC-CHAT-TURNSTILE/locale: Public:Chat:Error:BotChallenge EN + TR master

    Locale key for the new Cloudflare Turnstile rejection banner shipped

  • Added
    slice52-Q-PUBLIC-CHAT-TURNSTILE/backend: Cloudflare Turnstile bot-protection for anon homepage chat

    The [AllowAnonymous] PublicChatAppService now verifies a Cloudflare

  • Added
    slice52-Q-PUBLIC-CHAT-STREAMING: SSE streaming variant for anon homepage chat

    Marketing landing's anon chat now streams the assistant reply

  • Changed
    slice52-Q-WEBSEARCH-PROVIDER/appsettings: expose DeepResearch + FetchUrl cost knobs + ExtractCacheMinutes

    Surface the three new WebSearchOptions knobs in appsettings.json so the

  • Added
    slice52-Q-WEBSEARCH-PROVIDER/tools: dual-tier chat web-search — web_search / deep_research / fetch_url

    Three tools wired to the canonical authoring-tier IWebSearchProviderFactory.

  • Added
    slice52-Q-WEBSEARCH-PROVIDER/seed: tavily provider + tavily-search model + 2 capabilities + 3 pricing meters

    Catalog seed for the dual-tier chat web-search tooling.

  • Added
    slice52-Q-WEBSEARCH-PROVIDER/tavily-client: IWebSearchProvider.ExtractAsync + Tavily /extract + raw_content

    Adds the second half of the provider contract needed by the dual-tier chat

  • Fixed
    slice52-Q-PUBLIC-CHAT-HARDEN: tighten output cap + rate caps + prompt length for anon vitrin

    User report 2026-05-27 — public chat marketing surface 60s+ bekleyip

  • Fixed
    slice52-Q-PUBLIC-CHAT-MD: markdown render + bigger output cap for anon homepage reply

    User: "ana sayfada neden markdown renderer yok, direk markdown olarak

  • Added
    slice52-Q-DEEP-RESEARCH-EXEC: wire DeepResearchExecutor to Tavily advanced search

    Bridges the gap between DeepResearchSession CRUD (sat at default state forever)

  • Changed
    slice52-Q-PUBLIC-CHAT-FALLBACK/locale-fanout: 3 Error keys × 27 siblings

    Propagate Public:Chat:Error:NoModel / CallFailed / EmptyPrompt

  • Fixed
    slice52-Q-PARTNER-CTA-URL: pricing-grid Partner CTA drops legacy /company/ prefix

    User report 2026-05-27: pricing sayfasındaki Partner card'ın

  • Fixed
    slice52-Q-PUBLIC-CHAT-FALLBACK: tiered routing fallback + actionable error codes for anon homepage chat

    User: "burayı geçen gün yaptık sağlamdı, yine bozuldu.

  • Added
    slice52-Q-WEBSEARCH-UNIFY: bridge chat web_search to authoring provider registry

    Slice 452-fu already shipped first-class Brave + Tavily IWebSearchProvider

  • Added
    slice52-Q-WEBSEARCH-PROVIDER: wire Brave + Tavily as real web-search tool backend

    Replaces the stub web_search tool with a config-selectable provider:

  • Fixed
    slice52-Q-STREAM-PERSIST: persist user + partial assistant turn on stream cancel / provider error

    User: "deepseek response geldi ekran 2'de, sayfayı refresh edince

  • Changed
    slice52-Q-TOOL-ONLY-TURN/locale-fanout: ToolOnlyTurn 27 sibling locales

    Native-quality translations for "Action completed.

  • Fixed
    slice52-Q-TOOL-ONLY-TURN: friendly localized rendering for tool-only assistant turns

    User şikayet: "gpt 4o mini response boş geldi.

  • Fixed
    slice52-Q-CHAT-ORDER: defensive chronological sort on chat history hydration

    User: "her sayfa refresh ettiğimde chatlerin yerleri ve sıraları

  • Fixed
    slice52-Q-UTC-PARSE-fu: chat history load also parses UTC defensively

    Önceki commit (e2a74db8) sadece relativeTime/fullTimestamp helper'ını

  • Fixed
    slice52-Q-UTC-PARSE: defensive UTC parse on chat timestamps — refresh no longer shifts "just now" → "3h ago"

    Sprint 50-S backend fix made the wire format emit `Z`-suffixed ISO

  • Changed
    slice52-Q-PROVIDER-NOTES: three provider API truth-tables + 2 latent regression fixes

    User direktif: "arkada iş kalmasın".

  • Fixed
    slice52-Q-ANTHROPIC-1M-BETA-REVERT: drop retired beta header — was the actual cause of Opus 4.7 / Sonnet 4.6 400s

    Önceki "fix" (a56449db) Opus 4.7 / Sonnet 4.6 için preemptive olarak

  • Fixed
    slice52-Q-CHAT-UX4: error bubble icon + text inline alignment

    Pre-fix rendered the warning triangle as an inline <i> followed by

  • Fixed
    slice52-Q-AUTO-DEFAULT: "Auto" dropdown pick → resolve to deepseek-v4-flash, not null

    Önceki rev (a56449db) sadece ilk-mount fallback'i çözüyordu —

  • Fixed
    slice52-Q-IMG-PRICING-GUARD: three-layer defense against image-gen overcharge ($22.50/image gpt-image-2)

    Third regression of the same bug class in three sessions.

  • Fixed
    slice52-Q-CHAT-MODEL-QUARTET: default picker / focus restore / single error / opus-4.7 + flash-lite

    User reported four issues in a single round of chat smoke-testing:

  • Fixed
    slice52-Q-FINANCIAL-AUDIT-3: UserBillingDailyBackfill now overwrites existing rows — true idempotency

    Atladığım şey buydu.

  • Fixed
    slice52-Q-HOME-SPEND-CANONICAL: aggregate BillingRecord directly for /home Monthly Spend, not derived summary

    Three iterations of the same bug (Monthly Spend $0 → $0.33 → $0.15) had

  • Fixed
    slice52-Q-MIME-PARAM-FIX: defensive MediaTypeHeaderValue.Parse for caller-supplied Content-Type with codec parameters

    Mic-capture via MediaRecorder (chat composer Whisper STT, Sprint 52-O)

  • Added
    slice52-Q-MODEL-SEED-RETIRE-AUDIT/openai-deepseek: retire gpt-4.1 family + DeepSeek aliases (force-cut from active rotation per user directive, 2026-05-27)

    OpenAI gpt-4.1 family (Deprecated → Retired, isActive:false, version 3→4):

  • Added
    slice52-Q-MODEL-SEED-RETIRE-AUDIT/pricing: EffectiveTo dates for retired pricing rows

    Close 10 pricing rows for the 5 retired models:

  • Added
    slice52-Q-MODEL-SEED-RETIRE-AUDIT/anthropic-google: retire claude-3.5 + gemini-2.0/1.5 SKUs

    Anthropic (DeprecatedAt 2025-09-29, RetiresAt 2026-05-01):

  • Fixed
    slice52-Q-PICKER-DEPRECATED-v2: hide Deprecated + Retired + realtime + computer-use from chat model picker

    User reported a wide swath of dropdown rows error on send:

  • Fixed
    slice52-O-REASONING-UX: legible thinking-pane indicator while gpt-5 reasons server-side

    User report: "reason yapar gibi baya bekliyor ama hareket yok, reason

  • Fixed
    slice52-Q-FINANCIAL-AUDIT-2: kill double-count of chat spend in UserBillingDailySummary

    Audit continuation after slice52-Q-FINANCIAL-AUDIT-1.

  • Changed
    slice52-Q-USER-BILLING-DAILY/handoff: log progress + defer admin UI to Suite session

    - PROGRESS.md: Sprint 52-Q-USER-BILLING-DAILY entry with all 4 commits,

  • Fixed
    slice52-Q-FINANCIAL-AUDIT-1: UserDailySummary consumer subscribes torun.billing.recorded.v1 — closes universal-spend leak

    User report: "monthly spend 0.33 olamaz, burada bir hata var, muhtemelen

  • Added
    slice52-Q-USER-BILLING-DAILY/backfill: seed UserBillingDailySummary from BillingRecord history

    - New IDataSeedContributor: UserBillingDailyBackfillDataSeedContributor

  • Added
    slice52-Q-USER-BILLING-DAILY/consumer: UserBillingDailySummaryConsumer micro-batch projection

    - New IInboxConsumer: GroupId "torun-user-billing-daily-summary"

  • Added
    slice52-Q-USER-BILLING-DAILY/entity: UserBillingDailySummary entity + Mongo wiring + indexes

    - Suite entity JSON: modules/torun.subscription/.suite/entities/UserBillingDailySummary.json

  • Fixed
    slice52-O-HOME-SPEND-V3: swap BillingRecord aggregate for UserDailySummary read

    User: "TelemetryUserDailySummaries tablomuz var gördüğün gibi içide dolu.

  • Fixed
    slice52-O-HOME-SPEND-V2: tenant filter bypass + cache write-back for monthly spend

    User report (continued from slice 52-O-NIGHT-TODO-IMPL/home-spend-fallback):

  • Fixed
    slice52-O-NIGHT-TODO-IMPL/home-spend-fallback: DB fallback for monthly/daily spend when Redis bucket is stale

    User report: "monthly spend her gün sıfırlanıyor — redis recycle ettiğimden,

  • Changed
    slice52-O-NIGHT-TODO-IMPL/progress: activity routes done + remaining TODO inventory

    activity routes done + remaining TODO inventory

  • Added
    slice52-O-NIGHT-TODO-IMPL/activity-routes: wire 4 missing UserActivityKind → router URL mappings

    User feedback: "kod içerisine daha önce yazdığımız TODO lara hiç

  • Changed
    slice52-O-NIGHT-TODO/progress: TODO cleanup audit ledger

    TODO cleanup audit ledger

  • Changed
    slice52-O-NIGHT-TODO: TODO/FIXME comment cleanup — project-wide grep zero

    User directive: "TODO ve benzeri yorumları ara, sonraya bırakılmış iş

  • Changed
    slice52-O-NIGHT-LOCALE/progress: morning report for Serkan — overnight locale + changelog ledger

    morning report for Serkan — overnight locale + changelog ledger

  • Changed
    slice52-O-NIGHT-LOCALE/scripts: preserve overnight locale-fill + translation scripts for reference

    These four ad-hoc scripts drove the overnight locale recovery:

  • Changed
    slice52-O-NIGHT-CHANGELOG: backfill 2 days of sprint commits to PublicChangelogEntry seed

    extract-sprint-changelog.py wrote 364 sprint rows to

  • Changed
    slice52-O-NIGHT-LOCALE/translate: native translations for core user-facing keys (14 locales)

    Followed up the placeholder fill (commit a3834ea4) with native-language

  • Changed
    slice52-O-NIGHT-LOCALE/fill: backfill 1311 missing locale keys with EN placeholder across 28 locales × 17 resources

    Audit found 1311 missing keys spread across 27 sibling locales (en-GB

  • Changed
    slice52-O-CHAT-WHISPER-FALLBACK/locale: ChatTranscript keys across 28 sibling locales

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-CHAT-LIBRARY/locale: EN master keys for /me/library source chip strip

    Adds the 11 EN-master entries the new SourceContext chip strip

  • Added
    slice52-O-CHAT-LIBRARY/library-ui: SourceContext chip strip in /me/library

    Surfaces the new SourceContext metadata as a user-facing filter so

  • Added
    slice52-O-CHAT-LIBRARY/composer: pre-upload pendingAttachments → Attachments[] + history-replay hydration

    Closes the chat-attachment data-loss bug: previously the composer

  • Added
    slice52-O-CHAT-WHISPER-FALLBACK/frontend: inline transcript caption + collapse on user message turn

    ChatTurn interface gains audioTranscripts[] with an expanded flag.

  • Added
    slice52-O-CHAT-WHISPER-FALLBACK/backend: capability check + Whisper transcript inject pre-call

    Add CapabilityKeys.AudioInput ("audio-input") so the fallback condition is

  • Added
    slice52-O-CHAT-LIBRARY/backend: chat-attachment purpose presign + GetMyLibrary SourceContextFilter

    The chat composer's prior path inlined image attachments as base64 data

  • Fixed
    slice52-O-BILLING-AUDIT/token-drift: costProjection includes conversation history

    Pre-fix, the composer cost badge only sized the draft text via

  • Fixed
    slice52-O-BILLING-AUDIT/gemini-stream: append alt=sse on streamGenerateContent

    `:streamGenerateContent` without `alt=sse` returns a JSON-array transport

  • Fixed
    slice52-O-BILLING-AUDIT/o3-cost: model-level pricing fallback when capability tag drifts

    GetActivePricingAsync now falls back to model-level pricing rows when the

  • Changed
    slice52-O-CHAT-CONTINUE/locale: fan-out Chat:Continue:* keys to 27 sibling locales

    Adds 9 new Chat:Continue:* keys (Button, Tooltip, Loading, Error, MaxReached,

  • Added
    slice52-O-CHAT-CONTINUE/frontend: Continue button + handler + en+tr locale master keys

    Angular proxy: +wasTruncated/continuedFromMessageId/hasContinuation on both DTOs;

  • Added
    slice52-O-OPENAI-REASONING: Responses API path for gpt-5 reasoning panel

    OpenAI Chat Completions silently consumes reasoning tokens for the

  • Added
    slice52-O-CHAT-CONTINUE/backend: finish_reason persist + ContinueAsync endpoint

    PersistAssistantMessageAsync now sets FinishReason/WasTruncated/ContinuedFromMessageId

  • Added
    slice52-O-CHAT-CONTINUE/entity: ChatMessage WasTruncated + FinishReason + ContinuedFromMessageId + HasContinuation fields

    Extend ChatMessage.Extended.cs with 4 new virtual properties (FinishReason,

  • Fixed
    slice52-O-CHAT-BUDGET-BANNER: hide when wallet has balance

    User reported the "Daily free limit reached — Charge wallet" yellow

  • Changed
    slice52-O-CHAT-MIC-WHISPER-locale: mic + Whisper keys across 28 sibling locales

    Propagate the new MediaRecorder + Whisper STT composer keys from en.json to all 28

  • Added
    slice52-O-CHAT-MIC-WHISPER: MediaRecorder + Whisper STT for chat composer mic

    Why: legacy Web Speech path produced transcript-only with no audio artifact

  • Fixed
    slice52-O-CHAT-UX2: default DeepSeek model + dismissable budget banner

    User reported two chat UX papercuts after the chat-footer fix landed:

  • Fixed
    slice52-O-CHAT-FOOTER: reasoning badge overlap + mic timer + Charge wallet 404 trio

    User-reported chat composer trio:

  • Changed
    slice52-O-CHANGELOG-locale: 38-sprint fan-out across 28 sibling locales

    Propagated Changelog:Sprint:<slug>:Title and :Body keys for the 38 new sprints

  • Changed
    slice52-O-VERSION-BUMP: 1.0.0 → 1.1.0-phase1-launch

    Minor bump for the Phase 1 feature wave summarized in the changelog backfill

  • Changed
    slice52-O-CHANGELOG-BACKFILL: absorb 38 new sprints into PublicChangelogEntry seed

    Ran extract-sprint-changelog.py against HEAD.

  • Added
    slice52-O-WORKFLOW-QUALITY: GenerateTextAsync + PreferQuality routing for workflow runners

    - New IChatPipelineAppService.GenerateTextAsync endpoint (creative-writer

  • Added
    slice52-O-LOCALE-FANOUT: WorkflowRuns:CancelRun keys → 27 sibling locales

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Fixed
    slice52-O-BUNDLE-ROUTE/template-literal: escape backticks in My Bundles empty-state HTML comment

    Comment introduced in 57c15021 used backticks around '/marketplace' which

  • Fixed
    slice52-O-LOCALE-SWEEP/workflow-template-keys: backend prefix workaround + missing Birthday Audio/Cinema/ProvidedLyrics/EstimatedCost keys

    **Bug 1 — Card titles render raw `WorkflowTemplate:foo:Title` keys:**

  • Added
    slice52-O-RESUME-APPROVAL: add OutputsJson to WorkflowStepExecution extension

    Per-step output variable snapshot so the resume-aware wave loop can

  • Fixed
    slice52-O-APPROVAL-PAUSE-REMOVE: drop lyrics-approval HumanApproval node from birthday trio

    In-memory wait loop in WorkflowExecutorAppService.RunWaveLoopOnRowAsync (line 1797) is

  • Changed
    slice52-O-LYRICS-APPROVAL-locale: LyricsApproval 26-locale fan-out

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Added
    slice52-O-LYRICS-APPROVAL: preview/approve/edit/regenerate gate between gen-lyrics and gen-music

    Inject HumanApproval (kind=12) node into all three birthday catalog

  • Changed
    slice52-O-CINEMA-locale: BirthdayCinema 26-locale fan-out

    WorkflowTemplate:BirthdayCinema:Title + :Description propagated to all 26

  • Added
    slice52-O-CINEMA: VideoCapabilityRunner (Sora-2 sync poll) + birthday-cinema template (premium tier ~$12)

    User wanted the third leg of the birthday trio: "isteyen kullanıcı video

  • Added
    slice52-O-LYRICS-OVERRIDE: optional user-provided lyrics short-circuits AI gen-lyrics step

    Birthday workflows expose a textarea field 'provided_lyrics'; when filled

  • Changed
    slice52-O-TEMPLATE-TRIO-A-locale: BirthdayAudio + EstimatedCost 26-locale fan-out

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-UPLOAD-GUARD-locale: WorkflowWizard:WaitingForUploads 26-locale fan-out

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Fixed
    slice52-O-UPLOAD-GUARD: wizard Run/Preview buttons gated on hasActiveUploads() so character photo race no longer ships filenames as Guids

    THE photo-binding bug.

  • Fixed
    slice52-O-MEDIACOMPOSITE-LIBRARY: register composite mp4 as MediaAsset at merge time so it lands in /me/library even if QC escalates or persist cancels

    User observation: "library bakınca sadece image görüyroum ne ses var ne

  • Fixed
    slice52-O-FFMPEG-SLIDESHOW/D19: build proper concat filter + drop -shortest for image-only slideshows so merge produces a real mp4, not a 46 KB empty container

    User report: merge step "Succeeded" but composite_url_duration_seconds

  • Fixed
    slice52-O-RUN-STATUS-TRUTH/D12: run-detail truthfulness — parent RunStatus computed from worst step status, not just abortReason

    User report: "succeeded yazıyor da bunlar success degil ki hata veriyor

  • Fixed
    slice52-O-BUNNY-AUTH-fu/no-region-prefix: drop regional prefix from Bunny storage URL — 401 cause

    User directive 2026-05-25 — region prefix produced 401 Unauthorized on

  • Fixed
    slice52-O-BUNNY-AUTH/merge-storage-read: route Bunny CDN URLs through Storage API with AccessKey header so merge can actually read its inputs

    Root cause (from Note column added in 0a9e941f):

  • Fixed
    slice52-O-MERGE-FANOUT/multi-url-tracks: split comma-joined sourceVar into per-URL tracks so birthday-song-video merge stops cancelling

    Root cause: ImageCapabilityRunner with n>1 packs all generated URLs as a

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/workflow-wizard: add "From Library" path next to file inputs

    Adds an "Or pick from your library" link/button beneath the workflow-wizard

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/me-audio: wire STT source to two-tab MediaPicker

    Replaces the /me/audio direct file input (audio.component.html line 17 —

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/me-image-mask: swap bespoke mask picker for universal MediaPicker

    Replaces the /me/image Edit-tab mask widget (bespoke library-only modal +

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/me-video: swap PC-only refs for two-tab picker

    Replaces the inline "Drop an image or click to upload" widget for character

  • Added
    slice52-O-MEDIA-PICKER-UNIVERSAL/scaffold: shared MediaPickerComponent with PC + Library tabs

    Universal two-tab picker that replaces PC-only uploads across /me/* surfaces.

  • Fixed
    slice52-O-GOOGLE-VIDEO-CLIENT/veo-3-veo-3-1-async-adapter: register IAiVideoClient for providerKey "google" so Veo-3 + Veo-3.1 stop silent-dropping from /me/video catalog

    Pre-fix VideoPipelineAppService.GetCapabilitiesAsync (commit 5e39d434)

  • Fixed
    slice52-O-REPLICATE-VIDEO-SEED/kling-hunyuan-ltx: seed 3 Replicate video models with pinned SHAs + 2.0x margin pricing

    Pre-fix /me/video catalog query returned only sora-2 + sora-2-pro because no

  • Fixed
    slice52-O-MUSIC-SLIDER-SYNC-i18n/duration-max-hint: add Music:Form:DurationMaxHint to 28 sibling locales (en already present)

    Native translation per locale (prefix only; the numeric seconds cap

  • Fixed
    slice52-O-MUSIC-SLIDER-SYNC/duration-cap-aware-slider: bind /me/music + /me/video duration slider max to the selected model's real ceiling

    Pre-fix the duration slider on /me/music was hardcoded max=120s.

  • Fixed
    slice52-O-VIDEO-CATALOG/dynamic-model-picker: drive /me/video model dropdown from AiModel+AiModelCapability catalog instead of hardcoded sora-2 stub

    Pre-fix VideoPipelineAppService.GetCapabilitiesAsync returned a single

  • Fixed
    slice52-O-MUSIC-DURATION-CAP/per-model-billing-truth: cap requested duration at the model's real ceiling, bill only for delivered seconds

    User generated music with `requestedDuration=120s` against Riffusion

  • Fixed
    slice52-O-RIFFUSION-OBJOUT/replicate-object-output: handle Object-shaped Replicate output (riffusion multi-stream + future schemas)

    User got

  • Fixed
    slice52-O-RIFFUSION-PIN/replicate-version-sha: pin riffusion/riffusion model version SHA so picks past musicgen route cleanly

    User got the UFE

  • Fixed
    slice52-O-REPLICATE-401-fu/actionable-error: distinguish 401 / 402 / 429 / other in Replicate prediction failure UFE

    User got HTTP 401 from Replicate after triggering musicgen and the

  • Added
    slice52-O-MUSIC-MODELS-SEED/replicate-music-trio: seed musicgen-medium + musicgen-large + riffusion via Replicate

    User reported the /me/music model dropdown stayed empty even with

  • Fixed
    slice52-O-MUSIC-ROUTE-fu/models-endpoint-404: correct music model picker URL — /api/byokvault/my-available-models/by-capability

    Console showed:

  • Fixed
    slice52-O-MENU-VISIBILITY-fu/route-guards: drop route-level permissionGuard for /me/video + /me/music

    Carry-forward from 05999c1c.

  • Fixed
    slice52-O-MENU-VISIBILITY/video-music-sidebar: drop requiredPolicy gates from /me/video + /me/music — match Image/Voice/Audio pattern

    User reported video + music menus missing from My Account sidebar even

  • Added
    slice52-O-MUSIC-MENU/locale-fanout: propagate 43 Music keys to 28 sibling locales

    Mirrors fc625886 EN seeding into ar/cs/de/de-DE/en-GB/es/fi/fr/hi/hr/

  • Added
    slice52-O-MUSIC-MENU/angular: /me/music component + sidebar entry + EN locale

    Angular standalone component mirrors /me/voice + /me/image shape:

  • Added
    slice52-O-MUSIC-MENU/backend: MyMusicPipelineAppService for /me/music

    User-facing music generation pipeline mirroring ImagePipeline pattern:

  • Fixed
    slice52-O-VIDEO-MENU-FIX: default-grant VideoPipeline.MyGenerate to user role

    The AuthoringPermissions.VideoPipeline.MyGenerate comment says the

  • Fixed
    slice52-O-MERGE-RESILIENCE/ffmpeg-defensive-trio: track-attributed errors + skip-empty + Bunny CDN retry

    Second-pass merge failure after b9dm94er4 + 21983ef0 still surfacing

  • Added
    slice52-Q-MODEL-ONBOARDING/locale-fanout: propagate 60 ModelOnboarding keys to 28 sibling locales

    Adds the Sprint 52-Q ModelOnboarding admin UI strings (Menu:ModelOnboarding +

  • Added
    slice52-O-MARGIN-AUDIT-LOCALE-FANOUT/cost-markup-i18n: 32 keys × 28 sibling locales for AI cost markup admin page

    Fans out the 32 EN keys added in commit be0190b2 (admin /cost-markup

  • Added
    slice52-O-REAL-COST-AUDIT/locale-fanout: propagate margin-reconciliation labels to 28 locales

    39 MR keys (Menu:Admin:MarginReconciliation, Permission:MarginReconciliation, MarginReconciliation:*) added to every sibling locale under src/ToRun.Domain.Shared/Localization/ToRun/.

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-D-bulk-import-export: JSON snapshot round-trip for providers + models + stubs

    Sprint 52-Q-MODEL-ONBOARDING Phase D — round-trip bulk-import / bulk-export

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-C-admin-ui: /admin/model-onboarding wizard for providers, models, stubs

    Sprint 52-Q-MODEL-ONBOARDING Phase C — host-admin Angular UI at

  • Fixed
    slice52-O-MARGIN-AUDIT/dto-leak-jsonignore: [JsonIgnore] ResolvedModelDto.AppliedMarkupMultiplier

    Guardrail sweep finding from Phase D of the 52-O-MARGIN-AUDIT sprint.

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-B2-generic-rest-client: GenericRestClient (chat path) + RegisterClientStubAsync

    Sprint 52-Q-MODEL-ONBOARDING Phase B.2 — adds the GenericRestClient that

  • Added
    slice52-O-MARGIN-AUDIT/admin-cost-markup-ui: Angular page for runtime markup tweak

    Phase C UI of the 52-O-MARGIN-AUDIT sprint.

  • Added
    slice52-O-REAL-COST-AUDIT/phase-C-pipelines: pipeline AppService plumbing for ops ledger

    Sprint 52-O-REAL-COST-AUDIT phase C — each pipeline AppService that wraps

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-B1-stub-entity: AiProviderClientStub aggregate + Mongo repo

    Sprint 52-Q-MODEL-ONBOARDING Phase B.1 — scaffolds the AiProviderClientStub

  • Added
    slice52-O-MARGIN-AUDIT/admin-cost-markup: host-admin AppService + ISettingProvider bridge

    Phase C of the 52-O-MARGIN-AUDIT sprint.

  • Added
    slice52-Q-MODEL-ONBOARDING/phase-A-onboarding-AppService: host-admin composer for AiProvider/AiModel/Capability/Pricing

    Sprint 52-Q-MODEL-ONBOARDING Phase A — adds AdminModelOnboardingAppService

  • Added
    slice52-O-REAL-COST-AUDIT/phase-B-providers: ProviderUsageSnapshot + 6 client parsers

    Sprint 52-O-REAL-COST-AUDIT phase B — every IAi*Client now stamps a

  • Added
    slice52-O-REAL-COST-AUDIT/phase-A-schema: add 4 ops-only columns to BillingRecord

    Sprint 52-O-REAL-COST-AUDIT phase A — parallel server-side-only ledger so

  • Added
    slice52-O-MARGIN-AUDIT/markup-options: AiCostMarkupOptions + routing snapshot multiplier

    Phase B of the 52-O-MARGIN-AUDIT sprint.

  • Fixed
    slice52-O-MARGIN-AUDIT/seed-bake-margin: 268 AiModelPricing rows bumped to ≥1.5x/2.0x real cost

    Phase A of the 52-O-MARGIN-AUDIT sprint.

  • Fixed
    slice52-P-SHARE-fu/slug-partial-index-operator: swap \$ne for \$type in unq_MediaAsset_Slug partial filter — DbMigrator unblocked

    Error from DbMigrator on every restart:

  • Fixed
    slice52-O-MARGIN-fu/runner-fallback-sweep: bump Image / ImageEdit / TTS fallback rates +50% per margin-baked-in rule

    Carry-forward from b4ab9daf music_v1 seed bump + feedback_pricing_

  • Fixed
    slice52-O-MARGIN/music-v1-bake-margin: bump Eleven Music v1 seed from \$0.002 to \$0.0035 per-second (+110% margin) per user directive

    User feedback after 21983ef0 landed: looked at ElevenLabs analytics

  • Fixed
    slice52-P-SHARE/locale-fanout: 37 keys × 28 sibling locales for shared-media + library-share dialog

    - ToRun resource: 36 keys (Library:Share:* dialog + SharedMedia:* public page)

  • Added
    slice52-O-LIBRARY-ARTIFACT/workflow-output-to-library: ArtifactSave registers MediaAsset row → /me/library surfaces workflow outputs

    Pre-fix: workflow ArtifactSave nodes uploaded blobs to Bunny and stuffed

  • Fixed
    slice51-M-fu2/legal-v2-natives-full: close the last 2 placeholder locales — ar v2.0 + vi native

    Sprint 51-M-fu2 completion pass.

  • Fixed
    slice52-O-IMG-SRC/workflow-edit-image: route uploaded photos through image-edit pipeline

    Birthday-song-video template's `photos` multiphoto field reached Bunny CDN

  • Fixed
    slice51-M-fu2/legal-v2-natives: 23 native v2.0 legal translations replace placeholders

    Drops native v2.0 About/Terms/Privacy/Contact for 10 brand-new locales

  • Fixed
    slice52-A-M5/enhance-prompt-outbox: publish chat-message-recorded.v1 from EnhancePromptAsync so UsageDailySummary counts prompt-enhance token usage

    EnhancePromptAsync wrote a BillingRecord and settled the budget but never

  • Fixed
    slice52-O-PRICING-fu/image-gen-overcharge: kill the 500x gpt-image-1-mini per-image overcharge

    Root cause (two layers, one bug):

  • Fixed
    slice52-A-H4/load-history-graph-lookup: collapse the N+1 ParentMessageId walk into a single $graphLookup aggregation

    LoadHistoryAsync previously walked the leaf → ancestor chain by issuing one

  • Changed
    52-O-NIGHT/progress-ledger: bổ sung mục quét 52-O qua đêm vào PROGRESS.md

    Theo CLAUDE.md Rule 10.

  • Changed
    52-O-NIGHT/locale-validation-report: báo cáo tương đồng theo từng tài nguyên × từng locale sau khi 6 agent dịch thuật chạy song song

    Đầu ra của `python platform-plan/scripts/_validate-29-locales.py` sau khi tất cả 27 lô dịch thuật anh chị em đã hoàn thành + bước loại bỏ BOM:

  • Changed
    52-O-NIGHT/translator-batches: 25 lô dịch thuật bản ngữ đã hoàn thành — tổng cộng ~7,800+ khóa trên 52 tệp

    Các lô từ 6 agent dịch thuật Sonnet chạy song song (tất cả đã được commit vào repo từ các lượt trước + nhóm cuối cùng vừa được đẩy):

  • Added
    slice52-O-NIGHT-fu/image-edit-progress-bar: bring Edit tab's staged-progress UI up to Generate-tab parity

    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…

  • Fixed
    slice52-O-NIGHT-fu/workflow-runner-principal-scope: restore triggering user's principal at wave-loop entry so background workers don't trip AbpAuthorizationException on every [Authorize]-gated capa...

    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…

  • Fixed
    slice52-O-12-locale-2/workflow-select-option-remaining-19-locales: populate native-language translations for the 19 sibling locales that shipped as empty stubs in 0da3c077

    Completes the locale-fanout begun in 0da3c077 (Sprint 52-O-12-locale).

  • Changed
    52-A/audit: kết quả code-review pipeline chat + InAppAssistant — 4 Cao + 8 Trung bình + 5 Thấp

    Kiểm tra chỉ đọc đối với ChatPipelineAppService + InAppAssistant + các client nhà cung cấp + ProviderFallbackChain.

  • Changed
    slice52-O-12-locale-2: partial native-language translations for 7 sibling locales (nl, sv, fi, is, en-GB, ru, pl-PL)

    7 of 19 stub locales populated; 12 remaining (cs, sk, hu, ro-RO, hr, sl, ko, zh-Hans, zh-Hant, hi, ar, vi).

  • Changed
    slice52-O-18-fu/lifecycle-legacy-available-28-locales: propagate "Legacy Available" enum translation to the 28 sibling locales

    Sprint 52-O-18 added ModelLifecycleStatus.LegacyAvailable (used to mark Claude 4.5/4.1/Opus 4.6/Sonnet 4.5 etc.

  • Changed
    slice52-O-19-G/sprint-wrap: point SunoMusicClient stub's "use the live music provider instead" guidance at ReplicateGenericClient ('replicate') rather than the deprecated MusicgenMusicClient ('musi...

    Sprint 52-O-19 (provider runtime hardening) complete — 7 commits land:

  • Added
    slice52-O-19-F/credential-normalization: close the per-model ProviderKey trap by adding a providerKey → canonical-providerKey normalization map to CredentialResolver.GetApiKeyAsync — exact-match lo...

    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…

  • Added
    slice52-O-19-E/resilience-circuit-breaker: introduce per-(providerKey, capabilityKey) circuit breaker + intra-provider 429 backoff + chain length cap + 4xx-bad-shape carve-out so a thrashing upstre...

    New IProviderCircuitBreaker (Application.Contracts/AiClient/Resilience/) + default ProviderCircuitBreaker impl backed by IDistributedCache<CircuitState,string> keyed by torun:byok:circuit:{providerKey}:{capabilityKey} wi…

  • Changed
    slice52-O-18-rollout: integrate 25-provider AI catalog seed refresh — 8 commits covering AiProvider/CapabilityKeys/EnPricingUnit/EnProviderTier/ModelLifecycleStatus expansions + ~60 new 2026 models...

    # Conflicts:

  • Added
    slice52-O-19-D/elevenlabs-client: introduce ElevenLabsClient — single adapter that covers TTS (eleven_multilingual_v2/eleven_flash_v2_5/eleven_v3), text-to-music (music_v1 GA endpoint), and Scribe...

    ProviderKey="elevenlabs".

  • Added
    slice52-O-19-C/replicate-generic-client: introduce ReplicateGenericClient — single adapter that serves every Replicate-hosted modality (image, video, music, TTS) through the uniform /v1/predictions...

    ProviderKey=\"replicate\".

  • Added
    slice52-O-18-rollout/payload-grammar-2026: seed PayloadGrammarJson on the 2026 image / video / audio / 3D capability rows so resolver picks DB row over static fallback

    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…

  • Added
    slice52-O-18-rollout/pricing-2026-refresh: seed pricing for the ~60 new 2026 models so AiModelPricing reflects the May 2026 research roster

    Adds ~60 new pricing rows in the 520180XX-...

  • Added
    slice52-O-19-B/wire-protocol-resolver: introduce IWireProtocolResolver + cache-resilient default impl that maps an AiProvider.ProviderKey → wire-level metadata (Protocol enum, BaseUrl, IsActive/IsD...

    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…

  • Added
    slice52-O-18-rollout/capability-joins: wire the ~60 new 2026 models to their capability sets + bind the new capability anchors to existing flagships

    SeedSlice52O18Async() runs at the end of SeedAsync regardless of count gate (idempotent EnsureCapabilityRowAsync calls, deterministic XOR-based GUIDs so reruns are no-ops).

  • Added
    slice52-O-18-rollout/aimodels-2026-refresh: patch lifecycle statuses + add ~60 new flagship models so the catalog reflects the May 2026 25-provider research roster

    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-…

  • Added
    slice52-O-19-A/aiprovider-wire-protocol-enum: introduce EnWireProtocol (12 values: OpenAiCompat | AnthropicNative | GeminiNative | Replicate | ElevenLabs | StabilityNative | BedrockConverse | Bedro...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Added
    slice52-O-19/aiprovider-wire-protocol-enum: tag each AiProvider with its wire-level HTTP family so the adapter factory resolves the right IAi*Client from a DB row instead of a hand-rolled per-provi...

    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…

  • Added
    slice52-O-16-a/workflow-async-queue: convert workflow execution from synchronous HTTP to queued + worker-processed so a multi-minute DAG no longer blocks the request

    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…

  • Added
    slice52-O-18-rollout/lifecycle-legacy-available: add LegacyAvailable to ModelLifecycleStatus so still-callable-but-not-recommended models can be marked correctly

    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.

  • Added
    slice52-O-18-rollout/pricing-tier-enums: add PerCitationToken/PerReasoningToken/PerRun units + Priority/OffPeak/SelfHost tiers for the May 2026 catalog

    EnPricingUnit grows 12 → 15 to model 2026 billing meters the legacy enum couldn't represent.

  • Added
    slice52-O-18-rollout/capability-keys-36: expand CapabilityKeys + Capabilities seed to cover the 22 new 2026 capabilities surfaced by the May research roster

    The 2026 model generation introduced capabilities that the old 18-key vocabulary couldn't address: Claude's adaptive vs.

  • Added
    slice52-O-18-rollout/aiproviders-25: re-add stability + add fireworks/deepinfra so the catalog reflects the May 2026 25-provider research roster

    23 → 25 providers (stability re-introduced after slice 4xx removal, two OSS-serving newcomers fireworks + deepinfra added).

  • Added
    slice52-O-17-fu/openai-image-grammar-admin-form: expose PayloadGrammarJson (and the previously hidden InputBoundsJson) on the AiModelCapability create/edit modal — textarea + "Validate JSON" button...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Added
    slice52-O-17-fu/openai-image-grammar-seed: seed PayloadGrammarJson on the image-generation join rows for dall-e-3 and gpt-image-1 — mirrors the existing static OpenAiImageModelGrammar entries so fr...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-17/openai-image-grammar-db-resolver: migrate the OpenAI image-model payload grammar (sizes, quality vocab, accept/reject lists) from the static OpenAiImageModelGrammar.ByPrefix dispatch o...

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

  • Changed
    slice52-O-15-fu/openai-image-grammar-registry: replace inline model-quirk branching with a data-driven OpenAiImageModelGrammar table — new models = one dictionary row, no client code touched

    Pre-52-O-15-fu the OpenAiImageClient hand-coded every model-specific quirk inline.

  • Added
    slice52-O-14-fu/budget-preview-wizard-modal: wire pre-flight budget preview + LeptonX confirm modal in the workflow wizard so users consent before the daily-cap-closed wallet charge

    Backend (fu1): new POST /api/subscription/budget-preview/preview wraps IBudgetGuard.CheckAsync read-only.

  • Fixed
    slice52-O-15/openai-image-size-snap: snap arbitrary WxH to the closest model-supported preset by aspect ratio — workflow 1280x720 no longer hits HTTP 400

    OpenAI image API rejects unknown sizes outright with HTTP 400 + "Invalid size 'WxH'.

  • Fixed
    slice52-O-12-locale/workflow-select-option-28-locales: seed native-language translations across the platform's 28 sibling locales

    WorkflowSelectOptionsDataSeedContributor now does an idempotent per-(option, locale)

  • Added
    slice52-O-14/budget-banner-wallet-after-daily-cap: emit Budget:UsingWalletAfterDailyCap so chat banner warns user the free-tier daily slot closed + wallet is funding the call

    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…

  • Fixed
    slice52-O-13/budget-daily-cap-wallet-bypass: daily cap gates bucket path only — wallet credit is paid spend, never throttled by cap

    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.

  • Added
    slice52-O-12d/workflow-select-option-admin: host-admin CRUD UI for the workflow input-form catalog (add categories without code deploy)

    Sprint 52-O-12d completes the catalog story started by 52-O-12a (entity)

  • Fixed
    slice52-O-12c/workflow-template-spec-lookup-backfill: align backend seeded templates with the new spec lookup/multiSelect syntax

    Hygiene-only follow-up to 52-O-12a/b.

  • Fixed
    slice52-O-12-translations-stub/build-break: add empty WorkflowSelectOptionTranslations.Map so contributor compiles

    User added a per-locale enrichment block to

  • Fixed
    slice52-O-12-di/workflow-select-option-localization-aggregate-root: change to FullAuditedAggregateRoot so ABP auto-registers IRepository

    Sprint 52-O-12a follow-up — DI bootstrap fail

  • Added
    slice52-O-12b/workflow-wizard-lookup-render: wizard fetches catalog options via lookup + Language category seed + 7 template inputs migrated

    Phase B (Angular wizard) for the 52-O-12a data-driven dropdowns.

  • Added
    slice52-O-12a/workflow-select-options-backend: catalog entity + ~430-option English seed + spec lookup/multi-select fields

    Phase 1 backend stack for data-driven workflow wizard dropdowns.

  • Fixed
    slice52-O-10/cache-manager-abp-key-wrap: substring SCAN + drop cache: gate so admin UI surfaces every category + Browse finds keys

    Backend bug — Cache Manager shows 3 categories of ~10+, every Browse empty

  • Fixed
    slice52-O-9/bunny-stream-library-message: rewrite missing-config error as admin-actionable copy

    UX bug — cryptic exception copy on /media/video-stream

  • Fixed
    slice52-O-8/wallet-recent-tx-empty: drop redundant IsActive predicate + add observability — recent transactions list now surfaces history

    Backend bug — empty Recent transactions list with non-zero balance

  • Fixed
    slice52-O-3/workflow-editor-theme-tokens: drop hardcoded #fff / hex / fixed rgba in favour of Bootstrap 5.3 theme tokens

    UI bug — multi-theme breakage

  • Fixed
    slice52-O-2/workflow-editor-i18n-en: merge 134 missing Workflow* keys into ToRun resource

    Backend bug — entire workflow editor surface ships raw keys

  • Fixed
    slice52-O-1/workflow-spec-polymorphic-default: accept number/bool tokens on string Default + map int/float legacy types

    Backend bug — every workflow template run failed

  • Fixed
    slice52-M/title-gen-reasoning-effort: gate reasoning_effort field on isReasoningOrGpt5 — close 8th regression

    Exception screenshot from Serkan (2026-05-23):

  • Changed
    slice52-L/provider-quirks: formalise OpenAI-compat subclass extension contract — every provider owns its own quirks

    Serkan's motto (2026-05-23): "biz 25 farklı AI provider destekliyoruz...

  • Fixed
    slice52-K/title-gen-max-tokens: split max_completion_tokens/max_tokens by client class — title-gen finally lands on DeepSeek

    THE ACTUAL ROOT CAUSE of the seven "title-gen yine bozdun" reports —

  • Fixed
    slice52-J/title-gen-budget: bump title-gen MaxOutputTokens 1024→4096 — close 7th regression on reasoning-only deployments

    52-I excluded DeepSeek V4 from cheap-model picks, but on a deployment

  • Fixed
    slice52-I/title-gen-deepseek-v4: extend reasoning-class filter to deepseek-v4-pro/flash — close 6th title-gen regression

    50-LLL-2 added an ExcludeReasoningModels filter so the cost-saving

  • Fixed
    slice52-D-7-fu/audit-chain-named-args: named-arg call site for ExecuteServerToolsAsync to clear stale Roslyn binding cache

    User reported VS Error List showing CS1501 "No overload for method

  • Fixed
    slice52-D-7/audit-chain: hash-chained AgentAuditEntry per server-tool invocation

    F15 (root cause: AgentAuditEntry table unused for the bubble's

  • Fixed
    slice52-D-6/turn-svc-correctness: real daily-turn cap + anon graceful degrade + localized approval fallback + token-budget history truncate

    Four backend regressions in InAppAssistantTurnAppService surfaced

  • Fixed
    slice52-C-6/chat-reasoning-indicator: surface reasoning-class model selection in the composer

    Audit #14 — confirm Sprint 51-A's reasoning opt-in path is per-request,

  • Fixed
    slice52-F/console-noise-2: suppress NG0505 dev-only hydration warning + bump SignalR server timeout 30s→60s

    Two more console warnings flagged in /me/chat after 52-E:

  • Fixed
    slice52-C-5/chat-composer-polish: persisted model+tone + real-rate cost projection + locale-aware voice + SSE assert

    Bundles four small chat-pipeline polish fixes from the audit (#10, #11,

  • Fixed
    slice52-D-5/sse-controller-recovery: guard SSE recovery write against double-fault swallowing original exception

    F10 (root cause: bare WriteSseEventAsync in the controller's outer

  • Fixed
    slice52-D-4/bubble-ux-a11y: pretty-print approval args + USD currency-code pill + dialog a11y

    Three UX / a11y polish items from the sprint 52-D code-review pass.

  • Fixed
    slice52-D-3/bubble-dom-guards: broaden modal click-guard + skip bubble inputs in page-context

    Two DOM-side hygiene fixes from the sprint 52-D code-review pass:

  • Fixed
    slice52-D-2/bubble-races: serialise session start + close-cleanup dropdown bookkeeping

    Three concurrency / state-coherence regressions in the bubble component

  • Fixed
    slice52-D-1/bubble-sse-resilience: token refresh + typed 401 banner + parseSseFrame robustness

    Three SSE-stream regressions in the InAppAssistant bubble shipped with

  • Fixed
    slice52-C-4/chat-i18n: extract hardcoded UI strings to Agent locale keys

    Three chat-pipeline surfaces were emitting hardcoded strings in violation

  • Fixed
    slice52-E/console-noise: suppress ABP localization separator warnings at bootstrap

    Serkan flagged ~148 identical "The localization source separator (::)

  • Fixed
    slice52-C-3/chat-backend: real fallback provider lookup + title-gen SourceEntityId + LoadHistory N+1 doc

    C5: ResolveFallbackProviderKey returned the literal string "google"

  • Fixed
    slice52-C-2/chat-onpush: switch chat-pipeline component to OnPush change detection

    Every state write in chat-pipeline.component.ts goes through a Signal

  • Fixed
    slice52-C-1/chat-lifecycle-leaks: plug route + history subscribe leaks + harden streamTurn re-entry

    Three lifecycle / concurrency defects in the chat-pipeline component, all

  • Fixed
    slice52-B/chat-bottom-gap: tighten chat shell chrome budget + switch vh→dvh

    Serkan flagged a visible dead band between the composer card and the

  • Fixed
    slice51-Z/changelog-manifest: sync embedded DbMigrator manifest with extract script output

    ChangelogBackfillDataSeedContributor reads from the embedded resource

  • Fixed
    slice51-X/contact-form: new ContactSubmission entity + sweep all public email exposure

    > "bu contact formunda bütün maillerimizi açık açık yazdık spammerlara mail

  • Fixed
    slice51-V-fu/i18n-pricing-v2: propagate Subscription pricing copy across 28 SupportedLanguages

    Follow-up to Sprint 51-V (commit 373d84d9) which rewrote en.json only.

  • Fixed
    slice51-W/persona-seed: retire demo personas entirely — kill ghost-click on /p/echo

    Smoke at 2026-05-22 showed `/personas` listing "Echo the Storyteller"

  • Fixed
    slice51-V/pricing-alignment: features render + price-row alignment + 51-R/51-P-compliant copy

    Three compounding bugs from 51-S → 51-U all visible in the same screenshot:

  • Fixed
    slice51-U/pricing-catalog: rebuild /pricing 1:1 against canonical LeptonX pricing.html

    51-S / 51-T drifted from the catalog-first vocabulary and shipped a

  • Fixed
    slice51-T/pricing-fix: entity-driven contact-sales + revert to 4-col grid + Partner strip

    Cleanup of regressions introduced by 51-S.

  • Fixed
    slice51-S-fu/i18n-pricing-plan-custom: propagate Pricing:Plan:Custom across 28 SupportedLanguages

    Sprint 51-S (28e76a7d) shipped lib-pricing-grid with a contact-sales price cell that

  • Fixed
    slice51-S/pricing-unification: single <lib-pricing-grid> for /pricing + /me/subscription/upgrade + Web.Public

    ONE pricing surface for all 6 plans (Free / Starter / Pro / Business /

  • Fixed
    slice51-R/plan-descriptions: rewrite SubscriptionPlan descriptions — value-first copy, no token counts, no share %, no specific limits

    User mandate (2026-05-22): "Bu description'ları biraz zenginleştir.

  • Fixed
    slice51-R/external-links: target=_blank + rel=noopener noreferrer on every off-origin anchor

    User mandate (2026-05-22): public surfaces leaked the visitor to a new

  • Fixed
    slice51-Q/pricing-render-from-dto: mirror authed /me/subscription/upgrade pattern — render plan.title + plan.audience directly, drop the broken locale-key indirection

    User report (2026-05-22): "Login durumdayken pricing geliyor, public

  • Fixed
    slice51-P/pricing-trial-removed: kill the trial vector + fix planKey case mismatch on title localisation

    Two user-flagged issues on the same screenshot (2026-05-22, anon

  • Fixed
    slice51-O/pricing-public: public /pricing now actually shows plan cards (URL action suffix + BillingCycle case match)

    User report (2026-05-22): "Login durumdayken pricing geliyor ama public

  • Fixed
    slice51-N-fu/languages-reconcile: custom seed contributor reconciles 20→29 Languages on every DbMigrator run

    User report after 51-N landed: "DbMigrator çalıştırdım, proje yeniden

  • Fixed
    slice51-N/abp-languages-29: expand AbpLocalizationOptions.Languages 20→29 to match canonical SupportedLanguages

    User report (2026-05-22): "ABP bunu hala 20 dil görüyor ve dilleri açtığımızda 20 dil çıkıyor.

  • Fixed
    slice51-M-fu1/legal-29locales: expand legal-doc matrix to all 29 SupportedLanguages with localized v2.0-pending banners

    User correction (2026-05-22): "bizim platformumuz 29 dilde." Legal seeds

  • Fixed
    slice51-M/legal-v2: comprehensive About/Terms/Privacy/Contact v2.0 with version-upgrade seed logic

    User directive (2026-05-22): About too thin, Terms must hold up against

  • Fixed
    slice51-I/51-J/51-K: torun.app→torun.ai sweep + workflow-template 404 + InAppAssistant /start 500

    Three connected anasayfa bugs landed in the same commit because they all

  • Changed
    slice51-changelog: pre-release changelog seed refresh — extract + propagate 51-* sprints

    User mandate from 2026-05-22: "release çıkmadan önce change loglarının seed

  • Fixed
    slice51-F/51-H/legal-pricing-mvc: public routes + slug parity — BUG-6, 7, 9 closeout

    Three connected bugs from the anasayfa list (platform-plan/BUG_LIST_ANASAYFA_2026-05-22.md):

  • Fixed
    slice51-E/personas: View profile button + Persona: key prefix + trim seed to 1 demo (Echo)

    BUG-3+4+5 from anasayfa list closed.

  • Fixed
    slice51-D-fu/legal-locale: rename Legal:: → Legal: keys + use ToRun resource

    Follow-up to 51-C — my own mistake.

  • Fixed
    slice51-D/anon-billing: seed UnAuthenticatedUser + wire public chat + Public::Chat + Profile::NotFound locale keys

    BUG-1 closeout from anasayfa bug list (platform-plan/BUG_LIST_ANASAYFA_2026-05-22.md).

  • Fixed
    slice51-C/homepage-shell: public sidebar menus + Legal:: keys + scroll fix + reasoning opt-in across normal chat

    BUG-2 closeout (3-part user report + 1 rule refinement):

  • Fixed
    slice51-B/iaa-thinking: per-second SSE thinking event + bubble elapsed-time label

    BUG-1 part 2.

  • Changed
    slice50-RRRR/other: translate authoring placeholders — 149 keys × 3 locales (ar, hi, vi)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/cjk: translate authoring placeholders — 149 keys × 4 locales (ja, ko, zh-Hans, zh-Hant)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/slavic-south-hu: translate authoring placeholders — 149 keys × 3 locales (hr, sl, hu)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/iberian-romance: translate authoring placeholders — 149 keys × 3 locales (pt, pt-BR, ro-RO)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/english-nordic: translate authoring placeholders — 149 keys x 3 locales (en-GB, sv, fi)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/romance: translate authoring placeholders — 149 keys × 3 locales (fr, es, it)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/slavic-east: translate authoring placeholders — 149 keys × 4 locales (ru, pl-PL, cs, sk)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Changed
    slice50-RRRR/germanic-north: translate authoring placeholders — 149 keys × 4 locales (de, de-DE, nl, is)

    - Workflow editor, wizard, templates, validation, preview, run history strings

  • Added
    slice50-QQQQ/changelog-auto-emit: post-commit hook + append-sprint-row script (ADR-042 implementation)

    Closes ADR-042 — previously Proposed, now Accepted.

  • Fixed
    slice50-G-fu2: personas-index clear-all button auto-width + right-align on md+

    `col-md-1 text-end` clipped the localized "Clear all" label at

  • Fixed
    slice50-PPPP/outbox-idempotency: HashChainAuditJob MessageKey bucketised by hour + tampered-ids hash

    Sprint 50-PPPP audit — most MessageKey expressions across the codebase

  • Changed
    slice50-OOOO/capability-keys: consolidate capability key strings into ToRun.ByokVault.Capabilities.CapabilityKeys

    TEST_PLAN §4 deferred — capability key string literals (text-chat,

  • Fixed
    slice50-G-fu: persona-profile/-index touch-ups (linter + wrapper)

    - persona-profile.component.ts: drop outer `lpx-content-container py-4` wrapper

  • Changed
    slice50-workflow-engine/closeout: progress doc — final pass

    Three deferred items landed (or were dismissed) since the previous closeout

  • Added
    slice50-workflow-engine/qgate-audit: emit append-only audit row per QualityGate loop-back iteration (Rule 11)

    Completes the slice50-workflow-engine audit pass for the QualityGate

  • Changed
    slice50-media/locale-sweep: translate Phase1Note storage-provider keys across 6 more locales

    Continues the slice50-media Phase1Note translation pass started by

  • Changed
    slice50-media/ar: translate Phase1Note storage-provider keys to Arabic

    Replaces 8 [en] placeholder Admin:StorageProviders:Phase1Note:* and

  • Changed
    slice50-media/locale-maintenance: clean machine-translation artifacts + propagate Admin:* placeholders across 12 locales

    Sweeps the torun.media Localization resource for the 12 non-EN locales

  • Changed
    slice50-workflow/tr: translate workflow editor + wizard + templates to Turkish

    Replaces ~110 [en] placeholder values in the Authoring resource's

  • Added
    slice50-workflow/cursor-insert-and-edge-findings: variable chip auto-inserts at cursor + edge-level validator markers

    [Cursor-aware var insert (slice50-S)]

  • Added
    slice50-workflow/preflight-budget-estimator: IBudgetEstimator + DefaultBudgetEstimator + executor pre-flight check

    Closes the loop on slice50-I's per-node budgetUsd intent layer with

  • Added
    slice50-media/admin-polish: Open-in-dashboard link + Phase 1 posture banner on storage providers

    User-driven polish on the /media/storage-providers surface:

  • Added
    slice50-media/optimizer-config: scaffold Bunny Optimizer config block (disabled by default)

    Adds OptimizerOptions sub-block under BunnyCdnOptions for Pull-Zone-level

  • Added
    slice50-MMMM/template-sync: backend WorkflowTemplate ↔ TS catalog enrichment + CI audit

    Closes chip #118 last deferred item:

  • Added
    slice50-G/public-personas: /personas browse + /p/:handle detail + 29-locale prop

    Backend (modules/torun.persona):

  • Added
    slice50-LLLL/validation-overlay: edge markers + node corner badge + finding tooltips

    Closes the deferred item from chip #118 wrap doc:

  • Added
    slice50-workflow/inspector-vars-and-model: capability-filtered model dropdown + available variables chip strip

    Two inspector enhancements that close the gap between author intent

  • Added
    slice50-workflow/canvas-interactivity: pan/zoom + node-drag-to-reposition on the visual editor canvas

    WorkflowGraphComponent:

  • Added
    slice50-workflow/wizard-photos: real Bunny multipart upload + per-file progress

    Closes the deferred item from chip #118 wrap doc:

  • Added
    slice50-workflow/preview-only: cheap-proxy executor override for RequestPreviewAsync

    Closes the deferred item from the workflow-editor wrap (chip #118):

  • Added
    slice50-workflow/inspector-enhancements: inline validation markers + per-node budget cap + max-retries

    Two related extensions to the advanced editor surface:

  • Added
    slice50-workflow-engine/outbox: emit workflow.completed / workflow.failed v1

    Rule 8 (transactional outbox) — after the executor's RunSpecAsync returns

  • Changed
    slice50-media/complete: drop stale 'Coming soon' from landing descriptions — all 6 surfaces live

    StorageBrowse and UploadAsset landing card descriptions had leftover

  • Fixed
    slice50-workflow-engine/loopback: align template QGate configs with executor

    The existing executor's QualityGate node (Slice 449/449b) already implements

  • Added
    slice50-workflow-engine/template-run: preview + run-from-template AppService

    Single AppService surfaces three endpoints:

  • Added
    slice50-workflow-engine/resolver: IWorkflowModelResolver wrapper

    Workflow-node-shaped wrapper over Sprint 50-LLL's IModelRoutingService.

  • Added
    slice50-workflow-engine/public-template: catalogue read AppService

    User-facing wizard-catalogue endpoint.

  • Changed
    slice50-workflow: progress log + deferred work for the workflow editor rebuild

    Captures what landed this sprint (library landing + simple-mode wizard

  • Changed
    slice50-media/admin: propagate 80 Media:Admin:* keys to 28 sibling locales as [en] placeholders

    Auto-propagated from the en.json additions in 9b95c79c (admin panel

  • Added
    slice50-workflow/advanced-palette: draggable node palette + drop-on-canvas for the visual editor

    Replaces the existing add-node dropdown with a permanent left-rail

  • Added
    slice50-workflow/library-landing: user-facing template gallery + simple-mode wizard

    Replaces the /me/workflow-editor entry that dropped users straight into

  • Added
    slice50-workflow-engine/seed: seed 3 canonical workflow templates

    Idempotent host-pass DataSeedContributor that materialises the three wizard

  • Added
    slice50-media/scaffolding: activate /media admin panel — perms + DTOs + AppService backends

    Foundation for the six host-admin /media surfaces.

  • Added
    slice50-workflow-engine/entity: add WorkflowTemplate aggregate + permissions

    Catalog entity for wizard-surfaced workflow presets.

  • Added
    slice50-pub-wire: replace 4 view-adapter stubs with real DB reads

    Public-site MVC Razor pages were rendering hardcoded fixture data

  • Fixed
    slice50-pub-blog-seed: BlogPost unique index — (TenantId, Slug, Locale) compound

    DbMigrator hit E11000 on BlogPostsDataSeedContributor: the legacy

  • Added
    slice50-content-seed: seed 6 marketing blog posts × 29 locales (174 rows)

    BlogPostsDataSeedContributor adds the initial public marketing blog catalog

  • Added
    slice50-pub-scaffold: _Header.cshtml 29-lang locale switcher

    PublicWebsite layout header override:

  • Added
    slice50-pub-marketplace: IPublicMarketplaceBrowseAppService — [AllowAnonymous] rate-limited

    - Anonymous browse for /marketplace (paged listings)

  • Added
    slice50-pub-seo: sitemap.xml + robots.txt + LeptonX 404/500 overrides

    - Pages/Sitemap.cshtml (route /sitemap.xml) — returns sitemaps.org urlset

  • Added
    slice50-pub-legal-company-support: /legal/{slug}, Company quad, Support FAQ

    - Pages/Legal/Detail.cshtml (route /legal/{slug}) — Markdig-rendered long

  • Added
    slice50-pub-pricing: 5-plan grid with billing-cycle + channel toggle

    - Pages/Pricing/Index.cshtml (route /pricing) — Monthly/Yearly toggle (real

  • Added
    slice50-pub-docs: tree sidebar + markdown detail with prev/next nav

    - Pages/Docs/Index.cshtml (route /docs) — section grid landing + sidebar

  • Added
    slice50-pub-persona: IPublicPersonaBrowseAppService — [AllowAnonymous] rate-limited

    - Anonymous browse for /personas (paged catalog)

  • Added
    slice50-pub-landing: Index page LeptonX rewrite

    Pull landing data from IPublicLandingAppService stub + pricing teaser from

  • Changed
    slice50-pub-shared: public-site infra (Markdig + SEO + stub AppServices)

    - ToRun.Web.Public.csproj — add Markdig 0.37.0 for markdown rendering

  • Added
    slice50-pub-legal: IPublicLegalAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /legal/{slug} — Terms, Privacy, Cookie, Refund,

  • Added
    slice50-pub-faq: IPublicFaqAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /faq

  • Added
    slice50-pub-doc: IPublicDocAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /docs (tree + by-slug)

  • Added
    slice50-pub-changelog: IPublicChangelogAppService — [AllowAnonymous] rate-limited

    - Anonymous read for /changelog (paged, PublishedAt DESC)

  • Added
    slice50-pub-forum: IPublicForumAppService — [AllowAnonymous] rate-limited

    - Threads list (paged, optional CategoryKey tag match against ForumThread.Tags)

  • Added
    slice50-pub-blog: IPublicBlogAppService — [AllowAnonymous] rate-limited

    - Anonymous read surface for /blog (list + by-slug)

  • Fixed
    slice50-smoke: MySettings — thuộc tính route [HttpPut] tường minh

    smoke-backend.py phát hiện VERB_MISMATCH: Angular gọi PUT trực tiếp

  • Added
    slice50-F/task#30: PublicChatAppService — lượt demo ẩn danh, giới hạn tốc độ theo IP, thanh toán MarketingDemo

    Nửa backend của Sprint 50-F: chat demo trang đích ẩn danh với giới hạn theo IP

  • Changed
    slice50-RRR-fu: BillingDailySummaryConsumer — suy luận kiểu giải cấu trúc tuple

    Dictionary `Dictionary<(DateTime Date, Guid?

  • Fixed
    slice50-UU-fu/task#73: KeywordSettlement — index thưa duy nhất trên ExternalId + xử lý mất race

    Đóng cửa sổ race duy nhất trong KeywordSettlementJob có thể

  • Changed
    slice50-SS-task67: ja.json lô 1/4 — ~140 key dấu ấn tiếng Trung đầu tiên → tiếng Nhật gốc

    Tiếp nối task #67 (quét 50-SS).

  • Added
    slice50-RRR-2: ImageEdit kết hợp — UI chip đa nguồn + nhánh provider

    Đóng nền tảng 50-RRR (commit A/B/C) bằng cách kết nối thực tế kết hợp

  • Changed
    slice50-NNN-fu: điền lại locale Sessions:* InAppAssistant (10 key × 28 locale)

    Đã điền lại Toggle / Heading / New / Untitled / Empty / Load:Failed / JustNow / MinAgo / HourAgo / DayAgo cho 28 locale không phải tiếng Anh (en.json đã có đầy đủ từ Sprint 50-CCC-2).

  • Added
    slice50-RRR-fu/task#74: MarketplacePurchase — cột FK BundleId/CreatorProfileId/BuyerUserId + index

    Phản chiếu Sprint 50-LL (Post.CreatorProfileId) + Sprint 50-VV-2 (AdAuction

  • Added
    slice50-RRR/C: ImageEditPipeline — định tuyến topology theo key capability

    Pipeline nay suy ra key capability từ topology đầu vào và sử dụng

  • Added
    slice50-RRR/B: IAiImageClient.EditCompositeAsync + POCO InputBounds

    Hợp đồng adapter cho đường dẫn kết hợp đa đầu vào.

  • Added
    slice50-RRR/A: model hình dạng capability — key + InputBoundsJson + delta seed

    Commit nền tảng cho tái cấu trúc chỉnh sửa đa ảnh (Tùy chọn C — capability

  • Added
    slice50-QQQ: lưu trữ ChatAttachment — theo dõi cho bí ẩn zero-insert

    Phát hiện phạm vi: kết nối tại ChatPipelineAppService.cs:1415 đã gọi

  • Added
    slice50-SSS: quét ghi log quan sát — Bunny + OpenAI + ChatPipeline

    5 bổ sung log có cấu trúc để lỗi sản xuất hiển thị đầy đủ ngữ cảnh

  • Added
    slice50-NNN: phiên InAppAssistant — tự động dọn rỗng + nút xóa X từng hàng

    Sửa hai hướng cho tình trạng bong bóng tích lũy phiên rỗng / không mong muốn:

  • Added
    slice50-YY-2: Bubble InAppAssistant — ghi âm micro STT Whisper trong composer

    Đóng phần -2 bị hoãn từ 50-YY (nơi tính năng gắn micro bị tách ra để

  • Added
    slice50-JJJJ: kết nối ghi UserActivity — pipeline ImageEdit + Translator + Video

    Đóng khoảng trống liên pipeline còn lại từ 50-AAA.

  • Added
    slice50-IIII: bộ chọn thư viện /me/image — stream blob + tìm kiếm + sắp xếp + phân trang

    Người dùng báo cả "Chọn ảnh nguồn" và "Chọn ảnh mask"

  • Fixed
    slice50-HHHH: OpenAI DALL-E 3 — bỏ tham số `style` (đã deprecated, lỗi 400)

    Log sản xuất:

  • Fixed
    slice50-GGGG: chỉnh sửa ảnh PUT — header Bearer trên XHR + thiếu key locale mask

    Người dùng báo cả tải lên source và mask trên tab Edit /me/image

  • Added
    slice50-FFFF: nhóm ngày thư viện + kết nối template chế độ xem lưới/danh sách

    Slice module thư viện cuối cùng.

  • Changed
    slice50-EEEE: tải lên hàng loạt thư viện — một banner thành công duy nhất, không nháy từng file

    Phản hồi người dùng: banner xanh "Upload complete." nháy vào/ra khi

  • Fixed
    slice50-DDDD: bỏ module AbpStudioClient — nguyên nhân gốc crash stream tải lên

    Sprint 50-CCCC cố sửa ObjectDisposedException của pipeline tải lên

  • Fixed
    slice50-CCCC: stream tải lên thư viện + báo lỗi từng file

    Nguyên nhân gốc của toast "Upload failed" dai dẳng — dù các file

  • Added
    slice50-BBBB: UX chế độ Thùng rác thư viện + chiều cao tối đa video + điền lại md + render markdown + đếm tải lên

    Người dùng báo năm vấn đề riêng biệt:

  • Added
    slice50-AAAA: outbox xóa cache CDN + worker tombstone + UI Thùng rác

    Người dùng báo part_001.wav / part_002.wav đã xóa khỏi thư viện nhưng

  • Added
    slice50-ZZZ: sửa spinner xem trước thư viện + UI xóa hàng loạt

    50-YYY để lại hồi quy: openAssetDetail chỉ kích hoạt tải trước văn bản

  • Added
    slice50-YYY: loại Document thư viện + xem trước văn bản inline + dọn dẹp modal

    Người dùng báo tab Documents trống sau khi tải lên file .md / .txt —

  • Added
    slice50-XXX: đọc riêng tư thư viện qua proxy stream backend

    Mẫu URL CDN công khai sai cho /me/library — nội dung theo từng người dùng

  • Fixed
    slice50-WWW: đồng bộ ghi đè dev Bunny + số đếm tải lên thư viện chính xác

    Hai lỗi trong một lô — cả hai xuất hiện khi thử nghiệm người dùng thấy 4 file 'đã tải lên' theo banner xanh nhưng trang thư viện vẫn hiện 0 mục.

  • Added
    slice50-VVV: UI tiến trình phong phú cho tải lên hàng loạt thư viện

    Người dùng: 'thêm thanh tiến trình cho thao tác tải lên, hiển thị đang tải / số giây, cho người dùng biết cái nào đã tải xong, hiện tại trông rất nhàm.'

  • Fixed
    slice50-UUU: dự phòng octet-stream cho .md + log chi tiết tải lên Bunny

    Hai vấn đề chặn người dùng từ kiểm thử /me/library:

  • Fixed
    slice50-TTT: MIME accept tải lên thư viện — nhận biết mục đích (chỉ ảnh vs hỗn hợp)

    Người dùng báo tải lên thư viện lỗi 400 'Only image/* MIME types are accepted on this endpoint.' sau khi tải file không phải ảnh từ tab Tất cả.

  • Fixed
    slice50-RRR: Redis timeout 5s → 15s — sửa cascade HMGET localization ABP

    Người dùng báo admin Message Citations gặp lỗi 500 'Internal error'.

  • Fixed
    slice50-PPP: thông tin xác thực lưu trữ Bunny Media — đồng bộ với dashboard

    Người dùng báo tải lên thư viện 'Bunny storage upload failed with HTTP 401'.

  • Fixed
    slice50-OOO: sinh ảnh DALL-E 3 lỗi 400 — bỏ tham số response_format

    Người dùng báo /me/image Generate bị lỗi: "Image generation provider

  • Fixed
    slice50-MMM: panel InAppAssistant overflow:visible + sửa clip dropdown + vệ sinh ràng buộc vị trí

    Người dùng báo tái cấu trúc vị trí panel Sprint 50-III VẪN chưa

  • Fixed
    slice50-JJJ: body tin nhắn chào mừng InAppAssistant rỗng — hồi quy message-source 50-CCC-2

    Nguyên nhân gốc (biến thể Kịch bản B): `openSession()` gọi `messages.set(mapped)`

  • Added
    slice50-LLL: tạo tiêu đề định tuyến đến model text-chat rẻ nhất (Quy tắc 2 — capability-first)

    Người dùng: "Không cần dùng cùng model cho tiêu đề, những cái này

  • Fixed
    slice50-III: tái cấu trúc góc phần tư nhận biết vị trí FAB+Panel InAppAssistant

    Người dùng báo panel liên tục mở tách rời khỏi FAB dù đã có Sprint

  • Fixed
    slice50-KKK: tạo tiêu đề chat — ReasoningEffort=low + giới hạn 1024 token (tiếp theo 50-CCC)

    Sprint 50-CCC nâng MaxOutputTokens 24 → 128 kỳ vọng "~100

  • Added
    slice50-AAA: IUserActivityRecorder liên module — /me/activity-history được điền dữ liệu cho lượt chat

    Người dùng báo /me/activity-history trống dù đã dùng chat/ảnh/giọng nói/v.v. nhiều giờ.

  • Fixed
    slice50-CCC: hồi quy tạo tiêu đề chat + hiển thị nút cuộn đến mới nhất

    Hai hồi quy kiểm thử người dùng được tìm thấy và sửa; vấn đề thứ ba

  • Fixed
    slice50-BBB: kiểm tra menu admin InAppAssistant + Agent — seed quyền module cho role admin (1 sửa, 14/14 menu mở khóa)

    | # | Menu | Nhóm | Đường dẫn Angular | Route backend | Trạng thái | Nguyên nhân gốc |

  • Fixed
    slice50-GGG: /me/library tải lên hàng loạt — chọn nhiều file

    Người dùng: "tại sao khi thêm file vào library phải thêm từng cái,

  • Fixed
    slice50-FFF: tab Edit /me/image — tải lên Mask từ PC qua Bunny presign

    Người dùng: "source có tải lên từ PC mà mask thì không, tại sao

  • Fixed
    slice50-EEE: provider Bunny cung cấp interface IMediaStorageProvider + IVideoStreamProvider

    Lỗi nghiêm trọng người dùng báo: mọi lần tải lên PC đều ném ngoại lệ

  • Fixed
    slice50-DDD: 404 tùy chọn thông báo — thêm hậu tố hành động /my-preferences còn thiếu

    Người dùng báo cáo liên tục từ hôm qua rằng /me/notifications/

  • Fixed
    slice50-ZZ: z-index dropdown sidebar chat — thoát khỏi xếp chồng day-separator

    Danh sách chat gần đây trong /agent/chat-pipeline có Đổi tên/Xóa từng hàng

  • Fixed
    slice50-YY: FAB InAppAssistant trên-trái + hoàn tác chuông trên-phải + prompt đồng ý hạ cấp model

    Kiểm thử người dùng nêu 5 vấn đề; 4 được giải quyết trong commit này, 1

  • Added
    slice50-WW: MarketplaceRoyaltyPayoutCalculator -- chia tiền bản quyền creator hàng ngày (Kế hoạch §2.1 #7)

    AsyncPeriodicBackgroundWorker hàng ngày (chu kỳ 24h) quét các mục Paid

  • Added
    slice50-XX: cột FK có kiểu + index cho AdAuction Bid/Impression/Click/Conversion (Kế hoạch §2.2 / 50-VV-2)

    Sprint 47-O tạo entity AdAuction phẳng không có FK join;

  • Added
    slice50-UU: KeywordSettlementJob — thanh toán hàng ngày Spot/Reserve/Futures (Kế hoạch §2.1 #6)

    ABP AsyncPeriodicBackgroundWorker hàng ngày (chu kỳ 24h) quét

  • Added
    slice50-VV: scaffold consumer RTB AdAuction + thanh lý giá đầu tiên (Kế hoạch §2.1 #5)

    Sprint 50-TT được giao cho việc này nhưng lệch hướng (nó đã

  • Added
    slice50-OO: hệ thống hạn mức /me/library — theo dõi dung lượng + tải lên PC + trừ wallet

    Người dùng yêu cầu: chỉ số dung lượng thư viện, tải lên PC, hạn mức theo gói,

  • Added
    slice50-TT: distributed lock từng hàng cho worker định kỳ — an toàn đa pod

    Mở rộng mẫu 50-RR (VideoJobPollingWorker IAbpDistributedLock)

  • Added
    slice50-NN: tab Edit /me/image — tải lên PC qua Bunny pre-upload

    Sprint 50-P hoãn tải lên PC vì backend thiếu Bunny

  • Changed
    slice50-SS: ja.json lô 1/N — 300 key có dấu ấn tiếng Trung đầu tiên → tiếng Nhật gốc

    50-AA bị hủy giữa chừng; đây là lô tiếp tục được chia nhỏ

  • Added
    slice50-RR: VideoJobPollingWorker — distributed lock Redis an toàn đa pod

    Sprint 50-U + 50-EE kết nối polling + luồng hoàn tiền nhưng giả định một pod

  • Added
    slice50-QQ: chuyển chuông thông báo+hoạt động từ nổi góc trên-phải sang cạnh sidebar

    Chỉ thị người dùng (lượt Sprint 50-E): bell + activity sağdaki menü ikonlarının

  • Changed
    slice50-PP: bỏ qua tái tạo proxy — backend không chạy

    Backend không thể tiếp cận tại https://localhost:44304 trong sprint này;

  • Added
    slice50-MM: phi chuẩn hóa Creator/Post.CreatorProfileId — sửa phạm vi 50-LL

    Sprint 47-H xây dựng index kép thoái hóa cho feed Creator/Post

  • Added
    slice50-LL: phi chuẩn hóa PersonaPost.PersonaId + CreatorProfileId (Kế hoạch §2.2 — truy vấn feed)

    Sprint 47-H xây dựng quét (TenantId, CreationTime) thoái hóa cho PersonaPost

  • Added
    slice50-JJ: IBillingRecorder.RecordPaddleTransactionAsync — tự động sửa chênh lệch

    Sprint 50-W BillingReconciliationJob phát hiện lỗ hổng (Paddle

  • Fixed
    slice50-KK: sai lệch workspace builder Angular trong module (bất thường Sprint 50-M)

    Mỗi modules/torun.*/angular/angular.json tham chiếu

  • Fixed
    slice50-II: thay thế chuỗi "sample-X" của *DataSeedContributor Suite bằng placeholder hợp lệ

    Kiểm thử cô lập tenant Sprint 50-CC tiết lộ lỗi có sẵn từ trước:

  • Changed
    slice50-HH: script xóa index MongoDB cũ (Kế hoạch §2.1 #8)

    Đợt quét MT Sprint 47-A..47-P thêm index kép tiền tố TenantId vào mọi

  • Fixed
    slice50-FF: di chuyển nhóm module InAppAssistant + Telemetry + EventBus + Persona

    Hoàn thành chuỗi Sprint 49.

  • Changed
    slice50-GG: script DBA điền ngược dữ liệu tenant ngày ra mắt (Kế hoạch §2.4)

    Rủi ro R2 trước ra mắt: Sprint 47-A..47-P quét 219+ entity để

  • Added
    slice50-EE: mở rộng IBillingRecorder.RefundAsync với bản ghi âm song sinh

    Sprint 50-U phát hiện thiếu sót: IBillingRecorder chỉ có RecordAsync.

  • Changed
    slice50-CC: kiểm thử cô lập tenant cho subscription + agent + persona

    Kế hoạch §2.3 / kiểm tra R1 — Sprint 47-A...47-P quét 219+ entity để

  • Changed
    slice50-DD: pipeline ImageEdit + thuộc tính phê duyệt Bubble InAppAssistant

    Backlog kế hoạch §2.5: truyền bá 22 key pipeline ImageEdit (Sprint

  • Fixed
    slice50-BB: quét xung đột MessageKey outbox trên 7 điểm phát

    Sprint 50-K phát hiện một xung đột (cấu hình paddle plan subscription

  • Added
    slice50-W: BillingReconciliationJob — kiểm tra chênh lệch Paddle↔nội bộ hàng ngày

    Phase 1.5 §2.1 #3 — worker nền thứ ba.

  • Added
    slice50-X: PaddleSyncWorker — đồng bộ định kỳ trạng thái subscription dự phòng

    Phase 1.5 §2.1 #4 — worker nền thứ tư và cuối cùng trước khi ra mắt.

  • Fixed
    slice50-Z: thiếu TypePredicate trong RunInputUploadAppService (tiếp nối 49-B)

    /api/app/run-input-upload trả về 404 vì AppService

  • Added
    slice50-Y: seed Capability chỉnh sửa ảnh + AiModelCapability gpt-image-1 + liên kết giá

    Sprint 50-P đưa vào UI tab Edit /me/image + kết nối backend nhưng

  • Fixed
    slice50-S: timestamp UTC phát ra ký tự Z — serializer backend + quy ước Mongo

    Frontend (Angular | date pipe + Date constructor) xử lý UTC -> giờ địa phương

  • Added
    slice50-U: VideoJobPollingWorker — tăng cường IHostedService cho Sora-2

    Phase 1.5 §2.1 — worker nền ưu tiên hàng đầu.

  • Added
    slice50-V: DunningAttemptScheduler — phản chiếu thử lại past_due của Paddle

    Phase 1.5 §2.1 #2 — worker nền thứ hai.

  • Fixed
    slice50-Q: consumer SSE InAppAssistant + UX hủy + bảo vệ thử lại

    Người dùng báo lượt tiếp theo "form doldurma" trả về "Message failed.

  • Fixed
    slice50-T: dán clipboard trong chat + body rỗng của memory_forget

    Lỗi A: khung soạn chat bỏ qua Ctrl+V khi dán ảnh từ clipboard.

  • Fixed
    slice50-R: bố cục /marketplace — bỏ lpx-content-container ngoài cùng

    Trang duyệt Marketplace (angular/src/app/marketplace/

  • Fixed
    slice50-P: tab Edit /me/image đồng bộ tính năng + hàng nút responsive

    Tab Edit thiếu lựa chọn Model (Auto/Manual), Chất lượng

  • Fixed
    slice50-N: mặc định FAB InAppAssistant → dưới-trái + sửa neo panel

    Người dùng báo mặc định Sprint 50-I (bottom:96 right:24) bị chồng lên

  • Fixed
    slice50-O: di chuyển route /me/notifications + preferences (bị bỏ sót ở 49-B)

    Kiểm thử người dùng tại /me/notifications gặp lỗi 404 trên

  • Fixed
    slice50-M: xóa WalletTopUpPriceIds — luôn dùng giá nội tuyến thay vì catalog

    PaddleOptions.WalletTopUpPriceIds là Dictionary<string,string>

  • Fixed
    slice50-L: Paddle checkout — ghi log trạng thái + nội dung khi có lỗi 4xx/5xx

    Người dùng báo "paddle.js popup açması lazım, hata veriyor" khi

  • Fixed
    slice50-I: kéo FAB InAppAssistant (hoàn tác kéo panel) + căn chỉnh dropdown thông báo

    Sprint 50-I giải quyết hai hồi quy UX xuất hiện sau Sprint 50-B + 50-E:

  • Fixed
    slice50-K: xung đột MessageKey outbox khi lưu plan paddle lần hai

    Admin đã lưu cấu hình Paddle của SubscriptionPlan; lần lưu đầu tiên thành công.

  • Fixed
    slice50-J: chi tiết thanh toán — $ chỉ ở các trường tiền tệ

    Bảng chi tiết chi phí trên /me/billing đang thêm tiền tố vào mọi

  • Fixed
    slice50-H: di chuyển route chat-pipeline + Chat trong menu /me

    Sprint 49-B để lại hai URL /api/app/* cứng trong chat-pipeline

  • Changed
    slice50-Fi: truyền bá tổng hợp — 50-B kéo/ghim + 50-D modal workflow + 50-E trung tâm thông báo-hoạt động trên 29 file locale

    - 50-B (InAppAssistant:Bubble:Dock/Undock/DragHint): thêm vào en.json + 28 locale còn lại với bản dịch gốc

  • Fixed
    slice50-D: thay thế toàn dự án confirm/alert/prompt JS thuần -> ABP ConfirmationService + modal LeptonX

    Người dùng: 'trang memory khi bấm xóa hiện js confirm, tại sao không dùng leptonx

  • Fixed
    slice50-B: sắp xếp tool_calls InAppAssistant + bong bóng kéo/ghim được (QUAN TRỌNG)

    Sửa A (lỗi server QUAN TRỌNG):

  • Fixed
    slice50-C: lỗi render dropdown /me/billing + nội dung tab trống (UX QUAN TRỌNG)

    Người dùng báo: dropdown SourceKind hiển thị khối màu hồng/xanh kỳ lạ (bị vỡ

  • Fixed
    slice50-A: chuông thông báo + trung tâm hoạt động không còn chồng lên nhãn admin

    Phản hồi người dùng: hai chuông nổi (notification-bell + activity-center)

  • Fixed
    slice47-J: subscription phần #2 CUỐI CÙNG — Subscription/Invoice/BYOK/QueuedRequest IMultiTenant (Phase 2 QUAN TRỌNG)

    Áp dụng mẫu Sprint 47-I + 45-M.

  • Added
    slice48-B: liên kết chi phí embedding với snapshot AiModelPricing (tiếp nối Sprint 46-A)

    Sprint 46-A giới thiệu IBillingRecorder liên module + phát ra BillingRecords

  • Fixed
    slice48-A: dịch thuật đúng ngôn ngữ ja/ko/pt/sv cho module translation (~272 mục)

    Sprint 46-F hoàn thành chuẩn hóa cấu trúc lowercase→PascalCase nhưng để lại 4 locale với nội dung tiếng Anh stub từ Suite.

  • Fixed
    slice47-I: sửa lỗi audit MT subscription phần #1 — Wallet/BillingRecord/Refund/Dispute IMultiTenant (Phase 2 TIỀN TỆ QUAN TRỌNG)

    Áp dụng mẫu Sprint 45-M + 47-A đến 47-N.

  • Fixed
    slice47-N: sửa lỗi audit MT agent phần #2 — Council/DeepResearch/CodeSandbox/Voice/Translator IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 47-M.

  • Fixed
    slice47-L: sửa lỗi audit MT authoring phần #2 — GenJobs/BlogPost/hạn mức IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-K.

  • Fixed
    slice47-M: sửa lỗi audit MT agent phần #1 — Chat/ChatMessage/Assistant IMultiTenant (Phase 2 RỦI RO CAO)

    Áp dụng mẫu Sprint 45-M + 47-A đến 47-K.

  • Fixed
    slice47-K: sửa lỗi audit MT authoring phần #1 — hệ sinh thái Workflow IMultiTenant (Phase 2 RỦI RO CAO)

    Áp dụng mẫu Sprint 45-M + 47-A đến 47-H.

  • Fixed
    slice47-P: sửa lỗi audit MT cho marketplace — 15 entity IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-A/B/C/D/E/F/G/O.

  • Fixed
    slice47-H: sửa lỗi audit MT creator phần #2 — entity Posts/Teams/Payouts IMultiTenant (Phase 2 RỦI RO CAO)

    Áp dụng mẫu Sprint 45-M + 47-G.

  • Fixed
    slice47-O: sửa lỗi audit MT cho advertising — 16 entity IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-A/B/C/D/E/F.

  • Fixed
    slice47-G: sửa lỗi audit MT creator phần #1 — entity Profile/Account/Org IMultiTenant (Phase 2 RỦI RO CAO)

    Áp dụng mẫu Sprint 45-M + 47-A/B/C/D/E.

  • Fixed
    slice47-F: sửa lỗi audit MT cho forum — 19 entity IMultiTenant + fan-out thông báo nhận biết tenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-A/B/C/E.

  • Fixed
    slice47-D: sửa lỗi audit MT cho telemetry — 18 entity IMultiTenant + ghi liên module phạm vi tenant (Phase 2 RỦI RO CAO)

    Áp dụng mẫu Sprint 45-M + 47-A + 47-B.

  • Fixed
    slice47-E: sửa lỗi audit MT cho persona — 16 entity IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-A/B/C.

  • Fixed
    slice47-C: sửa lỗi audit MT cho moderation — 11 entity IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-A/B.

  • Fixed
    slice47-B: sửa lỗi audit MT cho byokvault + knowledge — 7 entity IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M + 47-A.

  • Fixed
    slice47-A: sửa lỗi audit MT cho eventbus + translation — 8 entity IMultiTenant (Phase 2)

    Áp dụng mẫu Sprint 45-M: Suite không phát ra IMultiTenant trên các lớp Base dù IsMultiTenant: true trong JSON.

  • Added
    slice56-57-58: capability-first routing + Authoring stub fix

    Slice 56 — IModelRoutingService (ByokVault.Application + Contracts):