@@ -86,6 +86,7 @@ top-level fields:
8686- ` inputs `
8787- ` workflow `
8888- ` fuzzRun `
89+ - ` adversarialCampaigns `
8990- ` artifacts `
9091- ` probes `
9192- ` metadata `
@@ -124,6 +125,37 @@ Use `inputs.workspace_preloads` for generic `agent-runtime/workspace-preload`
124125artifact contracts. WP Codebox materializes declared repositories as sandbox
125126workspace mounts; callers own the policy that decides which artifacts to pass.
126127
128+ ## Adversarial Campaigns
129+
130+ ` adversarialCampaigns ` additively declares deterministic corpus campaigns without
131+ changing authored ` fuzzRun.cases ` . Each corpus action selects a registered
132+ ` caseTemplates ` id. Generated plans interpolate ` {{case.id}} ` , ` {{case.input}} ` ,
133+ ` {{action.input}} ` , ` {{action.inputBase64}} ` , ` {{matrix}} ` , and
134+ ` {{matrix.<name>}} ` into template arguments, then execute the resulting phases
135+ through the existing runtime-backed fuzz suite, checkpoint, episode, command
136+ policy, and artifact lifecycle.
137+
138+ The built-in mutator registry contains ` scalar ` , ` structured ` , ` binary ` , and
139+ ` sequence ` ; the initial neutral oracle registry contains ` runtime-status ` .
140+ Required capabilities fail recipe validation before services or runtimes start.
141+ Optional capabilities are reported with explicit availability in run evidence.
142+ Concurrency above one requires an ` isolated-workers ` capability and therefore
143+ fails closed until the selected recipe runtime provides isolated workers.
144+
145+ Run and replay through stable CLI routes:
146+
147+ ``` bash
148+ wp-codebox adversarial run --recipe examples/recipes/adversarial-stateful.json --json
149+ wp-codebox adversarial replay --recipe recipe.json --replay files/adversarial/< campaign> /replay/< fingerprint> .json --json
150+ ```
151+
152+ Every campaign writes a bounded nested bundle under
153+ ` files/adversarial/<campaign>/ ` , including the result, fingerprint-addressed
154+ findings, minimized replay envelopes, a manifest, and secret-scan evidence. The
155+ parent artifact manifest retains all nested files. Interruption returns bounded
156+ partial campaign evidence before the recipe runner performs its normal runtime
157+ and service teardown.
158+
127159## External Service Boundaries
128160
129161Use ` inputs.externalServices ` to declare reviewer-safe boundaries for services a
0 commit comments