advisory.linkset.updated@1 · Event contract

Purpose: unblock CONCELIER-LNM-21-005 by freezing the platform event shape for linkset changes emitted by Concelier. This is the only supported event for linkset churn; downstreams subscribe for graph overlays, policy evaluations, and replay bundles.

Envelope & transport

Payload (JSON)

FieldTypeRules
eventIdstring (uuid)Generated by publisher; idempotency key.
tenantIdstringurn:tenant:{uuid}; required for multi-tenant routing.
linksetIdstring (ObjectId)Mongo _id of the linkset document.
advisoryIdstringUpstream advisory identifier (e.g., CVE, GHSA, vendor id).
sourcestringLinkset source/adapter identifier (lowercase).
observationIdsstring[]Array of observation ObjectIds included in this linkset; sorted ASCII.
deltaobjectChange description: { type, observationsAdded, observationsRemoved, confidenceChanged, conflictsChanged }.
confidencenumber (0–1, nullable)Correlation confidence score; null if not computed.
conflictsobject[]Array of { field, reason, sourceIds[] } conflict summaries; sorted by field then reason.
provenanceobject{ observationHashes[], toolVersion?, policyHash? } for replay/audit.
createdAtstring (ISO-8601 UTC)Timestamp when linkset was built.
replayCursorstringMonotone cursor for offline bundle ordering (tick from createdAt).
builtByJobIdstring (optional)Job ID that built this linkset.
traceIdstring (optional)Propagated from ingest job/request; aids join with logs/metrics.

Delta object

FieldTypeRules
typestring"created" or "updated".
observationsAddedstring[]Observation IDs added since previous version.
observationsRemovedstring[]Observation IDs removed since previous version.
confidenceChangedbooleanTrue if confidence score changed.
conflictsChangedbooleanTrue if conflicts array changed.

Determinism & ordering

Error contracts for Scheduler

Sample payload

{
  "eventId": "550e8400-e29b-41d4-a716-446655440000",
  "tenantId": "urn:tenant:acme-corp",
  "linksetId": "6744abcd1234567890abcdef",
  "advisoryId": "CVE-2024-1234",
  "source": "nvd",
  "observationIds": ["674400001234567890abcdef", "674400001234567890abcde0"],
  "delta": {
    "type": "created",
    "observationsAdded": ["674400001234567890abcdef", "674400001234567890abcde0"],
    "observationsRemoved": [],
    "confidenceChanged": true,
    "conflictsChanged": false
  },
  "confidence": 0.85,
  "conflicts": [],
  "provenance": {
    "observationHashes": ["sha256:abc123", "sha256:def456"],
    "toolVersion": "1.0.0",
    "policyHash": null
  },
  "createdAt": "2025-11-27T12:00:00.000Z",
  "replayCursor": "638688000000000000",
  "builtByJobId": "job-12345",
  "traceId": "trace-67890"
}

Schema

advisory.linkset.updated@1.schema.json provides a JSON Schema (draft 2020-12) for runtime validation; any additional fields are rejected.

Implementation (LNM-21-005)

Change control