Ana içeriğe geç

Release v0.0.62

· 8 dakikalık okuma
vNext Team
Burgan Tech Engineering

Overview

This release sharpens four integration-facing capabilities and lands a runtime-discovery tool. HTTP Task gains a configurable contentType so requests can carry payloads other than JSON, with byte-exact body preservation for signing scenarios (#742). States can declare a long-poll interaction, making it declarative when a client workflow manager should terminate a long poll — so different clients can model their own stop points across a process (#717). Multi-task functions now forward output ScriptResponse headers and status code, giving output handlers control over the final function response shape (#748). The new vnext-runtime MCP server exposes component, runtime, and metadata discovery to MCP-capable agents, so AI tooling can be wired directly against a domain's runtime (#333). The async transition pipeline adds a direct Dapr-enqueue continuation mode with outbox fallback (#744), and the authorization model now treats deny-only role grant sets as blacklists (default allow) (#736). Three fixes round out the release: SOAP task compilation and escaping (#738), chain-token gating for child sub-processes (#730), and domain replacement of subprocess references (#729). This bump advances the component schema to 0.0.47.


Features

Configurable Content-Type and byte-exact body for HTTP Task (#742)

HttpTask configuration gains a contentType field, so requests are no longer limited to application/json. A task can now post application/xml, text/plain, application/x-www-form-urlencoded, or any other media type, and the runtime preserves the request body byte-for-byte — which matters when the body is signed and any re-serialization would invalidate the signature.

{
"attributes": {
"type": "6",
"config": {
"url": "https://api.example.com/sign",
"method": "POST",
"contentType": "application/xml", // request body media type
"body": { "...": "..." }
}
}
}

Existing task definitions keep working unchanged — when contentType is omitted the previous default behavior applies.

Reference: issue #742 — see also HTTP Task.

Declarative long-poll termination on state entry (#717)

A state may now carry an optional interaction.longPoll block that makes long-poll termination declarative. Instead of every client guessing when to stop holding a State Function request open, the workflow design itself declares the stop points: the runtime holds the request open until a transition occurs or the fallback timeout elapses, and terminate controls whether leaving the state closes the open request. Because the block is role-scoped, different clients can model a process with their own stop points.

{
"key": "waiting-approval",
"stateType": 2,
"interaction": {
"longPoll": {
"terminate": true, // close the open request when the state is left
"fallbackTimeoutSeconds": 30, // max hold before falling back
"roles": [
{ "role": "client.app", "grant": "allow" }
]
}
}
}

Reference: issue #717 — see also Workflow component and Sync vs Async execution.

Output ScriptResponse header/status forwarding in multi-task functions (#748)

When a function runs multiple tasks via onExecutionTasks and shapes the result through an IOutputHandler, the output ScriptResponse can now carry headers and a status code that the runtime forwards onto the final function HTTP response. Previously these were dropped, so an output handler could only influence the body. Output handlers can now set the response status (e.g. 201, 202) and propagate headers such as Location or ETag.

Reference: issue #748 — see also Custom Functions and Interfaces → IOutputHandler.

vnext-runtime MCP server (#333)

A standalone Model Context Protocol server, vnext-runtime, lets MCP-capable agents (Claude Code, Cursor, CI, hosted assistants) discover and read a vNext domain's components, live runtime data, and static vnext-meta over a single endpoint. It is thin and decoupled — it calls the Orchestration HTTP API via a typed HttpClient and has no DB / Redis / Dapr references.

  • Transports: stdio (local IDE) and Streamable HTTP (hosted / CI).
  • Tool groups: ComponentTools, RuntimeTools, MetaTools, and MutatingRuntimeTools (gated by AllowMutations).
  • Single-domain: each instance serves one domain (Mcp:Domain); a fixed Mcp:ApiKey gates the HTTP transport.
dotnet tool install -g BBT.Workflow.Mcp
claude mcp add vnext-runtime \
--env Mcp__OrchestrationBaseUrl=http://localhost:4201 \
--env Mcp__Domain=<your-domain> \
-- vnext-mcp

Reference: issue #333 — see also vnext-runtime MCP Server.

Direct Dapr-enqueue continuation mode with outbox fallback (#744)

Building on the configurable async transition modes from v0.0.60, continuations can now be enqueued directly via Dapr, with the transactional outbox as a durability fallback when the direct enqueue path is unavailable. This shortens the latency of async continuations under healthy conditions while keeping the durability guarantee.

Reference: issue #744 — see also Sync vs Async execution.

Deny-only role grant sets behave as blacklists (#736)

The grant model now distinguishes two intents on a roles / queryRoles set:

  • A set that contains any allow grant is an allow-list — only matching allow roles pass (default deny).
  • A set that contains only deny grants is a blacklist — everyone is allowed except the listed roles (default allow).

In both cases DENY still overrides ALLOW. This makes "allow everyone except X" expressible without enumerating every permitted role. Review any existing deny-only sets — see the migration guide below.

Reference: issue #736 — see also Authorization.


Fixes

SOAP Task compilation + default System.Security escaping (#738)

A SoapTask mapping could fail to compile with CS0012 (a type from a non-referenced assembly), and XML special characters in the default path were not escaped consistently. The SOAP mapping compile context and default escaping are fixed.

Reference: issue #738 — see also SOAP Task.

ChainToken gate rejected child sub-process "Ready" on Busy-subtype parent (#730)

The chain-ownership token gate incorrectly rejected a child sub-process transition into Ready when the parent instance carried the Busy subtype, stalling otherwise-valid sub-process progress. The gate now admits the child transition.

Reference: issue #730

Domain replacement skipped subprocess refs matching the source domain (#729)

During domain replacement, subprocess references whose domain matched the source domain were skipped, leaving stale cross-domain references. Replacement now rewrites these references correctly.

Reference: issue #729


Configuration Updates

Configuration for v0.0.62:

{
"runtimeVersion": "0.0.62",
"schemaVersion": "0.0.47"
}

Note: Schema version advances to 0.0.47 (from 0.0.46). The bump adds config.contentType on HTTP tasks (#742) and the interaction / longPoll definition on states (#717). Update @burgan-tech/vnext-schema in your domain project before validating against this runtime.

Container images: published at tag 0.0.62 under ghcr.io/burgan-tech/vnext/* (execution, orchestrator, init, inbox, outbox, db-migrator, and the new mcp-server), Cosign-signed (keyless OIDC) with SBOM + provenance. Immutable digests are listed in the GitHub release.

Migration guide: for a detailed Turkish walkthrough of every v0.0.62 feature and its migration steps, see vNext v0.0.62 Migration Rehberi.


Issues Referenced

  • vnext #742 — Configurable Content-Type and byte-exact body for signing.
  • vnext #717 — Support declarative long-poll termination on state entry.
  • vnext #748 — Forward output ScriptResponse headers/status in multi-task functions.
  • vnext #333 — Add an MCP server (vnext-runtime) for component, runtime & metadata discovery.
  • vnext #744 — Add direct Dapr-enqueue continuation mode with outbox fallback.
  • vnext #736 — Treat deny-only role grant sets as blacklists (default allow).
  • vnext #738 — Fix SoapTask mapping CS0012 + default System.Security escaping.
  • vnext #730 — ChainToken gate rejects child sub-process "Ready" on Busy-subtype parent.
  • vnext #729 — Domain replacement skips subprocess refs matching source domain.

Summary

  • HTTP Task contentType lets requests carry any media type, with byte-exact body preservation for signing.
  • State interaction.longPoll makes long-poll termination declarative and role-scoped, so clients model their own stop points.
  • Multi-task functions forward output ScriptResponse headers and status code onto the final function response.
  • vnext-runtime MCP server exposes component / runtime / meta discovery to AI tooling over stdio and Streamable HTTP.
  • Async continuations can enqueue directly via Dapr with outbox fallback.
  • Deny-only role grant sets now behave as blacklists (default allow); DENY still overrides ALLOW.
  • Fixes: SOAP compile/escaping, chain-token gating for child sub-processes, domain replacement of subprocess refs.
  • Schema advances to 0.0.47.

vNext Runtime Platform Team
Released June 18, 2026