/ reference / Claims vocabulary

This page lists every claim in OpenVet’s canonical vocabulary. Auditors use these names to make machine-readable assertions about a package’s properties; consumers compose them into policies via requirement syntax. For the design rationale behind atomic claims rather than judgement-call criteria, see Comparisons.

Two tiers #

The vocabulary splits into two tiers.

Discovery claims (is-*, has-*, uses-*, impl-*) record what’s in the package: observable structural facts the auditor can determine by inspecting the source tree. Every audit must assert every discovery claim (true or false); an audit that omits one is incomplete.

Audit claims (everything else) record what the auditor evaluated and concluded about a particular aspect of the package. Each audit claim is conditional on a discovery claim being true: crypto-impl-safe only applies when impl-crypto = true, network-safe only applies when uses-network = true, and so on. The auditor should assert each applicable audit claim, but may legitimately decline to evaluate one.

Claims are boolean. Absence means unknown: the auditor is not asserting either way. See How it works for how absence propagates through policy evaluation.

Discovery claims #

Global #

ClaimMeaning when true
is-benignThe package contains no malicious code or deliberately harmful behaviour.

Existence: has-* #

What’s in the package alongside the source code.

ClaimMeaning when true
has-binariesThe package ships pre-compiled binary assets (executables, libraries).
has-build-execThe package has build-time code execution (a build script, post-install hook, etc.).
has-install-execThe package has installation-time code execution.
has-unit-testsThe package has unit tests.
has-integration-testsThe package has integration tests.
has-fuzz-testsThe package has fuzz tests.
has-property-testsThe package has property tests.

Usage: uses-* #

Runtime behaviour implied by the package’s use of external functionality. Distinct from impl-*: a package may uses-crypto (by linking against a crypto library) without impl-crypto.

ClaimMeaning when true
uses-cryptoThe package uses cryptographic operations (hashes, signing, encryption).
uses-execThe package executes code via exec() or subprocess.
uses-jitThe package uses a just-in-time compiler.
uses-interpreterThe package uses an embedded interpreter.
uses-unsafeThe package uses memory-unsafe code (raw pointers, FFI, unsafe blocks in Rust).
uses-networkThe package performs network operations.
uses-filesystemThe package uses the filesystem.
uses-environmentThe package reads or writes environment variables.
uses-concurrencyThe package uses concurrency (threads, async runtimes).

Implementation: impl-* #

What the package itself implements, as opposed to consumes.

ClaimMeaning when true
impl-cryptoThe package implements cryptographic primitives.
impl-parserThe package implements a parser for an external data format or language.
impl-interpreterThe package implements an interpreter.
impl-jitThe package implements a just-in-time compiler.
impl-protocolThe package implements a protocol (e.g. HTTP, DNS).
impl-datastructureThe package implements a data structure.
impl-algorithmThe package implements a non-cryptographic algorithm.
impl-concurrencyThe package implements concurrency primitives or abstractions.

Audit claims #

Each group below applies when the indicated discovery claim is true. The naming convention is <surface>-<property> for usage-tier claims (e.g. crypto-safe for uses-crypto) and <surface>-impl-<property> for implementation-tier claims (e.g. crypto-impl-safe for impl-crypto).

When has-binaries is true #

ClaimMeaning when true
binaries-safeBinaries shipped with the package are safe.
binaries-reproducibleBinaries shipped with the package have been reproduced from source.
binaries-provenanceBinaries shipped with the package have verified provenance.

When has-build-exec is true #

ClaimMeaning when true
build-exec-safeBuild script does not perform malicious or unexpected actions.
build-exec-deterministicBuild script’s output is a pure function of its inputs.
build-exec-no-networkBuild script makes no network requests.
build-exec-no-write-outBuild script writes only inside the registry-conventional output area.
build-exec-minimalBuild script does only what’s strictly necessary for the build.

When has-install-exec is true #

ClaimMeaning when true
install-exec-safeInstall script does not perform malicious or unexpected actions.
install-exec-deterministicInstall script’s output is a pure function of its inputs.
install-exec-no-networkInstall script makes no network requests.
install-exec-minimalInstall script does only what’s strictly necessary.

When uses-crypto is true #

ClaimMeaning when true
crypto-safePackage’s use of cryptographic operations is safe.

When uses-exec is true #

ClaimMeaning when true
exec-safeProcess invocation uses argv form and sanitises any attacker-controlled inputs.

When uses-jit is true #

ClaimMeaning when true
jit-safeSource or bytecode passed to the JIT is either not externally-controlled or properly sandboxed.

When uses-interpreter is true #

ClaimMeaning when true
interpreter-safeSource or bytecode passed to the interpreter is either not externally-controlled or properly sandboxed.

When uses-unsafe is true #

