Checks / Obligations / Check the AI's output is sound
Obligation · 192 controls · 3 laws
Check the AI's output is sound
Values an AI step produces or receives must be the right type, in range and consistent before anything acts on them.
What to put in place
Gate every AI step: check its inputs and outputs are well-formed and in range before acting on them.
Policy wording you can use
[your organisation] checks the inputs and outputs of its automated steps for type, range and consistency before any action is taken on them, and blocks anything that fails.
Prove it once
Describe or link the evidence that this is in place: the policy, the page, the document reference. It is sealed once and applied to all 39 controls here that take a yes or a document (the rest need their own number or date and are listed after).
Every control that asks for this
Agent output: number sanity
- Score within 0..100
- Probability within 0..1
- Confidence within 0..1
- Amount is non-negative
- Amount within sane ceiling (<=1e6)
- Anomaly within 0..1
- Device risk within 0..1
- Risk score within 0..100
- Latency recorded and <= 30ms
- Latency is non-negative
- Block index is a non-negative integer
- Block index is an integer
- Audit hash is 64 chars
- Audit hash is hex-64
- Merkle root is hex-64
- Input hash is hex-64
- Output hash is hex-64
- Timestamp present
- Timestamp not in the future
- Decision is a valid verdict
- Signal weights sum to 1.0
- Percentage within 0..100
- Count is a non-negative integer
- Retries within limit (<=5)
- Rate per minute within 1000
- Velocity within 100
- Amount has <= 2 decimal places
- Minor-unit amount is integer
- Subtotal + tax == total
- Balance is non-negative
- Threshold is numeric
- Temperature within 0..2
- Top-p within 0..1
- Max tokens is a positive integer
- Token count is non-negative
- Cost is non-negative
- Cost has <= 4 decimal places
- Sequence number is an integer
- Version string present
- Chain height is non-negative
- Score is numeric
- Priority within 1..5
- Severity within 0..10
- Weight within 0..1
- Ratio within 0..1
- Age in years is non-negative
- Quantity is a positive integer
- Discount within 0..100
- Tax rate within 0..1
- Exchange rate is positive
- Duration seconds is non-negative
- Attempts within 10
- Queue depth is non-negative
- Batch size is a positive integer
- Score deltas are monotonic
- Epoch is an integer
- Nonce present
- Checksum is hex-64
- Signature present
- Index within 0..4095
- Limit is a positive integer
- Offset is non-negative
- Confidence >= 0.5 to act
- Loss is non-negative
Agent output: data format
- Event timestamp is ISO-8601
- Created-at is ISO-8601
- Phone is E.164
- Country is a 2-letter code
- Currency is a 3-letter code
- Email is well-formed
- Email is lower-case
- URL is https
- ID is a UUID
- Request ID is a UUID
- Payload is a JSON object
- User ID present
- User ID has no control chars
- Device ID present
- Device ID is trimmed
- Action present
- Action is lower-case
- Name is trimmed
- Name has no control chars
- Locale is well-formed
- Timezone present
- IP address present
- Postcode present
- Postcode has no control chars
- Amount is numeric
- Amount has <= 2 decimals
- Reference is trimmed
- Session ID present
- Hash field is hex-64
- Signature is base64
- Language is a 2-letter code
- Status is lower-case
- Status is a known value
- Channel is a known value
- Updated-at is ISO-8601
- Expiry is ISO-8601
- Birthdate is ISO-8601
- Callback URL is https
- Webhook URL is https
- Avatar URL is https
- Tenant ID present
- Org ID present
- Account ID is a UUID
- Transaction ID present
- Label is trimmed
- Label has no control chars
- Category is lower-case
- Tag list is a JSON array
- Metadata is a JSON object
- Headers is a JSON object
- Content type present
- Encoding is lower-case
- Checksum is hex-64
- Nonce present
- Priority is a known value
- Region is lower-case
- Source is lower-case
- Destination present
- Message ID present
- Trace ID present
- Span ID present
- Correlation ID present
- Schema version present
- Idempotency key present
Audio output checks
- Duration is positive
- Sample rate is a known value
- Bitrate within 32..320 kbps
- Channel count within 1..8
- Codec is a known value
- Integrated loudness within -36..-9 LUFS
- True peak at or below -1 dBTP
- Clipping flag is false
- Silence ratio within 0..1
- Fingerprint is hex-64
- Play count is non-negative
- Play-count history is monotonic
- Stream ID present
- Track ID is a UUID
- Bit depth is a known value
- Container is a known value
- Start time is non-negative
- End time is after start
- Segment count is a positive integer
- File size is positive
- DRM flag present
- Loudness range within 0..20 LU
- Dynamic range within 0..40 dB
- DC offset within -0.1..0.1
- Peak amplitude within 0..1
- RMS within 0..1
- Frame count is non-negative
- Frame rate is positive
- Noise floor at or below -40 dB
- SNR is at least 10 dB
- Watermark present
- Watermark id is hex-64
- Encoder present
- Checksum is hex-64
- Upload time is ISO-8601
- Capture time is ISO-8601
- Device ID present
- Geo region present
- Licence ID present
- Rights holder present
- ISRC is well-formed
- Tempo (BPM) within 20..300
- Key signature present
- Mood tag is lower-case
- Genre tag is lower-case
- Language is a 2-letter code
- Explicit flag present
- Title is trimmed
- Title has no control chars
- Artist present
- Album present
- Track number is a positive integer
- Disc number is a positive integer
- Release date is ISO-8601
- Preview length within 0..60s
- Buffer health within 0..1
- Rebuffer count is non-negative
- Startup latency within 0..5000ms
- Bitrate switches is non-negative
- Session ID present
- Listener ID present
- Bot score within 0..1
- Fraud flag present
- Completion ratio within 0..1