Rename Concelier Source modules to Connector
This commit is contained in:
		@@ -29,7 +29,7 @@ concelier:
 | 
			
		||||
2. Trigger a full connector cycle:
 | 
			
		||||
   - CLI: `stella db jobs run source:vndr-apple:fetch --and-then source:vndr-apple:parse --and-then source:vndr-apple:map`
 | 
			
		||||
   - REST: `POST /jobs/run { "kind": "source:vndr-apple:fetch", "chain": ["source:vndr-apple:parse", "source:vndr-apple:map"] }`
 | 
			
		||||
3. Validate metrics exported under meter `StellaOps.Concelier.Source.Vndr.Apple`:
 | 
			
		||||
3. Validate metrics exported under meter `StellaOps.Concelier.Connector.Vndr.Apple`:
 | 
			
		||||
   - `apple.fetch.items` (documents fetched)
 | 
			
		||||
   - `apple.fetch.failures`
 | 
			
		||||
   - `apple.fetch.unchanged`
 | 
			
		||||
@@ -57,21 +57,21 @@ concelier:
 | 
			
		||||
  - `increase(apple_parse_failures_total[6h])` to catch parser drift (alerts at `>0`)
 | 
			
		||||
- **Alerts** – Page if `rate(apple_fetch_items_total[2h]) == 0` during business hours while other connectors are active. This often indicates lookup feed failures or misconfigured allow-lists.
 | 
			
		||||
- **Logs** – Surface warnings `Apple document {DocumentId} missing GridFS payload` or `Apple parse failed`—repeated hits imply storage issues or HTML regressions.
 | 
			
		||||
- **Telemetry pipeline** – `StellaOps.Concelier.WebService` now exports `StellaOps.Concelier.Source.Vndr.Apple` alongside existing Concelier meters; ensure your OTEL collector or Prometheus scraper includes it.
 | 
			
		||||
- **Telemetry pipeline** – `StellaOps.Concelier.WebService` now exports `StellaOps.Concelier.Connector.Vndr.Apple` alongside existing Concelier meters; ensure your OTEL collector or Prometheus scraper includes it.
 | 
			
		||||
 | 
			
		||||
## 4. Fixture Maintenance
 | 
			
		||||
 | 
			
		||||
Regression fixtures live under `src/StellaOps.Concelier.Source.Vndr.Apple.Tests/Apple/Fixtures`. Refresh them whenever Apple reshapes the HT layout or when new platforms appear.
 | 
			
		||||
Regression fixtures live under `src/StellaOps.Concelier.Connector.Vndr.Apple.Tests/Apple/Fixtures`. Refresh them whenever Apple reshapes the HT layout or when new platforms appear.
 | 
			
		||||
 | 
			
		||||
1. Run the helper script matching your platform:
 | 
			
		||||
   - Bash: `./scripts/update-apple-fixtures.sh`
 | 
			
		||||
   - PowerShell: `./scripts/update-apple-fixtures.ps1`
 | 
			
		||||
2. Each script exports `UPDATE_APPLE_FIXTURES=1`, updates the `WSLENV` passthrough, and touches `.update-apple-fixtures` so WSL+VS Code test runs observe the flag. The subsequent test execution fetches the live HT articles listed in `AppleFixtureManager`, sanitises the HTML, and rewrites the `.expected.json` DTO snapshots.
 | 
			
		||||
3. Review the diff for localisation or nav noise. Once satisfied, re-run the tests without the env var (`dotnet test src/StellaOps.Concelier.Source.Vndr.Apple.Tests/StellaOps.Concelier.Source.Vndr.Apple.Tests.csproj`) to verify determinism.
 | 
			
		||||
3. Review the diff for localisation or nav noise. Once satisfied, re-run the tests without the env var (`dotnet test src/StellaOps.Concelier.Connector.Vndr.Apple.Tests/StellaOps.Concelier.Connector.Vndr.Apple.Tests.csproj`) to verify determinism.
 | 
			
		||||
4. Commit fixture updates together with any parser/mapping changes that motivated them.
 | 
			
		||||
 | 
			
		||||
