Release v0.0.23-26
π΄ Important Notice: Version 0.0.23 and 0.0.24 contained critical bugs and has been superseded by version 0.0.26. If you are using v0.0.23, please upgrade to v0.0.26 immediately. All references to v0.0.23 should be considered as v0.0.26.
π§ Overviewβ
This release introduces significant architectural changes including optional key field for workflow instances, Native C# code support in mappings (NAT encoding), input mapping migration from Execution to Orchestrator, and a new versioning strategy for component publishing. Additionally, enhanced TriggerTask capabilities, Event Hook feature, and various bug fixes for transition data handling, async transactions, and logging improvements are included.
β οΈ Breaking Changes: This release contains multiple breaking changes affecting transition payloads, start instance requests, mapping schema format, and component publishing strategy. Please review the Breaking Changes section carefully before upgrading.
π Major Updatesβ
1. Remove Mandatory Constraint on Key Field in Workflow Instanceβ
The key field in workflow instances is no longer mandatory. This provides more flexibility in instance creation and allows key assignment during transitions.
Previous Behavior:
keyfield was mandatory in start instance requests- Transition payload directly received transition data
New Behavior:
keyfield is now optional in start instance requests- New transition payload schema with structured format
- Key can be set during transition if instance key is empty
New Transition Payload Schema:
{
"key": "",
"tags": [],
"attributes": {
}
}
All fields are optional.
Key Assignment Rules:
- If
keyvalue is provided and current instance key is empty, it will be saved - During validation, the operation proceeds only if no active instance exists with that key
Example - Start Instance (Key Optional):
POST /ecommerce/workflows/order-processing/instances/start?sync=true
Content-Type: application/json
{
"tags": ["priority", "express"],
"attributes": {
"userId": 123,
"amount": 5000
}
}
Example - Set Key During Transition:
PATCH /ecommerce/workflows/order-processing/instances/{instanceId}/transitions/assign-key?sync=true
Content-Type: application/json
{
"key": "ORDER-2024-001",
"attributes": {
"assignedBy": "system"
}
}
Reference: #184 - Remove Mandatory Constraint on key Field in Workflow Instance
2. Convert Mapping to Embedded Format with Native Code Supportβ
Mapping definitions now support embedded code format with native C# code support (NAT encoding), eliminating the need for separate files and BASE64 encoding.
Encoding Options:
B64: BASE64 encoded code (locationfield required)NAT: Native C# code (locationfield not required)
Key Changes:
- β
encodingproperty added to specify code format - β Native C# code support for better readability and development experience
- β
locationproperty is optional for NAT encoding (still required for B64)
Example with BASE64 Encoding (B64):
{
"mapping": {
"location": "./task-mapping.csx",
"code": "cmV0dXJuIG5ldyB7IHVzZXJJZCA9IGNvbnRleHQuQm9keS5pZCB9Ow==",
"encoding": "B64"
}
}
Example with Native Encoding (NAT):
{
"key": "process-payment",
"mapping": {
"code": "public class PaymentMapping : ScriptBase, IMapping\n{\n public Task<ScriptResponse> InputHandler(WorkflowTask task, ScriptContext context)\n {\n var amount = context.Body?.amount;\n return Task.FromResult(new ScriptResponse { Data = new { amount } });\n }\n\n public Task<ScriptResponse> OutputHandler(ScriptContext context)\n {\n return Task.FromResult(new ScriptResponse());\n }\n}",
"encoding": "NAT"
}
}
Reference: #79 - Convert Mapping to Embedded Format
3. Move Input Mappings from Execution to Orchestratorβ
Input and output mapping operations have been migrated from Execution to Orchestrator for better separation of concerns and performance optimization.
Architecture Changes:
- β Execution is now only responsible for task invocation
- β Input mapping operations performed on Orchestrator side
- β Output mapping operations performed on Orchestrator side
- β Resilience and retry mechanisms are consistent between Orchestrator and Execution
Performance Optimization:
- TriggerTasks in the same domain now execute locally instead of invocation
- Local execution includes built-in retry mechanism
Benefits:
- Clear separation of responsibilities
- Execution focuses purely on task execution
- Orchestrator handles data management and workflow logic
- Improved performance for same-domain trigger tasks
- Better error handling and retry consistency
Reference: #191 - Move Input Mappings from Execution to Orchestrator and Send Only Required Data
4. New Versioning Strategy with Package Supportβ
Component publishing method has been completely redesigned with a new versioning strategy that includes package version and name information.
Previous Behavior:
- System components loaded via
/admin/publishendpoint with init image - Other components managed through sys-flows
- Limited versioning and sustainability
New Behavior:
- All components managed via
/definitions/publishendpoint - New semantic versioning format with package metadata
Version Format:
MAJOR.MINOR.PATCH-pkg.PKG_VERSION+PKG_NAME
Example: 1.0.0-pkg.1.17.0+account
Format Components:
1.0.0β Artifact version (version from component file)-pkg.1.17.0β Package version (affects SemVer sorting:1.0.0-pkg.1.18.0 > 1.0.0-pkg.1.17.0)+accountβ Build metadata (package name, doesn't affect sorting but carries identity/distribution info)
Version Examples:
| Version | Description |
|---|---|
1.0.0-pkg.1.17.0+account | Account package, core 1.0.0, package 1.17.0 |
2.1.3-pkg.2.5.1+customer | Customer package, core 2.1.3, package 2.5.1 |
1.0.0-alpha.1-pkg.1.17.0+account | Alpha pre-release version |
1.0.0-pkg.1.17.0+account+build.123 | With build metadata |
Client Behavior:
- No changes in version request behavior from client side
Reference: #208 - Support No-Action Transitions with External Version Management
5. TriggerTask Enhancementsβ
TriggerTask types have been enhanced with new properties and capabilities for better flexibility and control.
DirectTriggerβ
New properties added:
domain(required)flow(required)transitionName(required)instanceId(optional)key(optional)async(optional)version(optional)tags(optional)body(optional)
Note: Either
instanceIdorkeymust be provided at runtime.
Previous Behavior:
- Only
keyvalue was used asflow
Startβ
New properties:
domain(required)flow(required)key(optional)async(optional)version(optional)tags(optional)body(optional)
SubProcessβ
New properties:
domain(required)flow(required)key(optional)version(optional)tags(optional)body(optional)
Note: SubProcess always runs asynchronously.
Response in Output Mapping: All Direct, Start, and SubProcess trigger tasks now include response in the output mapping context.
6. Transition Schema API Endpointβ
A new API endpoint has been added to fetch the schema for a specific transition. This enables clients to dynamically build forms, validate data before submission, and generate UI components based on schema definitions.
Endpoint:
GET /:domain/workflows/:flow/instances/:instance/functions/schema?transitionKey=:transitionKey
Features:
- β Returns schema definition for a transition in the active state
- β
System-provided
schemafunction - no custom implementation needed - β Enables dynamic form generation
- β Supports client-side validation before submission
- β JSON Schema (draft/2020-12) compatible response
Example Request:
GET /banking/workflows/account-opening/instances/18075ad5-e5b2-4437-b884-21d733339113/functions/schema?transitionKey=account-type-selection
Example Response:
{
"key": "account-type-selection",
"type": "workflow",
"schema": {
"$id": "https://schemas.vnext.com/banking/account-type-selection.json",
"type": "object",
"title": "Account Type Selection Schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"accountType"
],
"properties": {
"accountType": {
"type": "string",
"oneOf": [
{
"const": "demand-deposit",
"description": "Vadesiz Hesap - Demand Deposit Account"
},
{
"const": "time-deposit",
"description": "Vadeli Hesap - Time Deposit Account"
},
{
"const": "investment-account",
"description": "Fonlu Hesap - Investment Account"
},
{
"const": "savings-account",
"description": "Tasarruf HesabΔ± - Savings Account"
}
],
"title": "Account Type",
"description": "Type of account to be opened"
}
},
"description": "Schema for account type selection input",
"additionalProperties": false
}
}
Use Cases:
- Dynamic form rendering based on transition requirements
- Client-side validation before submitting transitions
- Understanding required/optional fields for a transition
- Generating UI components automatically from schema
Reference: #216 - Add API Endpoint to Fetch Transition Schema
7. Event Hook Featureβ
New Event Hook capability has been added for event publishing with automatic fallback to outbox.
Behavior:
- Before publishing an event, the hook is executed first
- If hook execution fails, the event is placed in outbox
- Retry mechanism attempts to deliver from outbox
Benefits:
- Improved event delivery reliability
- Automatic fallback mechanism
- Built-in retry support
8. Inbox and Outbox Services Activationβ
Inbox and Outbox services have been activated for reliable message processing.
Features:
- Message persistence for reliability
- Automatic retry for failed deliveries
- Integration with Event Hook feature
β οΈ Breaking Changesβ
1. Transition and Start Instance Payload Schema Changeβ
Impact: All transition and start instance requests
Required Action:
- Update all transition request payloads to use new schema
keyfield is now optional in start instance requests- Review existing integrations that depend on old payload structure
New Schema:
{
"key": "",
"tags": [],
"attributes": {}
}
Reference: #184
2. Mapping Schema Format Changeβ
Impact: All mapping definitions in workflows
Required Action:
- Add
encodingproperty (B64orNAT) - For B64 encoding: keep
locationproperty - For NAT encoding:
locationproperty is not required - Update build/publish scripts accordingly
Migration Example (B64 - keep location):
Before:
{
"mapping": {
"location": "./task-mapping.csx",
"code": "BASE64_ENCODED_CODE"
}
}
After:
{
"mapping": {
"location": "./task-mapping.csx",
"code": "BASE64_ENCODED_CODE",
"encoding": "B64"
}
}
New Option (NAT - no location needed):
{
"mapping": {
"code": "public class MyMapping : ScriptBase, IMapping { ... }",
"encoding": "NAT"
}
}
Reference: #79
3. DirectTrigger Property Changesβ
Impact: All DirectTrigger task definitions
Required Action:
- Update DirectTrigger definitions with new required properties
- Add
domain,flow, andtransitionNameproperties - Provide either
instanceIdorkeyat runtime
Reference: See TriggerTask Enhancements section
4. Component Publishing Strategy Changeβ
Impact: Component deployment and versioning
Required Action:
- Use new
/definitions/publishendpoint - Update versioning to new format
- Review CI/CD pipelines
Reference: #208
π οΈ Bug Fixesβ
1. Transition Data Overwriting Fixβ
Fixed an issue where transition data was being overwritten incorrectly during workflow progression.
2. Async Transaction Issuesβ
Resolved transaction issues in async requests that were causing transition pipeline execution problems.
3. Mapping and Task Error Handlingβ
Fixed issues where errors in mappings and tasks were not properly stopping the pipeline execution.
4. Logging Cleanupβ
- Cleaned up logging structure to reduce noise
- Fixed deep error logging issues where errors in pipeline were getting lost
- Improved error visibility and traceability
5. Tracing Spansβ
Organized and improved tracing spans for better observability.
π§ Configuration Updatesβ
Configuration for v0.0.26:
{
"runtimeVersion": "0.0.26",
"schemaVersion": "0.0.28",
"componentVersion": "0.0.18"
}
π Tool Updatesβ
vnext-workflow-cli Updatesβ
- Added
vnext.config.jsonconfiguration file for project management - Project configuration now includes
domain,version, andpathsfor component directories - Fixed CSX update issue with scanning all reference files
- Updated publish command for new publish endpoint
- Improved logging with more detail
vnext-template CLI & Template Projectβ
- Added template project creation command
- Added schema validation and build commands
- Commands added to project package.json for CI/CD integration
- Simplified project validation and build processes
vNext-example Updatesβ
- Added contract flow example with subprocess and direct trigger usage
- Added task-test flow with all task types and mapping examples
- Updated project structure using vnext-template
- Added Context7 MCP integration
- Added AI .mdc file for cursor rules
Generalβ
- vNext-runtime documentation added to Context7 MCP for AI-based documentation search
π§± Issues Referencedβ
- #184 - Remove Mandatory Constraint on key Field in Workflow Instance
- #79 - Convert Mapping to Embedded Format
- #191 - Move Input Mappings from Execution to Orchestrator
- #208 - Support No-Action Transitions with External Version Management
- #216 - Add API Endpoint to Fetch Transition Schema
π Developer Notesβ
Migration Checklistβ
- β οΈ Breaking Change: Update transition payloads to new schema
- β οΈ Breaking Change: Update mapping definitions (add
encodingfield;locationrequired for B64, optional for NAT) - β οΈ Breaking Change: Update DirectTrigger task definitions with new properties
- β οΈ Breaking Change: Update component publishing to use new endpoint and versioning
- Review start instance calls -
keyis now optional - Test TriggerTask enhancements in your workflows
- Update vnext.config.json in your projects
- Verify async operations after transaction fixes
- Update to schema version 0.0.28
New Capabilities to Exploreβ
- Native Code Mappings: Use
encoding: "NAT"for readable C# code in mappings - Flexible Key Assignment: Assign keys during transitions instead of at start
- Enhanced TriggerTasks: Leverage new properties for better control
- Event Hooks: Implement reliable event publishing with automatic fallback
- Context7 Integration: Use AI-powered documentation search
Migration Guideβ
For detailed migration steps, see the Migration section in sprint-25.md:
- Install vnext-template CLI:
npm i -g @burgan-tech/vnext-template - Create new project:
vnext-template <domain-name> - Copy existing component files to new project structure
- Configure
vnext.config.jsonwith domain and paths - Set
schemaVersionandruntimeVersionfor your vNext platform version - Run
npm installto install schema package - Run
npm validateandnpm buildfor validation and build
π§ Summaryβ
π΄ Version Note: v0.0.23 was released with critical bugs and was immediately patched as v0.0.24. Please use v0.0.24 for production deployments.
With this release:
β οΈ Breaking Change: Transition and start instance payload schema changed
β οΈ Breaking Change: Mapping schema format changed (encoding field added)
β οΈ Breaking Change: DirectTrigger properties expanded
β οΈ Breaking Change: Component publishing strategy and versioning changed
β
Key field now optional in workflow instances
β
Native C# code support in mappings (NAT encoding)
β
Input mappings moved to Orchestrator for better architecture
β
TriggerTask enhancements with new properties
β
Transition Schema API endpoint for dynamic form generation
β
Event Hook feature for reliable event publishing
β
Inbox and Outbox services activated
β
Transition data overwriting bug fixed
β
Async transaction issues resolved
β
Logging and tracing improvements
β
vnext-workflow-cli and template updates
β
Context7 MCP documentation integration
π Upgrade Pathβ
From v0.0.22 to v0.0.26:β
-
Update Runtime:
git pull origin master -
Update Configuration:
{"runtimeVersion": "0.0.26","schemaVersion": "0.0.28","componentVersion": "0.0.18"} -
Update Transition Payloads:
- Review all transition requests
- Update to new schema format with
key,tags,attributes
-
Update Mapping Definitions:
- Add
encodingproperty (B64orNAT) - For B64: keep
locationproperty (required) - For NAT:
locationproperty is optional - Consider migrating to NAT encoding for better readability
- Add
-
Update DirectTrigger Tasks:
- Add required
domain,flow,transitionNameproperties - Ensure
instanceIdorkeyis provided at runtime
- Add required
-
Update Component Publishing:
- Switch to
/definitions/publishendpoint - Use new versioning format
- Switch to
-
Run Validation:
- Use vnext-template CLI for schema validation
- Run
npm validateto check definitions
vNext Runtime Platform Team
December 16, 2025
