<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>vNext Docs Blog</title>
        <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes</link>
        <description>vNext Docs Blog</description>
        <lastBuildDate>Wed, 09 Sep 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.92]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92</guid>
            <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.92, incident'ları kendi tablosuna taşır ve instance metadata'sındaki incident bloğunu link-only bir şekle çevirir; ayrıca retry/unfault üzerindeki üç davranış hatasını düzeltir, DbMigrator'a timeout/lock yapılandırması ekler, discovery cache'i devreye alır ve Busy admission'ı Postgres CAS'a taşır. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.92, incident'ları kendi tablosuna taşır ve instance metadata'sındaki incident bloğunu link-only bir şekle çevirir; ayrıca retry/unfault üzerindeki üç davranış hatasını düzeltir, DbMigrator'a timeout/lock yapılandırması ekler, discovery cache'i devreye alır ve Busy admission'ı Postgres CAS'a taşır. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-metadataincident-artık-içerik-değil-link-taşıyor">1. <code>metadata.incident</code> artık içerik değil, link taşıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#1-metadataincident-art%C4%B1k-i%C3%A7erik-de%C4%9Fil-link-ta%C5%9F%C4%B1yor" class="hash-link" aria-label="Direct link to 1-metadataincident-artık-içerik-değil-link-taşıyor" title="Direct link to 1-metadataincident-artık-içerik-değil-link-taşıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>GET .../instances/{instance}</code> ve liste görünümlerindeki <code>metadata.incident</code> (<a href="https://github.com/burgan-tech/vnext/pull/972" target="_blank" rel="noopener noreferrer" class="">vnext #972</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>metadata.incident</code>, embed edilmiş aktif incident'ı, en yeni 5 kaydı içeren inline bir history array'ini, bir <code>totalCount</code> alanını ve düz bir <code>href</code>'i taşıyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>metadata.incident</code> artık <code>{ hasActiveIncident, active: { href }, history: { href } }</code> şeklinde — state function'ın incident bloğuyla <strong>byte-for-byte aynı şekil</strong>. <code>active</code>, yalnızca bayrak <code>true</code> iken bulunur. Embed edilmiş aktif incident, inline newest-5 array'i, <code>totalCount</code> ve düz <code>href</code> <strong>kaldırıldı</strong>. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>metadata.incident.active</code>/<code>history</code>/<code>totalCount</code>/<code>href</code> alanlarını okuyan client'ları <code>active.href</code> ve <code>history.href</code> üzerinden ayrı bir GET yapacak şekilde güncelleyin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-get-incidentsactiveten-404-dönmesi-normal-bir-yanıt">2. <code>GET .../incidents/active</code>'ten 404 dönmesi normal bir yanıt<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#2-get-incidentsactiveten-404-d%C3%B6nmesi-normal-bir-yan%C4%B1t" class="hash-link" aria-label="Direct link to 2-get-incidentsactiveten-404-dönmesi-normal-bir-yanıt" title="Direct link to 2-get-incidentsactiveten-404-dönmesi-normal-bir-yanıt" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>GET .../instances/{instance}/incidents/active</code> (<a href="https://github.com/burgan-tech/vnext/pull/972" target="_blank" rel="noopener noreferrer" class="">vnext #972</a>)</p>
