Hardware-vendor connector simulator contract
This document defines the simulator-versus-production backend contract for the Stella Ops Concelier hardware-vendor connectors. It is intended for connector implementers and operators who need to understand why these connectors fail closed by default and how the deterministic simulator path is used in tests.
- Scope: Intel, AMD, ARM, and Siemens PSIRT connectors.
- Origin:
SPRINT_20260424_004(CLOUD-HW-002/003) plusCONC-TRUTH-002-03. - Status: The simulator backend is available only through explicit local/test configuration. Default runtime options select the production backend, which throws
NotImplementedExceptionuntil the per-vendor fetcher sprint lands.
Why this pattern exists
Hardware-vendor advisory feeds each have a distinct upstream format:
| Vendor | Feed format |
|---|---|
| Intel | HTML listings (Intel-SA-NNNNN pages) |
| AMD | HTML product-security bulletins |
| ARM | HTML security-center pages |
| Siemens | CSAF 2.0 JSON |
SPRINT_20260424_004 shipped deterministic simulators for tests. As of CONC-TRUTH-002-03, those simulators are no longer the default runtime path because canned advisories are not production advisory data.
Contract
Each hardware connector folder under src/Concelier/__Libraries/StellaOps.Concelier.Connector.Vndr.<Name>/ defines:
IHardwareVendorBackend: the vendor-scoped backend interface.HardwareAdvisoryRecord: a minimal normalised record emitted by a backend.<Vendor>VendorBackendSimulator: deterministic canned advisories for local/test harnesses only.<Vendor>VendorBackend: production backend stub that throwsNotImplementedExceptionuntil the real fetcher lands.<Vendor>Connector : IFeedConnector: fetch/parse/map implementation that calls the resolved backend.<Vendor>Options: carriesSourceDb,BaseEndpoint, andUseProductionBackend. The default istrue, selecting the production backend. Tests or local demos must set it tofalseexplicitly to use simulator records.
CI testing contract
- Simulator path is tested end-to-end only by explicit opt-in in
StellaOps.Concelier.Connector.CloudHardwareAliases.Tests. - Default/production path is fail-closed. Tests assert default options select production mode and that
UseProductionBackend=truethrowsNotImplementedExceptionuntil the real fetcher lands. - Future production behavior must be tested with recorded local fixtures and mocked HTTP layers. Do not add live-network tests.
Production deployment
With default options, a deployment without a wired production backend will see the connector throw NotImplementedException on its first fetch cycle. This is intentional: the connector fails loudly rather than silently producing empty or simulated advisory catalogs.
Do not set Concelier:Sources:<vendor>:UseProductionBackend=false in production. That switch is reserved for explicit local/test simulator harnesses.
Operators enable a production hardware-vendor backend only after:
- The per-vendor production-backend sprint has landed.
- Fixture-based tests for the production backend exist in the vendor’s test project.
- The deployment environment has approved network or offline mirror access to the upstream vendor endpoint.
Until then, simulator records are deterministic fixture advisories for tests and demos only. They must not satisfy production freshness, coverage, or policy evidence requirements.
Seed migration
The four catalog rows (intel, amd, arm, siemens) are inserted by the consolidated baseline 001_v1_concelier_baseline.sql (e.g. intel at line 1627; folded in from the pre-1.0 014_seed_hardware_connector_sources.sql, which is archived under Migrations/_archived/pre_1.0/mig061/ and not embedded). Note the live forward migration 003_remove_arm_legacy_source.sql subsequently removes the legacy arm source row. Any legacy config.backend=simulator seed metadata is descriptive catalog history, not authority for production runtime binding. Production runtime selection is controlled by the connector options above and defaults to fail-closed production mode.
Follow-up sprints
Per-vendor sprints that replace the NotImplementedException stub with a real fetcher:
SPRINT_VNDR_INTEL_PROD: Intel Security Center HTML scraper.SPRINT_VNDR_AMD_PROD: AMD Product Security HTML scraper.SPRINT_VNDR_ARM_PROD: ARM Security Center scraper.SPRINT_VNDR_SIEMENS_PROD: Siemens ProductCERT CSAF ingestion, reusing the CSAF pipeline.
Each follow-up sprint replaces one <Vendor>VendorBackend.cs stub, lands fixture-based tests against recorded HTTP responses, and documents the production flip in the relevant operations guide.