ClaimMeaning when true
unsafe-safeEvery unsafe block’s invariants have been reviewed and hold.
unsafe-documentedEvery unsafe block carries a safety comment explaining its invariants.
unsafe-minimalUnsafe is used only where strictly necessary.
unsafe-testedUnsafe blocks are tested with miri, sanitizers, property tests, or fuzzing.

When uses-network is true #

ClaimMeaning when true
network-safeNetwork code validates inputs where appropriate.
network-securePackage uses secure protocols by default (e.g. TLS).

When uses-filesystem is true #

ClaimMeaning when true
filesystem-safeFilesystem code resists path traversal and writes only to expected locations.

When uses-environment is true #

ClaimMeaning when true
environment-safePackage reads only documented, expected env vars; does not enumerate the environment.

When uses-concurrency is true #

ClaimMeaning when true
concurrency-safePackage uses concurrency primitives correctly: synchronised shared state, no races or deadlocks.
concurrency-documentedPublic API’s thread-safety contract is documented per type or function.

When impl-crypto is true #

ClaimMeaning when true
crypto-impl-safeCryptographic implementation is memory-safe, panic-free, and constant-time on secret-dependent paths.
crypto-impl-correctCryptographic implementation passes reference test vectors.
crypto-impl-testedCryptographic implementation is tested comprehensively, ideally with fuzzing or property tests.

When impl-parser is true #

ClaimMeaning when true
parser-impl-safeParser implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
parser-impl-correctParser implementation produces correct output for its specified input format.
parser-impl-testedParser implementation has comprehensive tests, ideally including fuzzing or property tests.

When impl-interpreter is true #

ClaimMeaning when true
interpreter-impl-safeInterpreter implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
interpreter-impl-correctInterpreter implementation matches the reference language spec’s behaviour.
interpreter-impl-testedInterpreter implementation has comprehensive tests, ideally including fuzzing or property tests.

When impl-jit is true #

ClaimMeaning when true
jit-impl-safeJIT implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
jit-impl-correctJIT implementation conforms to the source language’s documented semantics.
jit-impl-testedJIT implementation has comprehensive tests, ideally including fuzzing or property tests.

When impl-protocol is true #

ClaimMeaning when true
protocol-impl-safeProtocol implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
protocol-impl-correctProtocol implementation conforms to the spec and passes any reference test suite.
protocol-impl-testedProtocol implementation has comprehensive tests, ideally including fuzzing or property tests.

When impl-datastructure is true #

ClaimMeaning when true
datastructure-impl-safeData structure implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
datastructure-impl-correctData structure invariants are maintained, including under concurrent use where thread-safety is claimed.
datastructure-impl-testedData structure has comprehensive tests, ideally including fuzzing or property tests.
datastructure-impl-boundsOperations meet documented time and space bounds under adversarial inputs.

When impl-algorithm is true #

ClaimMeaning when true
algorithm-impl-safeAlgorithm implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
algorithm-impl-correctAlgorithm produces correct output for all documented inputs.
algorithm-impl-testedAlgorithm implementation has comprehensive tests, ideally including fuzzing or property tests.
algorithm-impl-boundsAlgorithm meets documented time and space bounds under adversarial inputs.

When impl-concurrency is true #

ClaimMeaning when true
concurrency-impl-safeConcurrency implementation is memory-safe, free of undefined behaviour, and panic-free on all inputs.
concurrency-impl-correctConcurrency primitives correctly enforce mutual exclusion, memory ordering, and the contracts the API claims.
concurrency-impl-documentedConcurrency primitives document their thread-safety contract, memory-ordering guarantees, and usage constraints.
concurrency-impl-testedConcurrency implementation is exercised under adversarial scheduling (loom, ThreadSanitizer, or equivalent).

Custom claims #

Any claim name not listed above is a custom claim. Claim names follow kebab-case ASCII ([a-z][a-z0-9-]*).

Custom claims are useful when:

  • An organisation has internal review criteria not covered by the canonical set.
  • An auditor wants to express a niche observation that doesn’t warrant promotion to canonical.
  • A vocabulary is in flight: an auditor can prototype a name before proposing it to the canonical set.

Custom claims appear unchanged in audits and propagate through imports unchanged. Consumers can rename a custom claim per-log at evaluation time using the policy [alias] mechanism; see requirement syntax.

Stability guarantees #

The canonical vocabulary will evolve over time, but changes to existing claims are restricted so that old audits do not silently change meaning.

Composing claims into requirements #

Atomic claims compose into consumer policies. A few illustrative examples:

[requirement]
no-memory-unsafe = "uses-unsafe implies unsafe-safe"
network-must-be-tested = """
    uses-network implies network-safe and (has-fuzz-tests or has-integration-tests)
"""
implemented-crypto-must-be-correct = """
    impl-crypto implies crypto-impl-tested and crypto-impl-correct
"""
build-must-not-network = "has-build-exec implies build-exec-no-network"

The full requirement language is documented in requirement syntax; the Configuring requirements guide walks through common policy patterns end-to-end.