<p><strong>Önceki Davranış:</strong>
Aktif incident her zaman ana instance yanıtına gömülü olduğu için ayrı bir "aktif incident yok" durumu yoktu.</p>
<p><strong>Yeni Davranış:</strong>
<code>active.href</code>, bayrak set iken reklamı yapılır, ancak bir retry incident'ı tam o sırada çözebilir; bu durumda endpoint <code>404 Instance:100037</code> döner. Bu <strong>normal bir yanıttır</strong>, hata değildir — role gate'i geçemeyen bir çağıran bunun yerine <code>403</code> alır. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Client'larınızı <code>404</code>'ü "incident yok, state'i yeniden oku" olarak, <code>403</code>'ü ayrı bir "yetkisiz" durumu olarak ele alacak şekilde güncelleyin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-fault-ile-sonuçlanan-bir-retry-artık-kalıcı-olarak-f-kalıyor">3. Fault ile sonuçlanan bir retry artık kalıcı olarak <code>F</code> kalıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#3-fault-ile-sonu%C3%A7lanan-bir-retry-art%C4%B1k-kal%C4%B1c%C4%B1-olarak-f-kal%C4%B1yor" class="hash-link" aria-label="Direct link to 3-fault-ile-sonuçlanan-bir-retry-artık-kalıcı-olarak-f-kalıyor" title="Direct link to 3-fault-ile-sonuçlanan-bir-retry-artık-kalıcı-olarak-f-kalıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>POST .../instances/{instance}/retry</code> (<a href="https://github.com/burgan-tech/vnext/pull/972" target="_blank" rel="noopener noreferrer" class="">vnext #972</a>)</p>
<p><strong>Önceki Davranış:</strong>
Yeniden yürütülen iş tekrar fault olduğunda yanıt <code>200 {"status":"F"}</code> dönüyordu, ama instance arka planda <code>Active</code>'e geri dönüyordu (ambient request unit-of-work, iç bir <code>RequiresNew</code> scope'un persist ettiği <code>Faulted</code>'ı eziyordu) — instance sağlıklı görünen, işi bitmemiş ve bir daha retry edilemeyen (<code>400 Instance:100027</code>) bir duruma düşüyordu.</p>
<p><strong>Yeni Davranış:</strong>
Retry artık aggregate'i no-tracking okuyor ve compare-and-set ile unfault ediyor; yanıttaki <code>"status":"F"</code> artık <strong>kalıcı</strong>dır ve ikinci bir retry kabul edilir. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Bir <code>F</code> yanıtının ardından instance'ın <code>Active</code> görünmesine dayanan workaround/retry-loop mantığınız varsa kaldırın; retry yanıtındaki <code>status</code>'u kalıcı kabul edin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-unfault-artık-tüm-açık-incidentları-kapatıyor-sahte-errorboundaryabort-satırı-yok">4. <code>unfault</code> artık tüm açık incident'ları kapatıyor; sahte <code>ErrorBoundaryAbort</code> satırı yok<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#4-unfault-art%C4%B1k-t%C3%BCm-a%C3%A7%C4%B1k-incidentlar%C4%B1-kapat%C4%B1yor-sahte-errorboundaryabort-sat%C4%B1r%C4%B1-yok" class="hash-link" aria-label="Direct link to 4-unfault-artık-tüm-açık-incidentları-kapatıyor-sahte-errorboundaryabort-satırı-yok" title="Direct link to 4-unfault-artık-tüm-açık-incidentları-kapatıyor-sahte-errorboundaryabort-satırı-yok" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Instance unfault / incident kaydı (<a href="https://github.com/burgan-tech/vnext/pull/972" target="_blank" rel="noopener noreferrer" class="">vnext #972</a>)</p>
<p><strong>Önceki Davranış:</strong>
Bir abort, biri boundary'nin verdict'i diğeri <code>errorCode: "ErrorBoundaryAbort"</code> taşıyan sahte bir pipeline-katmanı satırı olmak üzere <strong>iki</strong> incident kaydediyordu — daha yeni olan bu ikincisi <code>active</code> oluyor ve boundary'nin gerçek verdict'ini gizliyordu. Ayrıca başarılı bir retry yalnızca en yeni incident'ı çözüyordu; kurtarılan bir instance <code>hasActiveIncident=true</code> raporlamaya devam ediyor, bu bayrak fingerprint ETag'ının parçası olduğu için long-poll eden client'lar da bu bayatlığı görüyordu.</p>
<p><strong>Yeni Davranış:</strong>
Üç task adımı artık incident'ı <strong>kendi save'inden önce</strong> kaydediyor; satır ve <code>HasActiveIncident</code> bayrağı birlikte commit oluyor ve pipeline'ın fault path'i sahte satırını atlıyor — bir hata tam olarak bir incident bırakıyor, <code>active</code> her zaman boundary'nin verdict'i. <code>unfault</code> ve yeni bir fault olmadan tamamlanan bir boundary transition'ı artık instance'taki <strong>tüm açık incident'ları</strong> çözüyor ve bayrağı yeniden hesaplıyor. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
<code>errorCode: "ErrorBoundaryAbort"</code>'a göre filtreleme yapmayın (pipeline artık bu satırı yazmıyor; aynı string hâlâ abort eden bir boundary'nin döndürdüğü Result error code'udur) ve bir hata başına iki incident beklemeyin — tek incident'ın <code>boundaryAction</code>/<code>boundaryLevel</code>'ını okuyun. Kurtarma sonrası <code>hasActiveIncident</code>'ı doğrudan otoriter kabul edin, client tarafında resolved incident'ları filtrelemeyin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-legacy-instancesincidents-jsonb-kolonu-donduruldu">5. Legacy <code>Instances.Incidents</code> jsonb kolonu donduruldu<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#5-legacy-instancesincidents-jsonb-kolonu-donduruldu" class="hash-link" aria-label="Direct link to 5-legacy-instancesincidents-jsonb-kolonu-donduruldu" title="Direct link to 5-legacy-instancesincidents-jsonb-kolonu-donduruldu" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Veritabanı — <code>Instances.Incidents</code> jsonb kolonu (<a href="https://github.com/burgan-tech/vnext/pull/972" target="_blank" rel="noopener noreferrer" class="">vnext #972</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>Instances.Incidents</code> jsonb array'i (en yeni 5 kayıtla sınırlı) incident'ların tek kaynağıydı.</p>
<p><strong>Yeni Davranış:</strong>
Incident'lar artık ayrı <code>InstanceIncidents</code> tablosunda (sınırsız history, <code>BackfillInstanceIncidents</code> migration'ıyla geriye dolduruldu) tutuluyor. Legacy jsonb kolonu veritabanında <strong>unmapped olarak kalıyor</strong> ve migration öncesi içeriğinde donmuş durumda — bu sürümde silinmiyor, gelecekteki bir migration'da kaldırılacak. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>Instances.Incidents</code> jsonb kolonunu doğrudan sorgulayan bir entegrasyon/rapor varsa, yeni <code>InstanceIncidents</code> tablosuna veya <code>GET .../incidents</code> / <code>GET .../incidents/active</code> endpoint'lerine geçin — jsonb kolonu artık güncellenmiyor.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="6-dbmigrator-artık-şema-migration-timeoutlock-süresi-konfigüre-edilebilir-ve-hatada-non-zero-exit-veriyor">6. DbMigrator artık şema migration timeout/lock süresi konfigüre edilebilir ve hatada non-zero exit veriyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#6-dbmigrator-art%C4%B1k-%C5%9Fema-migration-timeoutlock-s%C3%BCresi-konfig%C3%BCre-edilebilir-ve-hatada-non-zero-exit-veriyor" class="hash-link" aria-label="Direct link to 6. DbMigrator artık şema migration timeout/lock süresi konfigüre edilebilir ve hatada non-zero exit veriyor" title="Direct link to 6. DbMigrator artık şema migration timeout/lock süresi konfigüre edilebilir ve hatada non-zero exit veriyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>workers/BBT.Workflow.DbMigrator</code> — <code>SchemaMigration</code> config'i (<a href="https://github.com/burgan-tech/vnext/pull/972" target="_blank" rel="noopener noreferrer" class="">vnext #972</a>)</p>
<p><strong>Önceki Davranış:</strong>
DbMigrator sabit bir command timeout kullanıyordu ve bir şema migration'ı fail olsa bile runner başarı raporluyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>SchemaMigration:CommandTimeoutSeconds</code> (varsayılan <code>600</code>) ve <code>SchemaMigration:LockExpirySeconds</code> (varsayılan <code>900</code>, timeout'u aşacak şekilde doğrulanıyor) eklendi; runner artık herhangi bir şema fail olduğunda <strong>non-zero exit code</strong> ile çıkıyor. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Büyük tablolarda 600 saniyeden uzun süren migration'lar varsa <code>SchemaMigration:CommandTimeoutSeconds</code>'ı (ve üstünde <code>LockExpirySeconds</code>'ı) artırın. DbMigrator job'unuzun exit code'unu izleyen bir CI/CD adımı yoksa ekleyin — artık migration hataları sessizce yutulmuyor.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="7-post-utilitiesdiscoveryrefresh-senkron-hâle-geldi-ve-yeniden-aktif-discovery-cache-orchestration-hostta-açık">7. <code>POST utilities/discovery/refresh</code> senkron hâle geldi ve yeniden aktif; discovery cache orchestration host'ta açık<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#7-post-utilitiesdiscoveryrefresh-senkron-h%C3%A2le-geldi-ve-yeniden-aktif-discovery-cache-orchestration-hostta-a%C3%A7%C4%B1k" class="hash-link" aria-label="Direct link to 7-post-utilitiesdiscoveryrefresh-senkron-hâle-geldi-ve-yeniden-aktif-discovery-cache-orchestration-hostta-açık" title="Direct link to 7-post-utilitiesdiscoveryrefresh-senkron-hâle-geldi-ve-yeniden-aktif-discovery-cache-orchestration-hostta-açık" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>POST .../utilities/discovery/refresh</code> ve <code>ServiceDiscovery:Cache</code> (yalnızca <code>Provider=http</code>) (<a href="https://github.com/burgan-tech/vnext/pull/976" target="_blank" rel="noopener noreferrer" class="">vnext #976</a>)</p>
<p><strong>Önceki Davranış:</strong>
Discovery registry her cross-domain hop için canlı bir <code>GET</code> yapıyordu (caching yoktu, kasıtlı bir tasarım kararıydı); <code>discovery/refresh</code> endpoint'i deprecated'dı.</p>
<p><strong>Yeni Davranış:</strong>
<code>ServiceDiscovery:Provider=http</code> altında artık read-through bir cache var (in-process L1 + shared distributed L2, miss'te canlı registry) — yalnızca <code>http</code> provider'ını etkiler, <code>dapr</code> provider'ında hiçbir şey değişmedi. <code>POST .../utilities/discovery/refresh</code> <strong>un-deprecated</strong> edildi, artık <strong>senkron</strong> çalışıyor ve sonucunu raporluyor. Cache kod varsayılanında <strong>kapalı</strong>, ama orchestration host'un <code>appsettings.json</code>'ında <strong>açık</strong>. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Bir domain'in <code>baseUrl</code>'ini değiştiren her deploy/operasyon sonrası <code>POST .../utilities/discovery/refresh</code>'i çağırın — cache penceresi (varsayılan 1 saat marker / 2 saat entry) taşınma durumunu otomatik yakalamaz. Runtime'ı paket olarak tüketip appsettings override'ı yapmayan host'lar kod varsayılanını (<code>Cache:Enabled=false</code>) korur; eski davranışı istemeden değiştirmiş olmazsınız. <code>AcceptedStatuses</code> varsayılanının (<code>["A"]</code>) registration workflow'unuzun bitiş state'iyle uyumlu olduğunu doğrulayın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="8-instance-status-güncellemeleri-artık-distributed-lock-yerine-postgres-cas-kullanıyor">8. Instance status güncellemeleri artık distributed lock yerine Postgres CAS kullanıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-92#8-instance-status-g%C3%BCncellemeleri-art%C4%B1k-distributed-lock-yerine-postgres-cas-kullan%C4%B1yor" class="hash-link" aria-label="Direct link to 8. Instance status güncellemeleri artık distributed lock yerine Postgres CAS kullanıyor" title="Direct link to 8. Instance status güncellemeleri artık distributed lock yerine Postgres CAS kullanıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Transition admission / Busy durumu — <code>InstanceBusyManager</code>, <code>TransitionAdmissionService</code> (<a href="https://github.com/burgan-tech/vnext/pull/975" target="_blank" rel="noopener noreferrer" class="">vnext #975</a>)</p>
<p><strong>Önceki Davranış:</strong>
Instance status flip'leri (Busy set/clear) kısa süreli bir distributed lock (status lock) altında yapılıyordu; tamamlanmış bir parent instance'a subflow üzerinden gelen bir Busy sinyali yine de yayılabiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
Status güncellemeleri artık <strong>Postgres compare-and-set</strong> ile yapılıyor, distributed lock'a ve gereksiz transaction'lara ihtiyaç kalmadı. Tamamlanmış (<code>completed</code>) bir parent instance artık subflow'undan gelen Busy durumunu <strong>yaymıyor</strong> — önceki bir hata düzeltildi. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Tamamlanmış bir parent'ın Busy'ye geçtiğini varsayan bir monitoring/test senaryonuz varsa güncelleyin; bu artık gerçekleşmiyor. Distributed lock timing'ine dayanan bir gözlem/log korelasyonu yapıyorsanız, admission artık CAS tabanlı olduğu için lock acquire/release span'larının bir kısmı ortadan kalkmış olabilir.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-92">Release v0.0.92</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.90]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-90</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-90</guid>
            <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.90, transition pipeline epiloğundaki sırayı değiştirir: auto-transition değerlendirmesi artık scheduled transition timer'larının kurulmasından önce çalışır. Bir auto kazanırsa, terk edilecek state için timer hiç kurulmuyor. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.90, transition pipeline epiloğundaki sırayı değiştirir: auto-transition değerlendirmesi artık scheduled transition timer'larının kurulmasından <strong>önce</strong> çalışır. Bir auto kazanırsa, terk edilecek state için timer hiç kurulmuyor. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-90#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-bir-auto-transition-kazanırsa-o-hop-için-scheduled-timer-hiç-kurulmuyor">1. Bir auto-transition kazanırsa, o hop için scheduled timer hiç kurulmuyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-90#1-bir-auto-transition-kazan%C4%B1rsa-o-hop-i%C3%A7in-scheduled-timer-hi%C3%A7-kurulmuyor" class="hash-link" aria-label="Direct link to 1. Bir auto-transition kazanırsa, o hop için scheduled timer hiç kurulmuyor" title="Direct link to 1. Bir auto-transition kazanırsa, o hop için scheduled timer hiç kurulmuyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Transition pipeline epiloğu — <code>LifecycleOrder.Auto</code>/<code>LifecycleOrder.Schedule</code> sırası (<a href="https://github.com/burgan-tech/vnext/pull/943" target="_blank" rel="noopener noreferrer" class="">vnext #943</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>ScheduleTransitionsStep</code> (order 80), <code>RunAutomaticTransitionsStep</code> (order 90)'dan <strong>önce</strong> çalışıyordu: state'in scheduled transition'ları için önce timer kuruluyor, sonra bir auto kazandıysa zincirlenen bir sonraki hop'un <code>CancelScheduledJobsStep</code>'i tarafından hemen iptal ediliyordu.</p>
<p><strong>Yeni Davranış:</strong>
Sıra değişti — <code>Auto</code> artık order <strong>80</strong>, <code>Schedule</code> artık order <strong>90</strong>. <code>RunAutomaticTransitionsStep</code>, <code>Directives.NextTransition</code>'ı seçtiyse <code>ScheduleTransitionsStep</code> hiçbir Dapr job'u/<code>InstanceJob</code> satırı kurmadan atlanır (<code>ScheduledTransitionsSkippedForChainedNext</code>, EventId 10156, Debug). Bir auto kazandığında, terk edilecek state için timer artık hiç kurulup iptal edilmiyor. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
State function'da geçici olarak görünen <code>kind: "scheduled"</code> girdilerine dayanan bir client/test senaryonuz varsa (auto'nun hemen kazandığı bir state'te), bu girdinin artık hiç görünmeyeceğini hesaba katın. <code>ClearBusyOnResumeStep</code>'in step order'ı <code>Auto - 1</code> olarak (sayısal olarak hâlâ 79) yeniden tanımlandı — persist edilen hiçbir veri step order değerini taşımadığı için bu deploy-safe'dir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-timer-scriptleri-artık-auto-rulelardan-sonra-çalışıyor-auto-adımı-fail-olursa-timer-kurulmuyor">2. Timer script'leri artık auto rule'lardan sonra çalışıyor; auto adımı fail olursa timer kurulmuyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-90#2-timer-scriptleri-art%C4%B1k-auto-rulelardan-sonra-%C3%A7al%C4%B1%C5%9F%C4%B1yor-auto-ad%C4%B1m%C4%B1-fail-olursa-timer-kurulmuyor" class="hash-link" aria-label="Direct link to 2. Timer script'leri artık auto rule'lardan sonra çalışıyor; auto adımı fail olursa timer kurulmuyor" title="Direct link to 2. Timer script'leri artık auto rule'lardan sonra çalışıyor; auto adımı fail olursa timer kurulmuyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Transition pipeline epiloğu — timer input script'leri (<a href="https://github.com/burgan-tech/vnext/pull/943" target="_blank" rel="noopener noreferrer" class="">vnext #943</a>)</p>
<p><strong>Önceki Davranış:</strong>
Timer script'leri (scheduled transition input'ları) auto-transition koşulları değerlendirilmeden <strong>önce</strong> çalışıyordu; auto adımı unhandled bir hatayla fail etse bile state'in timer'ları zaten kurulmuş oluyordu.</p>
<p><strong>Yeni Davranış:</strong>
Timer script'leri artık auto koşul script'lerinden <strong>sonra</strong> çalışır (auto değerlendirmesi instance data'yı mutate etmediği için timer input'ları değişmez). Auto adımının kendisi fail olursa (ör. unhandled non-blocking task failure), timer'lar da kurulmaz — instance zaten fault oluyor. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Doğrudan bir aksiyon gerekmez; auto adımı fail eden bir state'te önceden "kurulup asla ateşlenmeyen" timer'lara dayanan bir gözlem/monitoring varsa (ör. faulted bir instance'ta hâlâ armed görünen scheduled entry), bu artık gözlemlenmeyecek.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-90">Release v0.0.90</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.88]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-88</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-88</guid>
            <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.88, custom function çağrılarındaki rol kontrolünü sadeleştirir, EventHook altyapısını kaldırıp tüm distributed event'leri outbox'a taşır ve Execution servisinin container imaj tabanını değiştirir. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.88, custom function çağrılarındaki rol kontrolünü sadeleştirir, EventHook altyapısını kaldırıp tüm distributed event'leri outbox'a taşır ve Execution servisinin container imaj tabanını değiştirir. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-88#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-custom-function-çağrısında-functionroles-gatei-kaldırıldı">1. Custom function çağrısında <code>function.roles</code> gate'i kaldırıldı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-88#1-custom-function-%C3%A7a%C4%9Fr%C4%B1s%C4%B1nda-functionroles-gatei-kald%C4%B1r%C4%B1ld%C4%B1" class="hash-link" aria-label="Direct link to 1-custom-function-çağrısında-functionroles-gatei-kaldırıldı" title="Direct link to 1-custom-function-çağrısında-functionroles-gatei-kaldırıldı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Custom function invocation — <code>FunctionAccessPolicy</code> (<a href="https://github.com/burgan-tech/vnext/pull/927" target="_blank" rel="noopener noreferrer" class="">vnext #927</a>)</p>