## 5. Known Issues & Follow-up Tasks
 | 
			
		||||
 | 
			
		||||
- Apple occasionally throttles anonymous requests after bursts. The connector backs off automatically, but persistent `apple.fetch.failures` spikes might require mirroring the HT content or scheduling wider fetch windows.
 | 
			
		||||
- Rapid Security Responses may appear before the general patch notes surface in the lookup JSON. When that happens, the fetch run will log `detailFailures>0`. Collect sample HTML and refresh fixtures to confirm parser coverage.
 | 
			
		||||
- Multi-locale content is still under regression sweep (`src/StellaOps.Concelier.Source.Vndr.Apple/TASKS.md`). Capture non-`en-us` snapshots once the fixture tooling stabilises.
 | 
			
		||||
- Multi-locale content is still under regression sweep (`src/StellaOps.Concelier.Connector.Vndr.Apple/TASKS.md`). Capture non-`en-us` snapshots once the fixture tooling stabilises.
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ concelier:
 | 
			
		||||
 | 
			
		||||
## 2. Telemetry & Logging
 | 
			
		||||
 | 
			
		||||
- **Metrics (Meter `StellaOps.Concelier.Source.Cccs`):**
 | 
			
		||||
- **Metrics (Meter `StellaOps.Concelier.Connector.Cccs`):**
 | 
			
		||||
  - `cccs.fetch.attempts`, `cccs.fetch.success`, `cccs.fetch.failures`
 | 
			
		||||
  - `cccs.fetch.documents`, `cccs.fetch.unchanged`
 | 
			
		||||
  - `cccs.parse.success`, `cccs.parse.failures`, `cccs.parse.quarantine`
 | 
			
		||||
@@ -67,6 +67,6 @@ Suggested Grafana alerts:
 | 
			
		||||
 | 
			
		||||
## 5. Fixture Maintenance
 | 
			
		||||
 | 
			
		||||
- Regression fixtures live in `src/StellaOps.Concelier.Source.Cccs.Tests/Fixtures`.
 | 
			
		||||
- Refresh via `UPDATE_CCCS_FIXTURES=1 dotnet test src/StellaOps.Concelier.Source.Cccs.Tests/StellaOps.Concelier.Source.Cccs.Tests.csproj`.
 | 
			
		||||
- Regression fixtures live in `src/StellaOps.Concelier.Connector.Cccs.Tests/Fixtures`.
 | 
			
		||||
- Refresh via `UPDATE_CCCS_FIXTURES=1 dotnet test src/StellaOps.Concelier.Connector.Cccs.Tests/StellaOps.Concelier.Connector.Cccs.Tests.csproj`.
 | 
			
		||||
- Fixtures capture both EN/FR advisories with nested lists to guard against sanitiser regressions; review diffs for heading/list changes before committing.
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ concelier:
 | 
			
		||||
 | 
			
		||||
## 2. Telemetry & Logging
 | 
			
		||||
 | 
			
		||||
- **Meter**: `StellaOps.Concelier.Source.CertBund`
 | 
			
		||||
- **Meter**: `StellaOps.Concelier.Connector.CertBund`
 | 
			
		||||
- **Counters / histograms**:
 | 
			
		||||
  - `certbund.feed.fetch.attempts|success|failures`
 | 
			
		||||
  - `certbund.feed.items.count`
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ This runbook describes how Ops provisions, rotates, and distributes Cisco PSIRT
 | 
			
		||||
 | 
			
		||||
## 7. Telemetry & Monitoring
 | 
			
		||||
 | 
			
		||||
- **Metrics (Meter `StellaOps.Concelier.Source.Vndr.Cisco`)**
 | 
			
		||||
- **Metrics (Meter `StellaOps.Concelier.Connector.Vndr.Cisco`)**
 | 
			
		||||
  - `cisco.fetch.documents`, `cisco.fetch.failures`, `cisco.fetch.unchanged`
 | 
			
		||||
  - `cisco.parse.success`, `cisco.parse.failures`
 | 
			
		||||
  - `cisco.map.success`, `cisco.map.failures`, `cisco.map.affected.packages`
 | 
			
		||||
 
 | 
			
		||||
