Adds the shared, dependency-free vocabulary the control plane and the Werkbank execution runner agree on, in a new compliance-core::models::werkbank module:
Job — declarative (TOML on disk, JSON on the wire): id, type, tenant, target_id, executor, labels, timeout, inputs, runtime, collect.
InputRef — blob (content-hash) or url; the artifact resolves on the runner, never through the control plane (so an on-prem runner keeps customer data local).
JobResult — reuses Finding / DastFinding / SbomEntry, so the runner produces exactly what the control plane persists; idempotent by job_id.
Feature-free: the module avoids the mongodb/axum features so the runner (separate repo) can depend on compliance-core without the server stack — verified with cargo check -p compliance-core --no-default-features.
Tests (5): JSON round-trip; parsing the exact plc-provision and qemu-boot TOML from the design doc §5; status terminality; result constructors. clippy + fmt clean.
Note: CI has no runner registered at the moment — verified the check steps locally (fmt, clippy -p compliance-agent -D warnings, feature-free check, tests).
First story of the **Werkbank** epic (sharang/werkbank#1) — implements sharang/werkbank#2.
Adds the shared, dependency-free vocabulary the control plane and the Werkbank execution runner agree on, in a new `compliance-core::models::werkbank` module:
- **`Job`** — declarative (TOML on disk, JSON on the wire): id, type, tenant, target_id, executor, labels, timeout, inputs, runtime, collect.
- **`JobType`** — `plc-provision` / `qemu-boot` / `dast` / `pentest`.
- **`Executor`** — `shell` / `docker` / `k8s` (the CI-runner classification; QEMU runs in the Docker executor).
- **`JobStatus`** — queued → leased → running → succeeded/failed/expired/cancelled, with `is_terminal()`.
- **`InputRef`** — blob (content-hash) or url; the artifact resolves **on the runner**, never through the control plane (so an on-prem runner keeps customer data local).
- **`JobResult`** — reuses `Finding` / `DastFinding` / `SbomEntry`, so the runner produces exactly what the control plane persists; idempotent by `job_id`.
**Feature-free:** the module avoids the `mongodb`/`axum` features so the runner (separate repo) can depend on `compliance-core` without the server stack — verified with `cargo check -p compliance-core --no-default-features`.
**Tests (5):** JSON round-trip; parsing the exact `plc-provision` and `qemu-boot` TOML from [the design doc §5](https://gitea.meghsakha.com/sharang/werkbank/src/branch/main/docs/DESIGN.md); status terminality; result constructors. clippy + fmt clean.
Note: CI has no runner registered at the moment — verified the check steps locally (fmt, `clippy -p compliance-agent -D warnings`, feature-free check, tests).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The shared, dependency-free vocabulary the control plane and the Werkbank
execution runner agree on: Job (declarative — TOML on disk, JSON on the wire),
JobType (plc-provision/qemu-boot/dast/pentest), Executor (shell/docker/k8s),
JobStatus lifecycle, InputRef (blob/url — the artifact resolves on the runner,
never through the control plane), JobRuntime, JobCollect, and JobResult (reusing
Finding/DastFinding/SbomEntry so the runner produces exactly what the control
plane persists).
Lives in a mongodb/axum-feature-free module so the runner can depend on
compliance-core without the server stack (verified: cargo check -p
compliance-core --no-default-features). Tests round-trip through JSON and parse
the exact plc-provision + qemu-boot TOML from the Werkbank design doc.
First story of the Werkbank epic (sharang/werkbank#1); implements
sharang/werkbank#2.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
sharang
merged commit 7b218fffef into main2026-07-17 08:54:12 +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.
First story of the Werkbank epic (sharang/werkbank#1) — implements sharang/werkbank#2.
Adds the shared, dependency-free vocabulary the control plane and the Werkbank execution runner agree on, in a new
compliance-core::models::werkbankmodule:Job— declarative (TOML on disk, JSON on the wire): id, type, tenant, target_id, executor, labels, timeout, inputs, runtime, collect.JobType—plc-provision/qemu-boot/dast/pentest.Executor—shell/docker/k8s(the CI-runner classification; QEMU runs in the Docker executor).JobStatus— queued → leased → running → succeeded/failed/expired/cancelled, withis_terminal().InputRef— blob (content-hash) or url; the artifact resolves on the runner, never through the control plane (so an on-prem runner keeps customer data local).JobResult— reusesFinding/DastFinding/SbomEntry, so the runner produces exactly what the control plane persists; idempotent byjob_id.Feature-free: the module avoids the
mongodb/axumfeatures so the runner (separate repo) can depend oncompliance-corewithout the server stack — verified withcargo check -p compliance-core --no-default-features.Tests (5): JSON round-trip; parsing the exact
plc-provisionandqemu-bootTOML from the design doc §5; status terminality; result constructors. clippy + fmt clean.Note: CI has no runner registered at the moment — verified the check steps locally (fmt,
clippy -p compliance-agent -D warnings, feature-free check, tests).🤖 Generated with Claude Code