Vulnerability-Intelligence Manifest Contract v1

Contract: stella.ops/vulnIntelligenceManifest@v1 (CONTRACT-VULN-INTELLIGENCE-MANIFEST-V1-074). Schema: vuln-intelligence-manifest.v1.schema.json (JSON Schema 2020-12, the payload). DSSE payload type: application/vnd.stellaops.vuln-intelligence-manifest.v1+json. Files in an export: intelligence-manifest.json (the canonical payload) and, when the export is signed, intelligence-manifest.dsse.json (the envelope). Examples: valid payload, invalid payload. Sprint: SPRINT_20261027_006 SIM-1. Vendor signing: SIM-2. Consumer verification: SIM-3. Snapshot display: SIM-4.


Purpose

The compact vulnerability database (stella vuln-db export) is the intelligence that stella sbom check --vuln-db and the offline mirror decide with. The intelligence manifest identifies one export exactly: every file in it with its SHA-256 and size, the export’s version label, and the vulnerability hub publication (the advisory snapshot) it was built from, with that snapshot’s version and time. Signed by the vendor, it lets an installation verify offline that the files it holds are the ones Stella Ops published, and show how old the intelligence it decides with is.

The existing manifests stay as they are and stay readable: manifest.json, vuln-db.manifest.json and vuln-db-sharealike.manifest.json keep every field (docs/OFFLINE_KIT.md §2.3.1). The intelligence manifest lists them as files of the export; it does not replace their content.

What a verified manifest establishes

A manifest whose envelope verifies against a pinned vendor root of purpose vendor-intelligence (see the vendor trust-root set) establishes, and only establishes:

It does not establish:

Payload fields

All fields are required, and no other field is allowed.

FieldTypeMeaning
schemaVersionstringstella.ops/vulnIntelligenceManifest@v1.
dbVersionstringThe export’s version label: dbVersion in manifest.json and in the database’s db_manifest table.
generatedAtstringWhen the export ran, UTC. This is not the advisory snapshot time.
snapshot.artifactRefstringThe hub publication the export was built from: corpusArtifactRef in manifest.json.
snapshot.sourceGenerationintegerThe advisory snapshot version: the hub’s source generation of that publication.
snapshot.publishedAtstringThe advisory snapshot time: when the hub published the corpus, UTC.
snapshot.publicationManifestDigeststringsha256: of the hub publication manifest the export downloaded.
files[]arrayEvery file of the export except signature envelopes and public key files, sorted by path (ordinal), each path once.
files[].pathstringRelative to the export directory, forward slashes, no .. segment.
files[].rolestringcore-db, companion-db, combined-manifest, core-manifest or companion-manifest.
files[].sha256stringsha256: and the lowercase hex SHA-256 of the file’s bytes.
files[].sizeBytesintegerThe file’s size in bytes.

An export lists exactly one core-db and one core-manifest, and a companion-db with its companion-manifest only when the share-alike companion was written. intelligence-manifest.json itself is not listed: it is the payload.

Envelope

{
  "payloadType": "application/vnd.stellaops.vuln-intelligence-manifest.v1+json",
  "payload": "<base64 of the canonical payload bytes>",
  "signatures": [
    { "keyid": "<key id>", "sig": "<base64 signature>" }
  ]
}

Verification rules

A consumer refuses the export, with a stated reason, when:

  1. the envelope is not valid JSON, has another payload type, has no signature, or no signature verifies under a trusted root;
  2. the payload is not canonical, does not match the schema, lists a path twice, or lacks the core-db or core-manifest entry;
  3. a listed file is missing, or its size or SHA-256 differs;
  4. a database file (*.sqlite) is present in the export directory but not listed.

An export without intelligence-manifest.dsse.json is unsigned. A consumer refuses it unless the operator passes the explicit unsigned override, and then reports the database as unsigned in its output. Verification needs no network. It does not refuse an old snapshot: consumers show the snapshot version and time so the operator sees how current the intelligence is.

Examples

The examples are payloads only. Vendor signing keys never enter the product or this repository; tests sign with keys they generate.