@@ -139,13 +139,13 @@ Keep this runbook synchronized with future sprint notes and update alert thresho
 | 
			
		||||
 | 
			
		||||
## 9. Synthetic Regression Fixtures
 | 
			
		||||
 | 
			
		||||
- **Locations** – Canonical conflict snapshots now live at `src/StellaOps.Concelier.Source.Ghsa.Tests/Fixtures/conflict-ghsa.canonical.json`, `src/StellaOps.Concelier.Source.Nvd.Tests/Nvd/Fixtures/conflict-nvd.canonical.json`, and `src/StellaOps.Concelier.Source.Osv.Tests/Fixtures/conflict-osv.canonical.json`.
 | 
			
		||||
- **Locations** – Canonical conflict snapshots now live at `src/StellaOps.Concelier.Connector.Ghsa.Tests/Fixtures/conflict-ghsa.canonical.json`, `src/StellaOps.Concelier.Connector.Nvd.Tests/Nvd/Fixtures/conflict-nvd.canonical.json`, and `src/StellaOps.Concelier.Connector.Osv.Tests/Fixtures/conflict-osv.canonical.json`.
 | 
			
		||||
- **Validation commands** – To regenerate and verify the fixtures offline, run:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Source.Ghsa.Tests/StellaOps.Concelier.Source.Ghsa.Tests.csproj --filter GhsaConflictFixtureTests
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Source.Nvd.Tests/StellaOps.Concelier.Source.Nvd.Tests.csproj --filter NvdConflictFixtureTests
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Source.Osv.Tests/StellaOps.Concelier.Source.Osv.Tests.csproj --filter OsvConflictFixtureTests
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Connector.Ghsa.Tests/StellaOps.Concelier.Connector.Ghsa.Tests.csproj --filter GhsaConflictFixtureTests
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Connector.Nvd.Tests/StellaOps.Concelier.Connector.Nvd.Tests.csproj --filter NvdConflictFixtureTests
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Connector.Osv.Tests/StellaOps.Concelier.Connector.Osv.Tests.csproj --filter OsvConflictFixtureTests
 | 
			
		||||
dotnet test src/StellaOps.Concelier.Merge.Tests/StellaOps.Concelier.Merge.Tests.csproj --filter MergeAsync_AppliesCanonicalRulesAndPersistsDecisions
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ concelier:
 | 
			
		||||
2. Trigger one end-to-end cycle:
 | 
			
		||||
   - Concelier CLI: `stella db jobs run source:cve:fetch --and-then source:cve:parse --and-then source:cve:map`
 | 
			
		||||
   - REST fallback: `POST /jobs/run { "kind": "source:cve:fetch", "chain": ["source:cve:parse", "source:cve:map"] }`
 | 
			
		||||
3. Observe the following metrics (exported via OTEL meter `StellaOps.Concelier.Source.Cve`):
 | 
			
		||||
3. Observe the following metrics (exported via OTEL meter `StellaOps.Concelier.Connector.Cve`):
 | 
			
		||||
   - `cve.fetch.attempts`, `cve.fetch.success`, `cve.fetch.documents`, `cve.fetch.failures`, `cve.fetch.unchanged`
 | 
			
		||||
   - `cve.parse.success`, `cve.parse.failures`, `cve.parse.quarantine`
 | 
			
		||||
   - `cve.map.success`
 | 
			
		||||
@@ -58,12 +58,12 @@ concelier:
 | 
			
		||||
 | 
			
		||||
While Ops finalises long-lived CVE Services credentials, we validated the connector end-to-end against the recorded CVE-2024-0001 payloads used in regression tests:
 | 
			
		||||
 | 
			
		||||
- Command: `dotnet test src/StellaOps.Concelier.Source.Cve.Tests/StellaOps.Concelier.Source.Cve.Tests.csproj -l "console;verbosity=detailed"`
 | 
			
		||||
- Command: `dotnet test src/StellaOps.Concelier.Connector.Cve.Tests/StellaOps.Concelier.Connector.Cve.Tests.csproj -l "console;verbosity=detailed"`
 | 
			
		||||
