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.

PropertyDescription
neurarch:precheck:resultPASSED, WARNED or FAILED: the in-toto test-result value of the same run.
neurarch:precheck:commandWhich pre-check ran: check, layout, serve-check or policy-apply.
neurarch:precheck:tool_versionThe neurarch CLI version that produced the values.
neurarch:subject:root_sha256model-transparency root digest over the model files (the subject of a model_signing signature).
neurarch:subject:revisionHub commit the file digests were read at, when the model came from the Hugging Face Hub.
neurarch:params:derivedParameter count derived from config.json alone.
neurarch:training:peak_gbPredicted training peak memory in GB for one unsharded copy (derived from the config, not measured).
neurarch:training:peak_upper_gbThe training peak times the held-out calibration multiplier.
neurarch:training:smallest_cardSmallest listed card that holds the upper-bound training peak with 1.15x headroom.
neurarch:inference:peak_gbPredicted inference peak (weights plus KV cache) in GB.
neurarch:inference:smallest_cardSmallest listed card that holds the inference peak with headroom.
neurarch:serve:verdictpass, warn or block: whether the serving launch is predicted to start and hold what it promises.
neurarch:serve:enginevllm, sglang or llamacpp.
neurarch:serve:engine_versionThe engine release whose defaults and tables were applied.
neurarch:layout:verdictpass, warn or block: whether the TP / PP / DP split is legal and balanced.
neurarch:layout:tp_pp_dpThe 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.