Release v0.0.54
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.Body | Ham transition request payload | Mapped (post-transitionMapping) payload |
context.Body | — | Ham 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 #622 — cancel in
availableTransitionsfrom State - vnext #624 — Instance
currentStateType/currentStateSubType/stage - vnext #627 — Non-FF push fix; MCR pull retry/backoff
- vnext #630 — Stage propagated through TransitionPipeline / InstanceTransition
- vnext #640 — Kestrel header size/count limits (env / Helm)
- vnext #641 — InstanceTransition
bodystores mapped payload - vnext #642 — Transition
annotationsfor client filtering - vnext #643 — View
rendererin State response - vnext #574 — SubFlow ErrorBoundary fallback to parent
- vnext #566 — Shared transition **
availableIn**: ["all"] - vnext #662 — NotificationTask + full State response context
- vnext #663 —
@burgan-tech/vnext-meta/version-manifest.json - vnext #672 — Distributed 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 inavailableTransitionswhen authorized. - InstanceTransition
bodyrecords mapped data; transitions supportannotations; View carries optionalrenderer; shared transitions support"availableIn": ["all"]. - NotificationTask binds the full State response;
@burgan-tech/vnext-metapublishesversion-manifest.json; Kestrel header limits are configurable.
See Also
- v0.0.54 Duyurusu — Feature-focused announcement in Turkish
vNext Runtime Platform Team
May 18, 2026
