Declarative Scenario Engine (TxPlan / TxFlow)
Make Yaci DevKit the execution, key-management, and debugging home for cardano-client-lib's declarative YAML transaction format. Today developers must build transactions imperatively to reach any non-trivial chain state; there's no way to describe a sequence of transactions once, commit it, and replay it to bring a fresh devnet to a known state.
cardano-client-lib 0.8.0-pre ships the missing language:
- TxPlan (
cardano-client-quicktx) — declarative YAML for one or more transactions: payments, multi-asset, native + Plutus mint/spend, reference inputs, inline/hash datums (raw CBOR or structured PlutusData with @name), metadata, full staking lifecycle, and the complete Conway governance surface. ${...} variables; a SignerRegistry resolves account://… / policy://… refs so keys stay out of YAML.
- TxFlow (
cardano-client-txflow) — multi-step orchestration over TxPlan: ordered steps with depends_on UTXO chaining, confirmation tracking, retry, and devnet-tuned rollback recovery (ConfirmationConfig.devnet()).
Both are pure Java libraries with no execution home, no CLI, no key management — exactly what Yaci already provides (it embeds the library, uses QuickTxBuilder, and manages 20 pre-funded accounts + a default minting policy).
Design ADR: adr/0013-declarative-scenario-engine.md. Roadmap context: adr/PRODUCT_ROADMAP.md (F11, #1 priority).
Goal
- Take a TxPlan or TxFlow YAML and execute it against the running devnet.
- Auto-wire a
SignerRegistry from the 20 default accounts (account://acc0…account://acc19) + the default minting policy (policy://default) — scenario YAML needs no embedded keys.
- API-first: one engine, consumed by REST + CLI + MCP (viewer later).
- Seed a fresh devnet to a known state at
create-node time.
- Target state-determinism (identical resulting UTxO set / balances / datums across runs). Hash-determinism is out of scope for v1.
Scope (v1)
Out of scope (later milestones)
Viewer scenario panel + TxFlow DAG visualization, tx → YAML export, scripted reorg scenarios, assertion layer for test plans, JSON-Schema generation for AI authoring.
Acceptance criteria
- CLI builds against
0.8.0-pre4; existing tx flows still work.
- A payment, a Plutus mint, and a governance register→propose→vote scenario each execute from YAML and produce the expected on-chain state (verified via Yaci Store).
create-node --seed brings up a devnet in the seeded state; re-running yields the same resulting state (state-deterministic).
- The MCP
devnet_run_scenario tool works end-to-end.
Risks
- Preview dependency (
0.8.0-pre4) — pinned; the feature is additive and isolated to ScenarioService.
- 0.7.2 → 0.8.0-pre4 bump may surface API changes in existing CLI tx code — bump and verify first.
All transaction semantics stay in cardano-client-lib; Yaci owns only thin wiring. Keep it simple and maintainable.
Declarative Scenario Engine (TxPlan / TxFlow)
Make Yaci DevKit the execution, key-management, and debugging home for
cardano-client-lib's declarative YAML transaction format. Today developers must build transactions imperatively to reach any non-trivial chain state; there's no way to describe a sequence of transactions once, commit it, and replay it to bring a fresh devnet to a known state.cardano-client-lib0.8.0-pre ships the missing language:cardano-client-quicktx) — declarative YAML for one or more transactions: payments, multi-asset, native + Plutus mint/spend, reference inputs, inline/hash datums (raw CBOR or structured PlutusData with@name), metadata, full staking lifecycle, and the complete Conway governance surface.${...}variables; aSignerRegistryresolvesaccount://…/policy://…refs so keys stay out of YAML.cardano-client-txflow) — multi-step orchestration over TxPlan: ordered steps withdepends_onUTXO chaining, confirmation tracking, retry, and devnet-tuned rollback recovery (ConfirmationConfig.devnet()).Both are pure Java libraries with no execution home, no CLI, no key management — exactly what Yaci already provides (it embeds the library, uses
QuickTxBuilder, and manages 20 pre-funded accounts + a default minting policy).Design ADR:
adr/0013-declarative-scenario-engine.md. Roadmap context:adr/PRODUCT_ROADMAP.md(F11, #1 priority).Goal
SignerRegistryfrom the 20 default accounts (account://acc0…account://acc19) + the default minting policy (policy://default) — scenario YAML needs no embedded keys.create-nodetime.Scope (v1)
cardano-client-lib/-backend/-backend-blockfrost0.7.2 → 0.8.0-pre4; addcardano-client-txflow:0.8.0-pre4.ScenarioService— single engine: detect TxPlan vs TxFlow, buildSignerRegistryfrom default accounts + policy, obtainBackendService(reuse existing pattern), execute, returnScenarioResult(success + tx hashes + clear error).ScenarioController—POST /local-cluster/api/scenarios/run.run-scenario --file <path.yaml>.devnet_run_scenario(yaml)(enables AI-driven NL→YAML→run).create-node --seed <file.yaml>seeds the devnet after it's ready.examples/scenarios/(payment, NFT mint, script lock, governance register→propose→vote, delegation) + determinism guidance README.Out of scope (later milestones)
Viewer scenario panel + TxFlow DAG visualization,
tx → YAMLexport, scripted reorg scenarios, assertion layer for test plans, JSON-Schema generation for AI authoring.Acceptance criteria
0.8.0-pre4; existing tx flows still work.create-node --seedbrings up a devnet in the seeded state; re-running yields the same resulting state (state-deterministic).devnet_run_scenariotool works end-to-end.Risks
0.8.0-pre4) — pinned; the feature is additive and isolated toScenarioService.All transaction semantics stay in
cardano-client-lib; Yaci owns only thin wiring. Keep it simple and maintainable.