Development workspace
The Development workspace is the engineering environment for authoring and validating test sequences. It requires Technician role or higher — operators see a locked placeholder.
The workspace has five panels accessible from the left rail:
| Panel | Use it for |
|---|---|
| Sequence Editor | Author and edit test sequences |
| Plugin Manager | Scan and browse available hardware plugins |
| Step Library | Save and reuse step templates |
| Diff Viewer | Compare two open sequences side by side |
| Simulation | Analyze flow and run sequences against mock data |
Sequence Editor
Multi-tab editing
Multiple sequences can be open at once. Each tab shows a dirty indicator (orange dot) when there are unsaved changes. Closing a tab loses unsaved changes — save first.
One tab can be set as the engine-active sequence. That sequence is what the Runner uses when you click Start Engine. The active tab shows a teal indicator and a banner: ▶ ACTIVE — this sequence is loaded for the engine.
To set a tab as active, click Set as Active in the banner below the tab. This updates the runner configuration immediately.
Undo / redo
Each tab maintains its own undo/redo stack. Keyboard shortcuts: Ctrl+Z (undo), Ctrl+Y (redo). Stacks are cleared when the tab closes or a new sequence is loaded into it.
Step clipboard
Cut and paste works across tabs. Cutting from one sequence and pasting into another is fully supported. Pasted steps receive new UIDs automatically so they are always unique within the target sequence.
Sequence variables
Sequences can define named typed variables that are substituted into step inputs and validation configs at job-start. This lets one sequence file cover multiple product revisions or test conditions without duplication.
Enable variables by setting interpolation: true in the sequence header, then define variables:
{
"interpolation": true,
"variables": {
"target_voltage": { "value": 3.3, "type": "number" },
"dut_model": { "value": "RV-04","type": "string" },
"strict_mode": { "value": true, "type": "boolean" }
}
}
Placeholder syntax
"${target_voltage}"as a full field value → replaced by the raw value3.3(preserves numeric type)."Testing ${dut_model} at ${target_voltage}V"(embedded) → always produces a string:"Testing RV-04 at 3.3V".
Rules
- Variable names:
[a-zA-Z_][a-zA-Z0-9_]* - One-level resolution only — variable values cannot contain
${…}themselves. - An undefined variable causes the job to fail before step 1 with a clear error message.
interpolation: false(the default): the resolver is never called. Existing sequences are unaffected.
The Sequence Editor exposes a Variables section in the sequence header. Variables are editable there with type-safe inputs.
Plugin Manager
The Plugin Manager scans and displays available Python worker plugins.
- Click Scan Plugins — Corvus scans the configured plugin directory and returns the list of plugin IDs and their supported actions.
- Use the filter input to narrow the list by plugin ID or action name.
- Expand a plugin row to see its full action list.
The scan result is shared across all open tabs. Any tab's Scan Plugins toolbar button updates the same list.
Step Library
The Step Library stores reusable step templates so that common steps can be inserted into any sequence without re-authoring.
Save a template
- Copy or cut a step in the editor.
- Switch to the Step Library panel.
- Click Save from clipboard.
- Give the template a name, description, and category.
Multiple steps in the clipboard each become a separate template entry.
Insert a template
- Find the template by category or search.
- Click Insert — the template is copied into the clipboard.
- Switch back to the editor and paste (
Ctrl+V). The step receives a fresh UID.
Organize
Templates are grouped by category. A search input filters by name or description. Delete requires two clicks — a confirmation guard prevents accidental removal.
Diff Viewer
The Diff Viewer compares two open sequences step-by-step.
- Both sequences must be open in tabs.
- Open the Diff Viewer panel.
- Select the left and right sequences from the dropdowns. The active tab is pre-selected as the left side.
- Toggle Only show differences to hide equal rows.
Each row shows the step name, ID, and change type. For Changed rows, the specific fields that differ are listed with before and after values.
| Indicator | Meaning |
|---|---|
| Green | Step added in the right sequence |
| Red | Step removed in the right sequence |
| Yellow | Step present in both but fields differ |
| No highlight | Identical in both |
Compared fields: name, plugin, action, timeout, inputs, validation, retry, loop config, phase, and on-pass/on-fail jumps.
Simulation
The Simulation panel has two distinct modes.
Static flow analysis
Runs entirely in the application — no hardware, no engine start required. Load a sequence, then open the Simulation panel to see a step-by-step flow graph with:
- UNREACHABLE badge (red) — step can never execute from step 0.
- CYCLE badge (yellow) — step is part of a detected jump cycle.
- Jump annotations (
✓→/✗→) showingon_passandon_failtargets visually.
Use this to catch dead steps and infinite loops before running on hardware.
Mock execution
Starts the real engine but substitutes a mock Python worker for all plugin calls. The entire execution path — sequencing, retry logic, loops, validation, and report generation — runs identically to a real run. Only the hardware measurements are synthetic.
- Click Run Simulation in the Simulation panel.
- The interface switches to the Runner tab automatically.
- A purple banner appears:
▷ SIMULATION MODE — No hardware is involved. Results are synthetic. - Trigger jobs as normal. The mock worker returns deterministic synthetic data shaped after the plugin name and action.
Environment controls (set before starting simulation):
| Variable | Default | Effect |
|---|---|---|
CORVUS_SIM_PASS_RATE | 1.0 | Probability that each step passes. Set below 1.0 to inject random failures for on_fail path testing. |
CORVUS_SIM_STEP_DELAY | 0.05 | Seconds of simulated delay per step. |
Click Stop Simulation to return to normal mode.