railiance-platform/schemas/custody-broker-readiness.schema.json
codex 30e6edc236
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Add versioned ephemeral custody lifecycle
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a02669-87ee-7a31-b111-edc95a16e0fa
2026-08-22 21:56:42 +02:00

55 lines
2.3 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://coulomb.social/schemas/railiance/custody-broker-readiness.v1.json",
"title": "Railiance custody broker readiness receipt v1",
"type": "object",
"additionalProperties": false,
"required": [
"interface", "version", "workplan_id", "owner", "reviewer", "decision",
"created_at", "engagement_id", "target_id", "projection_contract_digest",
"projection_receipt_interface", "interface_artifacts", "required_roles", "mount_paths",
"secret_values_observed"
],
"properties": {
"interface": {"const": "railiance.custody-broker-readiness"},
"version": {"const": 1},
"workplan_id": {"const": "RAILIANCE-WP-0025"},
"owner": {"const": "whitehat-security"},
"reviewer": {"type": "string", "minLength": 2, "maxLength": 128},
"decision": {"enum": ["approve", "request-changes"]},
"created_at": {"type": "string", "format": "date-time"},
"engagement_id": {"type": "string"},
"target_id": {"type": "string"},
"projection_contract_digest": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
"projection_receipt_interface": {"const": "railiance.custody-projection-receipt"},
"interface_artifacts": {
"type": "object",
"minProperties": 4,
"additionalProperties": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
},
"required_roles": {"const": ["attacker", "owner"]},
"mount_paths": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"type": "string", "pattern": "^/"}},
"adapter": {
"type": "object",
"additionalProperties": false,
"required": ["repo", "revision", "path", "sha256", "tests_passed"],
"properties": {
"repo": {"const": "whitehat-security"},
"revision": {"type": "string", "pattern": "^[0-9a-f]{40}$"},
"path": {"type": "string", "minLength": 1},
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
"tests_passed": {"const": true}
}
},
"cleanup_request_supported": {"const": true},
"note": {"type": "string", "minLength": 1, "maxLength": 2000},
"secret_values_observed": {"const": false}
},
"allOf": [
{
"if": {"properties": {"decision": {"const": "approve"}}},
"then": {"required": ["adapter", "cleanup_request_supported"]},
"else": {"required": ["note"]}
}
]
}