Docs / CycloneDX properties
The neurarch CycloneDX property namespace
The properties the neurarch CLI writes into a CycloneDX 1.6 BOM with --cyclonedx. CycloneDX has no fields for memory requirements, the smallest card that holds a model, or whether a parallel split or a serving launch is legal, so the pre-check carries them as properties under its own namespace.
Administered by neurarch-ai. Registration requested in the CycloneDX property taxonomy (cyclonedx-property-taxonomy#207). Written by neurarch 0.3.0 and later; how to run it: CLI 0.3.0.
Properties
All values are strings, as CycloneDX properties require. Numbers are written in plain decimal. Every value is a prediction derived from the model's config.json and the stated configuration, not a measurement; a consumer must not read them as observed behaviour. A property is written only when the run computed it, so a serve-check BOM carries no neurarch:training:* values.
| Property | Description |
|---|---|
neurarch:precheck:result | PASSED, WARNED or FAILED: the in-toto test-result value of the same run. |
neurarch:precheck:command | Which pre-check ran: check, layout, serve-check or policy-apply. |
neurarch:precheck:tool_version | The neurarch CLI version that produced the values. |
neurarch:subject:root_sha256 | model-transparency root digest over the model files (the subject of a model_signing signature). |
neurarch:subject:revision | Hub commit the file digests were read at, when the model came from the Hugging Face Hub. |
neurarch:params:derived | Parameter count derived from config.json alone. |
neurarch:training:peak_gb | Predicted training peak memory in GB for one unsharded copy (derived from the config, not measured). |
neurarch:training:peak_upper_gb | The training peak times the held-out calibration multiplier. |
neurarch:training:smallest_card | Smallest listed card that holds the upper-bound training peak with 1.15x headroom. |
neurarch:inference:peak_gb | Predicted inference peak (weights plus KV cache) in GB. |
neurarch:inference:smallest_card | Smallest listed card that holds the inference peak with headroom. |
neurarch:serve:verdict | pass, warn or block: whether the serving launch is predicted to start and hold what it promises. |
neurarch:serve:engine | vllm, sglang or llamacpp. |
neurarch:serve:engine_version | The engine release whose defaults and tables were applied. |
neurarch:layout:verdict | pass, warn or block: whether the TP / PP / DP split is legal and balanced. |
neurarch:layout:tp_pp_dp | The parallel split checked, as TPxPPxDP. |
Names follow the taxonomy's ABNF: lower-case namespace segments separated by :, and names of ASCII letters, digits, - and _.
Placement
On the machine-learning-model component the verdict is about, one per BOM. The model's files are file components under it, each with its SHA-256, so a BOM consumer matches the same digests the in-toto subjects carry. The same run's signed in-toto record (--attest, test-result v0.1 predicate) carries the full findings; neurarch:subject:root_sha256 is the join key between the two, and between this BOM and an OpenSSF model_signing signature of the same files. The BOM is a fragment: a valid CycloneDX 1.6 document on its own, meant to be merged into the BOM a tool like cdxgen already produces. More on the record: trust.
Example
$ npx neurarch@0.3.0 serve-check Qwen/Qwen3-0.6B --gpu l4 --cyclonedx bom.json -- vllm serve Qwen/Qwen3-0.6B --max-model-len 8192
The model component of bom.json, as written:
{
"bom-ref": "model:Qwen/Qwen3-0.6B",
"components": [
... 9 file components, one per model file, each with its SHA-256 ...
],
"name": "Qwen/Qwen3-0.6B",
"properties": [
{
"name": "neurarch:precheck:command",
"value": "serve-check"
},
{
"name": "neurarch:precheck:result",
"value": "WARNED"
},
{
"name": "neurarch:precheck:tool_version",
"value": "0.3.0"
},
{
"name": "neurarch:serve:engine",
"value": "vllm"
},
{
"name": "neurarch:serve:engine_version",
"value": "vLLM 0.32.0"
},
{
"name": "neurarch:serve:verdict",
"value": "warn"
},
{
"name": "neurarch:subject:revision",
"value": "c1899de289a04d12100db370d81485cdf75e47ca"
},
{
"name": "neurarch:subject:root_sha256",
"value": "82ee9251ff063d0c45826eedbe4b2916bca4e9a8765963a4a44c3404c10deb28"
}
],
"purl": "pkg:huggingface/Qwen/Qwen3-0.6B@c1899de289a04d12100db370d81485cdf75e47ca",
"type": "machine-learning-model",
"version": "c1899de289a04d12100db370d81485cdf75e47ca"
}
Run with neurarch 0.3.0 from npm on 2026-10-18. Only the nine file components are cut. The verdict is warn because nothing blocked and one warning was left: the checkpoint is 1.50 GB against the 1.19 GB its config.json implies, so memory was sized from the checkpoint. The full findings are in the terminal output and in the --attest record.