Skip to main content
The validator is strict on purpose: unknown keys are rejected, because a pack that references a missing operation, an unresolvable variable, or an impossible assertion is a broken test. The narrative guide is Pack format; this page is the grammar.

Top level

definition

step

Step types and their config

Fault kind values are listed in Faults. times: N fires the fault for the first N matching requests and then recovers; per scopes that window to global, idempotency-key or resource.

assertion

Targets: response.status, response.headers, response.body, response.latencyMs, state.resource, state.resourceCount, webhook.delivery, webhook.count, execution.faultApplied, sandbox.requestCount, sandbox.request. Ops: equals, notEquals, contains, notContains, in, matches, matchesSchema, exists, absent, gt, gte, lt, lte, countEquals, lengthEquals, isOneOf. in and isOneOf are the same check; so are countEquals and lengthEquals. matches rejects an uncompilable regex at validation time.

Variables

Reference variables as {{name}}. Precedence is inputs, then captures, then defaults. A variable must be declared, captured by an earlier step, or a generator: {{seq()}}, {{randomString(n)}}, {{now()}} (the virtual clock). {{any:string|number|boolean|iso8601|uuid}} stays verbatim in requests and is a matcher in assertions.

Limits

1 MiB per file, 200 steps, 50 assertions per step, 1000 assertions total, 1000 seeded resources, 50 inputs, and 90 virtual days of accumulated WAIT and EXPECT_WEBHOOK time.