Skip to content

Commit ce509e4

Browse files
feat(wcp): execution boundary semantics + checkpoint methods (v5.4.0)
* feat(wcp): add retryPolicy to StepGateRequest + cached/decisionSource to StepGateResponse Support execution boundary semantics (#1414): retryPolicy field with builder method on StepGateRequest, cached (boolean) and decisionSource fields on StepGateResponse. Backward-compatible constructors preserved. * feat(wcp): add Checkpoint, CheckpointListResponse, ResumeFromCheckpointResponse types New types for checkpoint operations. Jackson-annotated with @JsonCreator for deserialization. * feat(wcp): add checkpoint client methods + version 5.4.0 + changelog
1 parent 555f16a commit ce509e4

5 files changed

Lines changed: 308 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ All notable changes to the AxonFlow Java SDK will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [5.4.0] - 2026-04-18
9+
10+
### Added
11+
12+
- **Execution boundary semantics**`retryPolicy` field on `StepGateRequest`
13+
(via builder: `.retryPolicy("reevaluate")`). Controls cached vs fresh
14+
evaluation for the same step boundary.
15+
- **Step gate response metadata**`cached` (boolean) and `decisionSource`
16+
(String) fields on `StepGateResponse` via `isCached()` and
17+
`getDecisionSource()`.
18+
- **Workflow checkpoints**`getCheckpoints(workflowId)` lists step-gate
19+
checkpoints. `resumeFromLastCheckpoint(workflowId)` resumes from last
20+
checkpoint (Evaluation+). `resumeFromCheckpoint(workflowId, checkpointId)`
21+
resumes from a specific checkpoint (Enterprise).
22+
- **Checkpoint types**`Checkpoint`, `CheckpointListResponse`, and
23+
`ResumeFromCheckpointResponse` with Jackson deserialization.
24+
825
## [5.3.0] - 2026-04-09
926

1027
### Added

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.getaxonflow</groupId>
88
<artifactId>axonflow-sdk</artifactId>
9-
<version>5.3.0</version>
9+
<version>5.4.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>AxonFlow Java SDK</name>

src/main/java/com/getaxonflow/sdk/AxonFlow.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5135,6 +5135,79 @@ public void resumeWorkflow(String workflowId) {
51355135
"resumeWorkflow");
51365136
}
51375137

5138+
/**
5139+
* Lists step-gate checkpoints for a workflow. Available in all tiers.
5140+
*
5141+
* @param workflowId workflow ID
5142+
* @return checkpoint list
5143+
*/
5144+
public com.getaxonflow.sdk.types.workflow.WorkflowTypes.CheckpointListResponse getCheckpoints(
5145+
String workflowId) {
5146+
Objects.requireNonNull(workflowId, "workflowId cannot be null");
5147+
return retryExecutor.execute(
5148+
() -> {
5149+
Request httpRequest =
5150+
buildOrchestratorRequest("GET", "/api/v1/workflows/" + workflowId + "/checkpoints", null);
5151+
try (Response response = httpClient.newCall(httpRequest).execute()) {
5152+
return parseResponse(
5153+
response,
5154+
new TypeReference<
5155+
com.getaxonflow.sdk.types.workflow.WorkflowTypes.CheckpointListResponse>() {});
5156+
}
5157+
},
5158+
"getCheckpoints");
5159+
}
5160+
5161+
/**
5162+
* Resumes a workflow from its last resumable checkpoint. Evaluation+ tier.
5163+
*
5164+
* @param workflowId workflow ID
5165+
* @return resume result with fresh decision
5166+
*/
5167+
public com.getaxonflow.sdk.types.workflow.WorkflowTypes.ResumeFromCheckpointResponse resumeFromLastCheckpoint(
5168+
String workflowId) {
5169+
Objects.requireNonNull(workflowId, "workflowId cannot be null");
5170+
return retryExecutor.execute(
5171+
() -> {
5172+
Request httpRequest =
5173+
buildOrchestratorRequest("POST", "/api/v1/workflows/" + workflowId + "/checkpoints/resume", "{}");
5174+
try (Response response = httpClient.newCall(httpRequest).execute()) {
5175+
return parseResponse(
5176+
response,
5177+
new TypeReference<
5178+
com.getaxonflow.sdk.types.workflow.WorkflowTypes.ResumeFromCheckpointResponse>() {});
5179+
}
5180+
},
5181+
"resumeFromLastCheckpoint");
5182+
}
5183+
5184+
/**
5185+
* Resumes a workflow from a specific checkpoint. Enterprise only.
5186+
*
5187+
* @param workflowId workflow ID
5188+
* @param checkpointId checkpoint database ID
5189+
* @return resume result with fresh decision
5190+
*/
5191+
public com.getaxonflow.sdk.types.workflow.WorkflowTypes.ResumeFromCheckpointResponse resumeFromCheckpoint(
5192+
String workflowId, long checkpointId) {
5193+
Objects.requireNonNull(workflowId, "workflowId cannot be null");
5194+
return retryExecutor.execute(
5195+
() -> {
5196+
Request httpRequest =
5197+
buildOrchestratorRequest(
5198+
"POST",
5199+
"/api/v1/workflows/" + workflowId + "/checkpoints/" + checkpointId + "/resume",
5200+
"{}");
5201+
try (Response response = httpClient.newCall(httpRequest).execute()) {
5202+
return parseResponse(
5203+
response,
5204+
new TypeReference<
5205+
com.getaxonflow.sdk.types.workflow.WorkflowTypes.ResumeFromCheckpointResponse>() {});
5206+
}
5207+
},
5208+
"resumeFromCheckpoint");
5209+
}
5210+
51385211
/**
51395212
* Lists workflows with optional filters.
51405213
*

0 commit comments

Comments
 (0)