Scenario steps can now persist in-script generated content (e.g. an
obtained VC's JWT) as a run file via context.downloadFile('data:...'),
without needing a network fetch. Bumps to 1.8.0.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
Scenario execution
When a scenario run is created, the server creates one ScenarioRunStep per scenario step.
- Step runs are ordered by
step.order. - First step run starts as
pending; the rest start aswaiting. - Scheduler tick (
@Interval(1000)) picks pending runs and processes steps in order. - Steps in the same run share one Playwright browser/context/page.
Execution model
Current scheduler behavior is exec-centric:
execCodeis required for a step to pass.validateCodeis optional and runs afterexecCode.- Legacy step type metadata may still appear in MCP payloads, but run execution is not branched by step type.
Script runtime
execCode and validateCode execute as async JavaScript with a single context argument:
async (context) => {
// your code here
}
Available in scope:
context.page: PlaywrightPagecontext.browser: PlaywrightBrowserContextcontext.env: shallow copy of environment key/value mapcontext.getEnv(key): required environment value lookup (throws if missing)context.getCredential(alias): credential payload assigned to the scenario aliascontext.getStepOutput(order): prior step output by absolute order (1,2, ...) or relative (-1= previous step)context.dumpDom(selector?): simplified DOM snapshotcontext.log(...args),context.warn(...args),context.error(...args): structured step logscontext.runSnippet(name, ...args): execute stored snippet code with the same contextcontext.getScenarioFiles(opts?): list files uploaded to the scenario (limit,offset)context.downloadFile(url, opts?): fetchurland save the result as a run artifact (requires a real scenario run — throws when invoked ad hoc, e.g. via theexec_codeMCP tool).optsmay includemethod,headers,body,filename.urlalso accepts adata:URI (data:<mediaType>;base64,<data>ordata:<mediaType>,<percent-encoded data>) to save content generated in-script (e.g. a credential JWT) directly, without an actual network fetch.console: proxied to run logs (log,warn,error, etc.)
validateCode additionally receives result in scope, which is the value returned by execCode.
Validation contract
validateCode may return:
return { success: true, description: 'ok' };
// or
return false;
Interpretation:
- Boolean:
true= pass,false= fail - Object:
successcontrols pass/fail;descriptionis persisted as step description
On validation failure, the step fails and the run is marked fail.
Statuses
Run status:
pendingin_progresspassfail
Run-step status:
waitingpendingin_progresspassfailcancelled
Example workflow
- Create environment
- Create credentials and snippets (optional but common)
- Create scenario
- Add ordered steps (
execCode, optionalvalidateCode) - Assign credentials to scenario aliases when needed
- Run scenario
- Wait for run completion and inspect run logs/outputs