<p><strong>Önceki Davranış:</strong>
Bir custom function çağrısı, hem scope (Domain/Flow/Instance) kontrolünden hem de <code>function.roles</code> rol kontrolünden geçmek zorundaydı.</p>
<p><strong>Yeni Davranış:</strong>
Rol gate'i custom function çağrılarından kaldırıldı — bu artık yalnızca <code>authorize</code> fonksiyonunun sorumluluğu. <strong>Scope</strong> kontrolü (Domain/Flow/Instance) değişmeden kalır; bu bir call-shape doğrulamasıdır, authorization değil. <code>function.roles</code> hâlâ onurlandırılır, ama artık yalnızca <code>authorize</code> fonksiyonu tarafından değerlendirilir. <strong>Yön: daha permissive.</strong></p>
<p><strong>Migration:</strong>
Yalnızca <code>function.roles</code>'a dayanarak bir custom function'ı role-gate'lediyseniz, bu kontrolü artık <code>authorize</code> fonksiyonuna taşıyın — aksi halde önceden reddedilen bir çağrı artık geçebilir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-eventhook-altyapısı-kaldırıldı--tüm-eventler-outbox-üzerinden">2. EventHook altyapısı kaldırıldı — tüm event'ler outbox üzerinden<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-88#2-eventhook-altyap%C4%B1s%C4%B1-kald%C4%B1r%C4%B1ld%C4%B1--t%C3%BCm-eventler-outbox-%C3%BCzerinden" class="hash-link" aria-label="Direct link to 2. EventHook altyapısı kaldırıldı — tüm event'ler outbox üzerinden" title="Direct link to 2. EventHook altyapısı kaldırıldı — tüm event'ler outbox üzerinden" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>IEventPublishHook&lt;T&gt;</code>, <code>IEventHookInvoker</code>, <code>EventHookAttribute</code>, <code>EventHookMode</code> (<a href="https://github.com/burgan-tech/vnext/pull/927" target="_blank" rel="noopener noreferrer" class="">vnext #927</a>)</p>
<p><strong>Önceki Davranış:</strong>
Distributed event publishing, transactional outbox'ın yanı sıra bir EventHook mekanizması (<code>IEventPublishHook&lt;T&gt;</code> implementasyonları) üzerinden de özelleştirilebiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
EventHook altyapısı tamamen kaldırıldı. Her distributed event artık transactional outbox üzerinden gider; event bus yalnızca trace stamping'e indirgendi. Üç subflow terminal event'i (<code>ISubflowTerminalEvent</code>) artık post-commit'te <code>SubflowTerminalRelay</code> ile parent'ı hemen bir komut olarak settle ediyor; Inbox handler'ı <code>ISubItemTerminalGuard</code> ile dedupe edilen durable bir yedek olarak kalıyor. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>IEventPublishHook&lt;T&gt;</code> implementasyonu yazan bir domain/entegrasyon varsa, bu kod artık çağrılmıyor — event'i outbox'tan (pub/sub aboneliği) tüketecek şekilde yeniden yazın. Ayrıntı için vnext reposundaki <code>docs/runtime/event-publish-modes.md</code>'e bakın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-execution-imajının-basei-alpineden-net-10-noblea-geçti">3. Execution imajının base'i Alpine'den .NET 10 Noble'a geçti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-88#3-execution-imaj%C4%B1n%C4%B1n-basei-alpineden-net-10-noblea-ge%C3%A7ti" class="hash-link" aria-label="Direct link to 3. Execution imajının base'i Alpine'den .NET 10 Noble'a geçti" title="Direct link to 3. Execution imajının base'i Alpine'den .NET 10 Noble'a geçti" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Execution servisi container imajı (<a href="https://github.com/burgan-tech/vnext/pull/921" target="_blank" rel="noopener noreferrer" class="">vnext #921</a>)</p>
<p><strong>Önceki Davranış:</strong>
Execution imajı Alpine tabanlıydı (musl libc).</p>
<p><strong>Yeni Davranış:</strong>
Execution imajı, Python task desteğinin glibc/manylinux wheel'lerini tüketebilmesi için .NET 10 Noble (Debian tabanlı, glibc) base image'ına geçti. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Execution imajını extend eden veya Alpine'e özgü paket/araç varsayımı yapan (ör. <code>apk</code> ile paket kuran) custom Dockerfile'ları/CI adımlarını Debian/Noble araçlarına (<code>apt</code>) göre güncelleyin. İmaj boyutu ve base katmanları değişti; kayıtlı SBOM/imza/attestation süreçleri buna göre güncellenmiştir.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-88">Release v0.0.88</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.87]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-87</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-87</guid>
            <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.87, transition pipeline'ını uçtan uca span'lar (trace) ile donatır ve bu sayede bulunan gereksiz component-read/re-resolve mekanizmalarını kaldırır. En riskli değişiklikler iki config varsayılanının değişmesi ve öksüz kalmış bir public seam'in kaldırılmasıdır. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.87, transition pipeline'ını uçtan uca span'lar (trace) ile donatır ve bu sayede bulunan gereksiz component-read/re-resolve mekanizmalarını kaldırır. En riskli değişiklikler iki config varsayılanının değişmesi ve öksüz kalmış bir public seam'in kaldırılmasıdır. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-87#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-componentcachegenerationmemoseconds-kod-varsayılanı-0dan-5e-çıktı">1. <code>ComponentCache:GenerationMemoSeconds</code> kod varsayılanı <code>0</code>'dan <code>5</code>'e çıktı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-87#1-componentcachegenerationmemoseconds-kod-varsay%C4%B1lan%C4%B1-0dan-5e-%C3%A7%C4%B1kt%C4%B1" class="hash-link" aria-label="Direct link to 1-componentcachegenerationmemoseconds-kod-varsayılanı-0dan-5e-çıktı" title="Direct link to 1-componentcachegenerationmemoseconds-kod-varsayılanı-0dan-5e-çıktı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Component cache generation-token memoization (kod varsayılanı) (<a href="https://github.com/burgan-tech/vnext/pull/920" target="_blank" rel="noopener noreferrer" class="">vnext #920</a>)</p>
<p><strong>Önceki Davranış:</strong>
Kod varsayılanı <code>0</code>'dı; v0.0.85'te yalnızca orchestration host'un <code>appsettings.json</code>'ında <code>5</code>'e override edilmişti.</p>
<p><strong>Yeni Davranış:</strong>
<code>GenerationMemoSeconds</code>'ın <strong>kod varsayılanı</strong> da <code>5</code>'e çekildi ve orchestration host'un appsettings override'ı kaldırıldı (artık gereksiz). Runtime'ı paket olarak tüketen ve appsettings override'ı yapmayan her host, artık publish sonrası en fazla 5 saniyelik bir cross-pod görünürlük penceresiyle karşılaşır. L1 cache bu riski taşımaz (L1 anahtarı token'ı içerir, bu yüzden L1 asla bayat kalamaz). <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Publish sonrası anlık cluster-wide görünürlük gereken host'larda <code>ComponentCache:GenerationMemoSeconds</code>'ı <code>0</code>'a set edin. CI/CD'de publish sonrası smoke/cutover öncesi bekleme kuralınız yoksa ekleyin (bkz. <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85">Breaking Changes: v0.0.85</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-telemetrytracingadditionalsourcesa-yeni-activitysourcelar-eklenmeli-yoksa-spanlar-sessizce-düşer">2. <code>Telemetry:Tracing:AdditionalSources</code>'a yeni ActivitySource'lar eklenmeli, yoksa span'lar sessizce düşer<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-87#2-telemetrytracingadditionalsourcesa-yeni-activitysourcelar-eklenmeli-yoksa-spanlar-sessizce-d%C3%BC%C5%9Fer" class="hash-link" aria-label="Direct link to 2-telemetrytracingadditionalsourcesa-yeni-activitysourcelar-eklenmeli-yoksa-spanlar-sessizce-düşer" title="Direct link to 2-telemetrytracingadditionalsourcesa-yeni-activitysourcelar-eklenmeli-yoksa-spanlar-sessizce-düşer" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Host telemetry config'i — <code>Telemetry:Tracing:AdditionalSources</code> (<a href="https://github.com/burgan-tech/vnext/pull/920" target="_blank" rel="noopener noreferrer" class="">vnext #920</a>)</p>
<p><strong>Önceki Davranış:</strong>
Pipeline'ın büyük kısmı (validation, context load, task input/invoke/output compile, subflow mapping, lock, component read) hiç span üretmiyordu; üretilenler de görece az <code>ActivitySource</code> altında toplanıyordu.</p>
<p><strong>Yeni Davranış:</strong>
Pipeline artık adım adım (<code>Step.{Name}</code>, <code>Transition.LoadContext</code>, <code>Task.Invoke</code>, <code>Script.Compile</code>, <code>Cache.Get</code>, <code>Lock.Acquire</code>, ...) span üretir; bunlar yeni <code>ActivitySource</code>'lar altında yayınlanır. <code>Telemetry:Tracing:AdditionalSources</code> bu yeni kaynakları listelemiyorsa, o kaynaklardan gelen span'lar <strong>sessizce</strong> hiç export edilmez. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Her host'un (Orchestration, Execution, Inbox/Outbox worker) <code>Telemetry:Tracing:AdditionalSources</code> listesini güncel <code>BBT.Workflow.*</code> kaynak listesiyle senkron tutun. Yeni bir span kaynağının trace'de görünmemesi genellikle bu listenin güncel olmadığının işaretidir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-iworkflowcontext-kaldırıldı">3. <code>IWorkflowContext</code> kaldırıldı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-87#3-iworkflowcontext-kald%C4%B1r%C4%B1ld%C4%B1" class="hash-link" aria-label="Direct link to 3-iworkflowcontext-kaldırıldı" title="Direct link to 3-iworkflowcontext-kaldırıldı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Runtime'ı paket olarak tüketen kod — <code>IWorkflowContext</code> (<a href="https://github.com/burgan-tech/vnext/pull/920" target="_blank" rel="noopener noreferrer" class="">vnext #920</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>IWorkflowContext</code>, artık silinmiş bir <code>SchemaValidationAttribute</code> aspect'i için eklenmişti ve o zamandan beri öksüz kalmıştı — yalnızca 2 writer, 3 reader ve ~15 test double'ı vardı. Kendi memo'su yalnızca <code>Key</code>'i karşılaştırıyordu; pinlenmiş bir versiyon isteği sessizce farklı bir versiyon dönebiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>IWorkflowContext</code> kaldırıldı. Üç okuyucusu artık workflow'u kendi çağıranından alıyor (<code>PostCommitParentSnapshot</code>, bir <code>Workflow?</code> parametresi); <code>InstanceCommandAppService</code>'in hatalı memo'su tamamen silindi. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Runtime'ı NuGet paketi olarak tüketip <code>IWorkflowContext</code>'i inject eden veya mock'layan kod varsa, workflow'u çağıranından almaya geçin; tip artık mevcut değil.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-87">Release v0.0.87</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.86]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-86</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-86</guid>
            <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.86, StartTask/DirectTriggerTask trigger bildirimlerinin varsayılan senkronluğunu değiştirir, kullanılmayan ClickHouse entegrasyonunu kaldırır ve host telemetry varsayılanlarını düzeltir. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.86, <code>StartTask</code>/<code>DirectTriggerTask</code> trigger bildirimlerinin varsayılan senkronluğunu değiştirir, kullanılmayan ClickHouse entegrasyonunu kaldırır ve host telemetry varsayılanlarını düzeltir. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-86#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-starttaskdirecttriggertask-sync-varsayılanı-truedan-falsea-düştü">1. <code>StartTask</code>/<code>DirectTriggerTask</code> <code>sync</code> varsayılanı <code>true</code>'dan <code>false</code>'a düştü<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-86#1-starttaskdirecttriggertask-sync-varsay%C4%B1lan%C4%B1-truedan-falsea-d%C3%BC%C5%9Ft%C3%BC" class="hash-link" aria-label="Direct link to 1-starttaskdirecttriggertask-sync-varsayılanı-truedan-falsea-düştü" title="Direct link to 1-starttaskdirecttriggertask-sync-varsayılanı-truedan-falsea-düştü" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Trigger-family task'lar — <code>StartTask</code>, <code>DirectTriggerTask</code> (<code>TriggerSync</code>) (<a href="https://github.com/burgan-tech/vnext/pull/917" target="_blank" rel="noopener noreferrer" class="">vnext #917</a>)</p>
<p><strong>Önceki Davranış:</strong>
Trigger bildirimleri varsayılan olarak <strong>senkron</strong> çalışıyordu — çağıran transition, hedef instance'ın pipeline'ı bitene kadar bloklanıyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>sync</code> varsayılanı <code>false</code> oldu; trigger bildirimleri varsayılan olarak <strong>enqueue edilir</strong> ve hedef pipeline'ı beklemeden döner. Eski senkron davranış açıkça <code>"sync": true</code> set edilerek korunabilir. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Hedef instance'ın işini bitirmesine (örn. dönen veriye) senkron olarak bağımlı olan <code>StartTask</code>/<code>DirectTriggerTask</code> tanımlarını tarayın ve <code>"sync": true</code> ekleyin; aksi halde bu task'lar artık hedefin tamamlanmasını beklemeden devam eder.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-clickhouse-entegrasyonu-kaldırıldı">2. ClickHouse entegrasyonu kaldırıldı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-86#2-clickhouse-entegrasyonu-kald%C4%B1r%C4%B1ld%C4%B1" class="hash-link" aria-label="Direct link to 2. ClickHouse entegrasyonu kaldırıldı" title="Direct link to 2. ClickHouse entegrasyonu kaldırıldı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> DataSink — ClickHouse config/model/sink'leri (<a href="https://github.com/burgan-tech/vnext/pull/911" target="_blank" rel="noopener noreferrer" class="">vnext #911</a>)</p>
<p><strong>Önceki Davranış:</strong>
Runtime, hiçbir ortamda deploy edilmemiş ve her yerde disabled olan bir ClickHouse entegrasyonu (async-void flush timer'lı) taşıyordu; ilgili appsettings bölümleri mevcuttu.</p>
<p><strong>Yeni Davranış:</strong>
ClickHouse'a özgü kod, appsettings bölümleri ve DI wiring'i tamamen kaldırıldı. Generic <code>DataSink</code> extension point'i (<code>IDataSinkManager</code>/registry/hosted service) korunuyor, böylece gelecekteki bir analytics sink'i write path'lerine dokunmadan eklenebilir. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
appsettings'inizde bir <code>ClickHouse</code> bölümü varsa kaldırın — artık okunmuyor. ClickHouse'a veri akıtan bir entegrasyon varsa (deploy edilmiş olması beklenmiyordu), yeni bir <code>IDataSinkManager</code> implementasyonu yazın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-tracemetric-console-exporterları-artık-varsayılan-olarak-kapalı">3. Trace/metric console exporter'ları artık varsayılan olarak kapalı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-86#3-tracemetric-console-exporterlar%C4%B1-art%C4%B1k-varsay%C4%B1lan-olarak-kapal%C4%B1" class="hash-link" aria-label="Direct link to 3. Trace/metric console exporter'ları artık varsayılan olarak kapalı" title="Direct link to 3. Trace/metric console exporter'ları artık varsayılan olarak kapalı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Execution ve Orchestration host telemetry config'i (<a href="https://github.com/burgan-tech/vnext/pull/911" target="_blank" rel="noopener noreferrer" class="">vnext #911</a>)</p>
<p><strong>Önceki Davranış:</strong>
Trace ve metric console exporter'ları production override'ı olmadan açık kalıyordu (logging console exporter'ı zaten yalnızca worker'larda açıktı).</p>
<p><strong>Yeni Davranış:</strong>
Execution ve Orchestration host'larının <code>appsettings.json</code>'ında trace/metric console exporter'ları kapatıldı; OTLP export değişmedi, logging console exporter'ı açık kalmaya devam ediyor. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Konsol çıktısındaki trace/metric satırlarına dayanan lokal debug/log toplama akışlarınız varsa, <code>appsettings</code>'te ilgili exporter'ı açıkça yeniden etkinleştirin.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-86">Release v0.0.86</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.85]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85</guid>
            <pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.85, script compiler ve ScriptContext performans çalışmasının davranışsal yan etkilerini, payload envelope algılamasındaki bir düzeltmeyi ve component cache'in generation-token memoization'ının devreye alınmasını taşır. Aşağıdaki maddelerin çoğu vnext-meta/migrations.json'a since: 0.0.85 olarak kaydedilmiştir.]]></description>
            <content:encoded><![CDATA[<p>v0.0.85, script compiler ve <code>ScriptContext</code> performans çalışmasının davranışsal yan etkilerini, payload envelope algılamasındaki bir düzeltmeyi ve component cache'in generation-token memoization'ının devreye alınmasını taşır. Aşağıdaki maddelerin çoğu <code>vnext-meta/migrations.json</code>'a <code>since: 0.0.85</code> olarak kaydedilmiştir.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-script-metriklerinde-hitmiss-ayrımı-ve-gerçek-execution-metrikleri-eklendi">1. Script metriklerinde hit/miss ayrımı ve gerçek execution metrikleri eklendi<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#1-script-metriklerinde-hitmiss-ayr%C4%B1m%C4%B1-ve-ger%C3%A7ek-execution-metrikleri-eklendi" class="hash-link" aria-label="Direct link to 1. Script metriklerinde hit/miss ayrımı ve gerçek execution metrikleri eklendi" title="Direct link to 1. Script metriklerinde hit/miss ayrımı ve gerçek execution metrikleri eklendi" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Prometheus <code>script_*</code> metrikleri (<a href="https://github.com/burgan-tech/vnext/pull/907" target="_blank" rel="noopener noreferrer" class="">vnext #907</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>script_executions_total</code> her zaman <strong>compile</strong> yolunda artıyordu (cache hit'ler dahil), gerçek script execution'ını yansıtmıyordu; compile ve execution latency'si ayrıştırılamıyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>script_compilations_total{result=hit|miss,status}</code> yeni metriği hit/miss'i ayırır; <code>script_execution_duration_seconds{script_type,language,status}</code> ve <code>script_runtime_errors_total{script_type,language,error_type}</code> gerçek execution funnel'larında (task-input, task-output, condition, transition-mapping, function) kaydedilir; <code>script_compilation_duration_seconds</code> yeni bir <code>cache</code> etiketi kazandı. <code>script_executions_total</code> değişmeden yayınlanmaya devam ediyor. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Compile-rate panellerini <code>rate(script_compilations_total[5m])</code>'e, temiz compile latency'sini <code>{cache="miss"}</code> filtresine, gerçek execution sayacını <code>script_execution_duration_seconds_count</code>'a taşıyın. Acil aksiyon gerekmez — eski metrik hâlâ yayınlanıyor (bkz. madde 9).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-task-audit-request-artık-tam-task-tanımı-yerine-referans-taşıyor">2. Task audit request artık tam task tanımı yerine referans taşıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#2-task-audit-request-art%C4%B1k-tam-task-tan%C4%B1m%C4%B1-yerine-referans-ta%C5%9F%C4%B1yor" class="hash-link" aria-label="Direct link to 2. Task audit request artık tam task tanımı yerine referans taşıyor" title="Direct link to 2. Task audit request artık tam task tanımı yerine referans taşıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>InstanceTask.Request</code> (transition/task audit kaydı) (<a href="https://github.com/burgan-tech/vnext/pull/907" target="_blank" rel="noopener noreferrer" class="">vnext #907</a>)</p>
<p><strong>Önceki Davranış:</strong>
Her execution'da <code>InstanceTask.Request</code>, mapping script kodu dahil <strong>tüm task tanımını</strong> gömüyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>Request.task</code> artık <code>{ key, version, domain, flow, type }</code> referansını taşır; tanımın kendisi component store'da yaşamaya devam eder. <code>InputResponse</code> değişmedi. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>request.task.*</code> altında tanım alanlarını (<code>config</code>, mapping kodu gibi) parse eden harici tüketiciler varsa, gömülü referansı kullanarak tanımı component store'dan çözümlemeye geçin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-instance-data-okumaları-artık-data-versiyonu-başına-tek-bir-materialize-edilmiş-ağacı-paylaşıyor">3. Instance data okumaları artık data versiyonu başına tek bir materialize edilmiş ağacı paylaşıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#3-instance-data-okumalar%C4%B1-art%C4%B1k-data-versiyonu-ba%C5%9F%C4%B1na-tek-bir-materialize-edilmi%C5%9F-a%C4%9Fac%C4%B1-payla%C5%9F%C4%B1yor" class="hash-link" aria-label="Direct link to 3. Instance data okumaları artık data versiyonu başına tek bir materialize edilmiş ağacı paylaşıyor" title="Direct link to 3. Instance data okumaları artık data versiyonu başına tek bir materialize edilmiş ağacı paylaşıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>scriptContext.instance.data</code> (<a href="https://github.com/burgan-tech/vnext/pull/907" target="_blank" rel="noopener noreferrer" class="">vnext #907</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>context.Instance.Data</code> her erişimde <strong>taze bir dynamic tree</strong> materialize ediyordu; script tarafındaki mutasyonlar bir sonraki okumada sessizce kayboluyordu.</p>
<p><strong>Yeni Davranış:</strong>
Okumalar artık data versiyonu başına memoize edilir — bir mutasyon aynı transition içindeki sonraki okumalarda görünür olur (<strong>hâlâ persist edilmez</strong>; kalıcılık yalnızca <code>ScriptResponse.Data</code> üzerinden delta-only'dir). Benzer şekilde, parallel-branch task response değerleri artık parent ile branch arasında referans olarak paylaşılır (container'lar izole kalır); branch içinde var olan bir response değerinin yerinde mutasyonu, join sonrası parent'ta görünür olur. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Script'ler <code>context.Instance.Data</code>'yı veya var olan task response değerlerini yerinde mutate edip eski "sessiz kayıp" davranışına güvenmemeli; değişiklikleri dokümante edildiği gibi <code>ScriptResponse.Data</code> üzerinden delta olarak döndürmeli.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-setbody-expandoobjectlist-anahtarlarını-yazıldığı-gibi-koruyor">4. <code>SetBody</code>, ExpandoObject/list anahtarlarını yazıldığı gibi koruyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#4-setbody-expandoobjectlist-anahtarlar%C4%B1n%C4%B1-yaz%C4%B1ld%C4%B1%C4%9F%C4%B1-gibi-koruyor" class="hash-link" aria-label="Direct link to 4-setbody-expandoobjectlist-anahtarlarını-yazıldığı-gibi-koruyor" title="Direct link to 4-setbody-expandoobjectlist-anahtarlarını-yazıldığı-gibi-koruyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>scriptContext.setBody</code> (ve <code>WithBody</code> builder yolu) (<a href="https://github.com/burgan-tech/vnext/pull/907" target="_blank" rel="noopener noreferrer" class="">vnext #907</a>)</p>
<p><strong>Önceki Davranış:</strong>
Bir ExpandoObject/List girişiyle <code>SetBody</code>, dictionary anahtarlarını global seçeneklerle serialize ediyordu; bu seçeneklerin <code>DictionaryKeyPolicy</code>'si anahtarları camelCase'e çeviriyordu.</p>
<p><strong>Yeni Davranış:</strong>
ExpandoObject/List girişi artık yapısal olarak klonlanır ve dictionary anahtarları <strong>yazıldığı gibi</strong> korunur. Anonymous-object/POCO girişleri değişmeden camelCase kalır. Bu, <code>SetBody</code>'yi (hiçbir zaman dict anahtarlarını camelCase yapmayan) <code>SetStandardResponse</code> ile ve instance-data ağaçlarıyla (persist anında camelCase) hizalar. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
<code>SetBody</code>'ye PascalCase expando anahtarları verip global ayarların camelCase yapmasına güvenen script'ler, kendi anahtarlarını kendileri camelCase yapmalı.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-parallel-branch-merge-conflict-tespiti-artık-yapısal-ve-sıradan-bağımsız">5. Parallel-branch merge conflict tespiti artık yapısal ve sıradan bağımsız<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#5-parallel-branch-merge-conflict-tespiti-art%C4%B1k-yap%C4%B1sal-ve-s%C4%B1radan-ba%C4%9F%C4%B1ms%C4%B1z" class="hash-link" aria-label="Direct link to 5. Parallel-branch merge conflict tespiti artık yapısal ve sıradan bağımsız" title="Direct link to 5. Parallel-branch merge conflict tespiti artık yapısal ve sıradan bağımsız" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>scriptContext.mergeParallelBranch</code> (<a href="https://github.com/burgan-tech/vnext/pull/907" target="_blank" rel="noopener noreferrer" class="">vnext #907</a>)</p>
<p><strong>Önceki Davranış:</strong>
Merge conflict tespiti serialize edilmiş metin karşılaştırmasına dayanıyordu ve sıraya duyarlıydı; aynı içeriğin farklı sırada gelen çıktısı sahte bir conflict fırlatıyordu.</p>
<p><strong>Yeni Davranış:</strong>
Karşılaştırma artık <code>JsonElement.DeepEquals</code> ile yapısal olarak yapılır (object property sırası göz ardı edilir); aynı içerik farklı sırada artık merge edilir. <strong>Yön: daha permissive.</strong></p>
<p><strong>Migration:</strong>
Aksiyon gerekmez — gerçekten farklı içerik için conflict semantiği değişmedi.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="6-kendine-referans-veren-script-değerleri-artık-sessizce-budanmak-yerine-hata-fırlatıyor">6. Kendine referans veren script değerleri artık sessizce budanmak yerine hata fırlatıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#6-kendine-referans-veren-script-de%C4%9Ferleri-art%C4%B1k-sessizce-budanmak-yerine-hata-f%C4%B1rlat%C4%B1yor" class="hash-link" aria-label="Direct link to 6. Kendine referans veren script değerleri artık sessizce budanmak yerine hata fırlatıyor" title="Direct link to 6. Kendine referans veren script değerleri artık sessizce budanmak yerine hata fırlatıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>scriptContext.setBody</code> — body/branch clone yolu (<a href="https://github.com/burgan-tech/vnext/pull/907" target="_blank" rel="noopener noreferrer" class="">vnext #907</a>)</p>
<p><strong>Önceki Davranış:</strong>
Body/branch clone JSON round-trip ile yapılıyordu (<code>ReferenceHandler.IgnoreCycles</code>); bir script bir ExpandoObject'i kendi içine (doğrudan veya transitif olarak) atadığında, tekrarlanan referans sessizce <code>null</code>'a çevriliyor ve task budanmış veriyle devam ediyordu.</p>
<p><strong>Yeni Davranış:</strong>
Clone artık yapısaldır ve aşırı nesting'i tespit ederek 256 derinlikte <code>InvalidOperationException</code> fırlatır; task normal error boundary üzerinden görünür şekilde fail olur. JSON'dan türeyen acyclic değerler etkilenmez. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Script'ler kendine referans veren dynamic değer üretmemeli. Bir mapping meşru olarak 256 seviyeden derin nesting yapıyorsa düzleştirin; bir task bu mesajla fail etmeye başlarsa mapping'i kendi içine atanan bir değer için inceleyin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="7-payload-envelope-algılaması-keytagsstagei-rezerve-ediyor-validation-hata-alanları-path-oldu">7. Payload envelope algılaması <code>key</code>/<code>tags</code>/<code>stage</code>'i rezerve ediyor; validation hata alanları path oldu<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#7-payload-envelope-alg%C4%B1lamas%C4%B1-keytagsstagei-rezerve-ediyor-validation-hata-alanlar%C4%B1-path-oldu" class="hash-link" aria-label="Direct link to 7-payload-envelope-algılaması-keytagsstagei-rezerve-ediyor-validation-hata-alanları-path-oldu" title="Direct link to 7-payload-envelope-algılaması-keytagsstagei-rezerve-ediyor-validation-hata-alanları-path-oldu" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Payload-mode algılaması (JSON ve form-url-encoded) ve JSON schema validation hata detayları (<a href="https://github.com/burgan-tech/vnext/pull/906" target="_blank" rel="noopener noreferrer" class="">vnext #906</a>)</p>
<p><strong>Önceki Davranış:</strong>
Payload-mode algılaması tek bir case-sensitive <code>attributes</code> alanına bakıyordu; <code>attributes</code> içermeyen bir envelope free-form sayılıp <strong>bütün olarak</strong> sarmalanıyor, schema <code>key</code>/<code>tags</code>'i business payload'u yerine doğruluyordu. Ayrıca reddedilen bir payload bazen hiçbir alan adı taşımadan (<code>"errors":{}</code>) geri dönebiliyordu — evaluation ağacı flatten edilirken bir node'un kendi hataları, child detayı varsa siliniyordu.</p>
<p><strong>Yeni Davranış:</strong>
Envelope algılaması artık <code>key</code>/<code>tags</code>/<code>stage</code>/<code>attributes</code> alan setinin <strong>tamamına</strong> bakar (her biri bağımsız opsiyonel). Bir node hem kendi hatasını hem child detaylarını raporlar; geçersiz bir subtree asla boş listeye düşmez. Hata alan adları artık keyword (<code>"required"</code>) değil, instance path'i (<code>root</code>, <code>customer.ownerUserId</code>) olarak döner. <strong>Free-form</strong> bir payload'un kendi alanları yalnızca <code>key</code>/<code>tags</code>/<code>stage</code> isimlerinden oluşuyorsa, bu bir envelope'tan ayırt edilemez ve <code>x-vnext-payload-mode: raw</code> header'ının gönderilmesi gerekir. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Eski keyword-tabanlı (<code>"required"</code>) hata alan adlarına dayanan client parsing'i instance path'lerine (<code>root</code>, <code>customer.ownerUserId</code>, ...) güncelleyin. Yalnızca <code>key</code>/<code>tags</code>/<code>stage</code> isimli alanlar taşıyan free-form bir payload gönderen entegrasyonlar <code>x-vnext-payload-mode: raw</code> header'ını eklemeli. Ayrıntı için vnext reposundaki <code>docs/contracts/form-url-encoded-payloads.md</code> ve <code>docs/contracts/json-validation.md</code>'e bakın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="8-component-generation-token-memoization-aktive-edildi--5-saniyelik-pod-arası-görünürlük-penceresi">8. Component generation-token memoization aktive edildi — ≤5 saniyelik pod-arası görünürlük penceresi<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#8-component-generation-token-memoization-aktive-edildi--5-saniyelik-pod-aras%C4%B1-g%C3%B6r%C3%BCn%C3%BCrl%C3%BCk-penceresi" class="hash-link" aria-label="Direct link to 8. Component generation-token memoization aktive edildi — ≤5 saniyelik pod-arası görünürlük penceresi" title="Direct link to 8. Component generation-token memoization aktive edildi — ≤5 saniyelik pod-arası görünürlük penceresi" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Orchestration host component cache (<code>ComponentCache:GenerationMemoSeconds</code>) (<a href="https://github.com/burgan-tech/vnext/pull/898" target="_blank" rel="noopener noreferrer" class="">vnext #898</a>)</p>
<p><strong>Önceki Davranış:</strong>
Memoization mekanizması koddan vardı ama varsayılan değeri <code>0</code>'dı (etkisizdi) — her generation-token okuması distributed cache'e (Redis/Dapr state) gidiyordu.</p>
<p><strong>Yeni Davranış:</strong>
Orchestration host'un <code>appsettings.json</code>'ında <code>ComponentCache:GenerationMemoSeconds</code> <code>5</code> saniyeye ayarlandı. Bu, publish yapan pod'un anında güncel kalmasını sağlarken, <strong>diğer pod'ların bir publish'i görmesi en fazla 5 saniye gecikebilir</strong>. Pinlenmiş full version'lar ve çalışan instance'lar etkilenmez. <code>ComponentCache__GenerationMemoSeconds</code> env var'ı ile ortam bazında override/disable edilebilir. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
CI/CD pipeline'ında son publish'ten sonra smoke test/cutover öncesi <code>N + margin</code> saniye bekleme kuralı ekleyin (rollback runbook'ları için de aynı pencere geçerli). Anlık görünürlük gereken ortamlarda değeri <code>0</code>'a çekin. Ayrıntı için vnext reposundaki <code>docs/runtime/component-cache-generation-memo.md</code>'a bakın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="9-script_executions_total-metriği-deprecated-edildi">9. <code>script_executions_total</code> metriği deprecated edildi<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-85#9-script_executions_total-metri%C4%9Fi-deprecated-edildi" class="hash-link" aria-label="Direct link to 9-script_executions_total-metriği-deprecated-edildi" title="Direct link to 9-script_executions_total-metriği-deprecated-edildi" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Prometheus <code>script_executions_total</code> (<code>vnext-meta/deprecations.json</code>)</p>
<p><strong>Önceki Davranış:</strong>
<code>script_executions_total</code>, tek "script execution sayacı" olarak dashboard/alert'lerde kullanılıyordu.</p>
<p><strong>Yeni Davranış:</strong>
Metrik <strong>deprecated</strong> olarak işaretlendi (geriye dönük uyumluluk için değişmeden yayınlanmaya devam ediyor) — yerini <code>script_compilations_total</code> (compile-or-fetch, <code>result=hit|miss</code>) ve <code>script_execution_duration_seconds_count</code> (gerçek execution) alıyor; gelecekteki bir sürümde kaldırılacak. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Dashboard/alert'leri madde 1'deki yeni metriklere taşıyın; <code>script_executions_total</code>'a olan bağımlılığı planlı şekilde kaldırın.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-85">Release v0.0.85</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.84]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84</guid>
            <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.84, instance query (filter/sort/groupBy/aggregation) doğrulamasını fail-open'dan fail-closed'a çevirir. Önceden desteklenmeyen veya bozuk bir sorgu parametresi sessizce yok sayılıp istek yine de 200 dönüyordu — bu sürümden sonra çalıştırılamayan her şey açıkça reddediliyor. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.84, instance query (<code>filter</code>/<code>sort</code>/<code>groupBy</code>/aggregation) doğrulamasını <strong>fail-open</strong>'dan <strong>fail-closed</strong>'a çevirir. Önceden desteklenmeyen veya bozuk bir sorgu parametresi sessizce yok sayılıp istek yine de 200 dönüyordu — bu sürümden sonra çalıştırılamayan her şey açıkça reddediliyor. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-geçersiz-filter-artık-400-ile-reddediliyor">1. Geçersiz <code>filter</code> artık 400 ile reddediliyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84#1-ge%C3%A7ersiz-filter-art%C4%B1k-400-ile-reddediliyor" class="hash-link" aria-label="Direct link to 1-geçersiz-filter-artık-400-ile-reddediliyor" title="Direct link to 1-geçersiz-filter-artık-400-ile-reddediliyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Instance list/filter sorguları — Orchestration ve Monitoring (<a href="https://github.com/burgan-tech/vnext/pull/881" target="_blank" rel="noopener noreferrer" class="">vnext #881</a>)</p>
<p><strong>Önceki Davranış:</strong>
Desteklenmeyen bir operatör (<code>gte</code>, <code>lte</code>, <code>neq</code>, <code>contains</code>, ...), bozuk/kesik JSON veya yanlış yazılmış bir envelope anahtarı (<code>fitler</code>) sessizce yok sayılıyor, ilgili koşul hiç uygulanmadan sorgu <strong>tüm satırları</strong> döndürüyordu.</p>
<p><strong>Yeni Davranış:</strong>
Bu durumların tamamı <code>400 Validation:900011</code> ile (<code>filter.unknownOperator</code>, <code>filter.unrecognizedFormat</code>, <code>filter.unknownProperty</code>, <code>filter.noOperator</code>, <code>filter.emptyLogicalOperator</code>, <code>filter.legacyNotAggregatable</code> gibi alt kodlarla) reddedilir; bilinen yazım hataları için düzeltme önerisi de döner (<code>gte</code> → <code>ge</code> gibi). Boş filtre (<code>{}</code>, <code>{"attributes":{}}</code>) hâlâ "kısıtlama yok" anlamına gelir. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>gte</code>/<code>lte</code>/<code>neq</code>/<code>contains</code> gibi vocabulary-dışı operatörleri desteklenen wire operatörlerine çevirin (<code>ge</code>, <code>le</code>, <code>ne</code>, <code>like</code>/<code>match</code>). Bu operatörlerin daha önce <strong>geniş</strong> sonuç döndürdüğünü unutmayın — onlara dayanan rapor/ekranlarda sayılar yanlış olabilir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-geçersiz-sortorderby-artık-400-ile-reddediliyor">2. Geçersiz <code>sort</code>/<code>orderBy</code> artık 400 ile reddediliyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84#2-ge%C3%A7ersiz-sortorderby-art%C4%B1k-400-ile-reddediliyor" class="hash-link" aria-label="Direct link to 2-geçersiz-sortorderby-artık-400-ile-reddediliyor" title="Direct link to 2-geçersiz-sortorderby-artık-400-ile-reddediliyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Instance list sıralaması — Orchestration ve Monitoring (<a href="https://github.com/burgan-tech/vnext/pull/881" target="_blank" rel="noopener noreferrer" class="">vnext #881</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>sort=-createdAt</code> gibi bir kısayol, yanlış <code>direction</code> değeri, bilinmeyen alan adı veya güvensiz <code>attributes.</code> path'i sessizce yok sayılıyor, sorgu <code>CreatedAt DESC</code>'e düşüyordu.</p>
<p><strong>Yeni Davranış:</strong>
Tüm bu durumlar <code>400 Validation:900012</code> ile (<code>sort.invalidJson</code>, <code>sort.invalidDirection</code>, <code>sort.unknownField</code>, <code>sort.unsafePath</code>) reddedilir. <code>sort</code>/<code>orderBy</code> her zaman JSON formatı gerektirir: <code>sort={"field":"createdAt","direction":"desc"}</code>. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>-field</code> kısayolunu kullanan tüm client/entegrasyonları JSON forma taşıyın. Erişim loglarını <code>sort=</code>/<code>orderBy=</code> için tarayıp <code>{</code> (URL-encoded <code>%7B</code>) ile başlamayan değerleri düzeltin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-groupbyaggregation-doğrulaması-ve-legacy-filtre--aggregation-kombinasyonu-reddi">3. <code>groupBy</code>/aggregation doğrulaması ve legacy filtre + aggregation kombinasyonu reddi<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84#3-groupbyaggregation-do%C4%9Frulamas%C4%B1-ve-legacy-filtre--aggregation-kombinasyonu-reddi" class="hash-link" aria-label="Direct link to 3-groupbyaggregation-doğrulaması-ve-legacy-filtre--aggregation-kombinasyonu-reddi" title="Direct link to 3-groupbyaggregation-doğrulaması-ve-legacy-filtre--aggregation-kombinasyonu-reddi" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Instance query aggregation/groupBy — Orchestration ve Monitoring (<a href="https://github.com/burgan-tech/vnext/pull/881" target="_blank" rel="noopener noreferrer" class="">vnext #881</a>)</p>
<p><strong>Önceki Davranış:</strong>
Legacy (<code>field=operator:value</code>) formatta bir filtre <code>groupBy</code>/aggregation ile birlikte kullanıldığında GraphQL parser'a olduğu gibi veriliyor, koşul sessizce üretilmiyor ve aggregation <strong>filtresiz</strong> çalışıyordu; boş/bozuk aggregation JSON'u da benzer şekilde yok sayılıyordu.</p>
<p><strong>Yeni Davranış:</strong>
Legacy format + aggregation kombinasyonu <code>400 Validation:900011</code> (<code>filter.legacyNotAggregatable</code>) ile reddedilir; geçersiz <code>groupBy</code>/aggregation JSON'u sırasıyla <code>400 Validation:900013</code> / <code>Validation:900014</code> döner. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Grouping/aggregation kullanan sorgularda filtreyi GraphQL-tarzı JSON olarak yazın; legacy <code>field=operator:value</code> sözdizimini bırakın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-getinstancestaskta--field-sort-kısayolu-artık-reddediliyor-geçersiz-filtre-taskı-fail-ediyor">4. <code>GetInstancesTask</code>'ta <code>"-field"</code> sort kısayolu artık reddediliyor; geçersiz filtre task'ı fail ediyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-84#4-getinstancestaskta--field-sort-k%C4%B1sayolu-art%C4%B1k-reddediliyor-ge%C3%A7ersiz-filtre-task%C4%B1-fail-ediyor" class="hash-link" aria-label="Direct link to 4-getinstancestaskta--field-sort-kısayolu-artık-reddediliyor-geçersiz-filtre-taskı-fail-ediyor" title="Direct link to 4-getinstancestaskta--field-sort-kısayolu-artık-reddediliyor-geçersiz-filtre-taskı-fail-ediyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>GetInstancesTask</code> workflow task'ı — local ve remote (Dapr) yürütme (<a href="https://github.com/burgan-tech/vnext/pull/881" target="_blank" rel="noopener noreferrer" class="">vnext #881</a>)</p>
<p><strong>Önceki Davranış:</strong>
Task tanımındaki <code>sort</code>/<code>filter</code> çalıştırmadan önce doğrulanmıyordu; <code>"sort": "-CreatedAt"</code> dokümante edilmiş bir kısayol gibi görünse de hiçbir zaman çalışmıyordu — <code>ParseOrderBy</code> <code>null</code> dönüyor ve sorgu <code>CreatedAt DESC</code>'e düşüyordu. Geçersiz bir <code>filter</code> de task'ı sessizce filtresiz çalıştırıyordu.</p>
<p><strong>Yeni Davranış:</strong>
Task'ın <code>filter</code> ve <code>sort</code> alanları çalıştırmadan önce doğrulanır; geçersiz bir değer <code>Result.Fail</code> döner ve error boundary zincirine girer — bir <code>Abort</code> kuralı altında <strong>instance <code>Faulted</code> olabilir</strong>. Bu, önceden çalışan ve deploy edilmiş tanımların, kod değişikliği olmadan yalnızca runtime upgrade'i ile durabileceği anlamına gelir. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>"sort": "-CreatedAt"</code> değerini <code>"sort": "{\"field\":\"createdAt\",\"direction\":\"desc\"}"</code> gibi JSON forma geçirin (ayrıntılı eşleme tablosu için vnext reposundaki <code>docs/contracts/instance-query-validation-breaking-changes.md</code>'e bakın). Runtime upgrade'inden <strong>önce</strong> domain paketlerinizi <code>"sort"</code> alanı <code>{</code> ile başlamayan tüm <code>GetInstancesTask</code> tanımları için tarayın ve redeploy edin.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-81-84">Release v0.0.84</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.80]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80</guid>
            <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.80, $self hedefli transition'lar için pipeline'ı sadeleştirir, cancel/exit/timeout transition'larının Busy durumunu ne zaman set ettiğini değiştirir ve orchestration→execution sınırında correlation/trace header'larını sağlamlaştırır. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.80, <code>$self</code> hedefli transition'lar için pipeline'ı sadeleştirir, cancel/exit/timeout transition'larının Busy durumunu ne zaman set ettiğini değiştirir ve orchestration→execution sınırında correlation/trace header'larını sağlamlaştırır. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-updatedata-artık-statein-onentryonexitini-tekrar-çalıştırmıyor-timerları-yeniden-kurmuyor">1. <code>updateData</code> artık state'in OnEntry/OnExit'ini tekrar çalıştırmıyor, timer'ları yeniden kurmuyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80#1-updatedata-art%C4%B1k-statein-onentryonexitini-tekrar-%C3%A7al%C4%B1%C5%9Ft%C4%B1rm%C4%B1yor-timerlar%C4%B1-yeniden-kurmuyor" class="hash-link" aria-label="Direct link to 1-updatedata-artık-statein-onentryonexitini-tekrar-çalıştırmıyor-timerları-yeniden-kurmuyor" title="Direct link to 1-updatedata-artık-statein-onentryonexitini-tekrar-çalıştırmıyor-timerları-yeniden-kurmuyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Transition pipeline — <code>$self</code> hedefli transition'lar (<code>migrations.json</code>: <code>self-target-transitions-skip-state-lifecycle</code>) (<a href="https://github.com/burgan-tech/vnext/pull/883" target="_blank" rel="noopener noreferrer" class="">vnext #883</a>, <a href="https://github.com/burgan-tech/vnext/pull/884" target="_blank" rel="noopener noreferrer" class="">vnext #884</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>updateData</code> (hedefi her zaman <code>$self</code>e sabitlenmiş) tüm pipeline'ı çalıştırıyordu: mevcut state'in <code>OnExit</code> task'ları çalışıyor, aynı state'in <code>OnEntry</code> task'ları ikinci kez çalışıyor ve state'in scheduled transition'ları iptal edilip sıfırdan yeniden kuruluyordu — her timeout sessizce sıfırlanıyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>updateData</code> için <code>CancelScheduledJobs (39)</code>, <code>OnExit (40)</code>, <code>OnEntry (60)</code> ve <code>Schedule (80)</code> adımları hariç tutulur. Transition'ın kendi <code>onExecutionTasks</code>'i, data yazımı ve auto-transition değerlendirmesi değişmeden çalışır; state hiç terk edilmediği/girilmediği için lifecycle hook'ları tekrar tetiklenmez. <strong>Yalnızca gerçek <code>updateData</code> transition'ını etkiler</strong> — <code>$self</code> hedefli shared transition'lar (ve literal self-loop'lar) tam lifecycle'ı çalıştırmaya devam eder. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
<code>updateData</code>'nın state'in <code>OnEntry</code>'sini tekrar çalıştırmasına dayanan domain'ler bu mantığı transition'ın kendi <code>onExecutionTasks</code>'ine taşımalı. <code>updateData</code>'nın scheduled-transition timer'ını sıfırlamasına dayanan akışlar resetlemeyi kendileri modellemeli. Domain tanımlarında <code>"target": "$self"</code> için grep atmak faydalı olur.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-cancelexittimeout-artık-busyyi-pipeline-yerine-accept-anında-set-ediyor">2. cancel/exit/timeout artık Busy'yi pipeline yerine accept anında set ediyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80#2-cancelexittimeout-art%C4%B1k-busyyi-pipeline-yerine-accept-an%C4%B1nda-set-ediyor" class="hash-link" aria-label="Direct link to 2. cancel/exit/timeout artık Busy'yi pipeline yerine accept anında set ediyor" title="Direct link to 2. cancel/exit/timeout artık Busy'yi pipeline yerine accept anında set ediyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Transition admission / Busy durumu (<a href="https://github.com/burgan-tech/vnext/pull/884" target="_blank" rel="noopener noreferrer" class="">vnext #884</a>)</p>
<p><strong>Önceki Davranış:</strong>
cancel/exit/timeout transition'ları Busy 409 kontrolünden muaftı ve Busy bayrağı pipeline içinde set ediliyordu; bu transition'lar admission sırasında ayrı bir kilit almıyordu.</p>
<p><strong>Yeni Davranış:</strong>
cancel/exit/timeout artık Busy'yi <strong>accept anında</strong>, diğer tüm transition kind'leriyle aynı tek kilit altında set eder; iş <code>IsPreReserved</code> olarak pipeline'a girer ve pipeline ikinci kez kilit almaz. Sonuç: bir client'ın instance'ı Busy olarak gözlemlediği an daha erken kayar. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
Busy durumunu 202 yanıtından hemen sonra kontrol eden client/monitoring akışları, bu durumu artık daha erken görebileceğini hesaba katmalı; timing'e dayanan test veya izleme senaryolarını gözden geçirin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-task-bindinglerinde-reserved-tracecorrelation-headerları-artık-ezilemiyor">3. Task binding'lerinde reserved trace/correlation header'ları artık ezilemiyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80#3-task-bindinglerinde-reserved-tracecorrelation-headerlar%C4%B1-art%C4%B1k-ezilemiyor" class="hash-link" aria-label="Direct link to 3. Task binding'lerinde reserved trace/correlation header'ları artık ezilemiyor" title="Direct link to 3. Task binding'lerinde reserved trace/correlation header'ları artık ezilemiyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Outbound task header binding'leri — HTTP, SOAP, Dapr service/binding/pub-sub/trigger invoker'ları (<a href="https://github.com/burgan-tech/vnext/pull/879" target="_blank" rel="noopener noreferrer" class="">vnext #879</a>, <a href="https://github.com/burgan-tech/vnext/pull/882" target="_blank" rel="noopener noreferrer" class="">vnext #882</a>)</p>
<p><strong>Önceki Davranış:</strong>
Bir task binding'i (mapping/config) <code>traceparent</code>, <code>tracestate</code>, <code>baggage</code>, <code>x-request-id</code>, <code>X-Correlation-Id</code> veya <code>X-Workflow-Instance-Id</code> header'larını kendi değerleriyle set edebiliyordu; bu, correlation zincirini kopartabiliyor veya sahte bir correlation ID'yi taşıyabiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
Bu altı header <strong>reserved</strong> kabul edilir (<code>IsReservedTraceHeader</code>) — mapping'de tanımlı değerleri kaldırılır ve yalnızca doğrulanmış activity baggage'ından gelen değerlerle yeniden yazılır. Kimlik claim'leri (<code>sub</code>, <code>act_sub</code>) reserved değildir ve yalnızca <strong>fill-if-absent</strong> kuralına tabidir — binding bunları set ederse o değer kazanır. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
Task tanımlarında bu altı header'ı elle set eden mapping'leri tarayın; artık hiçbir etkisi olmayacak. Correlation zincirini taşımak için bu değerlere ihtiyaç varsa, header yerine platformun otomatik yaydığı context'e güvenin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-log-enricher-alan-adları-requestheader-prefixi-olmadan-geliyor">4. Log enricher alan adları <code>RequestHeader.</code> prefix'i olmadan geliyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-80#4-log-enricher-alan-adlar%C4%B1-requestheader-prefixi-olmadan-geliyor" class="hash-link" aria-label="Direct link to 4-log-enricher-alan-adları-requestheader-prefixi-olmadan-geliyor" title="Direct link to 4-log-enricher-alan-adları-requestheader-prefixi-olmadan-geliyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Structured logging enricher alanları (Aether ≥ 1.0.35) (<a href="https://github.com/burgan-tech/vnext/pull/882" target="_blank" rel="noopener noreferrer" class="">vnext #882</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>sub</code> / <code>act_sub</code> gibi identity claim'leri log kayıtlarında <code>requestheader_act_sub</code> gibi prefix'li ve backend'e göre düzleştirilmiş adlarla görünüyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>LoggingEnricherOptions:RequestHeaderKeyPrefix</code> her host'ta <code>""</code> olarak ayarlandı; alanlar artık <code>sub</code>, <code>act_sub</code>, <code>jti</code>, <code>role</code>, <code>x_parent_instance_id</code>, <code>user_agent</code> gibi prefix'siz adlarla yazılıyor. Response header'ları için prefix varsayılanda kalır. <strong>Yön: davranış değişikliği.</strong></p>
<p><strong>Migration:</strong>
<code>requestheader_act_sub</code> gibi eski alan adlarına dayanan Kibana/Elastic dashboard'larını ve saved query'lerini yeni prefix'siz adlara (<code>act_sub</code>, <code>sub</code>, …) güncelleyin. Bu değişiklik Aether ≥ 1.0.35 gerektirir.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-80">Release v0.0.80</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
        <item>
            <title><![CDATA[Breaking Changes: v0.0.79]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79</guid>
            <pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v0.0.79, yetkilendirme yüzeylerini tek bir grant değerlendirme çekirdeğinde birleştirir, sessizce bozuk çalışan doğrulamaları düzeltir ve transition kilitleme modelini Busy-as-mutex ile değiştirir. Bu değişikliklerin bir kısmı gözlemlenebilir davranışı değiştirir. Aşağıdaki maddeleri sürüm geçişinden önce gözden geçirin.]]></description>
            <content:encoded><![CDATA[<p>v0.0.79, yetkilendirme yüzeylerini tek bir grant değerlendirme çekirdeğinde birleştirir, sessizce bozuk çalışan doğrulamaları düzeltir ve transition kilitleme modelini <strong>Busy-as-mutex</strong> ile değiştirir. Bu değişikliklerin bir kısmı gözlemlenebilir davranışı değiştirir. Aşağıdaki maddeleri sürüm geçişinden <strong>önce</strong> gözden geçirin.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="breaking-changes">Breaking Changes<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-x-roles-deny-artık-tüm-grant-seti-genelinde-uygulanıyor">1. <code>x-roles</code> DENY artık tüm grant seti genelinde uygulanıyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#1-x-roles-deny-art%C4%B1k-t%C3%BCm-grant-seti-genelinde-uygulan%C4%B1yor" class="hash-link" aria-label="Direct link to 1-x-roles-deny-artık-tüm-grant-seti-genelinde-uygulanıyor" title="Direct link to 1-x-roles-deny-artık-tüm-grant-seti-genelinde-uygulanıyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Şema <code>x-roles</code> alan bazlı görünürlük (<a href="https://github.com/burgan-tech/vnext/pull/860" target="_blank" rel="noopener noreferrer" class="">vnext #860</a>)</p>
<p><strong>Önceki Davranış:</strong>
Ön tanımlı bir rolü hedefleyen DENY grant'ı, çağıran alakasız herhangi bir role sahipse deliniyordu — o rol hiçbir grant'la eşleşmiyor, set blacklist kuralına düşüyor ve alan görünür kalıyordu.</p>
<p><strong>Yeni Davranış:</strong>
DENY, grant setinin tamamı genelinde değerlendirilir ve her zaman ALLOW'u ezer. Önceki açıktan yararlanarak görünür kalan alanlar artık gizlenir. <strong>Yön: daha kısıtlayıcı.</strong></p>
<p><strong>Migration:</strong>
<code>x-roles</code> içinde DENY kullanan domain'ler alan görünürlüğünü yeniden test etmeli; bir alanın "yanlışlıkla görünür" olmasına dayanan client davranışı varsa düzeltilmeli.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-x-roles-yalnızca-deny-setler-rolsüz-çağırana-görünür">2. <code>x-roles</code> yalnızca-DENY setler rolsüz çağırana görünür<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#2-x-roles-yaln%C4%B1zca-deny-setler-rols%C3%BCz-%C3%A7a%C4%9F%C4%B1rana-g%C3%B6r%C3%BCn%C3%BCr" class="hash-link" aria-label="Direct link to 2-x-roles-yalnızca-deny-setler-rolsüz-çağırana-görünür" title="Direct link to 2-x-roles-yalnızca-deny-setler-rolsüz-çağırana-görünür" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Şema <code>x-roles</code> alan bazlı görünürlük (<a href="https://github.com/burgan-tech/vnext/pull/860" target="_blank" rel="noopener noreferrer" class="">vnext #860</a>)</p>
<p><strong>Önceki Davranış:</strong>
Rolü hiç çözümlenemeyen (ör. yalnızca legacy <code>role</code> header'ı taşıyan) bir çağıran, yalnızca DENY içeren bir set karşısında bile alanı göremiyordu.</p>
<p><strong>Yeni Davranış:</strong>
Kanonik blacklist semantiği uygulanır: yalnızca-DENY bir set, DENY'a takılmayan herkese (rolsüz çağıran dahil) izin verir. ALLOW listesi içeren setler etkilenmez. <strong>Yön: daha permissive.</strong></p>
<p><strong>Migration:</strong>
Rolsüz bir çağırana asla ulaşmaması gereken alanlara açık bir <strong>ALLOW listesi</strong> tanımlayın — yalnızca DENY ile koruma yapmayın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-human-task-listesi-execution-ile-aynı-kurala-geçti">3. Human-task listesi execution ile aynı kurala geçti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#3-human-task-listesi-execution-ile-ayn%C4%B1-kurala-ge%C3%A7ti" class="hash-link" aria-label="Direct link to 3. Human-task listesi execution ile aynı kurala geçti" title="Direct link to 3. Human-task listesi execution ile aynı kurala geçti" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Human-task (kullanıcı görev listesi) filtreleme (<a href="https://github.com/burgan-tech/vnext/pull/860" target="_blank" rel="noopener noreferrer" class="">vnext #860</a>)</p>
<p><strong>Önceki Davranış:</strong>
Liste, statik <strong>ve</strong> ön tanımlı rol eşleşmesini birlikte şart koşuyor, dynamic grant'ları yok sayıyor ve behalf-of grant'larını yanlış kimlik alanıyla karşılaştırıyordu — kullanıcının çalıştırabildiği bir transition listede görünmeyebiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
Liste, transition execution ile aynı herhangi-bir-ALLOW-eşleşir kuralını uygular ve dynamic grant'ları tanır. <strong>Yön: daha permissive</strong> — kullanıcının zaten çalıştırabildiği görevler artık listede görünür.</p>
<p><strong>Migration:</strong>
Görev listesi hacmine duyarlı ekranlar varsa (ör. süpervizör panoları) liste büyümesini gözlemleyin; yetki daralması gerekiyorsa <code>roles</code> tanımlarını gözden geçirin.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-dynamic-role-grant-sözdizimi-doğrulaması-artık-gerçekten-hata-üretiyor">4. Dynamic role grant sözdizimi doğrulaması artık gerçekten hata üretiyor<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#4-dynamic-role-grant-s%C3%B6zdizimi-do%C4%9Frulamas%C4%B1-art%C4%B1k-ger%C3%A7ekten-hata-%C3%BCretiyor" class="hash-link" aria-label="Direct link to 4. Dynamic role grant sözdizimi doğrulaması artık gerçekten hata üretiyor" title="Direct link to 4. Dynamic role grant sözdizimi doğrulaması artık gerçekten hata üretiyor" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Component doğrulama — <strong>tüm</strong> transition tipleri (<a href="https://github.com/burgan-tech/vnext/pull/859" target="_blank" rel="noopener noreferrer" class="">vnext #859</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>ValidateRoleGrants</code> hiç hata üretemiyordu. <code>$user.$.Context.ownerId</code> gibi büyük/küçük harf hatalı ya da bozuk bir dynamic grant, doğrulamadan geçiyor ve çalışma zamanında sessizce etkisiz kalıyordu (asla eşleşmeyen bir ALLOW ya da asla engellemeyen bir DENY).</p>
<p><strong>Yeni Davranış:</strong>
Bozuk dynamic grant'lar (<code>$user.</code>/<code>$role.</code> ile başlayıp geçerli forma uymayanlar) deploy sırasında <strong>doğrulama hatası</strong> üretir. Statik rol adları ve dört ön tanımlı instance rolü serbest biçimli kalır.</p>
<p><strong>Migration:</strong>
Sürüme geçmeden önce mevcut domain paketlerini tarayın: <code>$user.</code> / <code>$role.</code> / <code>$.context.</code> içeren tüm <code>roles</code> tanımlarının sözdizimini kontrol edin. Önceden sessizce etkisiz olan grant'lar deploy'u durduracaktır.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-well-known-transitionlar-executionda-availablein-ile-sınırlandı">5. Well-known transition'lar execution'da <code>availableIn</code> ile sınırlandı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#5-well-known-transitionlar-executionda-availablein-ile-s%C4%B1n%C4%B1rland%C4%B1" class="hash-link" aria-label="Direct link to 5-well-known-transitionlar-executionda-availablein-ile-sınırlandı" title="Direct link to 5-well-known-transitionlar-executionda-availablein-ile-sınırlandı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>cancel</code> / <code>updateData</code> / <code>exit</code> transition execution (<a href="https://github.com/burgan-tech/vnext/pull/870" target="_blank" rel="noopener noreferrer" class="">vnext #870</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>availableIn</code> yalnızca discovery'yi etkiliyordu; <code>cancel</code>, <code>updateData</code> ve <code>exit</code>, <code>availableIn</code> ne derse desin <strong>her state'ten</strong> POST edilebiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
Execution da state gate uygular: <code>availableIn</code> kapsamı dışındaki bir state'ten gelen istek <code>Transition:100024</code> ile reddedilir. Error-boundary bypass korunur.</p>
<p><strong>Migration:</strong>
Well-known transition'ları <code>availableIn</code> dışındaki state'lerden çağıran client/otomasyon akışlarını tespit edin; ya <code>availableIn</code> kapsamını genişletin ya da çağrıyı doğru state'e taşıyın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="6-orchestration-host-hrefleri-apidomain--apiv1domain">6. Orchestration host href'leri <code>/api/{domain}</code> → <code>/api/v1/{domain}</code><a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#6-orchestration-host-hrefleri-apidomain--apiv1domain" class="hash-link" aria-label="Direct link to 6-orchestration-host-hrefleri-apidomain--apiv1domain" title="Direct link to 6-orchestration-host-hrefleri-apidomain--apiv1domain" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>UrlTemplates</code> yapılandırması ve client'lara dönen href'ler (<a href="https://github.com/burgan-tech/vnext/pull/871" target="_blank" rel="noopener noreferrer" class="">vnext #871</a>)</p>
<p><strong>Önceki Davranış:</strong>
Orchestration host <code>/api/{domain}/…</code> şablonları ile yapılandırılmıştı — route'ların gerçekte gerektirdiği <code>v1</code> segmentini atlıyordu; üretilen href'ler uygulamanın kendisinin 404 verdiği bir yolu işaret ediyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>UrlTemplates</code> tek bir <code>BasePath</code> ayarına indirgendi; bölüm tamamen atlanırsa varsayılan <code>/api/v1</code> kullanılır. Orchestration host href'leri artık <code>/api/v1/{domain}/…</code> üretir. Monitor href'leri (<code>/api/v1/monitor/…</code>) değişmedi.</p>
<p><strong>Migration:</strong>
Gateway'iniz gerçekten <code>/api/{domain}/…</code> rotası servis ediyorsa host'a şunu ekleyin:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token property" style="color:#36acaa">"UrlTemplates"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"BasePath"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/api"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Eski tam-şablon stilinde yazılmış herhangi bir override (env var dahil) <strong>verbatim</strong> kullanılmaya devam eder — <code>BasePath</code> öne eklenmez. Ayrıntı: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/configuration/url-templates">URL Templates</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="7-updatedata--exit-görünürlüğü-instance-listelerini-hafifçe-genişletir">7. <code>updateData</code> / <code>exit</code> görünürlüğü instance listelerini hafifçe genişletir<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#7-updatedata--exit-g%C3%B6r%C3%BCn%C3%BCrl%C3%BC%C4%9F%C3%BC-instance-listelerini-hafif%C3%A7e-geni%C5%9Fletir" class="hash-link" aria-label="Direct link to 7-updatedata--exit-görünürlüğü-instance-listelerini-hafifçe-genişletir" title="Direct link to 7-updatedata--exit-görünürlüğü-instance-listelerini-hafifçe-genişletir" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>availableTransitions</code> ve instance list sorguları (<a href="https://github.com/burgan-tech/vnext/pull/859" target="_blank" rel="noopener noreferrer" class="">vnext #859</a>)</p>
<p><strong>Önceki Davranış:</strong>
Instance list filtreleri "çağıranın yetkili olduğu en az bir transition" kuralında yalnızca state/shared transition'ları ve <code>cancel</code>'ı sayıyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>updateData</code> ve <code>exit</code> de sayılır: tek yetkili transition'ı rolsüz bir <code>exit</code> olan instance, önceden görünmezken artık listede görünür. (<code>cancel</code> için bu davranış zaten geçerliydi; tutarlılık için genişletildi.)</p>
<p><strong>Migration:</strong>
Instance listelerinin daralmasına dayanan raporlama/ekran varsa sonuç kümelerini doğrulayın; görünürlüğü daraltmak için <code>exit</code> / <code>updateData</code> transition'larına <code>roles</code> tanımlayın.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="8-chain-token-kilidi-kaldırıldı--busy-artık-yürütme-mutexi">8. Chain-token kilidi kaldırıldı — Busy artık yürütme mutex'i<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#8-chain-token-kilidi-kald%C4%B1r%C4%B1ld%C4%B1--busy-art%C4%B1k-y%C3%BCr%C3%BCtme-mutexi" class="hash-link" aria-label="Direct link to 8. Chain-token kilidi kaldırıldı — Busy artık yürütme mutex'i" title="Direct link to 8. Chain-token kilidi kaldırıldı — Busy artık yürütme mutex'i" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Transition kabulü ve eşzamanlılık (<a href="https://github.com/burgan-tech/vnext/pull/877" target="_blank" rel="noopener noreferrer" class="">vnext #877</a>)</p>
<p><strong>Önceki Davranış:</strong>
Transition yürütmesi uzun lease'li (330 sn) dağıtık chain-token kilidiyle korunuyordu; eşzamanlı istekler kilit üzerinde bekleyebiliyor, kilit kaçakları preprod'da DB-pool tükenmesine kadar kaskatlanabiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>Busy</code> durumu yürütme mutex'inin kendisidir. State/shared transition'lar instance <code>Busy</code> iken <strong>409</strong> alır; <code>cancel</code>/<code>exit</code> busy check'ten muaftır; kabul sonrası pipeline kilitsiz çalışır. <code>ChainToken</code>/<code>ChainLockRegistry</code>/<code>ChainReaper</code> kaldırıldı, kolonlar migration ile düşer. Bilinen ödünleşim: sync path'te pod çökerse instance, async job recovery devralana kadar Busy kalır.</p>
<p><strong>Migration:</strong>
409'u kilit beklemesi gibi yeniden deneyen client'ları gözden geçirin: Busy çakışmasında 409 artık <strong>beklenen</strong> yanıttır. Instance aktifken paralel veri basan akışları <code>updateData</code>'ya taşıyın (madde 9).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="9-updatedata-semantiği-değişti--status-neutral-subflowa-forward-yok">9. <code>updateData</code> semantiği değişti — status-neutral, subflow'a forward yok<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#9-updatedata-semanti%C4%9Fi-de%C4%9Fi%C5%9Fti--status-neutral-subflowa-forward-yok" class="hash-link" aria-label="Direct link to 9-updatedata-semantiği-değişti--status-neutral-subflowa-forward-yok" title="Direct link to 9-updatedata-semantiği-değişti--status-neutral-subflowa-forward-yok" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> <code>updateData</code> transition davranışı (<a href="https://github.com/burgan-tech/vnext/pull/877" target="_blank" rel="noopener noreferrer" class="">vnext #877</a>)</p>
<p><strong>Önceki Davranış:</strong>
<code>updateData</code> Busy durumuna takılabiliyor ve instance'ı Busy'de bırakabiliyordu; aktif subflow varken istek subflow'a yönlendirilebiliyordu. Durable <code>ResumePoint</code> checkpoint'i retry'larda kaldığı yerden devam ettiriyordu.</p>
<p><strong>Yeni Davranış:</strong>
<code>updateData</code> <strong>koşulsuz kabul edilen, status-neutral</strong> bir reserve transition'dır: Busy'yi ne set eder ne çözer. Düz instance'ta normal pipeline'ı çalıştırır (auto'lar her updateData sonrası, order 90'da değerlendirilir); <strong>aktif subflow'da olsa bile istek parent'ta karşılanır ve subflow'a forward edilmez</strong> — parent datası güncellenir ve bırakılır. <code>ResumePoint</code> kaldırıldı: retry'lar pipeline'ı baştan çalıştırır; mükerrer koruması transition-record guard'ı ve task journal'dadır.</p>
<p><strong>Migration:</strong>
Subflow'a updateData forward edilmesine dayanan akışlar varsa, subflow'un kendi <code>updateData</code> tanımına doğrudan (subflow instance'ına) istek atın. Paralel updateData altında mapping'leri <strong>delta-only</strong> çıktı verecek şekilde gözden geçirin; aynı order'daki paralel branch'lerde farklı task tanımları kullanın. Ayrıntı: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/workflow#transition-y%C3%BCr%C3%BCtme-modeli-lock-ve-busy-check">Workflow → Transition Yürütme Modeli</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="10-instancedata-yazım-modeli--anlık-kalıcılık-historysequence-kaldırıldı">10. InstanceData yazım modeli — anlık kalıcılık, <code>HistorySequence</code> kaldırıldı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/breaking-changes/breaking-changes-v0-0-79#10-instancedata-yaz%C4%B1m-modeli--anl%C4%B1k-kal%C4%B1c%C4%B1l%C4%B1k-historysequence-kald%C4%B1r%C4%B1ld%C4%B1" class="hash-link" aria-label="Direct link to 10-instancedata-yazım-modeli--anlık-kalıcılık-historysequence-kaldırıldı" title="Direct link to 10-instancedata-yazım-modeli--anlık-kalıcılık-historysequence-kaldırıldı" translate="no">​</a></h3>
<p><strong>Etkilenen Alan:</strong> Instance data versiyonlama ve kalıcılık (<a href="https://github.com/burgan-tech/vnext/pull/877" target="_blank" rel="noopener noreferrer" class="">vnext #877</a>)</p>
<p><strong>Önceki Davranış:</strong>
InstanceData yazımları DbContext seviyesinde tek noktadan, geciktirilmiş şekilde kalıcılaşıyordu; versiyon kimliği DB trigger'ı ve in-memory rebase makinesiyle üretiliyordu. Çökme, task çıktısını kaybedebiliyor; versiyon kimliği yarışabiliyordu.</p>
<p><strong>Yeni Davranış:</strong>
Her InstanceData satırı üretildiği <strong>anda</strong> kalıcılaşır; satır kimliği (<code>VersionNo = MAX(VersionNo)+1</code>, head + strateji, içerik hash dedup'u) instance başına <code>FOR UPDATE</code> kilidi altında hesaplanır. DB versioning trigger'ı, <code>Instance.AddData</code>/<code>AddDataWithVersion</code> ve <code>HistorySequence</code> kolonu kaldırıldı (migration'lar geri alınabilir). Kabul edilen her updateData iki data satırı üretir (istek payload'ı + task çıktısı).</p>
<p><strong>Migration:</strong>
<code>HistorySequence</code> kolonuna veya data satırlarının tek-batch yazılmasına dayanan raporlama/entegrasyon varsa <code>VersionNo</code> sıralamasına geçin. Rolling deploy güvenlidir: overlap penceresinde trigger ve servis aynı <code>MAX+1</code> değerini atar.</p>
<hr>
<p>Bu sürümün tüm özellikleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-79">Release v0.0.79</a> notuna bakın.</p>
<p><strong>vNext Runtime Platform Team</strong></p>]]></content:encoded>
            <category>breaking-changes</category>
        </item>
    </channel>
</rss>