Skip to content

Configuration schema

Field names and enum values are case-sensitive. Unknown fields inside modeled configuration objects are rejected; unrelated top-level YAML keys may be used for anchors and are otherwise ignored.

Top level

Field Required Type Description
StashConfig Yes object Run definition
dynamics No object Reusable generated-value patterns and sets

dynamics

dynamics:
  patterns:
    name:
      template: "user-${alpha:6}"
  sets:
    region: [na, eu]

patterns maps unique names to objects with a required string template. Optional sets maps names to lists of strings. Request-level dynamics may add or override patterns and sets for that request.

StashConfig

Field Required Type Rules
Name Yes non-empty string Used in output paths and reports
Defaults Yes defaults object Base HTTP/AMQP and execution settings
Forced No forced object Final overlay applied to every compatible request
Sequences Yes non-empty list Sequence names must be unique

Defaults and forced fields

Field Defaults Forced Type
URLRoot Optional, conditionally required — non-blank string or value operator
FlowControl Required — flow-control object
InsecureTLS Optional — boolean; default false
Headers Optional Optional map
Body Optional Optional map
Query Optional Optional map
Retry Optional Optional retry object or null
Response Optional — response object
AMQP Optional Optional AMQP object

Defaults.URLRoot is required when any HTTP request omits its own URLRoot. Although some empty flow-control mappings can pass model parsing, always provide both required fields; execution relies on effective values.

FlowControl

Field Defaults Request override
DelaySeconds Required integer ≥ 0 Optional integer ≥ 0
TimeoutSeconds Required integer ≥ 0 Optional integer ≥ 0

Retry

Field Required Type/default
Attempts Yes integer ≥ 1; total attempts including first
BackoffStrategy Yes fixed or exponential
BackoffSeconds Yes number ≥ 0
Multiplier No number ≥ 1; default 2
MaxBackoffSeconds No number ≥ 0
MaxElapsedSeconds No number ≥ 0
Jitter No boolean, min, or max
RetryOnStatus No list of HTTP status integers
RetryOnNetworkErrors No boolean; default true
RetryOnTimeouts No boolean; default true

Use Retry: null to disable an inherited retry policy. A request-level retry value—including explicit null—takes precedence over Defaults; Forced.Retry is applied last.

Response

PrettyPrint and Sort are optional booleans. Sort: true implies pretty printing for supported JSON/XML responses.

Sequences

Field Required Rules
Name Yes Non-empty and unique within the run
Type Yes Sequential or Concurrent
ConcurrencyLimit Conditional Integer ≥ 1; required for Concurrent, forbidden for Sequential
Requests Yes Non-empty list of single-key request maps

Each request item has exactly one request name:

Requests:
  - RequestName:
      Transport: http
      Method: GET
      URLPath: /health

HTTP request

Transport defaults to http and may be omitted.

Field Required Type/rules
Transport No http
Method Yes GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
URLPath Yes non-blank string or supported value operator
URLRoot Conditional request override; omission inherits, explicit null is invalid
Headers, Body, Query No maps
FlowControl No partial flow-control override
Retry No retry object or null
Response No response object
InsecureTLS No boolean
Capture No map of capture names to paths/JSONPath operators
Expect No list of assertions
dynamics No request-local dynamics

AMQP request

- Publish:
    Transport: amqp
    AMQP:
      URI: amqp://guest:guest@localhost:5672/%2F
      Exchange: events
      RoutingKey: item.created
    Body: { id: 1 }
Field Required Type/rules
Transport Yes amqp
AMQP Yes AMQP object; effective URI and routing required
Body No message payload, serialized as JSON when structured
FlowControl No partial override
Retry No retry object or null
Capture, Expect, dynamics No same response-processing concepts as HTTP

HTTP-only fields (Method, URLPath, URLRoot, Headers, Query, InsecureTLS, Response) are invalid on AMQP requests.

AMQP

Field Required Type/rules
URI Effective value required broker URI; supports secret operator
Exchange Conditional string; defaults to empty
RoutingKey Conditional string
Confirm No boolean
Mandatory No boolean
Properties No message-properties object
TLS No TLS object
WaitFor No publish-and-wait object

At least one of effective Exchange or RoutingKey must be non-empty.

Message properties are ContentType, ContentEncoding, DeliveryMode (transient/persistent), Priority (0–9), CorrelationId, ReplyTo, Expiration, MessageId, Type, AppId, and Headers. The implementation coerces several property values to broker-compatible strings.

TLS fields are CAFile, CAPath, CertFile, KeyFile, VerifyPeer, and ServerName. Explicitly set VerifyPeer: true when peer verification is required rather than relying on an implicit value.

WaitFor

Field rpc subscribe
Mode rpc subscribe
TimeoutSeconds Optional non-negative number Optional non-negative number
Exchange Not used Required
RoutingKey Not used Optional
Match Not used Required expectation list

When omitted, wait timing follows the effective operation timeout. RPC creates a reply queue and correlation ID; subscribe binds a temporary queue before publishing.

Capture and expectations

Capture values are either simple path strings or { $jsonpath: EXPRESSION }. Expect is a list of single-key { path: matcher } maps. See Capture values and Expectations for paths, aggregations, and matchers.

Value operators

Supported mapping forms include:

secret: { $secrets: KEY }
dynamic: { $dynamic: pattern_name, when: request }
timestamp: { $timestamp: { format: epoch_ms, when: request } }
function: { $func: timestamp, format: iso_8601 }
pattern: { $pattern: "id-${uuidv4}" }

when is resolve (default) or request. $pattern is always request-time. The timestamp $func accepts format (and the implementation also accepts fmt); prefer format for portability and clarity.

Merge summary

  • Precedence is Forced > request > Defaults.
  • Request Headers, Body, and Query replace their default section when present; forced keys overlay the selected map.
  • AMQP objects merge defaults → request → forced, with a deep merge for Properties.Headers.
  • Request-local dynamics override top-level patterns/sets of the same name.
  • Resolve-time operators appear as values in resolved output; request-time values remain deferred markers.