Top level#
| Field | Type | Required | Description |
|---|---|---|---|
version |
integer | yes | Schema version. Currently 1. |
suppress |
list of rules | no | Findings to suppress |
enforce |
object | no | Conditions that fail the run |
suppress[]#
| Field | Type | Required | Description |
|---|---|---|---|
where |
matcher | yes | What this rule applies to |
reason |
string | yes | Why. Free text, retained in the report. |
review_by |
date | yes | After this date the rule stops applying |
A rule missing reason or review_by is a parse error, not a warning.
Matchers#
| Matcher | Operators | Example |
|---|---|---|
advisory |
exact, list | advisory: ZTVS-2026-0044 |
package.name |
exact | name: openssl |
package.version |
below, at_least, exactly |
version: { below: 0.10.66 } |
severity |
at_most, at_least |
severity: { at_most: medium } |
layer_index |
below, exactly |
layer_index: { below: 3 } |
path |
glob | path: "vendor/**" |
Matchers within one where are and-ed. Separate rules are or-ed.
enforce#
| Field | Type | Default | Description |
|---|---|---|---|
fail_on.severity.at_least |
severity | — | Fail at or above this severity |
fail_on.unsuppressed_only |
boolean | true |
Whether suppressed findings count |
fail_on.expired_suppressions |
boolean | true |
Fail if any rule has expired |
Worked example#
version: 1
suppress:
- where:
advisory: ZTVS-2026-0044
reason: "Vulnerable codec path is never constructed — see ADR-0031"
review_by: 2026-11-30
- where:
layer_index: { below: 3 }
reason: "Base image, patched on the platform team's cadence"
review_by: 2026-12-01
enforce:
fail_on:
severity: { at_least: high }
unsuppressed_only: true
expired_suppressions: true