<?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/migration</link>
        <description>vNext Docs Blog</description>
        <lastBuildDate>Thu, 18 Jun 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[vNext v0.0.62 Migration Rehberi]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration</guid>
            <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Bu rehber, vNext v0.0.62 ile gelen yeni yetenekleri ve mevcut bir domain projesini bu sürüme taşırken atılması gereken adımları anlatır. Sürüm dört entegrasyon odaklı yetenek getiriyor: HTTP Task'ta yapılandırılabilir contentType, state'lerde deklaratif long-poll interaction, multi-task function'larda output header/status forward ve runtime keşfi için vnext-runtime MCP sunucusu. Ayrıca bir yetkilendirme davranış değişikliği (yalnızca deny içeren grant setleri blacklist olur) ve async transition için doğrudan Dapr-enqueue continuation modu yer alıyor.]]></description>
            <content:encoded><![CDATA[<p>Bu rehber, <strong>vNext v0.0.62</strong> ile gelen yeni yetenekleri ve mevcut bir domain projesini bu sürüme taşırken atılması gereken adımları anlatır. Sürüm dört entegrasyon odaklı yetenek getiriyor: HTTP Task'ta <strong>yapılandırılabilir <code>contentType</code></strong>, state'lerde <strong>deklaratif long-poll <code>interaction</code></strong>, multi-task function'larda <strong>output header/status forward</strong> ve runtime keşfi için <strong><code>vnext-runtime</code> MCP</strong> sunucusu. Ayrıca bir <strong>yetkilendirme davranış değişikliği</strong> (yalnızca <code>deny</code> içeren grant setleri blacklist olur) ve async transition için <strong>doğrudan Dapr-enqueue continuation</strong> modu yer alıyor.</p>
<p>Bu sürümle birlikte bileşen şeması <strong>0.0.47</strong>'ye yükseldi. Doğrulama yapmadan önce domain projenizde <code>@burgan-tech/vnext-schema</code> paketini güncelleyin.</p>
<blockquote>
<p>Teknik release notları için: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-62">Release v0.0.62</a>.</p>
</blockquote>
<!-- -->
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-httptask-contenttype">1. HttpTask <code>contentType</code><a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#1-httptask-contenttype" class="hash-link" aria-label="Direct link to 1-httptask-contenttype" title="Direct link to 1-httptask-contenttype" translate="no">​</a></h2>
<p>HTTP Task config'ine yeni bir <strong><code>contentType</code></strong> alanı eklendi. Böylece istekler artık yalnızca <code>application/json</code> ile sınırlı değil — <code>application/xml</code>, <code>text/plain</code>, <code>application/x-www-form-urlencoded</code> gibi farklı content-type'lar desteklenir hale geldi.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#ne-de%C4%9Fi%C5%9Fti" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<ul>
<li class=""><code>attributes.config.contentType</code> ile request body'nin <code>Content-Type</code> header'ı tanımlanabilir.</li>
<li class="">Request body <strong>byte-exact</strong> korunur; bu özellikle body'nin imzalandığı (signing) senaryolarda kritiktir — yeniden serialize edilmesi imzayı geçersiz kılardı.</li>
<li class="">Alan <strong>opsiyoneldir</strong>; tanımlanmazsa önceki varsayılan davranış geçerlidir, mevcut tanımlar değişmeden çalışır.</li>
</ul>
<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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"attributes"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"6"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"config"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"url"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://api.example.com/sign"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"method"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"contentType"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"application/xml"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"body"</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">"..."</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"..."</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#migrasyon-ad%C4%B1mlar%C4%B1" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">JSON dışı bir gövde gönderen veya gövdesi imzalanan HTTP task'larınızı belirleyin.</li>
<li class="">Bu task'ların config'ine uygun <code>contentType</code> değerini ekleyin.</li>
<li class=""><code>@burgan-tech/vnext-schema</code> paketini <code>0.0.47</code>'ye güncelleyip <code>npm run validate</code> ile doğrulayın.</li>
</ol>
<blockquote>
<p>İlgili doküman: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/tasks/http">HTTP Task</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-state-interaction--long-poll">2. State <code>interaction</code> / Long Poll<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#2-state-interaction--long-poll" class="hash-link" aria-label="Direct link to 2-state-interaction--long-poll" title="Direct link to 2-state-interaction--long-poll" translate="no">​</a></h2>
<p>State Function, client tarafında <strong>long-polling</strong> ile süreç durumunu döner. Şimdiye kadar her client, açık tutulan isteğin ne zaman sonlandırılacağını kendi tahmin ediyordu. Artık bu, <strong>state tanımında deklaratif</strong> olarak belirtilebilir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti-1">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#ne-de%C4%9Fi%C5%9Fti-1" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<p>State'lere opsiyonel bir <strong><code>interaction.longPoll</code></strong> bloğu eklendi. Runtime, isteği bir transition gerçekleşene veya fallback timeout dolana kadar açık tutar. Bu sayede bir süreç tasarımında farklı client'lar süreci kendi <strong>durak noktaları</strong> ile belirleyebilir.</p>
<table><thead><tr><th>Alan</th><th>Tip</th><th>Zorunlu</th><th>Açıklama</th></tr></thead><tbody><tr><td><code>terminate</code></td><td>boolean</td><td><strong>Evet</strong></td><td>State'ten çıkıldığında açık olan long-poll isteğinin sonlandırılıp sonlandırılmayacağı.</td></tr><tr><td><code>fallbackTimeoutSeconds</code></td><td>integer</td><td>Hayır</td><td>İstek fallback'e düşmeden önce açık tutulacağı maksimum saniye (<code>minimum: 1</code>).</td></tr><tr><td><code>roles</code></td><td>array</td><td><strong>Evet</strong></td><td>Long-poll etkileşimini kullanabilecek roller. DENY her zaman ALLOW'u geçersiz kılar.</td></tr></tbody></table>
<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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"key"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"waiting-approval"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"stateType"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"interaction"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"longPoll"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"terminate"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"fallbackTimeoutSeconds"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"roles"</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><br></div><div class="token-line" style="color:#393A34"><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">"role"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"client.app"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"grant"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"allow"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-1">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#migrasyon-ad%C4%B1mlar%C4%B1-1" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Client'ların long-poll yaptığı durak (bekleme) state'lerini belirleyin.</li>
<li class="">Bu state'lere <code>interaction.longPoll</code> bloğunu ekleyin; hangi rolün etkileşimi kullanacağını <code>roles</code> ile, sonlandırma davranışını <code>terminate</code> ile belirtin.</li>
<li class="">İstemci tarafında manuel long-poll sonlandırma mantığınız varsa, deklaratif yapıya geçirerek sadeleştirin.</li>
</ol>
<blockquote>
<p>İlgili dokümanlar: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/workflow#state-interaction-long-poll">Workflow → State Interaction (Long Poll)</a> · <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/how-to/async-sync">Async / Sync Yöntemi</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-function-responseheader--statuscode-forward">3. Function ResponseHeader &amp; StatusCode Forward<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#3-function-responseheader--statuscode-forward" class="hash-link" aria-label="Direct link to 3. Function ResponseHeader &amp; StatusCode Forward" title="Direct link to 3. Function ResponseHeader &amp; StatusCode Forward" translate="no">​</a></h2>
<p>Bir function <code>onExecutionTasks</code> ile birden fazla task çalıştırıp sonucu bir <strong><code>IOutputHandler</code></strong> ile şekillendirdiğinde, output <code>ScriptResponse</code>'unun taşıdığı <strong>header'lar</strong> ve <strong>status code</strong> artık nihai function HTTP yanıtına forward edilir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti-2">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#ne-de%C4%9Fi%C5%9Fti-2" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<ul>
<li class="">Önceden output handler yalnızca response <strong>gövdesini</strong> etkileyebiliyordu; header ve status code düşürülüyordu.</li>
<li class="">Artık output handler, yanıt status'ünü (örn. <code>201</code>, <code>202</code>) ayarlayabilir ve <code>Location</code>, <code>ETag</code> gibi header'ları yayabilir.</li>
<li class=""><code>StandardTaskResponse</code> zaten <code>StatusCode</code> ve <code>Headers</code> taşıyordu; bu değişiklik bunların multi-task function output'una forward edilmesini sağlar.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-2">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#migrasyon-ad%C4%B1mlar%C4%B1-2" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Multi-task (<code>onExecutionTasks</code>) kullanan function'larınızda <code>output</code> handler'ı gözden geçirin.</li>
<li class="">Yanıt status code veya header'ı kontrol etmek istiyorsanız döndürdüğünüz <code>ScriptResponse</code> üzerinde ilgili alanları set edin.</li>
</ol>
<blockquote>
<p>İlgili dokümanlar: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/functions/custom">Custom Functions</a> · <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/interfaces">Interfaces → IOutputHandler</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-vnext-runtime-mcp-sunucusu">4. <code>vnext-runtime</code> MCP Sunucusu<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#4-vnext-runtime-mcp-sunucusu" class="hash-link" aria-label="Direct link to 4-vnext-runtime-mcp-sunucusu" title="Direct link to 4-vnext-runtime-mcp-sunucusu" translate="no">​</a></h2>
<p>vNext bileşenlerini, canlı runtime verisini ve statik <code>vnext-meta</code>'yı MCP uyumlu ajanlara (Claude Code, Cursor, CI, hosted asistanlar) sunan standalone bir <strong>Model Context Protocol</strong> sunucusu (<code>vnext-runtime</code>) hayata geçirildi. Böylece AI toolları ile doğrudan runtime bazında AI agent yapılandırmaları kullanılabilir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti-3">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#ne-de%C4%9Fi%C5%9Fti-3" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<ul>
<li class="">Sunucu, Orchestration HTTP API'yi tiplenmiş bir <code>HttpClient</code> ile çağırır; DB / Redis / Dapr referansı yoktur.</li>
<li class="">İki transport: <strong>stdio</strong> (lokal IDE) ve <strong>Streamable HTTP</strong> (hosted / CI).</li>
<li class="">Her instance <strong>tek domain</strong> sunar (<code>Mcp:Domain</code>); HTTP transport'ta sabit bir <code>Mcp:ApiKey</code> ile yetkilendirilir (stdio gated değildir).</li>
<li class="">Tool grupları: <code>ComponentTools</code>, <code>RuntimeTools</code>, <code>MetaTools</code> ve <code>AllowMutations</code> ile açılan <code>MutatingRuntimeTools</code>.</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">dotnet tool </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-g</span><span class="token plain"> BBT.Workflow.Mcp</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">claude mcp </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> vnext-runtime </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">--env</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">Mcp__OrchestrationBaseUrl</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">http://localhost:4201 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">--env</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">Mcp__Domain</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">your-domain</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -- vnext-mcp</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-3">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#migrasyon-ad%C4%B1mlar%C4%B1-3" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Lokal IDE için dotnet tool ile kurun (<code>BBT.Workflow.Mcp</code>), <code>Mcp__Domain</code> ve <code>Mcp__OrchestrationBaseUrl</code> ortam değişkenlerini verin.</li>
<li class="">Hosted/CI için Docker image'ı (<code>ghcr.io/burgan-tech/vnext/mcp-server</code>) HTTP transport ile çalıştırın ve <code>Mcp__ApiKey</code> ile koruyun.</li>
<li class="">Mutasyon araçlarına (start/transition/publish/invalidate) ihtiyaç yoksa <code>AllowMutations=false</code> (varsayılan) bırakın.</li>
</ol>
<blockquote>
<p>İlgili doküman: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/tools/mcp-runtime">vnext-runtime MCP Server</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-davranış-değişikliği--deny-only-rol-grantları-blacklist">5. Davranış Değişikliği — Deny-only Rol Grant'ları Blacklist<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#5-davran%C4%B1%C5%9F-de%C4%9Fi%C5%9Fikli%C4%9Fi--deny-only-rol-grantlar%C4%B1-blacklist" class="hash-link" aria-label="Direct link to 5. Davranış Değişikliği — Deny-only Rol Grant'ları Blacklist" title="Direct link to 5. Davranış Değişikliği — Deny-only Rol Grant'ları Blacklist" translate="no">​</a></h2>
<p>Yetkilendirme modelinde bir <code>roles</code> / <code>queryRoles</code> setinin niyeti artık iki şekilde yorumlanır:</p>
<ul>
<li class="">Set içinde <strong>en az bir <code>allow</code></strong> varsa → <strong>allow-list</strong> (whitelist): yalnızca eşleşen <code>allow</code> rolleri geçer (varsayılan <strong>deny</strong>). <em>Mevcut davranış.</em></li>
<li class="">Set yalnızca <strong><code>deny</code></strong> içeriyorsa → <strong>blacklist</strong>: listelenenler <strong>dışındaki</strong> herkese izin verilir (varsayılan <strong>allow</strong>). <em>Yeni davranış.</em></li>
</ul>
<p>Her iki durumda da <strong>DENY her zaman ALLOW'u geçersiz kılar.</strong> Bu sayede "X hariç herkese izin ver" kuralı, izinli her rolü tek tek saymadan ifade edilebilir.</p>
<p>:::warning Geriye dönük etki
Yalnızca <code>deny</code> grant'ı içeren mevcut bir set, önceki sürümde pratikte herkesi engelleyebilirken, bu sürümde <strong>listelenenler dışındaki herkese açık</strong> hale gelir.
:::</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-4">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#migrasyon-ad%C4%B1mlar%C4%B1-4" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Tüm transition <code>roles</code>, flow/state <code>queryRoles</code>, state <code>alias.roles</code> ve master şema <code>x-roles</code> tanımlarınızı tarayın.</li>
<li class="">Yalnızca <code>deny</code> içeren setleri belirleyin; niyetiniz "herkesi engelle" idiyse en az bir <code>allow</code> grant'ı ile <strong>allow-list</strong>'e çevirin.</li>
<li class="">Niyetiniz gerçekten "listelenenler hariç herkese izin" ise mevcut deny-only set'i koruyabilirsiniz.</li>
</ol>
<blockquote>
<p>İlgili doküman: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/concepts/authorization">Yetkilendirme (Authorization)</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="6-async-continuation--doğrudan-dapr-enqueue--outbox-fallback">6. Async Continuation — Doğrudan Dapr-enqueue + Outbox Fallback<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#6-async-continuation--do%C4%9Frudan-dapr-enqueue--outbox-fallback" class="hash-link" aria-label="Direct link to 6. Async Continuation — Doğrudan Dapr-enqueue + Outbox Fallback" title="Direct link to 6. Async Continuation — Doğrudan Dapr-enqueue + Outbox Fallback" translate="no">​</a></h2>
<p>v0.0.60'taki yapılandırılabilir asenkron transition modlarının üzerine, continuation'lar artık <strong>doğrudan Dapr üzerinden</strong> kuyruğa alınabilir; doğrudan enqueue yolu kullanılamadığında transactional <strong>outbox</strong> dayanıklılık fallback'i devreye girer. Bu, sağlıklı koşullarda async continuation gecikmesini azaltırken dayanıklılık garantisini korur.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-5">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#migrasyon-ad%C4%B1mlar%C4%B1-5" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class=""><code>sync=true</code> / <code>sync=false</code> davranışı için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/how-to/async-sync">Async / Sync Yöntemi</a> sayfasına bakın.</li>
<li class="">Bu sürüm dayanıklılık değişiklikleri için EF Core migration'ları içerir — <code>db-migrator</code> image'ı ile şema güncellemesini uygulayın.</li>
</ol>
<blockquote>
<p>İlgili doküman: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/how-to/async-sync">Async / Sync Yöntemi</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="7-düzeltmeler">7. Düzeltmeler<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#7-d%C3%BCzeltmeler" class="hash-link" aria-label="Direct link to 7. Düzeltmeler" title="Direct link to 7. Düzeltmeler" translate="no">​</a></h2>
<p>Bu düzeltmeler çoğunlukla otomatik olarak geçerlidir; ek migrasyon adımı gerektirmez:</p>
<ul>
<li class=""><strong>SOAP Task derleme + escaping (#738):</strong> <code>SoapTask</code> mapping'i <code>CS0012</code> ile derlenemiyordu ve varsayılan yolda XML özel karakter escaping'i tutarsızdı; düzeltildi.</li>
<li class=""><strong>ChainToken gate (#730):</strong> Parent instance <strong>Busy</strong> subtype taşırken child sub-process'in <strong>Ready</strong>'ye geçişi yanlışlıkla reddediliyordu; düzeltildi.</li>
<li class=""><strong>Domain replacement (#729):</strong> Source domain ile eşleşen subprocess referansları atlanıyordu; replacement artık doğru yeniden yazıyor.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="özet">Özet<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0062-migration#%C3%B6zet" class="hash-link" aria-label="Direct link to Özet" title="Direct link to Özet" translate="no">​</a></h2>
<ul>
<li class=""><strong>HttpTask <code>contentType</code></strong> ile farklı content-type desteği + imzalama için byte-exact body.</li>
<li class=""><strong>State <code>interaction.longPoll</code></strong> ile deklaratif, rol bazlı long-poll sonlandırma; client'lar kendi durak noktalarını belirler.</li>
<li class=""><strong>Multi-task function</strong> output'unda header/status code nihai yanıta forward edilir.</li>
<li class=""><strong><code>vnext-runtime</code> MCP</strong> ile component/runtime/meta keşfi AI toollarına açılır (stdio + Streamable HTTP).</li>
<li class=""><strong>Deny-only rol grant setleri</strong> artık blacklist (default allow); DENY &gt; ALLOW korunur.</li>
<li class=""><strong>Async continuation</strong> doğrudan Dapr-enqueue + outbox fallback ile çalışır.</li>
<li class="">Bileşen <strong>şeması 0.0.47</strong>'ye yükseldi.</li>
</ul>
<blockquote>
<p>Teknik release notları: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-62">Release v0.0.62</a></p>
</blockquote>]]></content:encoded>
            <category>migration</category>
        </item>
        <item>
            <title><![CDATA[vNext v0.0.60 Migration Rehberi]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration</guid>
            <pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Bu rehber, vNext v0.0.60 ile gelen yeni yetenekleri ve mevcut bir domain projesini bu sürüme taşırken atılması gereken adımları anlatır. Sürüm beş ana başlık getiriyor: yeniden kullanılabilir sys-mappings bileşeni ve sandbox'lı custom C# helper'lar, rol bazlı state alias, tutarlı FunctionScope zorunluluğu, Operations & Observability sıkılaştırmaları ve yapılandırılabilir asenkron transition işletimi.]]></description>
            <content:encoded><![CDATA[<p>Bu rehber, <strong>vNext v0.0.60</strong> ile gelen yeni yetenekleri ve mevcut bir domain projesini bu sürüme taşırken atılması gereken adımları anlatır. Sürüm beş ana başlık getiriyor: yeniden kullanılabilir <strong>sys-mappings</strong> bileşeni ve sandbox'lı <strong>custom C# helper</strong>'lar, <strong>rol bazlı state alias</strong>, tutarlı <strong>FunctionScope</strong> zorunluluğu, <strong>Operations &amp; Observability</strong> sıkılaştırmaları ve <strong>yapılandırılabilir asenkron transition</strong> işletimi.</p>
<p>Bu sürümle birlikte bileşen şeması <strong>0.0.46</strong>'ya yükseldi. Doğrulama yapmadan önce domain projenizde <code>@burgan-tech/vnext-schema</code> paketini güncelleyin.</p>
<blockquote>
<p>Teknik release notları için: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-60">Release v0.0.60</a>.</p>
</blockquote>
<!-- -->
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-mappings-bileşeni--custom-c-helperlar">1. Mappings Bileşeni &amp; Custom C# Helper'lar<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#1-mappings-bile%C5%9Feni--custom-c-helperlar" class="hash-link" aria-label="Direct link to 1. Mappings Bileşeni &amp; Custom C# Helper'lar" title="Direct link to 1. Mappings Bileşeni &amp; Custom C# Helper'lar" translate="no">​</a></h2>
<p>vNext'e yeni bir sistem bileşeni eklendi: <strong><code>sys-mappings</code></strong> (kısaca <em>Mappings</em>). Mapping bileşeni, script mapping kodlarının <strong>yeniden kullanılabilir</strong>, <strong>versiyonlanabilir</strong> ve daha verimli kullanılmasını sağlar. Ayrıca plugin özelliği ile 3rd-party kütüphane/DLL'leri embed ederek kullanım sağlar — bu da business case'lerinde sıkça ihtiyaç duyulan ayrı "utilities API" gereksinimini ortadan kaldırır.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#ne-de%C4%9Fi%C5%9Fti" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<ul>
<li class="">Geliştiriciler kendi C# yardımcı sınıflarını <code>.csx</code> olarak — tıpkı flow, task ve view'lar gibi — bir <strong>bileşen</strong> olarak yükleyebilir.</li>
<li class="">Bu helper'lar bir flow tanımının mapping'inden referans verilir; runtime önce helper sınıflarını derler, ardından mapping'i bunlara karşı derleyip çalıştırır.</li>
<li class="">Helper'lar <strong>sandbox</strong> altında, içerik hash'i ile cache'lenerek çalıştırılır.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="domain-projesi-yapılandırması">Domain projesi yapılandırması<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#domain-projesi-yap%C4%B1land%C4%B1rmas%C4%B1" class="hash-link" aria-label="Direct link to Domain projesi yapılandırması" title="Direct link to Domain projesi yapılandırması" translate="no">​</a></h3>
<p>Bu bölümdeki adımlar mevcut bir domain projesini v0.0.60'a taşırken atılır. Çalışan bir referans için <a href="https://github.com/burgan-tech/vnext-example" target="_blank" rel="noopener noreferrer" class=""><code>vnext-example</code></a> reposuna bakın — aşağıdaki yapılandırmanın tamamı orada hazırdır.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-mappings-dizini">1. <code>Mappings/</code> dizini<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#1-mappings-dizini" class="hash-link" aria-label="Direct link to 1-mappings-dizini" title="Direct link to 1-mappings-dizini" translate="no">​</a></h4>
<p>Domain bileşen ağacına <code>Mappings/</code> dizini eklenir. Her mapping bir <code>.json</code> tanım dosyası + <code>src/</code> altında karşılık gelen bir <code>.csx</code> kaynak dosyasıdır:</p>
<div class="language-plaintext codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-plaintext codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">├── &lt;domain&gt;/                       # ör. core/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── Extensions/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── Functions/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── Schemas/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── Tasks/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── Views/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   ├── Workflows/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│   └── Mappings/                   # YENİ</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│       └── account-opening/        # iş akışı/alan bazlı klasör</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│           ├── initial-mapping.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│           ├── json-helper.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│           ├── rsa-crypto.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│           └── src/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│               ├── InitialTransMapping.csx</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│               ├── JsonHelper.csx</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">│               └── RsaCryptoHelper.csx</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── vnext.config.json</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-vnextconfigjson">2. <code>vnext.config.json</code><a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#2-vnextconfigjson" class="hash-link" aria-label="Direct link to 2-vnextconfigjson" title="Direct link to 2-vnextconfigjson" translate="no">​</a></h4>
<p><code>paths</code> ve <code>exports</code> bloklarına <code>mappings</code> eklenir (diğer bileşenlerle aynı hizada):</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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"domain"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"core"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"paths"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"componentsRoot"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"core"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"schemas"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Schemas"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"workflows"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Workflows"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"tasks"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Tasks"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"views"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Views"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"functions"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Functions"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"extensions"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Extensions"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"mappings"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Mappings"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"exports"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"schemas"</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 punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"workflows"</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 punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"tasks"</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 punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"views"</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 punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"functions"</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 punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"extensions"</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 punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"mappings"</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 punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-domain-tooling-scriptlerine-mappings-desteği">3. Domain tooling script'lerine mappings desteği<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#3-domain-tooling-scriptlerine-mappings-deste%C4%9Fi" class="hash-link" aria-label="Direct link to 3. Domain tooling script'lerine mappings desteği" title="Direct link to 3. Domain tooling script'lerine mappings desteği" translate="no">​</a></h4>
<p>Domain projesindeki bileşen keşfi <code>test.js</code>, <code>validate.js</code>, <code>setup.js</code>, <code>index.js</code>, <code>build.js</code> script'leri üzerinden yapılır. Bileşen türleri bu script'lerde <strong>listelendiği</strong> için, <code>mappings</code>'i her birine eklemek gerekir. (Yeni proje şablonlarında bu satırlar zaten gelir; eski projelerde elle eklenir.)</p>
<p><strong><code>setup.js</code> · <code>index.js</code> · <code>build.js</code> · <code>validate.js</code></strong> — <code>getPathsConfig</code> içindeki <code>defaults</code> paths objesine:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> defaults </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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">componentsRoot</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'core'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">schemas</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Schemas'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">workflows</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Workflows'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">tasks</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Tasks'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">views</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Views'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">functions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Functions'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">extensions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Extensions'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">mappings</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Mappings'</span><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// YENİ</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p><strong><code>index.js</code></strong> — <code>getMappings()</code> getter'ı ve <code>getAvailableTypes</code> dönüşü:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Get all mappings</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function-variable function" style="color:#d73a49">getMappings</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> domainDir </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">findDomainDirectory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">domainDir</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> pathsConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getPathsConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">loadJsonFiles</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">path</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">domainDir</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">mappings</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic">// YENİ</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function-variable function" style="color:#d73a49">getAvailableTypes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> pathsConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getPathsConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">schemas</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">workflows</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">tasks</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">views</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">functions</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">extensions</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">mappings</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">                                      </span><span class="token comment" style="color:#999988;font-style:italic">// YENİ</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><br></div></code></pre></div></div>
<p><strong><code>build.js</code></strong> — reference build'deki <code>componentDirs</code> dizisine <code>pathsConfig.mappings</code> eklenir.</p>
<p><strong><code>validate.js</code></strong> — dört noktada genişletilir:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// requiredExports ve componentGetters dizilerine:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">'getMappings'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// vnextDirs ve expectedDirs dizilerine:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">mappings</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// directoryToSchemaType eşlemesine (mapping → 'mapping' şeması):</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">pathsConfig</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">mappings</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'mapping'</span><span class="token punctuation" style="color:#393A34">,</span><br></div></code></pre></div></div>
<blockquote>
<p><code>validate.js</code>, mappings dizinini <code>'mapping'</code> şema tipine eşler; şema <code>@burgan-tech/vnext-schema</code> paketinden (<code>mapping-definition.schema.json</code>) yüklenir — script'e ayrı bir şema dosyası eklemeye gerek yoktur.</p>
</blockquote>
<p><strong><code>test.js</code></strong> — beklenen export/dizin listelerine:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// expected exports ve getters dizilerine:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">'getMappings'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// expectedTypes ve expectedDirs dizilerine:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">'Mappings'</span><span class="token punctuation" style="color:#393A34">,</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="mapping-objesindeki-scripts-bloğu">Mapping objesindeki <code>scripts</code> bloğu<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#mapping-objesindeki-scripts-blo%C4%9Fu" class="hash-link" aria-label="Direct link to mapping-objesindeki-scripts-bloğu" title="Direct link to mapping-objesindeki-scripts-bloğu" translate="no">​</a></h3>
<p>Tüm mapping objelerinde (<code>viewRule</code>, <code>rule</code>, transition mapping, subflow mapping, task mapping, extension/function task mapping) yeni bir <strong><code>scripts</code></strong> objesi tanımlanabilir. <code>scripts.helpers[]</code> bir <strong>referans dizisidir</strong> (string değil — <code>key</code>/<code>version</code>/<code>domain</code>/<code>flow</code> alanları olan objeler), <code>scripts.allowedAssemblies[]</code> ise o mapping'e özel sandbox izinlerini global temel listenin üzerine ekler:</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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"mapping"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"location"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"./src/UserSessionMapping.csx"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"code"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"encoding"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"NAT"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"scripts"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"helpers"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#36acaa">"key"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"json-helper"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#36acaa">"version"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1.0.0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#36acaa">"domain"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"core"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#36acaa">"flow"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"sys-mappings"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"allowedAssemblies"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"Newtonsoft.Json"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Aynı <code>scripts</code> bloğu flow konfigürasyonuna da (<code>attributes.scripts</code>) eklenebilir:</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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"attributes"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"F"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"scripts"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"helpers"</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><br></div><div class="token-line" style="color:#393A34"><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">"key"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"rsa-crypto"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"version"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1.0.0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"domain"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"core"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"flow"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"sys-mappings"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"allowedAssemblies"</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 string" style="color:#e3116c">"System.Security.Cryptography"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ref-encoding"><code>REF</code> encoding<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#ref-encoding" class="hash-link" aria-label="Direct link to ref-encoding" title="Direct link to ref-encoding" translate="no">​</a></h3>
<p><code>code</code> encoding tipine yeni bir değer eklendi: <strong><code>REF</code></strong>. Bir mapping, kod gömmek yerine bir <code>sys-mappings</code> bileşenine referans verebilir:</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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"mapping"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"encoding"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"REF"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"code"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"key"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"initial-mapping"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"version"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1.0.0"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"flow"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"sys-mappings"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"domain"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"core"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<blockquote>
<p><strong>Kısıt:</strong> <code>sys-mappings</code> bileşeninin kendisi <code>REF</code> kullanamaz — referans hedefinin kendisidir, kendine referans veremez.</p>
</blockquote>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sandbox">Sandbox<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#sandbox" class="hash-link" aria-label="Direct link to Sandbox" title="Direct link to Sandbox" translate="no">​</a></h3>
<p>Helper'lar iki katmanlı derleme zamanı kapısı (reference allow-list + yasaklı API analizörü) ile kısıtlanır ve paylaşımlı, toplanabilir bir <code>AssemblyLoadContext</code> içinde derlenir. <code>allowedAssemblies</code> ile mapping bazında verilen izinler global temel listenin (<code>Scripting:Sandbox:AllowedAssemblies</code>) üzerine eklenir — yani bir flow, herkesin temel listesini genişletmeden yalnızca kendi helper'ının ihtiyacı olan assembly'yi açar.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#migrasyon-ad%C4%B1mlar%C4%B1" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Domain altında <code>Mappings/</code> dizinini oluşturun ve <code>vnext.config.json</code>'ın <code>paths</code> + <code>exports</code> bloklarına <code>mappings</code> ekleyin.</li>
<li class="">Bileşen keşfini yapan tooling script'lerini (<code>test.js</code>, <code>validate.js</code>, <code>setup.js</code>, <code>index.js</code>, <code>build.js</code>) yukarıdaki "Domain tooling script'lerine mappings desteği" bölümüne göre güncelleyin.</li>
<li class="">Tekrar eden mapping kodlarını <code>sys-mappings</code> bileşenlerine çıkarın; flow/mapping'lerden <code>scripts.helpers[]</code> ile referans verin. Kodu gömmek yerine paylaşmak için mapping <code>encoding</code>'ini <code>REF</code> yapabilirsiniz.</li>
<li class="">Helper'ınızın baz dışı bir assembly'ye ihtiyacı varsa <code>scripts.allowedAssemblies[]</code> ile tanımlayın. Sandbox ayarları (varsayılan ban listesi, <code>using</code>'ler, referanslar) için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/configuration/scripting">Scripting / Sandbox Yapılandırması</a> sayfasına bakın.</li>
<li class=""><code>npm run validate</code> ve <code>npm run build</code> ile yapılandırmayı doğrulayın.</li>
</ol>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="referans-vnext-example">Referans (vnext-example)<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#referans-vnext-example" class="hash-link" aria-label="Direct link to Referans (vnext-example)" title="Direct link to Referans (vnext-example)" translate="no">​</a></h3>
<p>Tüm bu yapılandırmanın çalışan hali <a href="https://github.com/burgan-tech/vnext-example" target="_blank" rel="noopener noreferrer" class=""><code>burgan-tech/vnext-example</code></a> reposunda hazırdır:</p>
<ul>
<li class=""><a href="https://github.com/burgan-tech/vnext-example/blob/master/vnext.config.json" target="_blank" rel="noopener noreferrer" class=""><code>vnext.config.json</code></a> — <code>paths.mappings</code> + <code>exports.mappings</code>.</li>
<li class=""><a href="https://github.com/burgan-tech/vnext-example/blob/master/core/Mappings/account-opening/initial-mapping.json" target="_blank" rel="noopener noreferrer" class=""><code>core/Mappings/account-opening/initial-mapping.json</code></a> · <a href="https://github.com/burgan-tech/vnext-example/blob/master/core/Mappings/account-opening/rsa-crypto.json" target="_blank" rel="noopener noreferrer" class=""><code>rsa-crypto.json</code></a> ve <a href="https://github.com/burgan-tech/vnext-example/tree/master/core/Mappings/account-opening/src" target="_blank" rel="noopener noreferrer" class=""><code>src/</code></a> altındaki <code>.csx</code> dosyaları — örnek mapping/helper bileşenleri.</li>
<li class=""><a href="https://github.com/burgan-tech/vnext-example/blob/master/core/Workflows/account-opening/account-opening-workflow.json" target="_blank" rel="noopener noreferrer" class=""><code>core/Workflows/account-opening/account-opening-workflow.json</code></a> — <code>attributes.scripts.helpers</code> ve <code>encoding: "REF"</code> kullanımı.</li>
<li class="">Tooling: <a href="https://github.com/burgan-tech/vnext-example/blob/master/setup.js" target="_blank" rel="noopener noreferrer" class=""><code>setup.js</code></a> · <a href="https://github.com/burgan-tech/vnext-example/blob/master/index.js" target="_blank" rel="noopener noreferrer" class=""><code>index.js</code></a> · <a href="https://github.com/burgan-tech/vnext-example/blob/master/build.js" target="_blank" rel="noopener noreferrer" class=""><code>build.js</code></a> · <a href="https://github.com/burgan-tech/vnext-example/blob/master/validate.js" target="_blank" rel="noopener noreferrer" class=""><code>validate.js</code></a> · <a href="https://github.com/burgan-tech/vnext-example/blob/master/test.js" target="_blank" rel="noopener noreferrer" class=""><code>test.js</code></a>.</li>
</ul>
<blockquote>
<p>İlgili dokümanlar: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/mapping-component">Mapping Bileşeni (sys-mappings)</a> · <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/mappings">Mapping Rehberi</a> · <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/configuration/scripting">Scripting / Sandbox Yapılandırması</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-state-alias--rol-bazlı-state-görünürlüğü">2. State Alias — Rol Bazlı State Görünürlüğü<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#2-state-alias--rol-bazl%C4%B1-state-g%C3%B6r%C3%BCn%C3%BCrl%C3%BC%C4%9F%C3%BC" class="hash-link" aria-label="Direct link to 2. State Alias — Rol Bazlı State Görünürlüğü" title="Direct link to 2. State Alias — Rol Bazlı State Görünürlüğü" translate="no">​</a></h2>
<p>State Function, client tarafında <strong>long-polling</strong> ile süreç durumunu döner. Client'ta başlayan bir iş akışı backoffice'e geçtiğinde <strong>Fraud, KPS, Limit</strong> gibi iç kontrol state'lerine uğrar. Client bu noktada sorgulama yaptığında ham <code>state.key</code> döner — iç süreç adımlarının client'a sızması bir <strong>güvenlik açığı</strong> oluşturabilir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti-1">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#ne-de%C4%9Fi%C5%9Fti-1" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<p>State'lere opsiyonel bir <strong><code>alias[]</code></strong> dizisi tanımlanabilir. Alias, aktör/rol bazlı yapı sayesinde hangi client'ın ne göreceğini belirler; aynı zamanda <strong>çoklu-dil (multi-localization)</strong> desteği sağlar. İç state kimliği değişmez — alias yalnızca <strong>sunum</strong> katmanını etkiler; transition'lar, kalıcılık ve iş akışı mantığı aynı <code>state.key</code> üzerinden çalışmaya devam eder.</p>
<p>Her <code>alias</code> öğesi şu alanları taşır:</p>
<table><thead><tr><th>Alan</th><th>Tip</th><th>Zorunlu</th><th>Açıklama</th></tr></thead><tbody><tr><td><code>name</code></td><td>string</td><td>Evet</td><td>Alias adı. İstek diline uygun bir <code>label</code> bulunamazsa fallback olarak döner.</td></tr><tr><td><code>roles</code></td><td>array</td><td>Evet</td><td>Bu alias'ın geçerli olduğu roller (<code>minItems: 1</code>). <strong>DENY her zaman ALLOW'u geçersiz kılar.</strong></td></tr><tr><td><code>labels</code></td><td>array</td><td>Evet</td><td>Alias'ın çoklu-dil etiketleri (<code>minItems: 1</code>).</td></tr></tbody></table>
<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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"alias"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Değerlendirme Aşamasında"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"roles"</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><br></div><div class="token-line" style="color:#393A34"><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">"role"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"backoffice.operator"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"grant"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"allow"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"labels"</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><br></div><div class="token-line" style="color:#393A34"><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">"label"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Operasyon İncelemesinde"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"language"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"tr"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><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">"label"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Under Operational Review"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"language"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"en"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Birden fazla iç state aynı dış alias'a eşlenebilir. Çözümleme isteği yapan aktörün rollerini her alias'ın <code>roles</code> listesine göre değerlendirir; eşleşme varsa istek dilindeki <code>label</code>, o dilde label yoksa <code>alias.name</code> döner; hiçbir alias eşleşmezse <code>state.key</code>'e geri düşer.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-1">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#migrasyon-ad%C4%B1mlar%C4%B1-1" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Client'a sızması istenmeyen iç state'leri belirleyin (ör. Fraud/KPS/Limit).</li>
<li class="">Bu state'lere uygun <code>alias[]</code> tanımları ekleyin; hangi rolün hangi label'ı göreceğini <code>roles</code> + <code>labels</code> ile belirtin.</li>
<li class="">Çok dilli kullanımda her dil için <code>labels</code> girişi ekleyin; rol modeli ve DENY/ALLOW önceliği için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/concepts/authorization">Yetkilendirme</a> sayfasına bakın.</li>
</ol>
<blockquote>
<p>İlgili dokümanlar: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/workflow#state-alias-rol-tabanl%C4%B1-state-maskeleme">Workflow → State Alias</a> · <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/concepts/authorization">Yetkilendirme</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-functionscope-zorunluluğu-ve-tutarlı-yanıt">3. FunctionScope Zorunluluğu ve Tutarlı Yanıt<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#3-functionscope-zorunlulu%C4%9Fu-ve-tutarl%C4%B1-yan%C4%B1t" class="hash-link" aria-label="Direct link to 3. FunctionScope Zorunluluğu ve Tutarlı Yanıt" title="Direct link to 3. FunctionScope Zorunluluğu ve Tutarlı Yanıt" translate="no">​</a></h2>
<p><code>FunctionScope</code>, fonksiyon çağrısının her iki giriş noktasında (<code>GetFunctionByKeyAsync</code> ve <code>GetFunctionByInstanceAsync</code>) artık <strong>tutarlı</strong> şekilde uygulanır:</p>
<table><thead><tr><th>Scope</th><th>Kural</th></tr></thead><tbody><tr><td><code>D</code> (Domain)</td><td>Her zaman çalışır — tüm scope kısıtlarından muaftır.</td></tr><tr><td><code>I</code> (Instance)</td><td>Yalnızca bir instance mevcutsa çalışır.</td></tr><tr><td><code>F</code> (Flow)</td><td>Bir instance <strong>ve</strong> fonksiyonun o instance'ın flow'unda tanımlı olması (<code>workflow.Functions</code>) gerekir.</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti-2">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#ne-de%C4%9Fi%C5%9Fti-2" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<p>Eski davranışta scope kısmen uygulanıyordu: guard yalnızca Flow üyeliğini ve yalnızca bir instance varken kontrol ediyordu. Sonuç olarak <code>Instance</code>/<code>Flow</code> kapsamlı fonksiyonlar domain seviyesindeki uçtan kısıtsız çağrılabiliyor, scope hataları ise tesadüfi <strong>404</strong> olarak sızıyor ve rol kapsamı (authorize role evaluation) ele alınmıyordu.</p>
<p>Yeni davranışta authorize rol değerlendirmesi yapılır ve scope/tanım eksikliği veya yetki ihlali durumunda <strong>403 Forbidden</strong> (<code>FunctionScopeNotSatisfied</code>) döner.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-2">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#migrasyon-ad%C4%B1mlar%C4%B1-2" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Fonksiyonlarınızın <code>scope</code> değerlerini gözden geçirin: <code>F</code> kapsamlı bir fonksiyonun ilgili flow'un <code>workflow.Functions</code> listesinde tanımlı olduğundan emin olun.</li>
<li class="">Domain seviyesindeki uçtan <code>Instance</code>/<code>Flow</code> kapsamlı fonksiyon çağıran client'ları güncelleyin.</li>
<li class="">Hata yönetiminde scope ihlallerinin artık <strong>404 değil 403</strong> döndüğünü dikkate alın.</li>
</ol>
<blockquote>
<p>İlgili doküman: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/functions/">Function</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-operations--observability">4. Operations &amp; Observability<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#4-operations--observability" class="hash-link" aria-label="Direct link to 4. Operations &amp; Observability" title="Direct link to 4. Operations &amp; Observability" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="publish-endpointi-openapide-gizlendi"><code>publish</code> endpoint'i OpenAPI'de gizlendi<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#publish-endpointi-openapide-gizlendi" class="hash-link" aria-label="Direct link to publish-endpointi-openapide-gizlendi" title="Direct link to publish-endpointi-openapide-gizlendi" translate="no">​</a></h3>
<p><code>publish</code> endpoint'i varsayılan olarak OpenAPI'de expose ediliyordu. Bu, OpenAPI okunarak API'nin <strong>bileşen yükleme</strong> bilgisini açığa çıkarıyordu. Endpoint artık API Explorer / OpenAPI çıktısında gizlidir.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="productionda-swagger-ui-kapalı">Production'da Swagger UI kapalı<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#productionda-swagger-ui-kapal%C4%B1" class="hash-link" aria-label="Direct link to Production'da Swagger UI kapalı" title="Direct link to Production'da Swagger UI kapalı" translate="no">​</a></h3>
<p>Swagger arayüzü <strong>production</strong> ortamında tüm API host'larında kapatıldı; public production yüzeyi artık API explorer'ı sunmaz.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-3">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#migrasyon-ad%C4%B1mlar%C4%B1-3" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class="">Production'da Swagger UI'a bağımlı araç/akış varsa bunları kaldırın veya non-production ortamlara taşıyın.</li>
<li class=""><code>publish</code> işlemini OpenAPI üzerinden keşfeden entegrasyonları gözden geçirin; endpoint artık API Explorer'da listelenmez.</li>
</ol>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-yapılandırılabilir-asenkron-transition-i̇şletimi">5. Yapılandırılabilir Asenkron Transition İşletimi<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#5-yap%C4%B1land%C4%B1r%C4%B1labilir-asenkron-transition-i%CC%87%C5%9Fletimi" class="hash-link" aria-label="Direct link to 5. Yapılandırılabilir Asenkron Transition İşletimi" title="Direct link to 5. Yapılandırılabilir Asenkron Transition İşletimi" translate="no">​</a></h2>
<p><code>sync=false</code> (asenkron) işletim için <strong>durable</strong> bir yöntem implemente edildi. Artık asenkron işlemlerde her transition <strong>scale edilebilir</strong> ve <strong>outbox</strong> yapısı ile <strong>retry</strong> edilebilir hale geldi.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="ne-değişti-3">Ne değişti<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#ne-de%C4%9Fi%C5%9Fti-3" class="hash-link" aria-label="Direct link to Ne değişti" title="Direct link to Ne değişti" translate="no">​</a></h3>
<ul>
<li class="">Continuation'lar inline çalışmak yerine (opsiyonel olarak <strong>outbox</strong> üzerinden) kuyruğa alınarak dayanıklılık (durability) kazanır.</li>
<li class=""><strong>Busy</strong> durumundaki instance'lara erişim, bir <strong>chain ownership token</strong> sistemiyle kontrol edilir; eşzamanlı zincirlerin birbirini ezmesi önlenir.</li>
<li class="">Heartbeat'i bayatlamış (takılı kalmış) instance'ları otomatik toparlayan bir <strong>chain reaper</strong> servisi devreye alındı.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migrasyon-adımları-4">Migrasyon adımları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#migrasyon-ad%C4%B1mlar%C4%B1-4" class="hash-link" aria-label="Direct link to Migrasyon adımları" title="Direct link to Migrasyon adımları" translate="no">​</a></h3>
<ol>
<li class=""><code>sync=true</code> / <code>sync=false</code> davranışı ve karar kriterleri için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/how-to/async-sync">Async / Sync Yöntemi</a> sayfasına bakın.</li>
<li class="">Bu sürüm, dayanıklılık refactor'ü için EF Core migration'ları içerir — <code>db-migrator</code> image'ı ile şema güncellemesini uygulayın.</li>
</ol>
<blockquote>
<p>İlgili doküman: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/how-to/async-sync">Async / Sync Yöntemi</a></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="özet">Özet<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0060-migration#%C3%B6zet" class="hash-link" aria-label="Direct link to Özet" title="Direct link to Özet" translate="no">​</a></h2>
<ul>
<li class=""><strong>sys-mappings</strong> bileşeni + sandbox'lı custom C# helper'lar; <code>scripts.helpers[]</code> (obje referansı) / <code>scripts.allowedAssemblies[]</code> ve <code>REF</code> encoding.</li>
<li class=""><strong>State alias</strong> ile rol bazlı, çoklu-dil state maskeleme (DENY &gt; ALLOW); iç state'ler client'a sızmaz.</li>
<li class=""><strong>FunctionScope</strong> her çağrı yolunda tutarlı; ihlaller artık <strong>403</strong> döner.</li>
<li class=""><strong>Operations:</strong> <code>publish</code> endpoint'i OpenAPI'de gizli, production Swagger kapalı.</li>
<li class=""><strong>Asenkron transition</strong> durable işletim: outbox ile retry, chain ownership token, chain reaper.</li>
<li class="">Bileşen <strong>şeması 0.0.46</strong>'ya yükseldi.</li>
</ul>
<blockquote>
<p>Teknik release notları: <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-60">Release v0.0.60</a></p>
</blockquote>]]></content:encoded>
            <category>migration</category>
        </item>
        <item>
            <title><![CDATA[vNext v0.0.55: SOAP Entegrasyonu, Function Verb Desteği ve Job Timeout Modeli]]></title>
            <link>https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti</link>
            <guid>https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti</guid>
            <pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[vNext platformunun v0.0.55 sürümü yayınlandı. Bu sürümde SOAP web servisleriyle doğrudan entegrasyon, function endpoint'lerine tam HTTP verb desteği ve iş akışı job'larının sonsuz Busy durumunda takılmasını önleyen bir timeout katmanı öne çıkıyor. Bunların yanı sıra deployment rehberi, annotation convention key'leri ve View Concept modeli de dokümantasyona eklendi.]]></description>
            <content:encoded><![CDATA[<p>vNext platformunun <strong>v0.0.55</strong> sürümü yayınlandı. Bu sürümde SOAP web servisleriyle doğrudan entegrasyon, function endpoint'lerine tam HTTP verb desteği ve iş akışı job'larının sonsuz <strong>Busy</strong> durumunda takılmasını önleyen bir timeout katmanı öne çıkıyor. Bunların yanı sıra deployment rehberi, annotation convention key'leri ve View Concept modeli de dokümantasyona eklendi.</p>
<!-- -->
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="soap-task-doğrudan-soap-entegrasyonu">SOAP Task: Doğrudan SOAP Entegrasyonu<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#soap-task-do%C4%9Frudan-soap-entegrasyonu" class="hash-link" aria-label="Direct link to SOAP Task: Doğrudan SOAP Entegrasyonu" title="Direct link to SOAP Task: Doğrudan SOAP Entegrasyonu" translate="no">​</a></h2>
<p>Bu sürümün en büyük eklentilerinden biri, SOAP 1.1 ve 1.2 protokolüyle web servislere doğrudan bağlanabilen <strong>SoapTask</strong> (Tip: <code>16</code>).</p>
<p>Özellikle eski core banking ve middleware servislerle çalışırken ayrı bir adapter veya dönüştürme katmanına gerek kalmadan, SOAP endpoint'leri doğrudan task olarak tanımlayabilirsiniz:</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 punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"attributes"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"type"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"16"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"config"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"url"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"https://api.example.com/services/CustomerService"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"soapAction"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"http://example.com/GetCustomer"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"soapVersion"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1.1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"acceptedStatusCodes"</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 string" style="color:#e3116c">"500"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p><code>acceptedStatusCodes: ["500"]</code> tanımlamak önemli: SOAP servisler hata durumunda genellikle HTTP 500 üzerinden SOAP Fault döner. Bu ayar olmadan task başarısız sayılır; bu ayarla birlikte <code>OutputHandler</code>'ınıza ulaşır ve fault'u orada handle edebilirsiniz.</p>
<p>Mapping içinde <code>SoapTask</code> sınıfından <code>SetUrl</code>, <code>SetBody</code>, <code>SetSoapAction</code>, <code>AddHeader</code> ve benzeri setter metodlara erişebilirsiniz.</p>
<p>Tam referans için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/components/tasks/soap">SOAP Task dökümanına</a> bakabilirsiniz.</p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="scriptbase-xml-yardımcıları">ScriptBase XML Yardımcıları<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#scriptbase-xml-yard%C4%B1mc%C4%B1lar%C4%B1" class="hash-link" aria-label="Direct link to ScriptBase XML Yardımcıları" title="Direct link to ScriptBase XML Yardımcıları" translate="no">​</a></h2>
<p>SOAP Task ile birlikte, mapping script'lerinde XML işlemeyi kolaylaştıran iki yeni <code>ScriptBase</code> metodu eklendi:</p>
<table><thead><tr><th>Metod</th><th>Açıklama</th></tr></thead><tbody><tr><td><code>ParseXml(string?)</code></td><td>XML stringini <code>XmlDocument</code>'a parse eder. Hatalı XML'de fırlatmaz, <code>null</code> döner</td></tr><tr><td><code>XmlToString(XmlDocument?)</code></td><td><code>XmlDocument</code>'ı tekrar stringe çevirir</td></tr></tbody></table>
<p><code>ParseXml</code> hiçbir zaman exception fırlatmaz; geçersiz veya boş input için <code>null</code> döner. Bu sayede <code>OutputHandler</code> içinde savunmacı XML işleme güvenli bir şekilde yapılabilir.</p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="functions-post-patch-ve-delete-desteği">Functions: POST, PATCH ve DELETE Desteği<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#functions-post-patch-ve-delete-deste%C4%9Fi" class="hash-link" aria-label="Direct link to Functions: POST, PATCH ve DELETE Desteği" title="Direct link to Functions: POST, PATCH ve DELETE Desteği" translate="no">​</a></h2>
<p>Function endpoint'leri artık <code>GET</code>'in yanı sıra <code>POST</code>, <code>PATCH</code> ve <code>DELETE</code> verb'lerini de destekliyor. Hem domain-level hem de instance-level fonksiyonlarda geçerli:</p>
<div class="language-http codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-http codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">GET    /api/v1/{domain}/functions/{function}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">POST   /api/v1/{domain}/functions/{function}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PATCH  /api/v1/{domain}/functions/{function}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">DELETE /api/v1/{domain}/functions/{function}</span><br></div></code></pre></div></div>
<p>Bu değişiklik, function endpoint'lerinin tam CRUD senaryolarını karşılamasını sağlıyor. Ayrı BFF katmanı geliştirme ihtiyacı minimize ediliyor.</p>
<p>Aynı sürümde <code>rawResponse</code> alanı da eklendi. <code>rawResponse: true</code> ayarlandığında, mapped <code>rawData</code> platformun standart response modeline sarılmadan doğrudan döndürülür. Legacy API'lerden geçiş senaryolarında işe yarar.</p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="i̇ş-akışı-job-timeout-modeli">İş Akışı Job Timeout Modeli<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#i%CC%87%C5%9F-ak%C4%B1%C5%9F%C4%B1-job-timeout-modeli" class="hash-link" aria-label="Direct link to İş Akışı Job Timeout Modeli" title="Direct link to İş Akışı Job Timeout Modeli" translate="no">​</a></h2>
<p>Bir transition job'ı çalışırken platform çöker veya beklenmedik bir hata oluşursa, instance <strong>Busy</strong> durumunda kalıyordu. Bu sürümde üç katmanlı bir timeout modeli devreye girdi:</p>
<table><thead><tr><th>Katman</th><th>Süre</th><th>Açıklama</th></tr></thead><tbody><tr><td>Job execution budget</td><td>300 s</td><td><code>TransitionJobHandler</code>'ın kendi bütçesi</td></tr><tr><td>Lock lease</td><td>330 s</td><td>Distributed lock süresi</td></tr><tr><td>Per-invocation Dapr ceiling</td><td>60 s</td><td><code>RemoteInvokerService</code> başına</td></tr></tbody></table>
<p>300 saniye dolduğunda:</p>
<ol>
<li class="">Instance <strong>Busy</strong> → <strong>Faulted</strong> olarak güncellenir</li>
<li class=""><code>JOB_EXECUTION_TIMEOUT</code> kodu ile bir <strong>incident</strong> oluşturulur</li>
<li class="">Açık <code>InstanceTransition</code> kaydı kapatılır</li>
</ol>
<p>Recovery işlemi, tetikleyici token iptal edilmiş olsa bile her zaman tamamlanır (<code>CancellationToken.None</code> kullanılır). Host kapanırken (SIGTERM) recovery atlanır, sadece <code>MarkAsProcessed</code> çalışır.</p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="deployment-dokümantasyonu">Deployment Dokümantasyonu<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#deployment-dok%C3%BCmantasyonu" class="hash-link" aria-label="Direct link to Deployment Dokümantasyonu" title="Direct link to Deployment Dokümantasyonu" translate="no">​</a></h2>
<p>Yeni bir <strong><a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/deployment/">Deployment</a></strong> bölümü eklendi. Bu bölüm iki rehber içeriyor:</p>
<ul>
<li class=""><strong><a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/deployment/helm-chart">Helm Chart</a></strong> — vNext'i Kubernetes cluster'ınıza veya local Minikube ortamınıza OCI chart (<code>ghcr.io/burgan-tech/vnext</code>) ile kurma adımları.</li>
<li class=""><strong><a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/deployment/release-viewer">Release Viewer</a></strong> — Tenant'ınızdaki domain'leri, çalışan Helm chart versiyonlarını ve uygulama versiyonlarını görsel olarak izleyen araç.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="transition-annotations-standart-keyler">Transition Annotations: Standart Key'ler<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#transition-annotations-standart-keyler" class="hash-link" aria-label="Direct link to Transition Annotations: Standart Key'ler" title="Direct link to Transition Annotations: Standart Key'ler" translate="no">​</a></h2>
<p>v0.0.54'te eklenen <code>annotations</code> alanı için artık platform tarafından tanınan standart key'ler belgelendi. Bu key'leri kullanan UI SDK'ları tutarlı davranış sergileyebilir:</p>
<table><thead><tr><th>Key</th><th>Açıklama</th></tr></thead><tbody><tr><td><code>ui/visibility-channel</code></td><td>Pipe ile ayrılmış kanal listesi (<code>IbWeb</code>, <code>backoffice</code>, <code>IbIvnApp</code>)</td></tr><tr><td><code>ui/priority</code></td><td>Sıralama önceliği (düşük = önce)</td></tr><tr><td><code>ui/intent</code></td><td>Görsel ipucu: <code>cancel</code>, <code>destructive</code>, <code>close</code>, <code>confirm</code></td></tr></tbody></table>
<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">"annotations"</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><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"ui/visibility-channel"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"IbIvnApp|backoffice"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"ui/priority"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"ui/intent"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"cancel"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="view-konsepti-state-view-ve-transition-view">View Konsepti: State View ve Transition View<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#view-konsepti-state-view-ve-transition-view" class="hash-link" aria-label="Direct link to View Konsepti: State View ve Transition View" title="Direct link to View Konsepti: State View ve Transition View" translate="no">​</a></h2>
<p><a class="" href="https://burgan-tech.github.io/vnext-docs/en/docs/how-to/view-consept/">View Concept rehberi</a> platform tarafından önerilen etkileşim modelini artık açıkça belgeliyor:</p>
<ul>
<li class=""><strong>State View</strong> — state'e bağlı, read-only ekran. Instance'ın mevcut durumunu gösterir.</li>
<li class=""><strong>Transition View</strong> — transition'a bağlı form ekranı. Kullanıcıdan girdi alır ve transition'ı tetikler.</li>
</ul>
<p>State Function yanıtındaki <code>hasView</code> alanı, istemcinin doğrudan transition mı göndereceğine yoksa önce View Function'ı mı çağıracağına karar vermesini sağlar.</p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="özet">Özet<a href="https://burgan-tech.github.io/vnext-docs/en/blog/migration/v0055-neler-degisti#%C3%B6zet" class="hash-link" aria-label="Direct link to Özet" title="Direct link to Özet" translate="no">​</a></h2>
<table><thead><tr><th>Alan</th><th>Değişiklik</th></tr></thead><tbody><tr><td>Entegrasyon</td><td>SoapTask (Tip 16): SOAP 1.1/1.2 web servis çağrısı</td></tr><tr><td>Scripting</td><td><code>ParseXml</code> / <code>XmlToString</code> ScriptBase yardımcıları</td></tr><tr><td>Functions</td><td><code>POST</code>, <code>PATCH</code>, <code>DELETE</code> verb desteği + <code>rawResponse</code> alanı</td></tr><tr><td>Güvenilirlik</td><td>Job execution timeout modeli (300s bütçe + Busy→Faulted recovery)</td></tr><tr><td>Deployment</td><td>Helm Chart ve Release Viewer dokümantasyonu</td></tr><tr><td>Annotations</td><td><code>ui/visibility-channel</code>, <code>ui/priority</code>, <code>ui/intent</code> standart key'leri</td></tr><tr><td>View</td><td>State View / Transition View etkileşim modeli belgelendi</td></tr></tbody></table>
<p>Teknik detaylar, konfigürasyon örnekleri ve issue referansları için <a class="" href="https://burgan-tech.github.io/vnext-docs/en/blog/release-v0-0-55">v0.0.55 Release Notes</a> sayfasına bakabilirsiniz.</p>
<hr>
<p><strong>vNext Runtime Platform Team</strong><br>
<!-- -->Mayıs 2026</p>]]></content:encoded>
            <category>release</category>
            <category>duyuru</category>
            <category>soap</category>
            <category>functions</category>
            <category>timeout</category>
        </item>
    </channel>
</rss>