- Summary log emitted by the connector:
 | 
			
		||||
  ```
 | 
			
		||||
  CVEs fetch window 2024-09-01T00:00:00Z->2024-10-01T00:00:00Z pages=1 listSuccess=1 detailDocuments=1 detailFailures=0 detailUnchanged=0 pendingDocuments=0->1 pendingMappings=0->1 hasMorePages=False nextWindowStart=2024-09-15T12:00:00Z nextWindowEnd=(none) nextPage=1
 | 
			
		||||
  ```
 | 
			
		||||
- Telemetry captured by `Meter` `StellaOps.Concelier.Source.Cve`:
 | 
			
		||||
- Telemetry captured by `Meter` `StellaOps.Concelier.Connector.Cve`:
 | 
			
		||||
  | Metric | Value |
 | 
			
		||||
  |--------|-------|
 | 
			
		||||
  | `cve.fetch.attempts` | 1 |
 | 
			
		||||
@@ -109,7 +109,7 @@ Treat repeated schema failures or growing anomaly counts as an upstream regressi
 | 
			
		||||
2. Trigger a pipeline run:
 | 
			
		||||
   - CLI: `stella db jobs run source:kev:fetch --and-then source:kev:parse --and-then source:kev:map`
 | 
			
		||||
   - REST: `POST /jobs/run { "kind": "source:kev:fetch", "chain": ["source:kev:parse", "source:kev:map"] }`
 | 
			
		||||
3. Verify the metrics exposed by meter `StellaOps.Concelier.Source.Kev`:
 | 
			
		||||
3. Verify the metrics exposed by meter `StellaOps.Concelier.Connector.Kev`:
 | 
			
		||||
   - `kev.fetch.attempts`, `kev.fetch.success`, `kev.fetch.unchanged`, `kev.fetch.failures`
 | 
			
		||||
   - `kev.parse.entries` (tag `catalogVersion`), `kev.parse.failures`, `kev.parse.anomalies` (tag `reason`)
 | 
			
		||||
   - `kev.map.advisories` (tag `catalogVersion`)
 | 
			
		||||
 
 | 
			
		||||
@@ -102,7 +102,7 @@ The Offline Kit deployment script copies this file into the container secret dir
 | 
			
		||||
 | 
			
		||||
## 6. Telemetry & Monitoring
 | 
			
		||||
 | 
			
		||||
The connector emits metrics under the meter `StellaOps.Concelier.Source.Ics.Cisa`. They allow operators to track Akamai fallbacks, detail enrichment health, and advisory fan-out.
 | 
			
		||||
The connector emits metrics under the meter `StellaOps.Concelier.Connector.Ics.Cisa`. They allow operators to track Akamai fallbacks, detail enrichment health, and advisory fan-out.
 | 
			
		||||
 | 
			
		||||
- `icscisa.fetch.*` – counters for `attempts`, `success`, `failures`, `not_modified`, and `fallbacks`, plus histogram `icscisa.fetch.documents` showing documents added per topic pull (tags: `concelier.source`, `icscisa.topic`).
 | 
			
		||||
- `icscisa.parse.*` – counters for `success`/`failures` and histograms `icscisa.parse.advisories`, `icscisa.parse.attachments`, `icscisa.parse.detail_fetches` to monitor enrichment workload per feed document.
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ concelier:
 | 
			
		||||
2. Run a full connector cycle:
 | 
			
		||||
   - CLI: `stella db jobs run source:kisa:fetch --and-then source:kisa:parse --and-then source:kisa:map`
 | 
			
		||||
   - REST: `POST /jobs/run { "kind": "source:kisa:fetch", "chain": ["source:kisa:parse", "source:kisa:map"] }`
 | 
			
		||||
3. Confirm telemetry (Meter `StellaOps.Concelier.Source.Kisa`):
 | 
			
		||||
3. Confirm telemetry (Meter `StellaOps.Concelier.Connector.Kisa`):
 | 
			
		||||
   - `kisa.feed.success`, `kisa.feed.items`
 | 
			
		||||
   - `kisa.detail.success` / `.failures`
 | 
			
		||||
   - `kisa.parse.success` / `.failures`
 | 
			
		||||
