Actspan Docs Quickstart
DocsGuides

Exercise local admission controls and report unsupported coverage.

On this page

Control verification

actspan verify exercises supported local controls with deliberate request violations. It uses the native execution path and stops before provider, moderation, remote MCP or tool dispatch. It makes no model or remote tool calls.

Start Here

From an initialized workspace with a configured policy:

actspan verify workspace.yaml data_enrichment --format text

Expected: a scoped check report, paths to local evidence, and portal delivery status. Failed or incomplete protection returns a nonzero exit code.

The command preserves configured warning/blocking behavior. A policy that only warns does not pass a test that requires blocking. It first checks that an allowed baseline reaches admission, then tests configured model allowlists, output-token limits, temperature limits, and per-run estimated budgets when pricing permits. Each successful denial must contain the expected reason and stop before dispatch. A checker failure or unavailable pricing is not proof that the intended rule worked.

Workflow verification checks statically referenced prompt/agent admission boundaries. It does not execute branches, pauses or continuations. Local Python execution, roles, regions, daily budgets and release approvals are either explicitly unsupported by the probe suite or listed as limitations. For a tool-capable static node, the verifier now passes the effective workflow/node tool policy through the normal runtime filter and requests a deliberately forbidden tool. Approval-required nodes are also tried without approval. A check passes only when the typed denial occurs before native admission and dispatch.

Registry MCP tools use the normal runtime compiler twice: once for the configured baseline and once with a synthetic remote tool outside the server's allowed_tools. This verifies local registry and allowlist enforcement. It does not connect to the MCP server and therefore does not verify DNS, authentication, availability, remote authorization or retrieved content.

Results and CI

Check status Meaning
passed The stated check reached its expected boundary or denial reason.
failed A supported check demonstrated that its expectation was not met.
unsupported This verifier cannot exercise that control or execution path.
unverified Evidence is insufficient, a prerequisite failed, or no exercisable restriction is configured.

Exit codes: 0 for all checks passed, 1 when a check failed, 2 for incomplete verification or setup/publication errors. A workflow with unsupported branches does not become fully verified just because its model-admission checks pass.

The runtime required-control coverage gate has a separate contract. Its unsupported status means that the selected integration profile does not establish enforcement, while the verifier's status means its probe suite cannot exercise a check. Mandatory coverage gaps block dispatch; advisory gaps remain recorded warnings. This reference describes the supplied Actspan 0.2.0 runtime. Results from an older pilot do not replace verification against your current workspace and runtime.

Use --format json for the normal CLI envelope. Reports and an evidence package are saved under .actspan/verification/<verification-id>/. Use --output-dir to choose another directory.

Captured public-build example

The model-free budget fixture was run on October 22, 2026 with public CLI 0.2.0 executable SHA-256 02bd46192b7a85d52c6bc74879e628a8f78907337a491dccacb2bb709918ceb5. This excerpt omits local paths, identifiers and detailed policy metadata:

{
  "status": "incomplete",
  "checks": [
    {"control": "baseline", "status": "passed", "boundary_reached": true},
    {"control": "model_allowlist", "status": "passed", "boundary_reached": false},
    {"control": "output_token_limit", "status": "passed", "boundary_reached": false},
    {"control": "temperature_limit", "status": "passed", "boundary_reached": false},
    {"control": "per_run_budget", "status": "passed", "boundary_reached": false},
    {"control": "provider_allowlist", "status": "unsupported", "boundary_reached": false}
  ]
}

Counts: 5 passed, 0 failed, 1 unsupported, 0 unverified. The command exited 2, because a configured control was outside this probe suite. A positive baseline and the four expected denials do not erase that gap. Other configurations can produce unverified checks when no exercisable restriction or price is available; that status was absent from this captured fixture. This was a local probe run, not a live model or complete workflow qualification.

Portal evidence

With the normal portal connection configured, verification publishes the package automatically. --require-portal makes delivery mandatory; --no-portal keeps the result local. Optional delivery failures enter the existing portal outbox and can be retried with actspan portal sync. Required-delivery failures preserve local files and return an explicit error. If the optional outbox cannot be written, delivery is reported as failed rather than queued; the local report remains available.

Open Workspace → Artifacts → Revision evidence packages to review and download the manifest. Evaluation publication subsequently joins earlier verification for the same configuration identity. The locally saved package is replaced with the server's enriched package after successful delivery, so its hash matches the download. An offline/queued local package remains the local snapshot.

The fingerprint covers source configuration, selected policy files, provider lock, pricing and explicit evaluation overrides. It excludes resolved environment values, provider implementation bytes and remote knowledge contents. Policy identities in native checks come from the actual admission snapshot. Changes to local configuration during verification invalidate successful checks.

See revision evidence packages for completeness, privacy and release-identity boundaries. A digest proves content consistency; it does not certify that a client reported truthful results.

Local acceptance findings

Historical Planning Helper source-fixture finding (not a qualification of every current public2 file): the original policy had no admission.mode: block, so the default warning behavior allowed the deliberate model, token, temperature and budget violations through admission. The report correctly failed those blocking checks. Its configured workflow tool restriction and MCP remote-tool allowlist are now independently exercised and pass locally. Full graph and live MCP coverage remain unsupported. The original example was not silently modified.