S00 Advisory Sources Specification

Status: Frozen (implemented backend contracts reconciled) Date: 2026-02-19 Working directory: docs/modules/ui/v2-rewire Sprint: 20260218_005, task R0-02

Purpose

Define Security and Risk -> Advisory Sources as the decision-impact view of advisory-source health. This is the security gating interpretation surface; operations on connectors/mirrors belong to other domains.

Implementation reconciliation (2026-02-19)

Ownership split (field-level)

Field / ActionOwner domainRationale
Source name, family, descriptionIntegrationsConnector catalog owner
Credential / connectivity statusIntegrationsConnector health owner
Test connection actionIntegrationsLinks to Integrations connector detail
Mirror and freshness operation actionsPlatform OpsMirror workflow owner
Last successful ingest, freshness age, freshness SLAPlatform Ops (source), Security & Risk (display)Platform Ops publishes freshness facts; this screen reads and interprets for gating impact
Signature / trust statusAdministration (Trust & Signing, source), Security & Risk (display)Administration manages trust keys; this screen shows effect on advisory verification
Impacted decisions countSecurity & RiskGate evaluation owner
Impact severitySecurity & RiskRisk scoring owner
Conflict detection / conflict diagnosticsSecurity & RiskConflict resolution belongs to security decision model
Unsigned advisory ratioSecurity & RiskAdvisory interpretation owner

Screen structure

Summary cards (4 cards)

Source table

Required columns:

ColumnSourceNotes
Source nameIntegrationsLink to Integrations connector detail with preserved source id
Source familyIntegrationsFeed type (NVD, OSV, GHSA, vendor, custom)
Last successful ingestPlatform OpsTimestamp
Freshness agePlatform OpsAge since last successful ingest
Freshness SLAPlatform OpsConfigured SLA threshold
Freshness statusPlatform OpsHealthy / Warning / Stale / Unavailable badge
Signature / trust statusAdministrationSigned / Unsigned / Untrusted
Impacted decisions countSecurity & RiskCount of release/approval decisions gated by this source
Impact severitySecurity & RiskHighest severity of active advisory in this source affecting decisions

Table actions per row

Detail panel (slide-in)

Opened from row click. Sections:

State behavior

Per-source states

StateTriggerUI treatment
HealthyFreshness within SLA, signature valid or source is unsigned-acceptedGreen badge; no action surfaced
WarningFreshness age approaching SLA (configurable threshold, default 80%)Yellow badge; show time-to-breach
StaleFreshness age exceeds SLARed badge; show gating confidence degraded warning; show Open mirror ops action
UnavailableNo ingest activity in critical window or mirror failureCritical badge; show Open connector config action; impacted decisions show degraded confidence
ConflictingActive unresolved advisory conflict involving this sourceConflict badge; show conflict count; triage link

Page-level states

StateTriggerUI treatment
All healthyAll sources healthy or warningNo banner; summary cards show normal
Degraded sources presentOne or more stale or unavailableWarning banner with count and quick action links
Conflict activeOne or more unresolved conflictsSecurity banner with conflict count; link to filtered view
Stale dataAdvisory source API returns cached or stale data (> configured page-stale threshold)Stale-data banner with last-refreshed timestamp; disable gating-critical actions
Hard failAdvisory source API unavailableError banner; page content unavailable; link to Platform Ops data-integrity page
EmptyNo advisory sources configuredEmpty state with link to Integrations to configure first source

Forbidden behaviors

API dependency list

APIProposed endpointOwner moduleStatus classAuth scopeNotes
Advisory source list with freshnessGET /api/v1/advisory-sourcesConcelierEXISTS_COMPATadvisory:readImplemented; requires tenant via X-StellaOps-TenantId or tenant_id claim
Advisory source freshness detailGET /api/v1/advisory-sources/{id}/freshnessConcelierEXISTS_COMPATadvisory:readImplemented; supports source UUID/key lookup and includes advisory stats fields for detail diagnostics
Advisory source gating impactGET /api/v1/advisory-sources/{id}/impactPolicyEXISTS_COMPATfindings:readImplemented; supports region, environment, and sourceFamily filters
Advisory source conflict reportGET /api/v1/advisory-sources/{id}/conflictsPolicyEXISTS_COMPATfindings:readImplemented; supports status plus deterministic limit/offset pagination
Advisory source summary aggregateGET /api/v1/advisory-sources/summaryConcelierEXISTS_COMPATadvisory:readImplemented card aggregate (healthy/warning/stale/unavailable/disabled/conflicts placeholder)
Security source freshness (existing)GET /api/v1/security/sources/freshness (check Concelier)ConcelierEXISTS_ADAPTexistingMay need freshness-SLA delta and impact-count additions

Non-allowed implementations