2026-10-08 22:29:13 +02:00
|
|
|
# security-case-types tools
|
|
|
|
|
|
|
|
|
|
Validator and renderer for SecurityCaseTypes and SecurityCases
|
|
|
|
|
(`canon/standards/security-case-types_v0.1.md`, schemas
|
|
|
|
|
`canon/schemas/security-case-type_v0.1.schema.json` and
|
|
|
|
|
`security-case_v0.1.schema.json`).
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# a type directory: type.yaml, README.md sections, tests, example cases
|
|
|
|
|
python3 tools/security-case-types/security_case_validator.py validate-type security-case-types/<type-id>
|
|
|
|
|
|
|
|
|
|
# a case against its type (security-case-types/<type-id>/type.yaml)
|
|
|
|
|
python3 tools/security-case-types/security_case_validator.py validate-case <case.yaml> --types security-case-types
|
|
|
|
|
|
|
|
|
|
# render a case into the composer's plan plus materialization, follow-through,
|
|
|
|
|
# verification and rollback; execution is never permitted
|
|
|
|
|
python3 tools/security-case-types/security_case_validator.py render <case.yaml> \
|
|
|
|
|
--types security-case-types capabilities/playbooks/*.yaml
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Only `implemented` types accept cases. `--allow-unimplemented` exists for a type's
|
|
|
|
|
own example cases while the type is being written and acknowledged.
|
|
|
|
|
|
|
|
|
|
The validator refuses, among other things: missing sections, unknown or unpinned
|
|
|
|
|
capabilities, attended steps without justification, steps or materialized items
|
|
|
|
|
without a rollback, verification without a negative check or that reads a value,
|
|
|
|
|
templates with unknown parameters, credential-shaped values anywhere, secret
|
|
|
|
|
parameters that are not custody references, and high-risk types without founder
|
|
|
|
|
acceptance.
|
|
|
|
|
|
|
|
|
|
To start a type: copy `security-case-types/_template/`, rename the directory to
|
2026-10-08 22:45:31 +02:00
|
|
|
the type id, and rewrite every section. The template's tests travel with it:
|
|
|
|
|
rename `tests/test_type.py` to `tests/test_<type_id>_contract.py` so module names stay unique.
|
2026-10-08 22:29:13 +02:00
|
|
|
|
|
|
|
|
Tests: `python3 -m pytest tools/security-case-types/tests security-case-types/*/tests`.
|