Docs & Rules

bloxbean/cardano-client-libGitHubLast refreshed Oct 2, 2026

This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works

master25568f1listed 19h ago

Is this yours? Install to manage it

Once installed, Striff checks every pull request.

182
32
21
21
11
1
2
7
11
11
23
23
23
23
22
1
121
30
6
14
10
89
8
8
17
15
12
37
2
3
1
1
2
2
3
30 docs, listed Oct 2
bloxbean/cardano-client-libOpen repository

bloxbean/cardano-client-lib — documented rules

182 of 182 rules, printed October 3, 2026.

The sentence in your docs
Read Oct 2
ADR [0015](0015-datatype-processor-strategy-pattern.md), Title DataType Processor Strategy, Summary DataTypeProcessor interface with 10 implementations, EnumMap -based dispatch
DataTypeProcessor is a contract
Holds
Read Oct 2
ADR [0003](0003-shared-blueprint-type-registry.md), Title Shared Blueprint Type Registry, Summary BlueprintTypeRegistry SPI, SchemaSignatureBuilder , structural matching, AikenBlueprintTypeRegistry
BlueprintTypeRegistry is a contract
Holds
Read Oct 2
ADR [0012](0012-rawdata-interface-and-fieldtype-flags.md), Title RawData Interface and FieldType Flags, Summary Data<T> / RawData marker interfaces, FieldType encoding flags
Data is a contract
Holds
Read Oct 2
ADR [0012](0012-rawdata-interface-and-fieldtype-flags.md), Title RawData Interface and FieldType Flags, Summary Data<T> / RawData marker interfaces, FieldType encoding flags
RawData is a contract
Holds
Read Oct 2
ADR [0011](0011-multi-item-tuple-support.md), Title Multi-Item Tuple Support, Summary SchemaTypeResolver maps list schemas to Pair/Triple/Quartet/Quintet (2–5 items)
SchemaTypeResolver depends on Pair
Holds
Read Oct 2
ADR [0011](0011-multi-item-tuple-support.md), Title Multi-Item Tuple Support, Summary SchemaTypeResolver maps list schemas to Pair/Triple/Quartet/Quintet (2–5 items)
SchemaTypeResolver depends on Quartet
Holds
Read Oct 2
ADR [0011](0011-multi-item-tuple-support.md), Title Multi-Item Tuple Support, Summary SchemaTypeResolver maps list schemas to Pair/Triple/Quartet/Quintet (2–5 items)
SchemaTypeResolver depends on Quintet
Holds
Read Oct 2
ADR [0018](0018-converter-code-generator-decomposition.md), Title Converter Code Generator Decomposition, Summary FieldCodeGenerator strategy interface, FieldCodeGeneratorRegistry dispatch, TupleInfo -parameterized tuple generation
FieldCodeGenerator is a contract
Holds
Read Oct 2
ADR [0010](0010-validator-name-collision-resolution.md), Title Validator Name Collision Resolution, Summary ValidatorProcessor.calculateValidatorName() , skip-first-token strategy
ValidatorProcessor has a calculateValidatorName method
Holds
Read Oct 2
Term SharedTypeLookup, Definition The interface through which the processor queries the shared type registry before generating a class
SharedTypeLookup is a contract
Holds
Read Oct 2
Term TupleInfo, Definition An enum parameterizing Pair/Triple/Quartet/Quintet by arity, class reference, and accessor names to eliminate tuple code duplication
TupleInfo is an enumeration
Holds
Read Oct 2
Define a BlueprintTypeRegistry SPI (service-provider interface) that can look up a RegisteredType (a decoupled value object with packageName and simpleName) for a given schema signature.
BlueprintTypeRegistry is a contract
Holds
Read Oct 2
The context flows from BlueprintAnnotationProcessor through FieldSpecProcessor, ValidatorProcessor, and DataTypeProcessUtil to every registry lookup call.
BlueprintAnnotationProcessor depends on FieldSpecProcessor
Holds
Read Oct 2
LookupContext.EMPTY provides a no-hints fallback.
LookupContext has EMPTY
Holds
Read Oct 2
The registry also exposes dispatchNestedSerialization() and dispatchNestedDeserialization() methods that composite generators call to recursively process their element types.
FieldCodeGeneratorRegistry has a dispatchNestedSerialization method
Holds
Read Oct 2
The registry also exposes dispatchNestedSerialization() and dispatchNestedDeserialization() methods that composite generators call to recursively process their element types.
FieldCodeGeneratorRegistry has a dispatchNestedDeserialization method
Holds
Read Oct 2
Each builder handles one SchemaClassification and produces a complete TypeSpec: Builder ClassConverterBuilder, Classification CLASS, Responsibility Iterates ClassDefinition.getFields() , delegates each field to the registry, assembles toPlutusData() and fromPlutusData() methods
ClassConverterBuilder depends on SerDeMethodBuilder
Holds
Read Oct 2
TupleCodeGenerator generates serialization/deserialization code for any arity by looping over TupleInfo.accessors:
TupleCodeGenerator depends on TupleInfo
Holds
Read Oct 2
ElementCodeGenerator is a @FunctionalInterface that the registry provides as a callback:
ElementCodeGenerator is annotated with FunctionalInterface
Holds
Read Oct 2
Generator TupleFieldCodeGen, Types PAIR, TRIPLE, QUARTET, QUINTET, Parameterization TupleInfo enum + TupleCodeGenerator for arity-agnostic loops
TupleFieldCodeGen depends on TupleInfo
Holds
Read Oct 2
Generator TupleFieldCodeGen, Types PAIR, TRIPLE, QUARTET, QUINTET, Parameterization TupleInfo enum + TupleCodeGenerator for arity-agnostic loops
TupleFieldCodeGen depends on TupleCodeGenerator
Holds
Read Oct 2
Extender LockUnlockValidatorExtender, Provides deploy() , lock() , unlock() , unlockToAddress() , unlockToContract()
LockUnlockValidatorExtender has a deploy method
Holds
Read Oct 2
Extender LockUnlockValidatorExtender, Provides deploy() , lock() , unlock() , unlockToAddress() , unlockToContract()
LockUnlockValidatorExtender has a lock method
Holds
Read Oct 2
Extender LockUnlockValidatorExtender, Provides deploy() , lock() , unlock() , unlockToAddress() , unlockToContract()
LockUnlockValidatorExtender has an unlock method
Holds
Read Oct 2
Extender LockUnlockValidatorExtender, Provides deploy() , lock() , unlock() , unlockToAddress() , unlockToContract()
LockUnlockValidatorExtender has an unlockToAddress method
Holds
Read Oct 2
Extender LockUnlockValidatorExtender, Provides deploy() , lock() , unlock() , unlockToAddress() , unlockToContract()
LockUnlockValidatorExtender has an unlockToContract method
Holds
Read Oct 2
Extender MintValidatorExtender, Provides deploy() , mint() , mintToAddress() , mintToContract() , getPolicyId()
MintValidatorExtender has a deploy method
Holds
Read Oct 2
Extender MintValidatorExtender, Provides deploy() , mint() , mintToAddress() , mintToContract() , getPolicyId()
MintValidatorExtender has a mint method
Holds
Read Oct 2
Extender MintValidatorExtender, Provides deploy() , mint() , mintToAddress() , mintToContract() , getPolicyId()
MintValidatorExtender has a mintToAddress method
Holds
Read Oct 2
Extender MintValidatorExtender, Provides deploy() , mint() , mintToAddress() , mintToContract() , getPolicyId()
MintValidatorExtender has a mintToContract method
Holds
Read Oct 2
Extender MintValidatorExtender, Provides deploy() , mint() , mintToAddress() , mintToContract() , getPolicyId()
MintValidatorExtender has a getPolicyId method
Holds
Read Oct 2
Extender DeployValidatorExtender, Provides deploy() only
DeployValidatorExtender has a deploy method
Holds
Read Oct 2
The compatibility method RetryPolicy.isRetryable(Throwable) has no phase information.
RetryPolicy has an isRetryable method
Holds
Read Oct 2
FlowExecutionHandle.await() returns a FlowExecutionResult for every normal terminal outcome.
FlowExecutionHandle has an await method
Holds
Read Oct 2
FlowExecutionHandle.await() returns a FlowExecutionResult for every normal terminal outcome.
FlowExecutionHandle depends on FlowExecutionResult
Holds
Read Oct 2
Accessor executionId(), Meaning Request correlation and durable lookup identity
FlowExecutionHandle has an executionId method
Holds
Read Oct 2
FlowError.code() is the stable, specific value for program logic.
FlowError has a code method
Holds
Read Oct 2
category() is a coarser dimension for metrics and routing: validation, policy, resource, build, sign, submission, network, backend unavailable, confirmation, rollback, persistence, recovery, cancellation, or internal.
FlowError has a category method
Holds
Read Oct 2
retryable() is advisory context, not permission to submit a replacement transaction.
FlowError has a retryable method
Holds
Read Oct 2
Calling getEventsAfter(cursor) again returns only newer handle events.
FlowExecutionHandle has a getEventsAfter method
Holds
Read Oct 2
With a durable store, use FlowExecutionStore.readEvents(executionId, cursor, limit) for restart-safe consumption.
FlowExecutionStore has a readEvents method
Holds
Read Oct 2
FlowListener is configured with FlowExecutor.withListener(...);
FlowExecutor has a withListener method
Holds
Read Oct 2
FlowListener is configured with FlowExecutor.withListener(...);
FlowExecutor depends on FlowListener
Holds
Read Oct 2
Likewise, FlowRegistry tracks legacy FlowHandle instances.
FlowRegistry depends on FlowHandle
Holds
Read Oct 2
The boolean cancel() method is shorthand for a reasonless request and returns true only for the first accepted signal.
FlowExecutionHandle has a cancel method
Holds
Read Oct 2
Each FlowDiagnostic has a stable code, severity, message, JSONPath-like document path, optional source line/column, and optional step ID.
FlowDiagnostic has code
Holds
Read Oct 2
Each FlowDiagnostic has a stable code, severity, message, JSONPath-like document path, optional source line/column, and optional step ID.
FlowDiagnostic has severity
Holds
Read Oct 2
Each FlowDiagnostic has a stable code, severity, message, JSONPath-like document path, optional source line/column, and optional step ID.
FlowDiagnostic has message
Holds
Read Oct 2
Each FlowDiagnostic has a stable code, severity, message, JSONPath-like document path, optional source line/column, and optional step ID.
FlowDiagnostic has line
Holds
Read Oct 2
Each FlowDiagnostic has a stable code, severity, message, JSONPath-like document path, optional source line/column, and optional step ID.
FlowDiagnostic has column
Holds
Read Oct 2
Each FlowDiagnostic has a stable code, severity, message, JSONPath-like document path, optional source line/column, and optional step ID.
FlowDiagnostic has stepId
Holds
Read Oct 2
FlowRecoveryResult reports the reconciled AttemptState, transaction hash, whether this call resubmitted the identical payload, an optional structured error, and newly observed inclusion metadata.
FlowRecoveryResult has transactionHash
Holds
Read Oct 2
FlowRecoveryResult reports the reconciled AttemptState, transaction hash, whether this call resubmitted the identical payload, an optional structured error, and newly observed inclusion metadata.
FlowRecoveryResult has error
Holds
Read Oct 2
FlowRecoveryResult reports the reconciled AttemptState, transaction hash, whether this call resubmitted the identical payload, an optional structured error, and newly observed inclusion metadata.
FlowRecoveryResult depends on AttemptState
Holds
Read Oct 2
PlutusBlueprintUtil.getPlutusScriptFromCompiledCode applies the double-CBOR wrapping CCL's PlutusScript.cborHex expects — pass the blueprint hex as-is, never pre-wrap it yourself.
PlutusBlueprintUtil has getPlutusScriptFromCompiledCode
Holds
Read Oct 2
The utxo selection strategy can be changed by providing a custom implementation of `UtxoSelectionStrategy` interface.
UtxoSelectionStrategy is a contract
Holds
Read Oct 2
LargestFirstUtxoSelectionStrategy
LargestFirstUtxoSelectionStrategy implements UtxoSelectionStrategy
Holds
Read Oct 2
RandomImproveUtxoSelectionStrategy
RandomImproveUtxoSelectionStrategy implements UtxoSelectionStrategy
Holds
Read Oct 2
Existing API TxFlow.fromYaml(yaml), Migration target TxFlowCodec.parse(...), Compatibility action Keep as legacy convenience delegate
TxFlow has a fromYaml method
Holds
Read Oct 2
Existing API flow.toYaml(), Migration target TxFlowCodec.write(...), Compatibility action Keep, but fail on semantic loss
TxFlow has a toYaml method
Holds
Read Oct 2
Existing API StepDependency.filter(...Predicate...), Migration target FlowOutputSelector / UtxoFilterSpec, Compatibility action Keep for Java-only flows reject portable encoding
StepDependency has a filter method
Holds
Read Oct 2
Existing API FlowExecutor.create(...).with, Migration target immutable FlowEngine.builder(), Compatibility action Keep through adapter/deprecation window
FlowExecutor has a create method
Holds
Read Oct 2
Existing API executor.execute(flow), Migration target engine.start(FlowExecutionRequest), Compatibility action Generate execution ID for legacy call
FlowExecutor has an execute method
Holds
Read Oct 2
Existing API executor.resume(flow, previousResult), Migration target engine.recover(FlowRecoveryRequest), Compatibility action Retain current best-effort result resume separately
FlowExecutor has a resume method
Holds
Read Oct 2
submit(item) → receipt with a CompletionStage, try-with-resources lifecycle, and progressive disclosure for advanced use.
TxFlowStream has a submit method
Holds
Read Oct 2
TxWorkItem.idempotencyKey is carried but never consumed: redelivery from any real source produces duplicate on-chain transactions.
TxWorkItem has idempotencyKey
Holds
Read Oct 2
**P2 — Projection read access (compaction-safe).** handleForStoredSnapshot(...) (FlowEngine.java:480-499) returns a completed handle with an **empty event list and no step results**, so a MATCHED idempotent re-submit after a restart cannot be projected into a meaningful receipt.
FlowEngine has a handleForStoredSnapshot method
Holds
Read Oct 2
The stream no longer constructs or wraps a FlowExecutor.
TxFlowStream may not depend on FlowExecutor
Holds
Read Oct 2
FlowRuntime owns one ordinary engine and the resources it creates;
FlowRuntime depends on FlowEngine
Holds
Read Oct 2
TxFlowStream still delegates every execution to that engine:
TxFlowStream depends on FlowEngine
Holds
Read Oct 2
Each planned flow is submitted as a FlowExecutionRequest via FlowEngine.start(...);
FlowEngine has a start method
Holds
Read Oct 2
Each planned flow is submitted as a FlowExecutionRequest via FlowEngine.start(...);
FlowEngine depends on FlowExecutionRequest
Holds
Read Oct 2
**Deterministic execution identity (new in 0.3 — required so MATCHED and the write-ahead binding agree).** FlowExecutionRequest.executionId defaults to a random UUID, so a redelivered request would carry a *different* execution id than the one the stream's write-ahead binding recorded — MATCHED would return the stored execution and the binding would point at an execution that never ran.
FlowExecutionRequest has executionId
Holds
Read Oct 2
TxStreamReceipt exposes completion() (CompletionStage<TxStreamItemResult>), executionId(), and an event cursor.
TxStreamReceipt has a completion method
Holds
Read Oct 2
TxStreamReceipt exposes completion() (CompletionStage<TxStreamItemResult>), executionId(), and an event cursor.
TxStreamReceipt has an executionId method
Holds
Read Oct 2
TxFlowStream v2 accepts only engine-compilable items — TxPlan-backed payloads and portable FlowSteps — and **validates this eagerly at submit()**, failing the item immediately with the portability diagnostic instead of poisoning a whole planned flow at compile time.
TxFlowStream depends on TxPlan
Holds
Read Oct 2
perItem() planner only — one flow per item, one statically configured lane (LanePolicy.single(ResolvedLane)) with mechanical funding-scope enforcement from day one, no custom planners yet.
LanePolicy has a single method
Holds
Read Oct 2
LanePolicy.explicit() with dynamic LaneIdentityResolver resolution and multiple concurrent lanes (alias-sharing and overlap validation per Decision 2).
LanePolicy has an explicit method
Holds
Read Oct 2
Despite its name, FlowRuntime is only an optional, explicit resource-owning composition boundary around the existing engine and stream. It creates and exposes a normal FlowEngine;
FlowRuntime depends on FlowEngine
Holds
Read Oct 2
This ADR introduces **progressive disclosure on the existing TxFlowStream type**: The decision does **not** create another transaction execution runtime or status machine, create threads inside FlowEngine or TxFlowStream, auto-enable unsafe batching or durability, hide uncertain outcomes, or weaken any funds-safety invariant established by ADRs 0002–0004. Despite its name, FlowRuntime is only an optional, explicit resource-owning composition boundary around the existing engine and stream.
FlowRuntime depends on TxFlowStream
Holds
Read Oct 2
txflow already has an API dependency on backend, and FlowExecutor.create(BackendService) already establishes the standard mapping.
FlowExecutor has a create method
Holds
Read Oct 2
Add a public TxStreamCodes constants class covering codes emitted by the core txflow module.
TxStreamCodes is exported
Holds
Read Oct 2
TxStreamException.getCode() remains supported.
TxStreamException has a getCode method
Holds
Read Oct 2
runtime.engine() returns that exact underlying instance;
FlowRuntime has an engine method
Holds
Read Oct 2
runtime.open(streamId) builds an ordinary TxFlowStream against the same engine.
FlowRuntime has an open method
Holds
Read Oct 2
graceful close() drains without a default timeout, while close(Duration) bounds the wait.
FlowRuntime has a close method
Holds
Read Oct 2
runtime.open(...) is the discoverable first-hour path and static/builder TxFlowStream.open(...) serves application-owned engines.
TxFlowStream has an open method
Holds
Read Oct 2
trySubmit already provides a non-throwing outcome surface.
EngineTxFlowStream has trySubmit
Holds
Read Oct 2
TxFlow.validate() checks for:
TxFlow has a validate method
Holds
Read Oct 2
Validation runs automatically before execution (executeSync / execute).
FlowExecutor has executeSync
Holds
Read Oct 2
Validation runs automatically before execution (executeSync / execute).
FlowExecutor has execute
Holds
Read Oct 2
Strategy FILTER, Description Outputs matching a predicate, Factory Method StepDependency.filter("stepId", predicate)
StepDependency has a filter method
Holds
Read Oct 2
On restart, the executor calls findStillConfirmedSteps() to identify which transactions are still on-chain, then skips those steps during re-execution.
FlowExecutor has a findStillConfirmedSteps method
Holds
Read Oct 2
Method getStatus(), Description Current FlowStatus (PENDING, IN_PROGRESS, COMPLETED, FAILED, CANCELLED)
FlowHandle has a getStatus method
Holds
Read Oct 2
Method getCurrentStepId(), Description ID of the step currently executing
FlowHandle has a getCurrentStepId method
Holds
Read Oct 2
Method getCompletedStepCount(), Description Number of completed steps
FlowHandle has a getCompletedStepCount method
Holds
Read Oct 2
Method getTotalStepCount(), Description Total number of steps
FlowHandle has a getTotalStepCount method
Holds
Read Oct 2
Method isRunning(), Description True if status is IN_PROGRESS
FlowHandle has an isRunning method
Holds
Read Oct 2
Method isDone(), Description True if the underlying future is complete
FlowHandle has an isDone method
Holds
Read Oct 2
Method await(), Description Block until complete, return FlowResult
FlowHandle has an await method
Holds
Read Oct 2
Method getResult(), Description Non-blocking get result if available
FlowHandle has a getResult method
Holds
Read Oct 2
Method getResultFuture(), Description Access the underlying CompletableFuture
FlowHandle has a getResultFuture method
Holds
Read Oct 2
Method cancel(), Description Request cancellation (in-progress steps cannot be undone)
FlowHandle has a cancel method
Holds
Read Oct 2
A no-op implementation (FlowStateStore.NOOP) is available for testing.
FlowStateStore has NOOP
Holds
Read Oct 2
For crash-safe execution, use FlowEngine with a FlowExecutionStore.
FlowEngine depends on FlowExecutionStore
Holds
Read Oct 2
For an uncertain disposition the step settles via FlowStepResult.submissionPendingAt(...) — status IN_PROGRESS with the hash retained — **never FAILED** (a FAILED verdict invites retrying a payment that can still land).
FlowStepResult has a submissionPendingAt method
Holds
Read Oct 2
The legacy FlowResult is then FAILED with an **empty getFailedStep()**, and listeners receive onStepUncertain/onFlowUncertain instead of the failed callbacks.
FlowResult has a getFailedStep method
Holds
Read Oct 2
The legacy FlowResult is then FAILED with an **empty getFailedStep()**, and listeners receive onStepUncertain/onFlowUncertain instead of the failed callbacks.
FlowListener has onStepUncertain
Holds
Read Oct 2
The legacy FlowResult is then FAILED with an **empty getFailedStep()**, and listeners receive onStepUncertain/onFlowUncertain instead of the failed callbacks.
FlowListener has onFlowUncertain
Holds
Read Oct 2
Method getStatus(), Returns FlowStatus, Description Current PENDING, IN_PROGRESS, COMPLETED, FAILED, CANCELLED
FlowHandle has a getStatus method
Holds
Read Oct 2
Method getCurrentStepId(), Returns Optional<String>, Description Step currently being executed
FlowHandle has a getCurrentStepId method
Holds
Read Oct 2
Method getCompletedStepCount(), Returns int, Description Number of steps finished
FlowHandle has a getCompletedStepCount method
Holds
Read Oct 2
Method getTotalStepCount(), Returns int, Description Total steps in the flow
FlowHandle has a getTotalStepCount method
Holds
Read Oct 2
Method isRunning(), Returns boolean, Description True if status == IN_PROGRESS
FlowHandle has an isRunning method
Holds
Read Oct 2
Method isDone(), Returns boolean, Description True if future is complete
FlowHandle has an isDone method
Holds
Read Oct 2
Method await(), Returns FlowResult, Description Block until complete Method await(timeout), Returns FlowResult, Description Block with timeout
FlowHandle has an await method
Holds
Read Oct 2
Method getResult(), Returns Optional<FlowResult>, Description Non-blocking empty if still running
FlowHandle has a getResult method
Holds
Read Oct 2
Method getResultFuture(), Returns CompletableFuture<FlowResult>, Description Underlying future
FlowHandle has a getResultFuture method
Holds
Read Oct 2
Method cancel(), Returns boolean, Description Request cancellation
FlowHandle has a cancel method
Holds
Read Oct 2
Listeners are wrapped in CompositeFlowListener which catches and logs exceptions from individual listeners, preventing buggy callbacks from crashing flow execution.
CompositeFlowListener depends on FlowListener
Holds
Read Oct 2
TxFlowStream depends on TxStreamStateStore
TxFlowStream depends on TxStreamStateStore
Holds
Read Oct 2
TxFlowStream depends on FlowEngine
TxFlowStream depends on FlowEngine
Holds
Read Oct 2
FlowWorkSource depends on TxWorkSink
FlowWorkSource depends on TxWorkSink
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + builder
TxFlowStream is a contract
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + builder
TxFlowStream is exported
Holds
Read Oct 2
Path stream/EngineTxFlowStream.java, Role Implementation (~5,146 lines)
EngineTxFlowStream is a concrete implementation
Holds
Read Oct 2
Path stream/TxStreamStateStore.java + in-memory impls, Role Stream-side persistence SPI
TxStreamStateStore is a contract
Holds
Read Oct 2
FlowEngine depends on FlowExecutor
FlowEngine depends on FlowExecutor
Holds
Read Oct 2
ExecutionJournalSession has two operations with different guarantees: record(type, stepId, hash, data) — appends to the in-memory event list (visible on the handle immediately) and buffers for the next durable append.
ExecutionJournalSession has a record method
Holds
Read Oct 2
FlowEngine wraps it with everything needed to make execution **safe to retry and safe to crash**:
FlowEngine depends on FlowExecutor
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/FlowEngine.java, Role start() / executeSync() / preflight() / recover() claim + lease + journal orchestration state mapping
FlowEngine has a start method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/FlowEngine.java, Role start() / executeSync() / preflight() / recover() claim + lease + journal orchestration state mapping
FlowEngine has an executeSync method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/FlowEngine.java, Role start() / executeSync() / preflight() / recover() claim + lease + journal orchestration state mapping
FlowEngine has a preflight method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/FlowEngine.java, Role start() / executeSync() / preflight() / recover() claim + lease + journal orchestration state mapping
FlowEngine has a recover method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/DurableLeaseGuard.java, Role Acquires/renews execution + resource leases exposes fence() , checkHealthy() , hasFailed()
DurableLeaseGuard has a fence method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/DurableLeaseGuard.java, Role Acquires/renews execution + resource leases exposes fence() , checkHealthy() , hasFailed()
DurableLeaseGuard has a checkHealthy method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/DurableLeaseGuard.java, Role Acquires/renews execution + resource leases exposes fence() , checkHealthy() , hasFailed()
DurableLeaseGuard has a hasFailed method
Holds
Read Oct 2
File (under txflow/src/main/java/.../txflow/ ) exec/DurableExecutionPersistence.java, Role PersistencePort implementation persists the AttemptState lifecycle + transaction journal events under the fence
DurableExecutionPersistence implements PersistencePort
Holds
Read Oct 2
DurableLeaseGuard owns acquisition and background renewal (on the maintenance executor) for the execution lease and each resource lease, and produces the **MutationFence** — execution lease + all resource leases as one composite proof.
DurableLeaseGuard depends on MutationFence
Holds
Read Oct 2
ExecutionJournalSession has two operations with different guarantees:
ExecutionJournalSession has a persist method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a start method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a reattach method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a bootstrap method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a submit method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a trySubmit method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a cancelItem method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a getItemStatus method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a reconcile method
Holds
Read Oct 2
Path stream/TxFlowStream.java, Role Public interface + Builder Lifecycle start() , reattach() , bootstrap() , submit() , trySubmit() , cancelItem() , getItemStatus() , reconcile() , drain()
TxFlowStream has a drain method
Holds
Read Oct 2
Path stream/TxStreamPlanner.java , BuiltInPlanners.java, Role Planner SPI + perItem() / perWindow() / planner-local perWindow(PIPELINED) / batching()
TxStreamPlanner has a perItem method
Holds
Read Oct 2
Path stream/TxStreamPlanner.java , BuiltInPlanners.java, Role Planner SPI + perItem() / perWindow() / planner-local perWindow(PIPELINED) / batching()
TxStreamPlanner has a perWindow method
Holds
Read Oct 2
Path stream/TxStreamPlanner.java , BuiltInPlanners.java, Role Planner SPI + perItem() / perWindow() / planner-local perWindow(PIPELINED) / batching()
TxStreamPlanner has a batching method
Holds
Read Oct 2
Path stream/WindowPolicy.java, Role Window close rules count(n) , time(d) , countOrTime(n, d)
WindowPolicy has a count method
Holds
Read Oct 2
Path stream/WindowPolicy.java, Role Window close rules count(n) , time(d) , countOrTime(n, d)
WindowPolicy has a time method
Holds
Read Oct 2
Path stream/WindowPolicy.java, Role Window close rules count(n) , time(d) , countOrTime(n, d)
WindowPolicy has a countOrTime method
Holds
Read Oct 2
Path exec/FlowEngine.java, Role Durable engine start(request) , recover(request)
FlowEngine has a start method
Holds
Read Oct 2
Path exec/FlowEngine.java, Role Durable engine start(request) , recover(request)
FlowEngine has a recover method
Holds
Read Oct 2
Path exec/FlowExecutor.java, Role Chaining-mode execution (SEQUENTIAL / PIPELINED / BATCH), rollback handling, uncertain-disposition settlement, legacy resumeSync / resume
FlowExecutor has resumeSync
Holds
Read Oct 2
Path exec/FlowExecutor.java, Role Chaining-mode execution (SEQUENTIAL / PIPELINED / BATCH), rollback handling, uncertain-disposition settlement, legacy resumeSync / resume
FlowExecutor has resume
Holds
Read Oct 2
EngineTxFlowStream depends on TxStreamStateStore
EngineTxFlowStream depends on TxStreamStateStore
Holds
Read Oct 2
FlowEngine depends on FlowExecutor/StepRunner
FlowEngine depends on FlowExecutor
Holds
Read Oct 2
FlowEventType events (EXECUTION_STARTED, TRANSACTION_SUBMITTED, TRANSACTION_CONFIRMED, STEP_COMPLETED, …, RECOVERY_REQUIRED) recorded via ExecutionJournalSession before effects are acknowledged.
FlowEventType has EXECUTION_STARTED
Holds
Read Oct 2
FlowEventType events (EXECUTION_STARTED, TRANSACTION_SUBMITTED, TRANSACTION_CONFIRMED, STEP_COMPLETED, …, RECOVERY_REQUIRED) recorded via ExecutionJournalSession before effects are acknowledged.
FlowEventType has TRANSACTION_SUBMITTED
Holds
Read Oct 2
FlowEventType events (EXECUTION_STARTED, TRANSACTION_SUBMITTED, TRANSACTION_CONFIRMED, STEP_COMPLETED, …, RECOVERY_REQUIRED) recorded via ExecutionJournalSession before effects are acknowledged.
FlowEventType has TRANSACTION_CONFIRMED
Holds
Read Oct 2
FlowEventType events (EXECUTION_STARTED, TRANSACTION_SUBMITTED, TRANSACTION_CONFIRMED, STEP_COMPLETED, …, RECOVERY_REQUIRED) recorded via ExecutionJournalSession before effects are acknowledged.
FlowEventType has STEP_COMPLETED
Holds
Read Oct 2
FlowEventType events (EXECUTION_STARTED, TRANSACTION_SUBMITTED, TRANSACTION_CONFIRMED, STEP_COMPLETED, …, RECOVERY_REQUIRED) recorded via ExecutionJournalSession before effects are acknowledged.
FlowEventType has RECOVERY_REQUIRED
Holds
Read Oct 2
confirmation via ConfirmationTracker (which needs TransactionObservationCapabilities .supportsAuthoritativeAbsence() to distinguish "not seen yet" from "authoritatively absent" for rollback detection).
ConfirmationTracker depends on TransactionObservationCapabilities
Holds
Read Oct 2
confirmation via ConfirmationTracker (which needs TransactionObservationCapabilities .supportsAuthoritativeAbsence() to distinguish "not seen yet" from "authoritatively absent" for rollback detection).
TransactionObservationCapabilities has a supportsAuthoritativeAbsence method
Holds
Read Oct 2
onExecutionComplete(execution, result, failure):
EngineTxFlowStream has an onExecutionComplete method
Holds
Read Oct 2
Otherwise each member is mapped by **memberTerminalStatus(stepResult, flowState)** (per-member, step result takes precedence) or **templateFlowStatus(flowState)** (template items, flow-level):
EngineTxFlowStream has a memberTerminalStatus method
Holds
Read Oct 2
Otherwise each member is mapped by **memberTerminalStatus(stepResult, flowState)** (per-member, step result takes precedence) or **templateFlowStatus(flowState)** (template items, flow-level):
EngineTxFlowStream has a templateFlowStatus method
Holds
Read Oct 2
Template projection first checks step and durable-attempt evidence through templateTerminalStatus / templateSnapshotStatus: a CANCELLED flow with any submitted-but-undecided transaction projects RECOVERY_REQUIRED.
EngineTxFlowStream has templateTerminalStatus
Holds
Read Oct 2
Template projection first checks step and durable-attempt evidence through templateTerminalStatus / templateSnapshotStatus: a CANCELLED flow with any submitted-but-undecided transaction projects RECOVERY_REQUIRED.
EngineTxFlowStream has templateSnapshotStatus
Holds
Read Oct 2
All projection writes funnel through project(state, target, mutator, …), which enforces monotonic advancement and store persistence.
EngineTxFlowStream has a project method
Holds
Read Oct 2
FlowExecutor.isUncertainDisposition(confirmation) checks both.
FlowExecutor has an isUncertainDisposition method
Holds
Read Oct 2
The FlowExecutor settlement sites preserve the captured outputs > of the submitted transaction, but StepRunner.uncertainFailure settles with an empty > list.
StepRunner has uncertainFailure
Holds
Read Oct 2
the cancel branch in FlowExecutor's terminal handling returns through cancelledFlowResult(...) *before* the step-terminal notification runs.
FlowExecutor has a cancelledFlowResult method
Holds
Read Oct 2
Area Definition graph, Package or module com.bloxbean.cardano.client.txflow, Owns TxFlow , FlowStep , legacy dependencies, retry value objects
TxFlow is in com.bloxbean.cardano.client.txflow
Holds
Read Oct 2
Area Definition graph, Package or module com.bloxbean.cardano.client.txflow, Owns TxFlow , FlowStep , legacy dependencies, retry value objects
FlowStep is in com.bloxbean.cardano.client.txflow
Holds
Read Oct 2
NibblePath.EMPTY represents root path
NibblePath has EMPTY
Holds
Read Oct 2
**Storage Abstraction** - NodeStore interface for pluggable backends
NodeStore is a contract
Holds
Read Oct 2
**Hash Functions** - Generic HashFunction interface with Blake2b-256 implementation
HashFunction is a contract
Holds
182 rules from 19 docs

See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.