Excititor Provider Control Plane

Audience: Operators configuring, enabling, and troubleshooting Excititor VEX providers through the Web UI, CLI, or backend API.

This guide describes the operator-facing control plane for Excititor VEX providers: the entry points, readiness model, run counters, the provider inventory, and what configuration each provider persists. For credential acquisition and step-by-step setup, see the Provider Credential Entry guide.

Operator entry points

Backend API:

Read endpoints accept Authority’s canonical vex:read scope and the legacy vex.read spelling for compatibility with older local tests and clients. Mutation endpoints require vex.admin.

If PostgreSQL refuses a connection because the shared server has reached its client limit, GET /excititor/providers returns RFC 7807 status 503, code excititor.providers.storage_unavailable, and Retry-After: 5. It never emits database text or a stack trace. The canonical compose stack also caps the Web and Worker pools independently with Postgres:Excititor:MaxPoolSize (default 8 per process) and retires idle connections after 60 seconds. Clients should honor Retry-After; they must not interpret a temporary storage failure as an empty or healthy provider catalog.

Persisted connector configuration (Sprint 20260422_007) is the primary operator path for credentialed VEX providers. Host-config and environment binding remain compatibility fallbacks only. Persisted settings win when both define the same key.

Related credential guide:

Readiness states

Excititor providers use four runtime readiness states:

enabled remains the operator intent flag. A provider can be enabled=true and still show planned or blocked.

Blocked-readiness codes (Sprint 20260422_007, extended Sprint 20260507_004)

When a persisted-enabled provider lacks required settings or fails connector-option validation, the blocked-reason surface carries one of:

These codes mirror the Concelier SOURCE_CONFIG_REQUIRED / SOURCE_CONFIG_INVALID contract from SRC-CREDS-005 so CLI and Web surfaces can reuse the same rendering. The /excititor/providers list response exposes them via blockingReasonCode and blockingReason.

Run counters

Provider list/detail responses expose lastRunCounters when the connector has persisted run evidence in vex.connector_states.resume_tokens. Direct run endpoints (POST /excititor/ingest/run, POST /excititor/ingest/resume, and POST /excititor/providers/{providerId}/run) return the same per-provider counters object in their run result payloads.

The counter payload contains:

Counters are stored under the __run.* resume-token prefix so the control plane can explain the last run without a schema migration or log scraping. When a connector does not expose an upstream catalog candidate count, discovered and downloaded are conservative lower-bound attempt counts derived from rawStored + rejected.

Run status rules:

Provider inventory

Provider IDKindDefault enabledRegistered in WebServiceUI control planeCLI control planeCredential / config statusNotes
excititor:redhatdistrotrueyesyesyesPublic defaults; metadata and trust overrides can be persisted through the provider control plane.Registered by default in StellaOps.Excititor.WebService.
excititor:ubuntudistrotrueyesyesyesDefault public OpenVEX archive mode requires no credentials; etagSecret is required only when an operator selects legacy LiveNotices / CSAF catalog modes.Registered by default and uses Canonical’s public OpenVEX archive unless configured otherwise.
excititor:oraclevendortrueyesyesyesPublic CSAF JSON/RSS is reachable but observed detached signatures/provider trust material are absent. Operators must confirm catalogUri and choose cache-only/quarantine-only, or provide pinned trust material for signed-required.Registered by default and blocked for trusted Stella Ops Mirror VEX until verifiable signing material or an explicit unsigned quarantine policy exists.
excititor:ciscovendortrueyesyesyesPersisted scalar config supports metadataUri override plus optional apiToken. Default public Cisco CSAF works without credentials.Registered by default in StellaOps.Excititor.WebService.
excititor:suse-rancherhubfalseyesyesyesDefault discovery metadata is unavailable from this environment. Operators can confirm a reachable discoveryUri, configure an offline snapshot, and provide signed-required trust material or select cache/quarantine mode.Disabled by default for public mirror mode and reports discovery/offline-snapshot requirements when no reachable public hub metadata is configured.
excititor:oci-openvexattestationfalseyesyesyesPersisted config supports image subscriptions, registry credentials, cosign mode/identity settings, and artifact references for cosign/TUF material.Disabled by default and reports configuration-required until image subscriptions are supplied.
excititor:msrcvendorfalseyesyesyesPersisted scalar config supports authMode, tenantId, clientId, clientSecret, optional scope, preferOfflineToken, offlineTokenPath, and staticAccessToken. The default Public mode does not require credentials.Registered by default. It is runnable in public mode and surfaces as configuration-blocked only when the selected auth mode is missing required fields.

What the current provider control plane persists

The current update-provider surface persists:

The provider control plane now persists the connector-secret fields needed by the built-in providers listed below. Host configuration remains a compatibility fallback for existing deployments, but persisted settings win whenever they are present.

Persisted scalar-provider configuration (Sprint 20260422_007)

