Foundation for the Werkbank Docker executor (sharang/werkbank#5). The dynamic-execution logic has to be usable by the runner (a separate repo), so this lifts it out of compliance-agent into a shared crate. Pure move + rename — no behaviour change.
The orchestrator's ICS-probe and provision-and-test call sites point at werkbank_exec::{ics,plc}; the old pipeline::ics and plc::runtime modules are removed (the static PLC scanner stays in the agent).
CI now clippy-checks and tests werkbank-exec.
Verification
27 moved tests pass in the new crate; 283 agent lib tests pass; clippy (-D warnings) + fmt clean; full workspace compiles.
Next
werkbank's Docker executor (impl Executor → werkbank_exec::plc::provision_and_test → JobResult), once this crate is on main for the runner repo to depend on.
Foundation for the Werkbank Docker executor (sharang/werkbank#5). The dynamic-execution logic has to be usable by the runner (a **separate repo**), so this lifts it out of `compliance-agent` into a shared crate. **Pure move + rename — no behaviour change.**
## New crate `werkbank-exec`
`git mv` preserves history:
- **`src/ics/*`** — the read-only industrial-protocol probe (Modbus / OPC-UA / EtherNet-IP / portscan).
- **`src/plc/*`** — ephemeral soft-PLC provisioning (`DockerSoftPlc`), the OpenPLC program-load client, and `provision_and_test` / `extract_program`.
- **`src/error.rs`** — a crate-local `ExecError` replacing the agent's `AgentError`.
- **`src/fingerprint.rs`** — `compute_fingerprint`, copied from the agent's `dedup`.
Depends only on `compliance-core` + `compliance-dast`, so the runner can pull it without the agent's server stack (mongodb/axum/etc.).
## `compliance-agent` consumes it
- `AgentError` gains `Exec(#[from] werkbank_exec::ExecError)`.
- The orchestrator's ICS-probe and provision-and-test call sites point at `werkbank_exec::{ics,plc}`; the old `pipeline::ics` and `plc::runtime` modules are removed (the **static** PLC scanner stays in the agent).
- CI now clippy-checks and tests `werkbank-exec`.
## Verification
27 moved tests pass in the new crate; **283 agent lib tests pass**; clippy (`-D warnings`) + fmt clean; full workspace compiles.
## Next
werkbank's Docker executor (`impl Executor` → `werkbank_exec::plc::provision_and_test` → `JobResult`), once this crate is on `main` for the runner repo to depend on.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Prep for the Werkbank Docker executor (sharang/werkbank#5): the dynamic-execution
logic has to be usable by the runner (a separate repo), so lift it out of the
agent into a shared crate.
New crate `werkbank-exec` (git-mv preserves history):
- src/ics/* — the read-only industrial-protocol probe (Modbus/OPC-UA/
EtherNet-IP/portscan), moved verbatim.
- src/plc/* — ephemeral soft-PLC provisioning (DockerSoftPlc), the OpenPLC
program-load client, and provision_and_test/extract_program.
- src/error.rs — a crate-local ExecError, replacing the agent's AgentError.
- src/fingerprint.rs — compute_fingerprint (copied from the agent's dedup).
Depends only on compliance-core + compliance-dast, so the runner can pull it
without the agent's server stack.
compliance-agent consumes it:
- AgentError gains `Exec(#[from] werkbank_exec::ExecError)`.
- The orchestrator's ICS-probe + provision-and-test call sites point at
werkbank_exec::{ics,plc}; the old pipeline::ics and plc::runtime modules are
removed (the static PLC scanner stays).
- CI clippy-checks + tests the new crate.
Pure move + rename — no behaviour change. 27 moved tests pass in the new crate;
283 agent lib tests pass; clippy + fmt clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
sharang
merged commit 70a4ee55ab into main2026-07-17 12:56:16 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Foundation for the Werkbank Docker executor (sharang/werkbank#5). The dynamic-execution logic has to be usable by the runner (a separate repo), so this lifts it out of
compliance-agentinto a shared crate. Pure move + rename — no behaviour change.New crate
werkbank-execgit mvpreserves history:src/ics/*— the read-only industrial-protocol probe (Modbus / OPC-UA / EtherNet-IP / portscan).src/plc/*— ephemeral soft-PLC provisioning (DockerSoftPlc), the OpenPLC program-load client, andprovision_and_test/extract_program.src/error.rs— a crate-localExecErrorreplacing the agent'sAgentError.src/fingerprint.rs—compute_fingerprint, copied from the agent'sdedup.Depends only on
compliance-core+compliance-dast, so the runner can pull it without the agent's server stack (mongodb/axum/etc.).compliance-agentconsumes itAgentErrorgainsExec(#[from] werkbank_exec::ExecError).werkbank_exec::{ics,plc}; the oldpipeline::icsandplc::runtimemodules are removed (the static PLC scanner stays in the agent).werkbank-exec.Verification
27 moved tests pass in the new crate; 283 agent lib tests pass; clippy (
-D warnings) + fmt clean; full workspace compiles.Next
werkbank's Docker executor (
impl Executor→werkbank_exec::plc::provision_and_test→JobResult), once this crate is onmainfor the runner repo to depend on.🤖 Generated with Claude Code