Signal YAML reference
Configure Continuous Verification and Continuous Compliance in .drc/signal.yml. The file is shared; the cv and cc sections stay separate.
Unknown fields fail closed. Extra keys, empty required values, and values outside the bounds below prevent drc signal from loading the file.
Requirements
- Place the file at
<project-root>/.drc/signal.yml. The CLI walks from the current directory toward filesystem root until it finds that path. It loadssignal.ymlonly;.drc/signal.yamlis ignored. - Set
version: 1. - Declare at least one service and at most 256 services.
- Keep the file at or under 1 MiB.
- Name services with ASCII letters, digits,
-,_, or., up to 128 bytes. - When
cc.enabledis true, declare a framework profile and at least one control.
Top-level fields
| Field | Required | Meaning |
|---|---|---|
version |
yes | Must be 1. |
project |
no | Optional project label. |
project.name |
no | Non-empty name, at most 128 bytes. |
services |
yes | Map of service name to service configuration. |
Service fields
Each key under services is the service name you pass to drc signal <service>.
| Field | Required | Default | Meaning |
|---|---|---|---|
path |
no | unset | Relative service path, at most 512 bytes. |
run |
yes | — | Command DRC executes for this service. |
cv |
no | enabled Continuous Verification with defaults below | Continuous Verification policy. |
cc |
no | disabled | Continuous Compliance profile and controls. |
cache |
no | disabled | Bounded runner caches. Cache contents are not evidence. |
run
| Field | Required | Default | Meaning |
|---|---|---|---|
command |
yes | — | Non-empty command, at most 8,192 bytes. |
working_directory |
no | project root | Relative working directory, at most 512 bytes. |
timeout_seconds |
no | 3600 |
Command timeout from 1 through 86,400. |
drc signal <service> runs this command, captures bounded stdout and stderr (2 MiB combined), and uses the exit status as the first pass/fail input for Continuous Verification.
cv
See Continuous Verification for the product meaning. Fields:
| Field | Required | Default | Meaning |
|---|---|---|---|
enabled |
no | true |
When false, drc signal lists the service but does not run CV for it. |
execution_mode |
no | self_hosted |
self_hosted or hosted. |
environment |
no | ci |
Non-empty environment label, at most 128 bytes. |
baseline |
no | automatic head for the service and environment | Pin a baseline. |
comparison |
no | strict outputs, errors, and side effects; recorded resources | Difference policy. |
cv.baseline
| Field | Required | Meaning |
|---|---|---|
commit |
no | Commit SHA, at most 256 bytes, no whitespace. |
environment |
no | Baseline environment label, at most 256 bytes. |
lockfile_hash |
no | Lockfile digest, at most 256 bytes. |
config_hash |
no | Configuration digest, at most 256 bytes. |
When commit is unset, DRC selects the current head baseline for the service and environment.
cv.comparison
| Field | Required | Default | Allowed values |
|---|---|---|---|
outputs |
no | strict |
strict, allow |
errors |
no | strict |
strict, allow |
side_effects |
no | strict |
strict, allow |
resources |
no | recorded |
recorded, threshold |
allowed_differences |
no | empty | At most 256 bytes per entry. Matches a difference path or explanation. |
expected_changes |
no | empty | At most 64 approvals. |
Each expected_changes item:
| Field | Required | Bounds |
|---|---|---|
id |
yes | Non-empty, at most 128 bytes. |
paths |
yes | 1 to 64 paths; each non-empty and at most 256 bytes. |
reason |
yes | Non-empty, at most 1,024 bytes. |
expires_at |
yes | RFC 3339 timestamp. |
commit |
yes | Non-empty, at most 256 bytes. |
reviewer |
yes | Non-empty, at most 256 bytes. |
cc
See Continuous Compliance for the product meaning. Fields:
| Field | Required when enabled |
Default | Meaning |
|---|---|---|---|
enabled |
yes (must be true to evaluate) |
false |
Hosted CC only runs when true. |
profile |
yes | empty | Framework profile for this service. |
profiles |
no | empty | Additional profiles. Each must use technical_subset coverage. |
controls |
yes | empty | At least one control. Duplicate id values fail closed. |
cc.profile
| Field | Required when CC is enabled | Default | Meaning |
|---|---|---|---|
framework |
yes | unset | Framework id from drc signal cc frameworks. |
version |
yes | unset | Pinned framework version string. |
coverage |
no | technical_subset |
Must be technical_subset. |
environment |
no | unset | Non-empty label, at most 128 bytes. |
scope |
no | {} |
JSON object. Service, repository, and data classification belong here. |
Control framework and framework_version must match this profile.
Team includes technical-subset profiles for SOC 2, ISO 27001, and CIS Controls v8. PCI DSS, HIPAA, and GDPR require the matching compliance pack.
cc.controls[]
| Field | Required | Default | Meaning |
|---|---|---|---|
id |
yes | — | Control id; same character rules as service names. |
framework |
yes | — | Must equal cc.profile.framework. |
framework_version |
no | profile version | When set, must equal cc.profile.version. |
title |
yes | — | Non-empty, at most 512 bytes. |
owner |
yes | — | Non-empty, at most 128 bytes. |
interval_seconds |
no | 86400 |
1 through 31,536,000. |
test_kind |
no | evidence_lineage |
Runnable kinds: evidence_lineage, execution_integrity. |
premium_pack |
no | unset | Pack id when the control is not included, at most 128 bytes. |
required_checks |
no | checks for evidence_lineage |
Must be exactly the server list for test_kind. |
required_evidence |
no | [signed_evidence] |
At most 32 unique names, each at most 128 bytes. |
scope |
no | profile scope | JSON object, or omit to inherit the profile scope. |
source_integration_id |
no | unset | Optional integration id. Runnable kinds do not require it. |
detector_config |
no | {} |
JSON object. |
Runnable test_kind values and exact checks:
test_kind |
required_checks |
|---|---|
evidence_lineage |
evidence_present, evidence_signed, lineage_complete |
execution_integrity |
manifest_finalized, events_committed, replay_reference |
Any other test_kind fails closed. Listed controls are validated even when cc.enabled is false. Do not copy a hosted catalog entry into YAML until drc signal cc check accepts it.
cache
| Field | Required | Default | Meaning |
|---|---|---|---|
enabled |
no | false |
Restore listed paths in CI. |
paths |
no | empty | Relative cache paths, at most 32 entries. |
dependencies |
no | empty | Relative dependency paths, at most 32 entries. |
Each path is at most 512 bytes, must be relative, and must not contain ... Caches accelerate the runner. They are not evidence and are not compliance records.
Example
version: 1
project:
name: payments-platform
services:
checkout-api:
path: services/checkout-api
run:
command: ./scripts/test-checkout.sh
working_directory: services/checkout-api
timeout_seconds: 3600
cv:
enabled: true
execution_mode: self_hosted
environment: staging
comparison:
outputs: strict
errors: strict
side_effects: strict
resources: recorded
allowed_differences: []
cc:
enabled: true
profile:
framework: iso27001
version: "2022"
coverage: technical_subset
environment: staging
scope:
service: checkout-api
repository: acme/payments-platform
controls:
- id: A.8.15
framework: iso27001
framework_version: "2022"
title: Logging evidence lineage
owner: platform
test_kind: evidence_lineage
required_checks: [evidence_present, evidence_signed, lineage_complete]
required_evidence: [signed_evidence]
cache:
enabled: true
paths: [.drc/cache]
Validate with drc signal and drc signal cc check. Then run Continuous Verification with drc signal checkout-api and Continuous Compliance with drc signal cc sync and drc signal cc run checkout-api.