Skip to main content

Release v0.0.54

· 8 min read
vNext Team
Burgan Tech Engineering

Overview

This release strengthens pipeline reliability through distributed lock TTL renewal on auto-chains, SubFlow ErrorBoundary delegation to parent flows, and end-to-end Stage propagation in the TransitionPipeline. Infrastructure and CI/CD fixes address stale Docker image tags from common.props, non-fast-forward release pushes, and transient Microsoft Container Registry pull failures. Platform metadata expands with new Instance fields, transition annotations, View renderer hints, exposure of the cancel transition in availableTransitions, and shared transitions available State-wide via "availableIn": ["all"]. NotificationTask is revived with full State function response binding, and tooling adds the @burgan-tech/vnext-meta package plus configurable Kestrel request header limits.


Bug Fixes

Docker images built with stale version from common.props (#620)

The CI/CD pipeline's Docker build step read a cached or stale version number from common.props instead of the freshly bumped value during release. Built images were tagged with the previous version, causing deployment mismatches between the intended release and the artifacts in the registry. The build step now reads the version after the bump completes, ensuring image tags match the actual release version.

Reference: #620

Fix build pipeline non-fast-forward push and transient MCR 403 errors (#627)

The release pipeline occasionally failed with non-fast-forward push rejections when concurrent commits landed between fetch and push, leaving the local ref behind the remote. Transient HTTP 403 errors from Microsoft Container Registry (MCR) during base image pulls also caused intermittent build failures unrelated to application code. The pipeline now performs a fresh pull before push to align refs, and MCR pulls use retry logic with exponential backoff.

Reference: #627

Propagate Stage property through transition pipeline (#630)

The Stage property set on a transition definition was not propagated through the full TransitionPipeline execution. Downstream steps such as onEntry tasks, automatic transitions, and finish handling could not read the current stage from the pipeline context, and historical transition records did not reflect the stage label consistently. The pipeline context now carries the Stage value end-to-end, and it is persisted on the InstanceTransition record.

Reference: #630

SubFlow ErrorBoundary fallback to parent flow (#574)

When a SubFlow definition did not declare its own ErrorBoundary, errors were not evaluated against a boundary in the parent flow hierarchy as operators expected. Instead of bubbling to the parent flow's ErrorBoundary, error handling could appear silent or misrouted relative to the composed workflow design. The error propagation logic now walks up the flow hierarchy: if the current SubFlow has no ErrorBoundary configured, the parent flow's ErrorBoundary is evaluated and executed.

Reference: #574

Fix distributed lock TTL extension failure in transition pipeline auto-chains (#672)

When a TransitionPipeline triggered automatic transitions (auto-chains), the distributed lock TTL was not extended for additional pipeline hops. Long-running auto-chains could exceed the original lock TTL, allowing the lock to expire mid-execution and concurrent transitions against the same Instance. The lock extension mechanism now renews TTL at each auto-chain hop, preventing premature expiration while chained work runs.

Reference: #672


Features

Expose cancel transition in availableTransitions from State function (#622)

The State function's availableTransitions response previously excluded the well-known cancel transition even when the caller was authorized to invoke it. Clients had to hardcode the cancel transition key to present a cancel action in UI layers. Cancel is now included in availableTransitions when the caller has the required role, aligning the API with authorization and enabling UI SDKs to render cancel actions without special cases.

Reference: #622

Add CurrentStateType, CurrentStateSubType, and Stage fields to Instance (#624)

The Instance entity includes three new fields: currentStateType (for example Begin, State, Finish), currentStateSubType (for example Active, Completed, Cancelled, Timeout), and stage (the current TransitionPipeline stage label). These fields are returned on all Instance read APIs (State, GetInstance, GetInstances) so clients can filter and summarize instances without parsing the full state definition on every call.

Reference: #624

Add configurable Kestrel request header size and count limits (#640)

Kestrel's default request header limits (32 KB total size, 100 headers) can now be overridden via environment variables or Helm chart values. This supports scenarios where large authorization tokens or correlation headers exceed the defaults and Kestrel returns 400 Bad Request before the request reaches application middleware or the State function. Configuration keys: KESTREL__LIMITS__MAXREQUESTHEADERSIZE and KESTREL__LIMITS__MAXREQUESTHEADERCOUNT.

Reference: #640

Store mapped payload in InstanceTransition body instead of raw request data (#641)

The InstanceTransition record's body field previously stored the raw HTTP request payload before inputMapping ran. Auditing and replay focused on wire data rather than the values actually applied to Instance state. body now stores the mapped (post-inputMapping) payload—the data written to the instance—so transition history reflects what the runtime applied, not only what arrived on the wire.

Reference: #641

Add annotations metadata to transition definitions for client-side filtering (#642)

Transition definitions now support an optional annotations object (key-value string pairs) that is persisted and returned in the State function's availableTransitions response. UI SDKs and client applications can filter, group, or conditionally render transitions using annotations without server deploys for presentation-only tweaks. Example: "annotations": { "category": "approval", "priority": "high" }.

Reference: #642

Add renderer property to View entity for UI SDK dispatch (#643)

The View entity now includes an optional renderer property (string) in its definition. When present, the State function response includes renderer alongside the view schema so UI SDKs can dispatch to the correct component or template implementation without a parallel mapping table. Examples: "renderer": "form-wizard", "renderer": "document-viewer".

Reference: #643

Shared transition: availableIn state "all" support (#566)

Shared transitions (defined once and reused across multiple State entries) now support "availableIn": ["all"] as shorthand to make the transition available in every state of the flow. Previously each state had to be listed explicitly, which risked drift when new states were added to the definition.

Reference: #566

Revive NotificationTask with full State Function response binding (#662)

The NotificationTask type is restored and expanded: task execution receives the complete State function response (Instance data, availableTransitions, View, metadata) as its context. Notification templates and integrations can reference current instance fields, available actions, and presentation metadata in one binding surface.

Reference: #662

Add @burgan-tech/vnext-meta npm package to publish version-manifest.json (#663)

A new npm package, @burgan-tech/vnext-meta, is published on each release and ships version-manifest.json. The manifest maps runtime versions to schema versions, supported capabilities, and compatibility metadata. UI SDKs and CLI tools can depend on this package to detect compatible versions and feature availability automatically.

Reference: #663


Breaking Changes

InstanceTransition body artık mapped payload içeriyor (#641)

context.ScriptContext.CurrentTransition.Body, bu sürümden itibaren TransitionMapping uygulandıktan sonraki veriyi (mapped payload) döndürür. Ham transition request verisi artık bu alan üzerinden erişilemez.

Ham veriye erişim: Transition scope içinde ham payload'a ihtiyaç duyan script'ler context.Body kullanmalıdır.

AlanÖnceki davranışYeni davranış
context.ScriptContext.CurrentTransition.BodyHam transition request payloadMapped (post-transitionMapping) payload
context.BodyHam transition request payload

Referans: #641


Configuration Updates

Configuration for v0.0.54:

{
"runtimeVersion": "0.0.54",
"schemaVersion": "0.0.42"
}

Note: Schema package 0.0.42 is the documented pairing with this runtime.


Issues Referenced

  • vnext #620 — Docker images: read version after bump (not stale common.props)
  • vnext #622cancel in availableTransitions from State
  • vnext #624Instance currentStateType / currentStateSubType / stage
  • vnext #627 — Non-FF push fix; MCR pull retry/backoff
  • vnext #630Stage propagated through TransitionPipeline / InstanceTransition
  • vnext #640Kestrel header size/count limits (env / Helm)
  • vnext #641InstanceTransition body stores mapped payload
  • vnext #642 — Transition annotations for client filtering
  • vnext #643View renderer in State response
  • vnext #574SubFlow ErrorBoundary fallback to parent
  • vnext #566 — Shared transition **availableIn**: ["all"]
  • vnext #662NotificationTask + full State response context
  • vnext #663@burgan-tech/vnext-meta / version-manifest.json
  • vnext #672Distributed lock TTL on auto-chain hops

Summary

  • Docker release tags align with post-bump version; CI handles non-fast-forward pushes and MCR transients.
  • Stage flows through TransitionPipeline and InstanceTransition; SubFlow errors honor parent ErrorBoundary; distributed lock TTL renews across auto-chains.
  • Instance exposes currentStateType, currentStateSubType, stage; cancel appears in availableTransitions when authorized.
  • InstanceTransition body records mapped data; transitions support annotations; View carries optional renderer; shared transitions support "availableIn": ["all"].
  • NotificationTask binds the full State response; @burgan-tech/vnext-meta publishes version-manifest.json; Kestrel header limits are configurable.

See Also


vNext Runtime Platform Team
May 18, 2026