The following provider connector settings can now be persisted through the UI or CLI and are kept in a dedicated vex.provider_settings row (distinct from vex.providers metadata):

ProviderPersisted fields
excititor:ciscometadataUri (optional override; default uses Cisco’s public download metadata endpoint), sourceUrlConfirmed, sourceUrlConfirmedAt, sourceUrlConfirmedBy, trustMode, apiToken (sensitive)
excititor:ubuntusourceMode, archiveUri, archiveAllowUnsigned, indexUri, noticeDetailBaseUri, etagSecret (sensitive, required only for legacy notice/catalog modes), cosignIssuer, cosignIdentityPattern, pgpFingerprints, allowUnsigned
excititor:redhatmetadataUri, sourceUrlConfirmed, sourceUrlConfirmedAt, sourceUrlConfirmedBy, trustMode, offlineSnapshotPath, cosignIssuer, cosignIdentityPattern, pgpFingerprints, allowUnsigned
excititor:oraclecatalogUri, sourceUrlConfirmed, sourceUrlConfirmedAt, sourceUrlConfirmedBy, trustMode, cpuCalendarUri, offlineSnapshotPath, pgpKeyFingerprint, allowUnsigned
excititor:suse-rancherdiscoveryUri, sourceUrlConfirmed, sourceUrlConfirmedAt, sourceUrlConfirmedBy, trustMode, offlineSnapshotPath, optional OAuth client fields, allowAnonymousDiscovery, cosignIssuer, cosignIdentityPattern, pgpFingerprints, allowUnsigned
excititor:msrcfeedMode (ProviderMetadata or SecurityUpdateGuideApi), metadataUri, authMode (Public, ClientCredentials, or OfflineToken), tenantId, clientId, clientSecret (sensitive), scope (optional override), preferOfflineToken, offlineTokenPath, staticAccessToken (sensitive)
excititor:oci-openveximages, registrySourcesConfirmed, sourceUrlConfirmedAt, sourceUrlConfirmedBy, trustMode, registry credentials, cosign mode/identity settings, artifact references for cosign keys/certificates/TUF roots, offline bundle root

Source confirmation is intentionally separate from trust admission. sourceUrlConfirmed=true only records that the operator reviewed the HTTPS source URL for this Stella Ops Mirror setup. trustMode controls whether the source may be admitted as signed-required, collected as cache-only, or restricted to quarantine-only workflows. At worker and manual WebService ingest runtime, trustMode=cache-only projects to the connector allowUnsigned=true setting so unsigned public material can be collected with vex.signature.status=unsigned; this is cache admission only and must not be treated as trusted VEX publication.

Operator surfaces:

Sensitive values are never re-exposed on reads — the API returns only hasValue/isSecretRetained flags. Blank submissions retain existing secrets; explicit clearKeys entries delete them.

Persisted provider settings win over host configuration. For Ubuntu legacy notice/catalog modes, the worker also projects Excititor:Connectors:Ubuntu:EtagSecret and related host keys into the built-in schedule as a compatibility fallback when no persisted etagSecret is present. Default OpenVEX archive mode does not require that secret. For MSRC, host configuration can still supply the same auth-mode and credential fields for compatibility, but the control-plane settings are the operator-owned source once saved.

Host wiring notes

Worker scheduling authority & full-corpus opt-in (VRB-1)

There are two independent enable surfaces — do not confuse them:

Because every current public default (Red Hat CSAF, Ubuntu, Oracle, Cisco, SUSE Rancher, OCI-OpenVEX, MSRC) is a full-corpus (“heavy”) connector, an unguarded auto-seed used to make a fresh dev/airgap box start pulling entire vendor corpora after the staggered initial delay — the root cause of the 420 GB dev-DB crash (SPRINT_20260630_001).

Default-safe behavior (VRB-1): on a fresh install with no explicit provider list, the worker seeds all 7 public providers into the schedule catalog but leaves every heavy connector Enabled=false, so ResolveSchedules() schedules zero of them and there is no auto-ingest — no manual vex.providers.enabled=false step is needed (that manual 2026-06-30 mitigation is now the default).

Opting in to full-corpus ingest (two documented, discoverable mechanisms):

When heavy connectors are gated off, the worker logs a VRB-1 warning naming the skipped providers and the exact opt-in flag, so a prod deployment is never silently starved — it must declare intent once.

This preventive gate is orthogonal to the reactive disk-ceiling guardrail (VRB-5 / R5, VexIngestGuardrail.CheckDbCeilingAsync): VRB-1 decides whether a run starts; R5 still pauses a runaway run mid-flight at the DB-size ceiling. Both stay on independently. Downstream PROVIDER_CONFIG_REQUIRED / PROVIDER_TRUST_MATERIAL_REQUIRED validations remain a further layer even for opted-in providers.

Verification state

Reverified in Sprint 20260422_004:

The verification above covers the provider control plane and readiness behavior. It does not claim a fresh live ingest verification run for every upstream VEX provider in this sprint.