@@ -63,8 +63,8 @@ concelier:
 | 
			
		||||
 | 
			
		||||
## 5. Fixture & Regression Maintenance
 | 
			
		||||
 | 
			
		||||
- Regression fixtures: `src/StellaOps.Concelier.Source.Kisa.Tests/Fixtures/kisa-feed.xml` and `kisa-detail.json`.
 | 
			
		||||
- Refresh via `UPDATE_KISA_FIXTURES=1 dotnet test src/StellaOps.Concelier.Source.Kisa.Tests/StellaOps.Concelier.Source.Kisa.Tests.csproj`.
 | 
			
		||||
- Regression fixtures: `src/StellaOps.Concelier.Connector.Kisa.Tests/Fixtures/kisa-feed.xml` and `kisa-detail.json`.
 | 
			
		||||
- Refresh via `UPDATE_KISA_FIXTURES=1 dotnet test src/StellaOps.Concelier.Connector.Kisa.Tests/StellaOps.Concelier.Connector.Kisa.Tests.csproj`.
 | 
			
		||||
- The telemetry regression (`KisaConnectorTests.Telemetry_RecordsMetrics`) will fail if counters/log wiring drifts—treat failures as gating.
 | 
			
		||||
 | 
			
		||||
## 6. Known Issues
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ When operating in offline-first mode, set `cacheDirectory` to a writable path (e
 | 
			
		||||
 | 
			
		||||
## Telemetry
 | 
			
		||||
 | 
			
		||||
`RuNkckiDiagnostics` emits the following metrics under meter `StellaOps.Concelier.Source.Ru.Nkcki`:
 | 
			
		||||
`RuNkckiDiagnostics` emits the following metrics under meter `StellaOps.Concelier.Connector.Ru.Nkcki`:
 | 
			
		||||
 | 
			
		||||
- `nkcki.listing.fetch.attempts` / `nkcki.listing.fetch.success` / `nkcki.listing.fetch.failures`
 | 
			
		||||
- `nkcki.listing.pages.visited` (histogram, `pages`)
 | 
			
		||||
@@ -45,4 +45,4 @@ For large migrations, seed caches with archived zip bundles, then run fetch/pars
 | 
			
		||||
- Bulletin fetches fall back to cached copies before surfacing an error.
 | 
			
		||||
- Mongo integration tests rely on bundled OpenSSL 1.1 libraries (`tools/openssl/linux-x64`) to keep `Mongo2Go` operational on modern distros.
 | 
			
		||||
 | 
			
		||||
Refer to `ru-nkcki` entries in `src/StellaOps.Concelier.Source.Ru.Nkcki/TASKS.md` for outstanding items.
 | 
			
		||||
Refer to `ru-nkcki` entries in `src/StellaOps.Concelier.Connector.Ru.Nkcki/TASKS.md` for outstanding items.
 | 
			
		||||
 
 | 
			
		||||
@@ -20,5 +20,5 @@ The OSV connector ingests advisories from OSV.dev across OSS ecosystems. This no
 | 
			
		||||
- Exporters already surface `canonicalMetricId`; no schema change is required, but ORAS/Trivy bundles should be spot-checked after deploying the connector update.
 | 
			
		||||
 | 
			
		||||
## 4. Runbook updates
 | 
			
		||||
- Fixture parity suites (`osv-ghsa.*`) now assert the fallback id and provenance notes. Regenerate via `dotnet test src/StellaOps.Concelier.Source.Osv.Tests/StellaOps.Concelier.Source.Osv.Tests.csproj`.
 | 
			
		||||
- Fixture parity suites (`osv-ghsa.*`) now assert the fallback id and provenance notes. Regenerate via `dotnet test src/StellaOps.Concelier.Connector.Osv.Tests/StellaOps.Concelier.Connector.Osv.Tests.csproj`.
 | 
			
		||||
- When investigating merge severity conflicts, include the fallback counter and confirm OSV advisories carry the expected `osv:severity/<level>` id before raising connector bugs.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user