Integrations

Verified against commit 942a18727c on 2026-09-26 (UTC) for Status, Deployables, API Surface, Background services, Doctor checks and Configuration. Re-verify: grep -n "AddHostedService\|AddServiceDoctorChecks\|serviceName:" src/Integrations/StellaOps.Integrations.WebService/Program.cs and grep -n "^ integrations-web:" devops/release/bundle/docker-compose.yml.

Service rows (host project, image, database and role, compose file, bundle presence, Doctor registration) are generated in docs/architecture/service-inventory.md; where this page and the inventory differ, the inventory is authoritative.

The Integrations module is the central catalog and connector hub for managing external-tool integrations across the Stella Ops platform. It is the reference for operators registering connectors and for engineers consuming the integration catalog from other modules.

Purpose

Integrations provides a unified API for registering, configuring, and health-checking third-party service connectors such as GitHub, GitLab, and Harbor. It is the single source of truth for all external-tool configurations, letting other modules discover and consume integration details without embedding provider-specific logic.

Status

AttributeValue
Sourcesrc/Integrations/
Deployableintegrations-web (src/Integrations/StellaOps.Integrations.WebService/), in the release bundle
Databasestellaops_integrations via STELLAOPS_POSTGRES_INTEGRATIONS_CONNECTION
Router microserviceintegrations

The child runner for process-isolated connectors (src/Integrations/StellaOps.Integrations.PluginHost.ProcessRunner/) ships inside the integrations-web image. The auto-sbom-readiness-e2e CI lane provisions this service’s own database and checks it directly (SPRINT_20260916_005 FAN-6, green on main 2026-09-26).

Quarantined surfaces (not shippable in this release)

Two SCM-feedback surfaces are built but quarantined per PLAN_20260704 findings A4/A5 and decision D3 (quarantine, not delete) — they are preserved for a future SCM-feedback initiative but are not wired and must not be presented as available:

The sanctioned scan ingress and feedback path is CLI-in-CI: emit SBOM/SARIF with the scanner (stella sbom generate / stella sbom attach, stella registry scan --wait --json then stella scan sarif --scan-id) in your pipeline and upload with the platform’s own action (e.g. github/codeql-action/upload-sarif).

Key Features

API Surface

All catalog endpoints are mounted under /api/v1/integrations, require a valid tenant (RequireTenant()), and are authorized by the integration scopes below. (Grounded in IntegrationEndpoints.MapIntegrationEndpoints.)

MethodRouteScopePurpose
GET/api/v1/integrationsintegration:readList integrations (filter by type/provider/status/search; paged, sortable)
GET/api/v1/integrations/{id}integration:readGet integration by id
POST/api/v1/integrationsintegration:writeCreate integration
PUT/api/v1/integrations/{id}integration:writeUpdate integration
DELETE/api/v1/integrations/{id}integration:writeSoft-delete integration
POST/api/v1/integrations/{id}/testintegration:operateTest connection (audited)
POST/api/v1/integrations/{id}/resolve-credentialsintegration:operateResolve an AEAD-sealed credential envelope for trusted in-cluster callers (audited; plaintext is never returned or logged)
POST/api/v1/integrations/{id}/discoverintegration:operateDiscover provider resources (audited)
GET/api/v1/integrations/{id}/healthintegration:readLatest durable health status
GET/api/v1/integrations/{id}/impactintegration:readImpact map
GET/api/v1/integrations/providersintegration:readSupported providers (includeTestOnly opt-in)
POST/api/v1/integrations/ai-code-guard/runintegration:operateStandalone AI Code Guard run (deterministic secret/attribution/license scan)
PUT/api/v1/integrations/{id}/auto-scanintegration:writeRegistry auto-scan settings
GET/api/v1/integrations/registries, /registries/by-slug/{slug}, /registries/{id}/imagesregistry:readRegistry browse (RegistryBrowseEndpoints.cs)
GET/api/v1/integrations/registry-image-discoveries/eventsintegration:readRetained discovery event feed for Scanner (RegistryImageDiscoveryStreamEndpoints.cs)

Every route under /api/v1/integrations and /api/v1/secret-authority is also mapped under the consolidated root /api/integrations/v1 (Endpoints/IntegrationsConsolidatedRouteAliases.cs).

Adjacent route groups:

Background services

Hosted services registered in Program.cs: SecretProviderBootProbe, RegistryWriteDriftMonitor, IntegrationHealthMonitor (periodic provider health sweep, Integrations:HealthMonitor:*), RegistryAutoScanSweepService, and ScannerProjectionService when ScannerProjection:Enabled is true.

Doctor checks

AddServiceDoctorChecks("integrations") and five module checks in StellaOps.Integrations.WebService/Doctor/IntegrationsDoctorChecks.cs (credential-custody KEK, own-database cutover, Policy decisions owner API, registry credential readiness, local Scanner projection).

Dependencies

Upstream (this module depends on)

Downstream (modules that depend on this)

Cross-module consumers do not read the Integrations database directly. They depend only on StellaOps.Integrations.Contracts and resolve entries through the read-only IIntegrationCatalog seam, whose HTTP implementation calls GET /api/v1/integrations/{id} with the caller’s bearer (tenant resolved from the stellaops:tenant claim, integration:read enforced). When no base address is configured, each consumer falls back to a fail-closed NullIntegrationCatalog.

Note: as of the source reviewed, Signals (SCM webhooks) and the Job Engine / Orchestrator do not consume the Integrations catalog seam. Earlier drafts listing them as downstream consumers were inaccurate.

Configuration

Key settings (grounded in Program.cs):

Current packaged connector profiles:

The recommended overlay intentionally leaves Integrations:PluginsDirectory empty and uses Integrations:PluginProfileRoots for the recommended root; base mirror/storage connectors remain host-owned in this migration slice.

Scopes (Authority)

The service registers exactly three integration scopes (StellaOpsScopes):

IDE Extensions (VS Code, JetBrains)

As of Sprint 214, the IDE extension plugins (previously src/Extensions/) are housed under src/Integrations/__Extensions/. These are non-.NET projects (TypeScript for VS Code, Kotlin for JetBrains) that act as thin API clients for the Orchestrator and Authority services. See the Architecture doc for details.

Subordinate documents

DocumentStatus
architecture.mdcurrent for Deployment, Background services, Doctor checks, Database Schema and Endpoints (2026-09-26); other sections not re-verified
api-reference.md, openapi/v1.jsongenerated from the service OpenAPI document
consolidation-design.mddesign record of the INT programme; its “separate Policy DSN” note is superseded by the Policy owner API read (ORP-3); not re-verified 2026-09-26
runbooks/onboarding-gitlab-container-registry.mdoperator runbook, not re-verified 2026-09-26