diff --git a/README.md b/README.md index 08be7469..dcc4024d 100755 --- a/README.md +++ b/README.md @@ -29,6 +29,6 @@ for integration steps once available. ## Documentation - `docs/README.md` now consolidates the platform index and points to the updated high-level architecture. -- Module architecture dossiers live under `docs/ARCHITECTURE_*.md`; the most relevant here are `docs/ARCHITECTURE_FEEDSER.md` (service layout, merge engine, exports) and `docs/ARCHITECTURE_CLI.md` (command surface, AOT packaging, auth flows). Related services such as the Signer, Attestor, Authority, Scanner, UI, Vexer, Zastava, and DevOps pipeline each have their own dossier. +- Module architecture dossiers live under `docs/ARCHITECTURE_*.md`; the most relevant here are `docs/ARCHITECTURE_FEEDSER.md` (service layout, merge engine, exports) and `docs/ARCHITECTURE_CLI.md` (command surface, AOT packaging, auth flows). Related services such as the Signer, Attestor, Authority, Scanner, UI, Excititor, Zastava, and DevOps pipeline each have their own dossier. - Offline operation guidance moved to `docs/24_OFFLINE_KIT.md`, which details bundle composition, verification, and delta workflows. Feedser-specific connector operations stay in `docs/ops/feedser-certbund-operations.md` and companion runbooks under `docs/ops/`. diff --git a/SPRINTS.md b/SPRINTS.md index 9365279e..976be584 100644 --- a/SPRINTS.md +++ b/SPRINTS.md @@ -107,50 +107,50 @@ | Sprint 4 | Schema Parity & Freshness Alignment | src/StellaOps.Feedser.Exporter.TrivyDb/TASKS.md | DONE (2025-10-15) | Team Exporters – Trivy DB | FEEDEXPORT-TRIVY-04-001 | Propagate new advisory fields into Trivy DB package
Extend Bolt builder, metadata, and regression tests for the expanded schema.
2025-10-15: `dotnet test src/StellaOps.Feedser.Exporter.TrivyDb.Tests` confirmed canonical metric/CWE propagation. | | Sprint 4 | Schema Parity & Freshness Alignment | src/StellaOps.Feedser.Source.Ghsa/TASKS.md | DONE (2025-10-16) | Team Connector Regression Fixtures | FEEDCONN-GHSA-04-004 | Harden CVSS fallback so canonical metric ids persist when GitHub omits vectors; extend fixtures and document severity precedence hand-off to Merge. | | Sprint 4 | Schema Parity & Freshness Alignment | src/StellaOps.Feedser.Source.Osv/TASKS.md | DONE (2025-10-16) | Team Connector Expansion – GHSA/NVD/OSV | FEEDCONN-OSV-04-005 | Map OSV advisories lacking CVSS vectors to canonical metric ids/notes and document CWE provenance quirks; schedule parity fixture updates. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Core/TASKS.md | DONE (2025-10-15) | Team Vexer Core & Policy | VEXER-CORE-01-001 | Stand up canonical VEX claim/consensus records with deterministic serializers so Storage/Exports share a stable contract. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Core/TASKS.md | DONE (2025-10-15) | Team Vexer Core & Policy | VEXER-CORE-01-002 | Implement trust-weighted consensus resolver with baseline policy weights, justification gates, telemetry output, and majority/tie handling. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Core/TASKS.md | DONE (2025-10-15) | Team Vexer Core & Policy | VEXER-CORE-01-003 | Publish shared connector/exporter/attestation abstractions and deterministic query signature utilities for cache/attestation workflows. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Policy/TASKS.md | DONE (2025-10-15) | Team Vexer Policy | VEXER-POLICY-01-001 | Established policy options & snapshot provider covering baseline weights/overrides. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Policy/TASKS.md | DONE (2025-10-15) | Team Vexer Policy | VEXER-POLICY-01-002 | Policy evaluator now feeds consensus resolver with immutable snapshots. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Policy/TASKS.md | DONE (2025-10-16) | Team Vexer Policy | VEXER-POLICY-01-003 | Author policy diagnostics, CLI/WebService surfacing, and documentation updates. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Policy/TASKS.md | DONE (2025-10-16) | Team Vexer Policy | VEXER-POLICY-01-004 | Implement YAML/JSON schema validation and deterministic diagnostics for operator bundles. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Policy/TASKS.md | DONE (2025-10-16) | Team Vexer Policy | VEXER-POLICY-01-005 | Add policy change tracking, snapshot digests, and telemetry/logging hooks. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Storage.Mongo/TASKS.md | DONE (2025-10-15) | Team Vexer Storage | VEXER-STORAGE-01-001 | Mongo mapping registry plus raw/export entities and DI extensions in place. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Storage.Mongo/TASKS.md | DONE (2025-10-16) | Team Vexer Storage | VEXER-STORAGE-01-004 | Build provider/consensus/cache class maps and related collections. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Export/TASKS.md | DONE (2025-10-15) | Team Vexer Export | VEXER-EXPORT-01-001 | Export engine delivers cache lookup, manifest creation, and policy integration. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Export/TASKS.md | DONE (2025-10-17) | Team Vexer Export | VEXER-EXPORT-01-004 | Connect export engine to attestation client and persist Rekor metadata. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Attestation/TASKS.md | DONE (2025-10-16) | Team Vexer Attestation | VEXER-ATTEST-01-001 | Implement in-toto predicate + DSSE builder providing envelopes for export attestation. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.Connectors.Abstractions/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors | VEXER-CONN-ABS-01-001 | Deliver shared connector context/base classes so provider plug-ins can be activated via WebService/Worker. | -| Sprint 5 | Vexer Core Foundations | src/StellaOps.Vexer.WebService/TASKS.md | DONE (2025-10-17) | Team Vexer WebService | VEXER-WEB-01-001 | Scaffold minimal API host, DI, and `/vexer/status` endpoint integrating policy, storage, export, and attestation services. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Worker/TASKS.md | DONE (2025-10-17) | Team Vexer Worker | VEXER-WORKER-01-001 | Create Worker host with provider scheduling and logging to drive recurring pulls/reconciliation. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Formats.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Formats | VEXER-FMT-CSAF-01-001 | Implement CSAF normalizer foundation translating provider documents into `VexClaim` entries. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Formats.CycloneDX/TASKS.md | DONE (2025-10-17) | Team Vexer Formats | VEXER-FMT-CYCLONE-01-001 | Implement CycloneDX VEX normalizer capturing `analysis` state and component references. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Formats.OpenVEX/TASKS.md | DONE (2025-10-17) | Team Vexer Formats | VEXER-FMT-OPENVEX-01-001 | Implement OpenVEX normalizer to ingest attestations into canonical claims with provenance. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Red Hat | VEXER-CONN-RH-01-001 | Ship Red Hat CSAF provider metadata discovery enabling incremental pulls. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Red Hat | VEXER-CONN-RH-01-002 | Fetch CSAF windows with ETag handling, resume tokens, quarantine on schema errors, and persist raw docs. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Red Hat | VEXER-CONN-RH-01-003 | Populate provider trust overrides (cosign issuer, identity regex) and provenance hints for policy evaluation/logging. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Red Hat | VEXER-CONN-RH-01-004 | Persist resume cursors (last updated timestamp/document hashes) in storage and reload during fetch to avoid duplicates. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Red Hat | VEXER-CONN-RH-01-005 | Register connector in Worker/WebService DI, add scheduled jobs, and document CLI triggers for Red Hat CSAF pulls. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Red Hat | VEXER-CONN-RH-01-006 | Add CSAF normalization parity fixtures ensuring RHSA-specific metadata is preserved. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.Cisco.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Cisco | VEXER-CONN-CISCO-01-001 | Implement Cisco CSAF endpoint discovery/auth to unlock paginated pulls. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.Cisco.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Cisco | VEXER-CONN-CISCO-01-002 | Implement Cisco CSAF paginated fetch loop with dedupe and raw persistence support. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – SUSE | VEXER-CONN-SUSE-01-001 | Build Rancher VEX Hub discovery/subscription path with offline snapshot support. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.MSRC.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – MSRC | VEXER-CONN-MS-01-001 | Deliver AAD onboarding/token cache for MSRC CSAF ingestion. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.Oracle.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Oracle | VEXER-CONN-ORACLE-01-001 | Implement Oracle CSAF catalogue discovery with CPU calendar awareness. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/TASKS.md | DONE (2025-10-17) | Team Vexer Connectors – Ubuntu | VEXER-CONN-UBUNTU-01-001 | Implement Ubuntu CSAF discovery and channel selection for USN ingestion. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/TASKS.md | TODO | Team Vexer Connectors – OCI | VEXER-CONN-OCI-01-001 | Wire OCI discovery/auth to fetch OpenVEX attestations for configured images. | -| Sprint 6 | Vexer Ingest & Formats | src/StellaOps.Cli/TASKS.md | TODO | DevEx/CLI | VEXER-CLI-01-001 | Add `vexer` CLI verbs bridging to WebService with consistent auth and offline UX. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.Core/TASKS.md | TODO | Team Vexer Core & Policy | VEXER-CORE-02-001 | Context signal schema prep – extend consensus models with severity/KEV/EPSS fields and update canonical serializers. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.Policy/TASKS.md | TODO | Team Vexer Policy | VEXER-POLICY-02-001 | Scoring coefficients & weight ceilings – add α/β options, weight boosts, and validation guidance. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.Storage.Mongo/TASKS.md | TODO | Team Vexer Storage | VEXER-STORAGE-02-001 | Statement events & scoring signals – create immutable VEX statement store plus consensus extensions with indexes/migrations. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.WebService/TASKS.md | TODO | Team Vexer WebService | VEXER-WEB-01-004 | Resolve API & signed responses – expose `/vexer/resolve`, return signed consensus/score envelopes, document auth. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.Attestation/TASKS.md | DONE (2025-10-16) | Team Vexer Attestation | VEXER-ATTEST-01-002 | Rekor v2 client integration – ship transparency log client with retries and offline queue. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.Worker/TASKS.md | TODO | Team Vexer Worker | VEXER-WORKER-01-004 | TTL refresh & stability damper – schedule re-resolve loops and guard against status flapping. | -| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Vexer.Export/TASKS.md | TODO | Team Vexer Export | VEXER-EXPORT-01-005 | Score & resolve envelope surfaces – include signed consensus/score artifacts in exports. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Core/TASKS.md | DONE (2025-10-15) | Team Excititor Core & Policy | EXCITITOR-CORE-01-001 | Stand up canonical VEX claim/consensus records with deterministic serializers so Storage/Exports share a stable contract. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Core/TASKS.md | DONE (2025-10-15) | Team Excititor Core & Policy | EXCITITOR-CORE-01-002 | Implement trust-weighted consensus resolver with baseline policy weights, justification gates, telemetry output, and majority/tie handling. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Core/TASKS.md | DONE (2025-10-15) | Team Excititor Core & Policy | EXCITITOR-CORE-01-003 | Publish shared connector/exporter/attestation abstractions and deterministic query signature utilities for cache/attestation workflows. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Policy/TASKS.md | DONE (2025-10-15) | Team Excititor Policy | EXCITITOR-POLICY-01-001 | Established policy options & snapshot provider covering baseline weights/overrides. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Policy/TASKS.md | DONE (2025-10-15) | Team Excititor Policy | EXCITITOR-POLICY-01-002 | Policy evaluator now feeds consensus resolver with immutable snapshots. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Policy/TASKS.md | DONE (2025-10-16) | Team Excititor Policy | EXCITITOR-POLICY-01-003 | Author policy diagnostics, CLI/WebService surfacing, and documentation updates. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Policy/TASKS.md | DONE (2025-10-16) | Team Excititor Policy | EXCITITOR-POLICY-01-004 | Implement YAML/JSON schema validation and deterministic diagnostics for operator bundles. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Policy/TASKS.md | DONE (2025-10-16) | Team Excititor Policy | EXCITITOR-POLICY-01-005 | Add policy change tracking, snapshot digests, and telemetry/logging hooks. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Storage.Mongo/TASKS.md | DONE (2025-10-15) | Team Excititor Storage | EXCITITOR-STORAGE-01-001 | Mongo mapping registry plus raw/export entities and DI extensions in place. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Storage.Mongo/TASKS.md | DONE (2025-10-16) | Team Excititor Storage | EXCITITOR-STORAGE-01-004 | Build provider/consensus/cache class maps and related collections. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Export/TASKS.md | DONE (2025-10-15) | Team Excititor Export | EXCITITOR-EXPORT-01-001 | Export engine delivers cache lookup, manifest creation, and policy integration. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Export/TASKS.md | DONE (2025-10-17) | Team Excititor Export | EXCITITOR-EXPORT-01-004 | Connect export engine to attestation client and persist Rekor metadata. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Attestation/TASKS.md | DONE (2025-10-16) | Team Excititor Attestation | EXCITITOR-ATTEST-01-001 | Implement in-toto predicate + DSSE builder providing envelopes for export attestation. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.Connectors.Abstractions/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors | EXCITITOR-CONN-ABS-01-001 | Deliver shared connector context/base classes so provider plug-ins can be activated via WebService/Worker. | +| Sprint 5 | Excititor Core Foundations | src/StellaOps.Excititor.WebService/TASKS.md | DONE (2025-10-17) | Team Excititor WebService | EXCITITOR-WEB-01-001 | Scaffold minimal API host, DI, and `/excititor/status` endpoint integrating policy, storage, export, and attestation services. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Worker/TASKS.md | DONE (2025-10-17) | Team Excititor Worker | EXCITITOR-WORKER-01-001 | Create Worker host with provider scheduling and logging to drive recurring pulls/reconciliation. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Formats.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Formats | EXCITITOR-FMT-CSAF-01-001 | Implement CSAF normalizer foundation translating provider documents into `VexClaim` entries. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Formats.CycloneDX/TASKS.md | DONE (2025-10-17) | Team Excititor Formats | EXCITITOR-FMT-CYCLONE-01-001 | Implement CycloneDX VEX normalizer capturing `analysis` state and component references. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Formats.OpenVEX/TASKS.md | DONE (2025-10-17) | Team Excititor Formats | EXCITITOR-FMT-OPENVEX-01-001 | Implement OpenVEX normalizer to ingest attestations into canonical claims with provenance. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Red Hat | EXCITITOR-CONN-RH-01-001 | Ship Red Hat CSAF provider metadata discovery enabling incremental pulls. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Red Hat | EXCITITOR-CONN-RH-01-002 | Fetch CSAF windows with ETag handling, resume tokens, quarantine on schema errors, and persist raw docs. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Red Hat | EXCITITOR-CONN-RH-01-003 | Populate provider trust overrides (cosign issuer, identity regex) and provenance hints for policy evaluation/logging. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Red Hat | EXCITITOR-CONN-RH-01-004 | Persist resume cursors (last updated timestamp/document hashes) in storage and reload during fetch to avoid duplicates. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Red Hat | EXCITITOR-CONN-RH-01-005 | Register connector in Worker/WebService DI, add scheduled jobs, and document CLI triggers for Red Hat CSAF pulls. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Red Hat | EXCITITOR-CONN-RH-01-006 | Add CSAF normalization parity fixtures ensuring RHSA-specific metadata is preserved. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.Cisco.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Cisco | EXCITITOR-CONN-CISCO-01-001 | Implement Cisco CSAF endpoint discovery/auth to unlock paginated pulls. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.Cisco.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Cisco | EXCITITOR-CONN-CISCO-01-002 | Implement Cisco CSAF paginated fetch loop with dedupe and raw persistence support. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – SUSE | EXCITITOR-CONN-SUSE-01-001 | Build Rancher VEX Hub discovery/subscription path with offline snapshot support. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.MSRC.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – MSRC | EXCITITOR-CONN-MS-01-001 | Deliver AAD onboarding/token cache for MSRC CSAF ingestion. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.Oracle.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Oracle | EXCITITOR-CONN-ORACLE-01-001 | Implement Oracle CSAF catalogue discovery with CPU calendar awareness. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/TASKS.md | DONE (2025-10-17) | Team Excititor Connectors – Ubuntu | EXCITITOR-CONN-UBUNTU-01-001 | Implement Ubuntu CSAF discovery and channel selection for USN ingestion. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/TASKS.md | TODO | Team Excititor Connectors – OCI | EXCITITOR-CONN-OCI-01-001 | Wire OCI discovery/auth to fetch OpenVEX attestations for configured images. | +| Sprint 6 | Excititor Ingest & Formats | src/StellaOps.Cli/TASKS.md | TODO | DevEx/CLI | EXCITITOR-CLI-01-001 | Add `excititor` CLI verbs bridging to WebService with consistent auth and offline UX. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.Core/TASKS.md | TODO | Team Excititor Core & Policy | EXCITITOR-CORE-02-001 | Context signal schema prep – extend consensus models with severity/KEV/EPSS fields and update canonical serializers. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.Policy/TASKS.md | TODO | Team Excititor Policy | EXCITITOR-POLICY-02-001 | Scoring coefficients & weight ceilings – add α/β options, weight boosts, and validation guidance. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.Storage.Mongo/TASKS.md | TODO | Team Excititor Storage | EXCITITOR-STORAGE-02-001 | Statement events & scoring signals – create immutable VEX statement store plus consensus extensions with indexes/migrations. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.WebService/TASKS.md | TODO | Team Excititor WebService | EXCITITOR-WEB-01-004 | Resolve API & signed responses – expose `/excititor/resolve`, return signed consensus/score envelopes, document auth. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.Attestation/TASKS.md | DONE (2025-10-16) | Team Excititor Attestation | EXCITITOR-ATTEST-01-002 | Rekor v2 client integration – ship transparency log client with retries and offline queue. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.Worker/TASKS.md | TODO | Team Excititor Worker | EXCITITOR-WORKER-01-004 | TTL refresh & stability damper – schedule re-resolve loops and guard against status flapping. | +| Sprint 7 | Contextual Truth Foundations | src/StellaOps.Excititor.Export/TASKS.md | TODO | Team Excititor Export | EXCITITOR-EXPORT-01-005 | Score & resolve envelope surfaces – include signed consensus/score artifacts in exports. | | Sprint 7 | Contextual Truth Foundations | src/StellaOps.Feedser.Core/TASKS.md | TODO | Team Core Engine & Storage Analytics | FEEDCORE-ENGINE-07-001 | Advisory event log & asOf queries – surface immutable statements and replay capability. | | Sprint 7 | Contextual Truth Foundations | src/StellaOps.Feedser.Core/TASKS.md | TODO | Team Core Engine & Data Science | FEEDCORE-ENGINE-07-002 | Noise prior computation service – learn false-positive priors and expose deterministic summaries. | | Sprint 7 | Contextual Truth Foundations | src/StellaOps.Feedser.Storage.Mongo/TASKS.md | TODO | Team Normalization & Storage Backbone | FEEDSTORAGE-DATA-07-001 | Advisory statement & conflict collections – provision Mongo schema/indexes for event-sourced merge. | | Sprint 7 | Contextual Truth Foundations | src/StellaOps.Feedser.Merge/TASKS.md | TODO | BE-Merge | FEEDMERGE-ENGINE-07-001 | Conflict sets & explainers – persist conflict materialization and replay hashes for merge decisions. | | Sprint 8 | Mongo strengthening | src/StellaOps.Feedser.Storage.Mongo/TASKS.md | TODO | Team Normalization & Storage Backbone | FEEDSTORAGE-MONGO-08-001 | Causal-consistent Feedser storage sessions
Ensure `AddMongoStorage` registers a scoped session facilitator (causal consistency + majority concerns), update repositories to accept optional session handles, and add integration coverage proving read-your-write and monotonic reads across a replica set/election scenario. | | Sprint 8 | Mongo strengthening | src/StellaOps.Authority/TASKS.md | TODO | Authority Core & Storage Guild | AUTHSTORAGE-MONGO-08-001 | Harden Authority Mongo usage
Introduce scoped MongoDB sessions with `writeConcern`/`readConcern` majority defaults, flow the session through stores used in mutations + follow-up reads, and document middleware pattern for web/API & GraphQL layers. | -| Sprint 8 | Mongo strengthening | src/StellaOps.Vexer.Storage.Mongo/TASKS.md | TODO | Team Vexer Storage | VEXER-STORAGE-MONGO-08-001 | Causal consistency for Vexer repositories
Register Mongo options with majority defaults, push session-aware overloads through raw/export/consensus/cache stores, and extend migration/tests to validate causal reads after writes (including GridFS-backed content) under replica-set failover. | +| Sprint 8 | Mongo strengthening | src/StellaOps.Excititor.Storage.Mongo/TASKS.md | TODO | Team Excititor Storage | EXCITITOR-STORAGE-MONGO-08-001 | Causal consistency for Excititor repositories
Register Mongo options with majority defaults, push session-aware overloads through raw/export/consensus/cache stores, and extend migration/tests to validate causal reads after writes (including GridFS-backed content) under replica-set failover. | diff --git a/SPRINTS_VEXER.md b/SPRINTS_EXCITITOR.md similarity index 100% rename from SPRINTS_VEXER.md rename to SPRINTS_EXCITITOR.md diff --git a/docs/07_HIGH_LEVEL_ARCHITECTURE.md b/docs/07_HIGH_LEVEL_ARCHITECTURE.md index e27f49ee..32e743e1 100755 --- a/docs/07_HIGH_LEVEL_ARCHITECTURE.md +++ b/docs/07_HIGH_LEVEL_ARCHITECTURE.md @@ -37,7 +37,7 @@ It **absorbs** all content from `components.md` so you have a single, authoritat | **Scanner.Sbomer.BuildXPlugin** | `stellaops/sbom-indexer` | BuildKit **generator** for build‑time SBOMs as OCI **referrers**. | CI‑side; ephemeral. | | **Scanner.Sbomer.DockerImage** | `stellaops/scanner-cli` | CLI‑orchestrated scanner container for post‑build scans. | Local/CI; ephemeral. | | **Feedser.WebService** | `stellaops/feedser-web` | Vulnerability ingest/normalize/merge/export (JSON + Trivy DB). | HA via Mongo locks. | -| **Vexer.WebService** | `stellaops/vexer-web` | VEX ingest/normalize/consensus; conflict retention; exports. | HA via Mongo locks. | +| **Excititor.WebService** | `stellaops/excititor-web` | VEX ingest/normalize/consensus; conflict retention; exports. | HA via Mongo locks. | | **Policy Engine** | (in `scanner-web`) | YAML DSL evaluator (waivers, vendor preferences, KEV/EPSS, license, usage‑gating); produces **policy digest**. | In‑process; cache per digest. | | **Signer** | `stellaops/signer` | **Hard gate:** validates entitlement + release integrity; mints signing cert (Fulcio keyless) or uses KMS; signs DSSE. | Stateless; HPA by QPS. | | **Attestor** | `stellaops/attestor` | Posts DSSE bundles to **Rekor v2**; verification endpoints. | Stateless; HPA by QPS. | @@ -72,7 +72,7 @@ flowchart LR SW[Scanner.WebService] WK[Scanner.Worker xN] FEED[Feedser] - VEX[Vexer] + VEX[Excititor] POL[Policy Engine (in Scanner.Web)] SGN[Signer\n(entitlement + signing)] ATT[Attestor\n(Rekor v2 submit/verify)] @@ -182,7 +182,7 @@ LS --> IA: PoE (mTLS client cert or JWT with cnf=K_inst), CRL/OCSP/introspect * Ingests vendor, distro, OSS feeds; normalizes & merges; persists canonical advisories in Mongo; exports **deterministic JSON** and **Trivy DB**. * Offline kit bundles for air‑gapped sites. -### 4.2 Vexer (VEX) +### 4.2 Excititor (VEX) * Ingests **OpenVEX / CSAF VEX / CycloneDX VEX**; normalizes claims; retains conflicts; computes **consensus** with provider trust weights and justification gates. @@ -195,7 +195,7 @@ LS --> IA: PoE (mTLS client cert or JWT with cnf=K_inst), CRL/OCSP/introspect ### 4.4 PASS/FAIL flow 1. SBOM (Inventory / Usage) → join with **Feedser** advisories. -2. Apply **Vexer** consensus (statuses & justifications). +2. Apply **Excititor** consensus (statuses & justifications). 3. Apply **Policy**; compute PASS/FAIL with waiver TTLs. 4. Sign the **final report** (DSSE via **Signer**) and log to **Rekor v2** via **Attestor**. @@ -350,8 +350,8 @@ services: deploy: { replicas: 4 } depends_on: [scanner-web] feedser: { image: stellaops/feedser-web, depends_on: [mongo] } - vexer: { image: stellaops/vexer-web, depends_on: [mongo] } - ui: { image: stellaops/ui, depends_on: [scanner-web, feedser, vexer] } + excititor: { image: stellaops/excititor-web, depends_on: [mongo] } + ui: { image: stellaops/ui, depends_on: [scanner-web, feedser, excititor] } ``` * **Backups:** Mongo dumps; MinIO versioned buckets & replication; Rekor v2 DB snapshots; JWKS/Fulcio/KMS key rotation. @@ -373,7 +373,7 @@ services: * M2: Buildx generator certified flows; cross‑registry trust policies. * M3: Patch‑Presence plugin (signature‑based backport detection), opt‑in. * M3: Zastava Admission control GA with policy presets and dry‑run→enforce stages. -* Continuous: Policy UX (waiver TTLs, vendor rules), Vexer connectors expansion. +* Continuous: Policy UX (waiver TTLs, vendor rules), Excititor connectors expansion. --- diff --git a/docs/ARCHITECTURE_ATTESTOR.md b/docs/ARCHITECTURE_ATTESTOR.md index f2057ede..5d9de7e8 100644 --- a/docs/ARCHITECTURE_ATTESTOR.md +++ b/docs/ARCHITECTURE_ATTESTOR.md @@ -1,6 +1,6 @@ # component_architecture_attestor.md — **Stella Ops Attestor** (2025Q4) -> **Scope.** Implementation‑ready architecture for the **Attestor**: the service that **submits** DSSE envelopes to **Rekor v2**, retrieves/validates inclusion proofs, caches results, and exposes verification APIs. It accepts DSSE **only** from the **Signer** over mTLS, enforces chain‑of‑trust to Stella Ops roots, and returns `{uuid, index, proof, logURL}` to calling services (Scanner.WebService for SBOMs; backend for final reports; Vexer exports when configured). +> **Scope.** Implementation‑ready architecture for the **Attestor**: the service that **submits** DSSE envelopes to **Rekor v2**, retrieves/validates inclusion proofs, caches results, and exposes verification APIs. It accepts DSSE **only** from the **Signer** over mTLS, enforces chain‑of‑trust to Stella Ops roots, and returns `{uuid, index, proof, logURL}` to calling services (Scanner.WebService for SBOMs; backend for final reports; Excititor exports when configured). --- diff --git a/docs/ARCHITECTURE_AUTHORITY.md b/docs/ARCHITECTURE_AUTHORITY.md index 956f52c6..d974d50b 100644 --- a/docs/ARCHITECTURE_AUTHORITY.md +++ b/docs/ARCHITECTURE_AUTHORITY.md @@ -6,7 +6,7 @@ ## 0) Mission & boundaries -**Mission.** Provide **fast, local, verifiable** authentication for Stella Ops microservices and tools by minting **very short‑lived** OAuth2/OIDC tokens that are **sender‑constrained** (DPoP or mTLS‑bound). Support RBAC scopes, multi‑tenant claims, and deterministic validation for APIs (Scanner, Signer, Attestor, Vexer, Feedser, UI, CLI, Zastava). +**Mission.** Provide **fast, local, verifiable** authentication for Stella Ops microservices and tools by minting **very short‑lived** OAuth2/OIDC tokens that are **sender‑constrained** (DPoP or mTLS‑bound). Support RBAC scopes, multi‑tenant claims, and deterministic validation for APIs (Scanner, Signer, Attestor, Excititor, Feedser, UI, CLI, Zastava). **Boundaries.** @@ -43,7 +43,7 @@ ``` iss = https://authority. sub = -aud = +aud = exp = (<= 300 s from iat) iat = nbf = iat - 30 @@ -140,7 +140,7 @@ plan? = // optional hint for UIs; not used for e ### 4.1 Audiences * `signer` — only the **Signer** service should accept tokens with `aud=signer`. -* `attestor`, `scanner`, `feedser`, `vexer`, `ui`, `zastava` similarly. +* `attestor`, `scanner`, `feedser`, `excititor`, `ui`, `zastava` similarly. Services **must** verify `aud` and **sender constraint** (DPoP/mTLS) per their policy. @@ -153,7 +153,7 @@ Services **must** verify `aud` and **sender constraint** (DPoP/mTLS) per their p | `scanner.scan` | Scanner.WebService | Submit scan jobs | | `scanner.export` | Scanner.WebService | Export SBOMs | | `scanner.read` | Scanner.WebService | Read catalog/SBOMs | -| `vex.read` / `vex.admin` | Vexer | Query/operate | +| `vex.read` / `vex.admin` | Excititor | Query/operate | | `feedser.read` / `feedser.export` | Feedser | Query/exports | | `ui.read` / `ui.admin` | UI | View/admin | | `zastava.emit` / `zastava.enforce` | Scanner/Zastava | Runtime events / admission | diff --git a/docs/ARCHITECTURE_CLI.md b/docs/ARCHITECTURE_CLI.md index e0ac962a..fcd9f5ca 100644 --- a/docs/ARCHITECTURE_CLI.md +++ b/docs/ARCHITECTURE_CLI.md @@ -1,6 +1,6 @@ # component_architecture_cli.md — **Stella Ops CLI** (2025Q4) -> **Scope.** Implementation‑ready architecture for **Stella Ops CLI**: command surface, process model, auth (Authority/DPoP), integration with Scanner/Vexer/Feedser/Signer/Attestor, Buildx plug‑in management, offline kit behavior, packaging, observability, security posture, and CI ergonomics. +> **Scope.** Implementation‑ready architecture for **Stella Ops CLI**: command surface, process model, auth (Authority/DPoP), integration with Scanner/Excititor/Feedser/Signer/Attestor, Buildx plug‑in management, offline kit behavior, packaging, observability, security posture, and CI ergonomics. --- @@ -18,7 +18,7 @@ * CLI **never** signs; it only calls **Signer**/**Attestor** via backend APIs when needed (e.g., `report --attest`). * CLI **does not** store long‑lived credentials beyond OS keychain; tokens are **short** (Authority OpToks). -* Heavy work (scanning, merging, policy) is executed **server‑side** (Scanner/Vexer/Feedser). +* Heavy work (scanning, merging, policy) is executed **server‑side** (Scanner/Excititor/Feedser). --- @@ -77,7 +77,7 @@ src/ * `policy get/set/apply` — fetch active policy, apply staged policy, compute digest. * `feedser export` — trigger/export canonical JSON or Trivy DB (admin). -* `vexer export` — trigger/export consensus/raw claims (admin). +* `excititor export` — trigger/export consensus/raw claims (admin). ### 2.5 Verification @@ -91,8 +91,8 @@ src/ ### 2.7 Offline kit -* `offline kit pull` — fetch latest **Feedser JSON + Trivy DB + Vexer exports** as a tarball from a mirror. -* `offline kit import ` — upload the kit to on‑prem services (Feedser/Vexer). +* `offline kit pull` — fetch latest **Feedser JSON + Trivy DB + Excititor exports** as a tarball from a mirror. +* `offline kit import ` — upload the kit to on‑prem services (Feedser/Excititor). * `offline kit status` — list current seed versions. ### 2.8 Utilities @@ -122,7 +122,7 @@ src/ * `scanner` for scan/export/report/diff * `signer` (indirect; usually backend calls Signer) * `attestor` for verify - * `feedser`/`vexer` for admin verbs + * `feedser`/`excititor` for admin verbs CLI rejects verbs if required scopes are missing. @@ -168,7 +168,7 @@ cli: scanner: "https://scanner-web.internal" attestor: "https://attestor.internal" feedser: "https://feedser-web.internal" - vexer: "https://vexer-web.internal" + excititor: "https://excititor-web.internal" auth: audienceDefault: "scanner" deviceCode: true @@ -263,7 +263,7 @@ Exit code: 2 ## 13) Admin & advanced flags -* `--authority`, `--scanner`, `--attestor`, `--feedser`, `--vexer` override config URLs. +* `--authority`, `--scanner`, `--attestor`, `--feedser`, `--excititor` override config URLs. * `--no-color`, `--quiet`, `--json`. * `--timeout`, `--retries`, `--retry-backoff-ms`. * `--ca-bundle`, `--insecure` (dev only; prints warning). diff --git a/docs/ARCHITECTURE_DEVOPS.md b/docs/ARCHITECTURE_DEVOPS.md index 901a6f6c..356abf31 100644 --- a/docs/ARCHITECTURE_DEVOPS.md +++ b/docs/ARCHITECTURE_DEVOPS.md @@ -42,7 +42,7 @@ Semantic core + calendar tag: A release is a **bundle** of image digests + charts + manifests. All services in a bundle are **wire‑compatible**. Mixed minor versions are allowed within a bounded skew: * **Web UI ↔ backend**: `±1 minor`. -* **Scanner ↔ Policy/Vexer/Feedser**: `±1 minor`. +* **Scanner ↔ Policy/Excititor/Feedser**: `±1 minor`. * **Authority/Signer/Attestor triangle**: **must** be same minor (crypto and DPoP/mTLS binding rules). At startup, services **self‑advertise** their semver & channel; the UI surfaces **mismatch warnings**. @@ -90,7 +90,7 @@ At startup, services **self‑advertise** their semver & channel; the UI surface **Gating policy**: -* **Core images** (Authority, Scanner, Feedser, Vexer, Attestor, UI): public **read**. +* **Core images** (Authority, Scanner, Feedser, Excititor, Attestor, UI): public **read**. * **Enterprise add‑ons** (if any) and **pre‑release**: private repos via OAuth2 token service. > Monetization lever is **signing** (PoE gate), not image pulls, so the core remains simple to consume. @@ -115,7 +115,7 @@ At startup, services **self‑advertise** their semver & channel; the UI surface /attest/ DSSE bundles + Rekor proofs /charts/ Helm charts + values templates /compose/ docker-compose.yml + .env template - /plugins/ Feedser/Vexer connectors (restart-time) + /plugins/ Feedser/Excititor connectors (restart-time) /policy/ example policies /manifest/ release.yaml (see §6.1) ``` @@ -170,7 +170,7 @@ helm install stella stellaops/platform \ --set scanner.minio.endpoint=http://minio.stella.local:9000 \ --set scanner.mongo.uri=mongodb://mongo/scanner \ --set feedser.mongo.uri=mongodb://mongo/feedser \ - --set vexer.mongo.uri=mongodb://mongo/vexer + --set excititor.mongo.uri=mongodb://mongo/excititor ``` * Post‑install job registers **Authority clients** (Scanner, Signer, Attestor, UI) and prints **bootstrap** URLs and client credentials (sealed secrets). @@ -185,7 +185,7 @@ helm install stella stellaops/platform \ 1. Authority (stateless, dual‑key rotation ready) 2. Signer/Attestor (same minor) 3. Scanner WebService & Workers - 4. Feedser, then Vexer (schema migrations are expand/contract) + 4. Feedser, then Excititor (schema migrations are expand/contract) 5. UI last * **DB migrations** are **expand/contract**: @@ -266,7 +266,7 @@ s3://stellaops/ feedser/ json//... trivy//... - vexer/ + excititor/ exports//... attestor/ dsse/.json @@ -289,14 +289,14 @@ s3://stellaops/ ### 7.4 Mongo retention * **Scanner**: `runtime.events` use TTL (e.g., 30–90 days); **catalog** permanent. -* **Feedser/Vexer**: raw docs keep **last N windows**; canonical stores permanent. +* **Feedser/Excititor**: raw docs keep **last N windows**; canonical stores permanent. * **Attestor**: `entries` permanent; `dedupe` TTL 24–48h. --- ## 8) Observability & SLOs (operations) -* **Uptime SLO**: 99.9% for Signer/Authority/Attestor; 99.5% for Scanner WebService; Vexer/Feedser 99.0%. +* **Uptime SLO**: 99.9% for Signer/Authority/Attestor; 99.5% for Scanner WebService; Excititor/Feedser 99.0%. * **Error budgets**: tracked per month; dashboards show burn rates. * **Golden signals**: @@ -410,8 +410,8 @@ services: deploy: { replicas: 4 } feedser: image: registry.stella-ops.org/stellaops/feedser@sha256:... - vexer: - image: registry.stella-ops.org/stellaops/vexer@sha256:... + excititor: + image: registry.stella-ops.org/stellaops/excititor@sha256:... web-ui: image: registry.stella-ops.org/stellaops/web-ui@sha256:... mongo: @@ -446,7 +446,7 @@ services: * `signer.requests_total{result="success"}/minute` > 0 (when scans occur). * `attestor.submit_latency_seconds{quantile=0.95}` < 0.3. * `scanner.scan_latency_seconds{quantile=0.95}` < target per image size. -* `feedser.export.duration_seconds` stable; `vexer.consensus.conflicts_total` not exploding after policy changes. +* `feedser.export.duration_seconds` stable; `excititor.consensus.conflicts_total` not exploding after policy changes. * MinIO `s3_requests_errors_total` near zero; Mongo `opcounters` hit expected baseline. ### Appendix B — Upgrade safety checklist diff --git a/docs/ARCHITECTURE_VEXER.md b/docs/ARCHITECTURE_EXCITITOR.md similarity index 93% rename from docs/ARCHITECTURE_VEXER.md rename to docs/ARCHITECTURE_EXCITITOR.md index 1f6920f9..18888d19 100644 --- a/docs/ARCHITECTURE_VEXER.md +++ b/docs/ARCHITECTURE_EXCITITOR.md @@ -1,6 +1,6 @@ -# component_architecture_vexer.md — **Stella Ops Vexer** (2025Q4) +# component_architecture_excititor.md — **Stella Ops Excititor** (2025Q4) -> **Scope.** This document specifies the **Vexer** service: its purpose, trust model, data structures, APIs, plug‑in contracts, storage schema, normalization/consensus algorithms, performance budgets, testing matrix, and how it integrates with Scanner, Policy, Feedser, and the attestation chain. It is implementation‑ready. +> **Scope.** This document specifies the **Excititor** service: its purpose, trust model, data structures, APIs, plug‑in contracts, storage schema, normalization/consensus algorithms, performance budgets, testing matrix, and how it integrates with Scanner, Policy, Feedser, and the attestation chain. It is implementation‑ready. --- @@ -10,9 +10,9 @@ **Boundaries.** -* Vexer **does not** decide PASS/FAIL. It supplies **evidence** (statuses + justifications + provenance weights). -* Vexer preserves **conflicting claims** unchanged; consensus encodes how we would pick, but the raw set is always exportable. -* VEX consumption is **backend‑only**: Scanner never applies VEX. The backend’s **Policy Engine** asks Vexer for status evidence and then decides what to show. +* Excititor **does not** decide PASS/FAIL. It supplies **evidence** (statuses + justifications + provenance weights). +* Excititor preserves **conflicting claims** unchanged; consensus encodes how we would pick, but the raw set is always exportable. +* VEX consumption is **backend‑only**: Scanner never applies VEX. The backend’s **Policy Engine** asks Excititor for status evidence and then decides what to show. --- @@ -52,7 +52,7 @@ VexClaim * `rollupStatus` (after policy weights/justification gates), * `sources[]` (winning + losing claims with weights & reasons), - * `policyRevisionId` (identifier of the Vexer policy used), + * `policyRevisionId` (identifier of the Excititor policy used), * `consensusDigest` (stable SHA‑256 over canonical JSON). * **Raw claims** export for auditing (unchanged, with provenance). * **Provider snapshots** (per source, last N days) for operator debugging. @@ -76,13 +76,13 @@ All exports are **deterministic**, and (optionally) **attested** via DSSE and lo * **Fallback:** `oci:/@` for image‑level VEX. * **Special cases:** kernel modules, firmware, platforms → provider‑specific mapping helpers (connector captures provider’s product taxonomy → canonical `productKey`). -> Vexer does not invent identities. If a provider cannot be mapped to purl/CPE/NVRA deterministically, we keep the native **product string** and mark the claim as **non‑joinable**; the backend will ignore it unless a policy explicitly whitelists that provider mapping. +> Excititor does not invent identities. If a provider cannot be mapped to purl/CPE/NVRA deterministically, we keep the native **product string** and mark the claim as **non‑joinable**; the backend will ignore it unless a policy explicitly whitelists that provider mapping. --- ## 3) Storage schema (MongoDB) -Database: `vexer` +Database: `excititor` ### 3.1 Collections @@ -246,7 +246,7 @@ public interface IVexConnector ### 6.1 Inputs * Set **S** of `VexClaim` for the key. -* **Vexer policy snapshot**: +* **Excititor policy snapshot**: * **weights** per provider tier and per provider overrides. * **justification gates** (e.g., require justification for `not_affected` to be acceptable). @@ -327,8 +327,8 @@ GET /providers/{id}/status → last fetch, doc counts, signature stats ## 9) Configuration (YAML) ```yaml -vexer: - mongo: { uri: "mongodb://mongo/vexer" } +excititor: + mongo: { uri: "mongodb://mongo/excititor" } s3: endpoint: http://minio:9000 bucket: stellaops diff --git a/docs/ARCHITECTURE_FEEDSER.md b/docs/ARCHITECTURE_FEEDSER.md index d394d635..da3ba502 100644 --- a/docs/ARCHITECTURE_FEEDSER.md +++ b/docs/ARCHITECTURE_FEEDSER.md @@ -1,6 +1,6 @@ # component_architecture_feedser.md — **Stella Ops Feedser** (2025Q4) -> **Scope.** Implementation‑ready architecture for **Feedser**: the vulnerability ingest/normalize/merge/export subsystem that produces deterministic advisory data for the Scanner + Policy + Vexer pipeline. Covers domain model, connectors, merge rules, storage schema, exports, APIs, performance, security, and test matrices. +> **Scope.** Implementation‑ready architecture for **Feedser**: the vulnerability ingest/normalize/merge/export subsystem that produces deterministic advisory data for the Scanner + Policy + Excititor pipeline. Covers domain model, connectors, merge rules, storage schema, exports, APIs, performance, security, and test matrices. --- diff --git a/docs/ARCHITECTURE_SCANNER.md b/docs/ARCHITECTURE_SCANNER.md index abee0e0e..555c11d3 100644 --- a/docs/ARCHITECTURE_SCANNER.md +++ b/docs/ARCHITECTURE_SCANNER.md @@ -1,6 +1,6 @@ # component_architecture_scanner.md — **Stella Ops Scanner** (2025Q4) -> **Scope.** Implementation‑ready architecture for the **Scanner** subsystem: WebService, Workers, analyzers, SBOM assembly (inventory & usage), per‑layer caching, three‑way diffs, artifact catalog (MinIO+Mongo), attestation hand‑off, and scale/security posture. This document is the contract between the scanning plane and everything else (Policy, Vexer, Feedser, UI, CLI). +> **Scope.** Implementation‑ready architecture for the **Scanner** subsystem: WebService, Workers, analyzers, SBOM assembly (inventory & usage), per‑layer caching, three‑way diffs, artifact catalog (MinIO+Mongo), attestation hand‑off, and scale/security posture. This document is the contract between the scanning plane and everything else (Policy, Excititor, Feedser, UI, CLI). --- @@ -10,7 +10,7 @@ **Boundaries.** -* Scanner **does not** produce PASS/FAIL. The backend (Policy + Vexer + Feedser) decides presentation and verdicts. +* Scanner **does not** produce PASS/FAIL. The backend (Policy + Excititor + Feedser) decides presentation and verdicts. * Scanner **does not** keep third‑party SBOM warehouses. It may **bind** to existing attestations for exact hashes. * Core analyzers are **deterministic** (no fuzzy identity). Optional heuristic plug‑ins (e.g., patch‑presence) run under explicit flags and never contaminate the core SBOM. diff --git a/docs/ARCHITECTURE_SIGNER.md b/docs/ARCHITECTURE_SIGNER.md index fda371ea..b116f879 100644 --- a/docs/ARCHITECTURE_SIGNER.md +++ b/docs/ARCHITECTURE_SIGNER.md @@ -223,7 +223,7 @@ Supported **predicate types** (extensible): * `https://stella-ops.org/attestations/sbom/1` (SBOM emissions) * `https://stella-ops.org/attestations/report/1` (final PASS/FAIL reports) -* `https://stella-ops.org/attestations/vex-export/1` (Vexer exports; optional) +* `https://stella-ops.org/attestations/vex-export/1` (Excititor exports; optional) **Validation**: diff --git a/docs/ARCHITECTURE_UI.md b/docs/ARCHITECTURE_UI.md index 19d5d156..1e00d13b 100644 --- a/docs/ARCHITECTURE_UI.md +++ b/docs/ARCHITECTURE_UI.md @@ -1,6 +1,6 @@ # component_architecture_web_ui.md — **Stella Ops Web UI** (2025Q4) -> **Scope.** Implementation‑ready architecture for the **Angular SPA** that operators and developers use to drive Stella Ops. This document defines UX surfaces, module boundaries, data flows, auth, RBAC, real‑time updates, performance targets, i18n/a11y, security headers, testing and deployment. The UI is a *consumer* of backend APIs (Scanner, Policy, Vexer, Feedser, Attestor, Authority) and never performs scanning, merging, or signing on its own. +> **Scope.** Implementation‑ready architecture for the **Angular SPA** that operators and developers use to drive Stella Ops. This document defines UX surfaces, module boundaries, data flows, auth, RBAC, real‑time updates, performance targets, i18n/a11y, security headers, testing and deployment. The UI is a *consumer* of backend APIs (Scanner, Policy, Excititor, Feedser, Attestor, Authority) and never performs scanning, merging, or signing on its own. --- @@ -10,7 +10,7 @@ * Scans (status, SBOMs, diffs, EntryTrace, attestation). * Policy management (rules, exemptions, VEX consumption view). -* Vulnerability intel (Feedser status), VEX consensus exploration (Vexer). +* Vulnerability intel (Feedser status), VEX consensus exploration (Excititor). * Runtime posture (Zastava observer + admission). * Admin operations (tenants, tokens, quotas, licensing posture). @@ -86,7 +86,7 @@ Each feature folder builds as a **standalone route** (lazy loaded). All HTTP sha * **VEX inclusion controls**: weight sliders (visualization only), provider allow/deny toggles. * **Preview**: select SBOM (or image digest) → show verdict under staged policy. -### 3.5 Vexer +### 3.5 Excititor * **Claims explorer**: search by vulnId/productKey/provider; show raw claim (status, justification, evidence). * **Consensus view**: rollup per (vuln, product) with accepted/rejected sources, weights, timestamps. @@ -136,7 +136,7 @@ Each feature folder builds as a **standalone route** (lazy loaded). All HTTP sha * **`core/http/api-client.ts`** centralizes: - * Base URLs (Scanner, Vexer, Feedser, Attestor). + * Base URLs (Scanner, Excititor, Feedser, Attestor). * **Retry** policies on idempotent GETs (backoff + jitter). * **Problem+JSON** parser → uniform error toasts with correlation ID. * **SSE** helper (EventSource) with auto‑reconnect & backpressure. @@ -144,7 +144,7 @@ Each feature folder builds as a **standalone route** (lazy loaded). All HTTP sha * Typed API clients (DTOs in `core/api/models.ts`): - * `ScannerApi`, `PolicyApi`, `VexerApi`, `FeedserApi`, `AttestorApi`, `AuthorityApi`. + * `ScannerApi`, `PolicyApi`, `ExcititorApi`, `FeedserApi`, `AttestorApi`, `AuthorityApi`. **DTO examples (abbrev):** @@ -184,7 +184,7 @@ export interface VexConsensus { * **Huge tables** rendered with **virtual scrolling** (CDK Virtual Scroll); sort/filter performed client‑side for ≤ 20k rows; beyond that, server‑side queries via BOM‑Index endpoints. * **Component row** shows purl, version, origin (OS pkg / metadata / linker / attested), licenses, and **used** badge (Usage view). -* **Diff**: compact heatmap per layer; clicking opens a right‑pane with evidence: introducing paths, file hashes, VEX notes (from Vexer consensus) and links to advisories (Feedser). +* **Diff**: compact heatmap per layer; clicking opens a right‑pane with evidence: introducing paths, file hashes, VEX notes (from Excititor consensus) and links to advisories (Feedser). --- diff --git a/docs/VEXER_SCORRING.md b/docs/EXCITITOR_SCORRING.md similarity index 79% rename from docs/VEXER_SCORRING.md rename to docs/EXCITITOR_SCORRING.md index bf79b85a..a6a53a47 100644 --- a/docs/VEXER_SCORRING.md +++ b/docs/EXCITITOR_SCORRING.md @@ -1,6 +1,6 @@ ## Status -This document tracks the future-looking risk scoring model for Vexer. The calculation below is not active yet; Sprint 7 work will add the required schema fields, policy controls, and services. Until that ships, Vexer emits consensus statuses without numeric scores. +This document tracks the future-looking risk scoring model for Excititor. The calculation below is not active yet; Sprint 7 work will add the required schema fields, policy controls, and services. Until that ships, Excititor emits consensus statuses without numeric scores. ## Scoring model (target state) @@ -19,8 +19,8 @@ Safeguards: freeze boosts when product identity is unknown, clamp outputs ≥0, | Phase | Scope | Artifacts | | --- | --- | --- | -| **Phase 1 – Schema foundations** | Extend Vexer consensus/claims and Feedser canonical advisories with severity, KEV, EPSS, and expose α/β + weight ceilings in policy. | Sprint 7 tasks `VEXER-CORE-02-001`, `VEXER-POLICY-02-001`, `VEXER-STORAGE-02-001`, `FEEDCORE-ENGINE-07-001`. | -| **Phase 2 – Deterministic score engine** | Implement a scoring component that executes alongside consensus and persists score envelopes with hashes. | Planned task `VEXER-CORE-02-002` (backlog). | +| **Phase 1 – Schema foundations** | Extend Excititor consensus/claims and Feedser canonical advisories with severity, KEV, EPSS, and expose α/β + weight ceilings in policy. | Sprint 7 tasks `EXCITITOR-CORE-02-001`, `EXCITITOR-POLICY-02-001`, `EXCITITOR-STORAGE-02-001`, `FEEDCORE-ENGINE-07-001`. | +| **Phase 2 – Deterministic score engine** | Implement a scoring component that executes alongside consensus and persists score envelopes with hashes. | Planned task `EXCITITOR-CORE-02-002` (backlog). | | **Phase 3 – Surfacing & enforcement** | Expose scores via WebService/CLI, integrate with Feedser noise priors, and enforce policy-based suppressions. | To be scheduled after Phase 2. | ## Data model (after Phase 1) @@ -60,7 +60,7 @@ Safeguards: freeze boosts when product identity is unknown, clamp outputs ≥0, ## Operational guidance -* **Inputs**: Feedser delivers severity/KEV/EPSS via the advisory event log; Vexer connectors load VEX statements. Policy owns trust tiers and coefficients. +* **Inputs**: Feedser delivers severity/KEV/EPSS via the advisory event log; Excititor connectors load VEX statements. Policy owns trust tiers and coefficients. * **Processing**: the scoring engine (Phase 2) runs next to consensus, storing results with deterministic hashes so exports and attestations can reference them. * **Consumption**: WebService/CLI will return consensus plus score; scanners may suppress findings only when policy-authorized VEX gating and signed score envelopes agree. diff --git a/docs/README.md b/docs/README.md index 884b0798..d904ec76 100755 --- a/docs/README.md +++ b/docs/README.md @@ -37,7 +37,7 @@ Everything here is open‑source and versioned — when you check out a git ta - **08 – Module Architecture Dossiers** - [Scanner](ARCHITECTURE_SCANNER.md) - [Feedser](ARCHITECTURE_FEEDSER.md) - - [Vexer](ARCHITECTURE_VEXER.md) + - [Excititor](ARCHITECTURE_EXCITITOR.md) - [Signer](ARCHITECTURE_SIGNER.md) - [Attestor](ARCHITECTURE_ATTESTOR.md) - [Authority](ARCHITECTURE_AUTHORITY.md) @@ -48,9 +48,9 @@ Everything here is open‑source and versioned — when you check out a git ta - **09 – [API & CLI Reference](09_API_CLI_REFERENCE.md)** - **10 – [Plug‑in SDK Guide](10_PLUGIN_SDK_GUIDE.md)** - **10 – [Feedser CLI Quickstart](10_FEEDSER_CLI_QUICKSTART.md)** -- **30 – [Vexer Connector Packaging Guide](dev/30_VEXER_CONNECTOR_GUIDE.md)** +- **30 – [Excititor Connector Packaging Guide](dev/30_EXCITITOR_CONNECTOR_GUIDE.md)** - **30 – Developer Templates** - - [Vexer Connector Skeleton](dev/templates/vexer-connector/) + - [Excititor Connector Skeleton](dev/templates/excititor-connector/) - **11 – [Authority Service](11_AUTHORITY.md)** - **11 – [Data Schemas](11_DATA_SCHEMAS.md)** - **12 – [Performance Workbook](12_PERFORMANCE_WORKBOOK.md)** diff --git a/docs/dev/30_VEXER_CONNECTOR_GUIDE.md b/docs/dev/30_EXCITITOR_CONNECTOR_GUIDE.md similarity index 78% rename from docs/dev/30_VEXER_CONNECTOR_GUIDE.md rename to docs/dev/30_EXCITITOR_CONNECTOR_GUIDE.md index 4affd54f..2ac21081 100644 --- a/docs/dev/30_VEXER_CONNECTOR_GUIDE.md +++ b/docs/dev/30_EXCITITOR_CONNECTOR_GUIDE.md @@ -1,18 +1,18 @@ -# Vexer Connector Packaging Guide +# Excititor Connector Packaging Guide -> **Audience:** teams implementing new Vexer provider plug‑ins (CSAF feeds, +> **Audience:** teams implementing new Excititor provider plug‑ins (CSAF feeds, > OpenVEX attestations, etc.) -> **Prerequisites:** read `docs/ARCHITECTURE_VEXER.md` and the module -> `AGENTS.md` in `src/StellaOps.Vexer.Connectors.Abstractions/`. +> **Prerequisites:** read `docs/ARCHITECTURE_EXCITITOR.md` and the module +> `AGENTS.md` in `src/StellaOps.Excititor.Connectors.Abstractions/`. -The Vexer connector SDK gives you: +The Excititor connector SDK gives you: - `VexConnectorBase` – deterministic logging, SHA‑256 helpers, time provider. - `VexConnectorOptionsBinder` – strongly typed YAML/JSON configuration binding. - `IVexConnectorOptionsValidator` – custom validation hooks (offline defaults, auth invariants). - `VexConnectorDescriptor` & metadata helpers for consistent telemetry. -This guide explains how to package a connector so the Vexer Worker/WebService +This guide explains how to package a connector so the Excititor Worker/WebService can load it via the plugin host. --- @@ -20,12 +20,12 @@ can load it via the plugin host. ## 1. Project layout Start from the template under -`docs/dev/templates/vexer-connector/`. It contains: +`docs/dev/templates/excititor-connector/`. It contains: ``` -Vexer.MyConnector/ +Excititor.MyConnector/ ├── src/ -│ ├── Vexer.MyConnector.csproj +│ ├── Excititor.MyConnector.csproj │ ├── MyConnectorOptions.cs │ ├── MyConnector.cs │ └── MyConnectorPlugin.cs @@ -36,8 +36,8 @@ Vexer.MyConnector/ Key points: - Target `net10.0`, enable `TreatWarningsAsErrors`, reference the - `StellaOps.Vexer.Connectors.Abstractions` project (or NuGet once published). -- Keep project ID prefix `StellaOps.Vexer.Connectors.` so the + `StellaOps.Excititor.Connectors.Abstractions` project (or NuGet once published). +- Keep project ID prefix `StellaOps.Excititor.Connectors.` so the plugin loader can discover it with the default search pattern. ### 1.1 csproj snippet @@ -51,7 +51,7 @@ Key points: true - + ``` @@ -135,7 +135,7 @@ this contract today. public sealed class MyConnectorPlugin : IConnectorPlugin { private static readonly VexConnectorDescriptor Descriptor = - new("vexer:my-provider", VexProviderKind.Vendor, "My Provider VEX"); + new("excititor:my-provider", VexProviderKind.Vendor, "My Provider VEX"); public string Name => Descriptor.DisplayName; @@ -150,8 +150,8 @@ public sealed class MyConnectorPlugin : IConnectorPlugin } ``` -> **Note:** the Vexer Worker currently instantiates connectors through the -> shared `IConnectorPlugin` contract. Once a dedicated Vexer plugin interface +> **Note:** the Excititor Worker currently instantiates connectors through the +> shared `IConnectorPlugin` contract. Once a dedicated Excititor plugin interface > lands you simply swap the base interface; the descriptor/connector code > remains unchanged. @@ -159,18 +159,18 @@ Provide a manifest describing the assembly for operational tooling: ```yaml # manifest/connector.manifest.yaml -id: vexer-my-provider -assembly: StellaOps.Vexer.Connectors.MyProvider.dll -entryPoint: StellaOps.Vexer.Connectors.MyProvider.MyConnectorPlugin +id: excititor-my-provider +assembly: StellaOps.Excititor.Connectors.MyProvider.dll +entryPoint: StellaOps.Excititor.Connectors.MyProvider.MyConnectorPlugin description: > Official VEX feed for ExampleCorp products (CSAF JSON, daily updates). tags: - - vexer + - excititor - csaf - vendor ``` -Store manifests under `/opt/stella/vexer/plugins//manifest/` in +Store manifests under `/opt/stella/excititor/plugins//manifest/` in production so the deployment tooling can inventory and verify plug‑ins. --- @@ -178,9 +178,9 @@ production so the deployment tooling can inventory and verify plug‑ins. ## 4. Packaging workflow 1. `dotnet publish -c Release` → copy the published DLLs to - `/opt/stella/vexer/plugins//`. + `/opt/stella/excititor/plugins//`. 2. Place `connector.manifest.yaml` next to the binaries. -3. Restart the Vexer Worker or WebService (hot reload not supported yet). +3. Restart the Excititor Worker or WebService (hot reload not supported yet). 4. Verify logs: `VEX-ConnectorLoader` should list the connector descriptor. ### 4.1 Offline kits @@ -195,7 +195,7 @@ production so the deployment tooling can inventory and verify plug‑ins. ## 5. Testing checklist - Unit tests around options binding & validators. -- Integration tests (future `StellaOps.Vexer.Connectors.Abstractions.Tests`) +- Integration tests (future `StellaOps.Excititor.Connectors.Abstractions.Tests`) verifying deterministic logging scopes: `logger.BeginScope` should produce `vex.connector.id`, `vex.connector.kind`, and `vex.connector.operation`. @@ -206,7 +206,7 @@ production so the deployment tooling can inventory and verify plug‑ins. ## 6. Reference template -See `docs/dev/templates/vexer-connector/` for the full quick‑start including: +See `docs/dev/templates/excititor-connector/` for the full quick‑start including: - Sample options class + validator. - Connector implementation inheriting from `VexConnectorBase`. diff --git a/docs/dev/templates/excititor-connector/manifest/connector.manifest.yaml b/docs/dev/templates/excititor-connector/manifest/connector.manifest.yaml new file mode 100644 index 00000000..20c222c6 --- /dev/null +++ b/docs/dev/templates/excititor-connector/manifest/connector.manifest.yaml @@ -0,0 +1,8 @@ +id: excititor-my-provider +assembly: StellaOps.Excititor.Connectors.MyProvider.dll +entryPoint: StellaOps.Excititor.Connectors.MyProvider.MyConnectorPlugin +description: | + Example connector template. Replace metadata before shipping. +tags: + - excititor + - template diff --git a/docs/dev/templates/vexer-connector/src/Vexer.MyConnector.csproj b/docs/dev/templates/excititor-connector/src/Excititor.MyConnector.csproj similarity index 71% rename from docs/dev/templates/vexer-connector/src/Vexer.MyConnector.csproj rename to docs/dev/templates/excititor-connector/src/Excititor.MyConnector.csproj index 3f18fde3..03cd0768 100644 --- a/docs/dev/templates/vexer-connector/src/Vexer.MyConnector.csproj +++ b/docs/dev/templates/excititor-connector/src/Excititor.MyConnector.csproj @@ -7,6 +7,6 @@ - + diff --git a/docs/dev/templates/vexer-connector/src/MyConnector.cs b/docs/dev/templates/excititor-connector/src/MyConnector.cs similarity index 95% rename from docs/dev/templates/vexer-connector/src/MyConnector.cs rename to docs/dev/templates/excititor-connector/src/MyConnector.cs index d7a8eccd..edd5456b 100644 --- a/docs/dev/templates/vexer-connector/src/MyConnector.cs +++ b/docs/dev/templates/excititor-connector/src/MyConnector.cs @@ -2,10 +2,10 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Runtime.CompilerServices; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.MyProvider; +namespace StellaOps.Excititor.Connectors.MyProvider; public sealed class MyConnector : VexConnectorBase { diff --git a/docs/dev/templates/vexer-connector/src/MyConnectorOptions.cs b/docs/dev/templates/excititor-connector/src/MyConnectorOptions.cs similarity index 85% rename from docs/dev/templates/vexer-connector/src/MyConnectorOptions.cs rename to docs/dev/templates/excititor-connector/src/MyConnectorOptions.cs index c8cd857e..1a7b14a3 100644 --- a/docs/dev/templates/vexer-connector/src/MyConnectorOptions.cs +++ b/docs/dev/templates/excititor-connector/src/MyConnectorOptions.cs @@ -1,6 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace StellaOps.Vexer.Connectors.MyProvider; +namespace StellaOps.Excititor.Connectors.MyProvider; public sealed class MyConnectorOptions { diff --git a/docs/dev/templates/vexer-connector/src/MyConnectorOptionsValidator.cs b/docs/dev/templates/excititor-connector/src/MyConnectorOptionsValidator.cs similarity index 80% rename from docs/dev/templates/vexer-connector/src/MyConnectorOptionsValidator.cs rename to docs/dev/templates/excititor-connector/src/MyConnectorOptionsValidator.cs index 04723e5b..f7f1ab54 100644 --- a/docs/dev/templates/vexer-connector/src/MyConnectorOptionsValidator.cs +++ b/docs/dev/templates/excititor-connector/src/MyConnectorOptionsValidator.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using StellaOps.Vexer.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Abstractions; -namespace StellaOps.Vexer.Connectors.MyProvider; +namespace StellaOps.Excititor.Connectors.MyProvider; public sealed class MyConnectorOptionsValidator : IVexConnectorOptionsValidator { diff --git a/docs/dev/templates/vexer-connector/src/MyConnectorPlugin.cs b/docs/dev/templates/excititor-connector/src/MyConnectorPlugin.cs similarity index 82% rename from docs/dev/templates/vexer-connector/src/MyConnectorPlugin.cs rename to docs/dev/templates/excititor-connector/src/MyConnectorPlugin.cs index d12b573d..187b8325 100644 --- a/docs/dev/templates/vexer-connector/src/MyConnectorPlugin.cs +++ b/docs/dev/templates/excititor-connector/src/MyConnectorPlugin.cs @@ -1,15 +1,15 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using StellaOps.Plugin; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.MyProvider; +namespace StellaOps.Excititor.Connectors.MyProvider; public sealed class MyConnectorPlugin : IConnectorPlugin { private static readonly VexConnectorDescriptor Descriptor = new( - id: "vexer:my-provider", + id: "excititor:my-provider", kind: VexProviderKind.Vendor, displayName: "My Provider VEX"); diff --git a/docs/dev/templates/vexer-connector/manifest/connector.manifest.yaml b/docs/dev/templates/vexer-connector/manifest/connector.manifest.yaml deleted file mode 100644 index 307b4bd5..00000000 --- a/docs/dev/templates/vexer-connector/manifest/connector.manifest.yaml +++ /dev/null @@ -1,8 +0,0 @@ -id: vexer-my-provider -assembly: StellaOps.Vexer.Connectors.MyProvider.dll -entryPoint: StellaOps.Vexer.Connectors.MyProvider.MyConnectorPlugin -description: | - Example connector template. Replace metadata before shipping. -tags: - - vexer - - template diff --git a/src/StellaOps.Cli/TASKS.md b/src/StellaOps.Cli/TASKS.md index 1b7fc261..6f2cdc9e 100644 --- a/src/StellaOps.Cli/TASKS.md +++ b/src/StellaOps.Cli/TASKS.md @@ -1,4 +1,4 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). # TASKS | Task | Owner(s) | Depends on | Notes | |---|---|---|---| @@ -14,6 +14,6 @@ If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and |Expose auth client resilience settings|DevEx/CLI|Auth libraries LIB5|**DONE (2025-10-10)** – CLI options now bind resilience knobs, `AddStellaOpsAuthClient` honours them, and tests cover env overrides.| |Document advanced Authority tuning|Docs/CLI|Expose auth client resilience settings|**DONE (2025-10-10)** – docs/09 and docs/10 describe retry/offline settings with env examples and point to the integration guide.| |Surface password policy diagnostics in CLI output|DevEx/CLI, Security Guild|AUTHSEC-CRYPTO-02-004|**DONE (2025-10-15)** – CLI startup runs the Authority plug-in analyzer, logs weakened password policy warnings with manifest paths, added unit tests (`dotnet test src/StellaOps.Cli.Tests`) and updated docs/09 with remediation guidance.| -|VEXER-CLI-01-001 – Add `vexer` command group|DevEx/CLI|VEXER-WEB-01-001|TODO – Introduce `vexer` verb hierarchy (init/pull/resume/list-providers/export/verify/reconcile) forwarding to WebService with token auth and consistent exit codes.| -|VEXER-CLI-01-002 – Export download & attestation UX|DevEx/CLI|VEXER-CLI-01-001, VEXER-EXPORT-01-001|TODO – Display export metadata (sha256, size, Rekor link), support optional artifact download path, and handle cache hits gracefully.| -|VEXER-CLI-01-003 – CLI docs & examples for Vexer|Docs/CLI|VEXER-CLI-01-001|TODO – Update docs/09_API_CLI_REFERENCE.md and quickstart snippets to cover Vexer verbs, offline guidance, and attestation verification workflow.| +|EXCITITOR-CLI-01-001 – Add `excititor` command group|DevEx/CLI|EXCITITOR-WEB-01-001|TODO – Introduce `excititor` verb hierarchy (init/pull/resume/list-providers/export/verify/reconcile) forwarding to WebService with token auth and consistent exit codes.| +|EXCITITOR-CLI-01-002 – Export download & attestation UX|DevEx/CLI|EXCITITOR-CLI-01-001, EXCITITOR-EXPORT-01-001|TODO – Display export metadata (sha256, size, Rekor link), support optional artifact download path, and handle cache hits gracefully.| +|EXCITITOR-CLI-01-003 – CLI docs & examples for Excititor|Docs/CLI|EXCITITOR-CLI-01-001|TODO – Update docs/09_API_CLI_REFERENCE.md and quickstart snippets to cover Excititor verbs, offline guidance, and attestation verification workflow.| diff --git a/src/StellaOps.Vexer.ArtifactStores.S3.Tests/S3ArtifactClientTests.cs b/src/StellaOps.Excititor.ArtifactStores.S3.Tests/S3ArtifactClientTests.cs similarity index 91% rename from src/StellaOps.Vexer.ArtifactStores.S3.Tests/S3ArtifactClientTests.cs rename to src/StellaOps.Excititor.ArtifactStores.S3.Tests/S3ArtifactClientTests.cs index 16f9061b..a867f2cd 100644 --- a/src/StellaOps.Vexer.ArtifactStores.S3.Tests/S3ArtifactClientTests.cs +++ b/src/StellaOps.Excititor.ArtifactStores.S3.Tests/S3ArtifactClientTests.cs @@ -1,10 +1,10 @@ using Amazon.S3; using Amazon.S3.Model; using Moq; -using StellaOps.Vexer.ArtifactStores.S3; -using StellaOps.Vexer.Export; +using StellaOps.Excititor.ArtifactStores.S3; +using StellaOps.Excititor.Export; -namespace StellaOps.Vexer.ArtifactStores.S3.Tests; +namespace StellaOps.Excititor.ArtifactStores.S3.Tests; public sealed class S3ArtifactClientTests { diff --git a/src/StellaOps.Vexer.ArtifactStores.S3.Tests/StellaOps.Vexer.ArtifactStores.S3.Tests.csproj b/src/StellaOps.Excititor.ArtifactStores.S3.Tests/StellaOps.Excititor.ArtifactStores.S3.Tests.csproj similarity index 77% rename from src/StellaOps.Vexer.ArtifactStores.S3.Tests/StellaOps.Vexer.ArtifactStores.S3.Tests.csproj rename to src/StellaOps.Excititor.ArtifactStores.S3.Tests/StellaOps.Excititor.ArtifactStores.S3.Tests.csproj index 43bbc0f4..d9b0d0c6 100644 --- a/src/StellaOps.Vexer.ArtifactStores.S3.Tests/StellaOps.Vexer.ArtifactStores.S3.Tests.csproj +++ b/src/StellaOps.Excititor.ArtifactStores.S3.Tests/StellaOps.Excititor.ArtifactStores.S3.Tests.csproj @@ -10,6 +10,6 @@ - + diff --git a/src/StellaOps.Vexer.ArtifactStores.S3/Extensions/ServiceCollectionExtensions.cs b/src/StellaOps.Excititor.ArtifactStores.S3/Extensions/ServiceCollectionExtensions.cs similarity index 92% rename from src/StellaOps.Vexer.ArtifactStores.S3/Extensions/ServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.ArtifactStores.S3/Extensions/ServiceCollectionExtensions.cs index 483956b4..7717cd41 100644 --- a/src/StellaOps.Vexer.ArtifactStores.S3/Extensions/ServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.ArtifactStores.S3/Extensions/ServiceCollectionExtensions.cs @@ -3,9 +3,9 @@ using Amazon.Runtime; using Amazon.S3; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Export; +using StellaOps.Excititor.Export; -namespace StellaOps.Vexer.ArtifactStores.S3.Extensions; +namespace StellaOps.Excititor.ArtifactStores.S3.Extensions; public static class ServiceCollectionExtensions { diff --git a/src/StellaOps.Vexer.ArtifactStores.S3/S3ArtifactClient.cs b/src/StellaOps.Excititor.ArtifactStores.S3/S3ArtifactClient.cs similarity index 97% rename from src/StellaOps.Vexer.ArtifactStores.S3/S3ArtifactClient.cs rename to src/StellaOps.Excititor.ArtifactStores.S3/S3ArtifactClient.cs index 96494fd2..dc6ea95e 100644 --- a/src/StellaOps.Vexer.ArtifactStores.S3/S3ArtifactClient.cs +++ b/src/StellaOps.Excititor.ArtifactStores.S3/S3ArtifactClient.cs @@ -2,9 +2,9 @@ using Amazon.S3; using Amazon.S3.Model; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Export; +using StellaOps.Excititor.Export; -namespace StellaOps.Vexer.ArtifactStores.S3; +namespace StellaOps.Excititor.ArtifactStores.S3; public sealed class S3ArtifactClientOptions { diff --git a/src/StellaOps.Vexer.ArtifactStores.S3/StellaOps.Vexer.ArtifactStores.S3.csproj b/src/StellaOps.Excititor.ArtifactStores.S3/StellaOps.Excititor.ArtifactStores.S3.csproj similarity index 85% rename from src/StellaOps.Vexer.ArtifactStores.S3/StellaOps.Vexer.ArtifactStores.S3.csproj rename to src/StellaOps.Excititor.ArtifactStores.S3/StellaOps.Excititor.ArtifactStores.S3.csproj index 507c79e3..d7972603 100644 --- a/src/StellaOps.Vexer.ArtifactStores.S3/StellaOps.Vexer.ArtifactStores.S3.csproj +++ b/src/StellaOps.Excititor.ArtifactStores.S3/StellaOps.Excititor.ArtifactStores.S3.csproj @@ -12,6 +12,6 @@ - + diff --git a/src/StellaOps.Vexer.Attestation.Tests/StellaOps.Vexer.Attestation.Tests.csproj b/src/StellaOps.Excititor.Attestation.Tests/StellaOps.Excititor.Attestation.Tests.csproj similarity index 61% rename from src/StellaOps.Vexer.Attestation.Tests/StellaOps.Vexer.Attestation.Tests.csproj rename to src/StellaOps.Excititor.Attestation.Tests/StellaOps.Excititor.Attestation.Tests.csproj index 6f4e0b68..3ea8a9ef 100644 --- a/src/StellaOps.Vexer.Attestation.Tests/StellaOps.Vexer.Attestation.Tests.csproj +++ b/src/StellaOps.Excititor.Attestation.Tests/StellaOps.Excititor.Attestation.Tests.csproj @@ -7,7 +7,7 @@ true - - + + diff --git a/src/StellaOps.Vexer.Attestation.Tests/VexAttestationClientTests.cs b/src/StellaOps.Excititor.Attestation.Tests/VexAttestationClientTests.cs similarity index 93% rename from src/StellaOps.Vexer.Attestation.Tests/VexAttestationClientTests.cs rename to src/StellaOps.Excititor.Attestation.Tests/VexAttestationClientTests.cs index 1a27252b..81f13cd0 100644 --- a/src/StellaOps.Vexer.Attestation.Tests/VexAttestationClientTests.cs +++ b/src/StellaOps.Excititor.Attestation.Tests/VexAttestationClientTests.cs @@ -1,12 +1,12 @@ using System.Collections.Immutable; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Attestation.Dsse; -using StellaOps.Vexer.Attestation.Signing; -using StellaOps.Vexer.Attestation.Transparency; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Attestation.Dsse; +using StellaOps.Excititor.Attestation.Signing; +using StellaOps.Excititor.Attestation.Transparency; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Attestation.Tests; +namespace StellaOps.Excititor.Attestation.Tests; public sealed class VexAttestationClientTests { diff --git a/src/StellaOps.Vexer.Attestation.Tests/VexDsseBuilderTests.cs b/src/StellaOps.Excititor.Attestation.Tests/VexDsseBuilderTests.cs similarity index 89% rename from src/StellaOps.Vexer.Attestation.Tests/VexDsseBuilderTests.cs rename to src/StellaOps.Excititor.Attestation.Tests/VexDsseBuilderTests.cs index 408d5dfd..d079bd84 100644 --- a/src/StellaOps.Vexer.Attestation.Tests/VexDsseBuilderTests.cs +++ b/src/StellaOps.Excititor.Attestation.Tests/VexDsseBuilderTests.cs @@ -1,11 +1,11 @@ using System.Collections.Immutable; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Attestation.Dsse; -using StellaOps.Vexer.Attestation.Models; -using StellaOps.Vexer.Attestation.Signing; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Attestation.Dsse; +using StellaOps.Excititor.Attestation.Models; +using StellaOps.Excititor.Attestation.Signing; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Attestation.Tests; +namespace StellaOps.Excititor.Attestation.Tests; public sealed class VexDsseBuilderTests { diff --git a/src/StellaOps.Vexer.Attestation/AGENTS.md b/src/StellaOps.Excititor.Attestation/AGENTS.md similarity index 83% rename from src/StellaOps.Vexer.Attestation/AGENTS.md rename to src/StellaOps.Excititor.Attestation/AGENTS.md index 43d87380..d3c98c8c 100644 --- a/src/StellaOps.Vexer.Attestation/AGENTS.md +++ b/src/StellaOps.Excititor.Attestation/AGENTS.md @@ -1,6 +1,6 @@ # AGENTS ## Role -Builds and verifies in-toto/DSSE attestations for Vexer exports and integrates with Rekor v2 transparency logs. +Builds and verifies in-toto/DSSE attestations for Excititor exports and integrates with Rekor v2 transparency logs. ## Scope - Attestation envelope builders, signing workflows (keyless/keyed), and predicate model definitions. - Rekor v2 client implementation (submit, verify, poll inclusion) with retry/backoff policies. @@ -9,7 +9,7 @@ Builds and verifies in-toto/DSSE attestations for Vexer exports and integrates w ## Participants - Export module calls into this layer to generate attestations after export artifacts are produced. - WebService and Worker consume verification helpers to ensure stored envelopes remain valid. -- CLI `vexer verify` leverages verification services through WebService endpoints. +- CLI `excititor verify` leverages verification services through WebService endpoints. ## Interfaces & contracts - `IExportAttestor`, `ITransparencyLogClient`, predicate DTOs, and verification result records. - Extension methods to register attestation services in DI across WebService/Worker. @@ -20,4 +20,4 @@ Out: export artifact generation, storage persistence, CLI interaction layers. - Structured logs for signing/verification with envelope digest, Rekor URI, and latency; never log private keys. - Metrics for attestation successes/failures and Rekor submission durations. ## Tests -- Unit tests and integration stubs (with fake Rekor) will live in `../StellaOps.Vexer.Attestation.Tests`. +- Unit tests and integration stubs (with fake Rekor) will live in `../StellaOps.Excititor.Attestation.Tests`. diff --git a/src/StellaOps.Vexer.Attestation/Dsse/DsseEnvelope.cs b/src/StellaOps.Excititor.Attestation/Dsse/DsseEnvelope.cs similarity index 90% rename from src/StellaOps.Vexer.Attestation/Dsse/DsseEnvelope.cs rename to src/StellaOps.Excititor.Attestation/Dsse/DsseEnvelope.cs index 65b7f93c..9eb5d8de 100644 --- a/src/StellaOps.Vexer.Attestation/Dsse/DsseEnvelope.cs +++ b/src/StellaOps.Excititor.Attestation/Dsse/DsseEnvelope.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace StellaOps.Vexer.Attestation.Dsse; +namespace StellaOps.Excititor.Attestation.Dsse; public sealed record DsseEnvelope( [property: JsonPropertyName("payload")] string Payload, diff --git a/src/StellaOps.Vexer.Attestation/Dsse/VexDsseBuilder.cs b/src/StellaOps.Excititor.Attestation/Dsse/VexDsseBuilder.cs similarity index 94% rename from src/StellaOps.Vexer.Attestation/Dsse/VexDsseBuilder.cs rename to src/StellaOps.Excititor.Attestation/Dsse/VexDsseBuilder.cs index 64e846c0..ea3e12f4 100644 --- a/src/StellaOps.Vexer.Attestation/Dsse/VexDsseBuilder.cs +++ b/src/StellaOps.Excititor.Attestation/Dsse/VexDsseBuilder.cs @@ -8,11 +8,11 @@ using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Attestation.Models; -using StellaOps.Vexer.Attestation.Signing; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Attestation.Models; +using StellaOps.Excititor.Attestation.Signing; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Attestation.Dsse; +namespace StellaOps.Excititor.Attestation.Dsse; public sealed class VexDsseBuilder { diff --git a/src/StellaOps.Vexer.Attestation/Extensions/ServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Attestation/Extensions/ServiceCollectionExtensions.cs similarity index 79% rename from src/StellaOps.Vexer.Attestation/Extensions/ServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Attestation/Extensions/ServiceCollectionExtensions.cs index ac48256c..d6423b0e 100644 --- a/src/StellaOps.Vexer.Attestation/Extensions/ServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Attestation/Extensions/ServiceCollectionExtensions.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.DependencyInjection; -using StellaOps.Vexer.Attestation.Dsse; -using StellaOps.Vexer.Attestation.Transparency; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Attestation.Dsse; +using StellaOps.Excititor.Attestation.Transparency; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Attestation.Extensions; +namespace StellaOps.Excititor.Attestation.Extensions; public static class VexAttestationServiceCollectionExtensions { diff --git a/src/StellaOps.Vexer.Attestation/Models/VexAttestationPredicate.cs b/src/StellaOps.Excititor.Attestation/Models/VexAttestationPredicate.cs similarity index 94% rename from src/StellaOps.Vexer.Attestation/Models/VexAttestationPredicate.cs rename to src/StellaOps.Excititor.Attestation/Models/VexAttestationPredicate.cs index c879b069..bc7a278b 100644 --- a/src/StellaOps.Vexer.Attestation/Models/VexAttestationPredicate.cs +++ b/src/StellaOps.Excititor.Attestation/Models/VexAttestationPredicate.cs @@ -2,9 +2,9 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Text.Json.Serialization; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Attestation.Models; +namespace StellaOps.Excititor.Attestation.Models; public sealed record VexAttestationPredicate( string ExportId, diff --git a/src/StellaOps.Vexer.Attestation/Signing/IVexSigner.cs b/src/StellaOps.Excititor.Attestation/Signing/IVexSigner.cs similarity index 84% rename from src/StellaOps.Vexer.Attestation/Signing/IVexSigner.cs rename to src/StellaOps.Excititor.Attestation/Signing/IVexSigner.cs index d2371425..83512603 100644 --- a/src/StellaOps.Vexer.Attestation/Signing/IVexSigner.cs +++ b/src/StellaOps.Excititor.Attestation/Signing/IVexSigner.cs @@ -2,7 +2,7 @@ using System; using System.Threading; using System.Threading.Tasks; -namespace StellaOps.Vexer.Attestation.Signing; +namespace StellaOps.Excititor.Attestation.Signing; public sealed record VexSignedPayload(string Signature, string? KeyId); diff --git a/src/StellaOps.Vexer.Attestation/StellaOps.Vexer.Attestation.csproj b/src/StellaOps.Excititor.Attestation/StellaOps.Excititor.Attestation.csproj similarity index 86% rename from src/StellaOps.Vexer.Attestation/StellaOps.Vexer.Attestation.csproj rename to src/StellaOps.Excititor.Attestation/StellaOps.Excititor.Attestation.csproj index 8874903c..6f83f7b7 100644 --- a/src/StellaOps.Vexer.Attestation/StellaOps.Vexer.Attestation.csproj +++ b/src/StellaOps.Excititor.Attestation/StellaOps.Excititor.Attestation.csproj @@ -12,6 +12,6 @@ - + diff --git a/src/StellaOps.Excititor.Attestation/TASKS.md b/src/StellaOps.Excititor.Attestation/TASKS.md new file mode 100644 index 00000000..ff79ef32 --- /dev/null +++ b/src/StellaOps.Excititor.Attestation/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-ATTEST-01-001 – In-toto predicate & DSSE builder|Team Excititor Attestation|EXCITITOR-CORE-01-001|**DONE (2025-10-16)** – Added deterministic in-toto predicate/statement models, DSSE envelope builder wired to signer abstraction, and attestation client producing metadata + diagnostics.| +|EXCITITOR-ATTEST-01-002 – Rekor v2 client integration|Team Excititor Attestation|EXCITITOR-ATTEST-01-001|**DONE (2025-10-16)** – Implemented Rekor HTTP client with retry/backoff, transparency log abstraction, DI helpers, and attestation client integration capturing Rekor metadata + diagnostics.| +|EXCITITOR-ATTEST-01-003 – Verification suite & observability|Team Excititor Attestation|EXCITITOR-ATTEST-01-002|TODO – Add verification helpers for Worker/WebService, metrics/logging hooks, and negative-path regression tests.| diff --git a/src/StellaOps.Vexer.Attestation/Transparency/ITransparencyLogClient.cs b/src/StellaOps.Excititor.Attestation/Transparency/ITransparencyLogClient.cs similarity index 80% rename from src/StellaOps.Vexer.Attestation/Transparency/ITransparencyLogClient.cs rename to src/StellaOps.Excititor.Attestation/Transparency/ITransparencyLogClient.cs index de87adc9..ffd6621d 100644 --- a/src/StellaOps.Vexer.Attestation/Transparency/ITransparencyLogClient.cs +++ b/src/StellaOps.Excititor.Attestation/Transparency/ITransparencyLogClient.cs @@ -1,8 +1,8 @@ using System.Threading; using System.Threading.Tasks; -using StellaOps.Vexer.Attestation.Dsse; +using StellaOps.Excititor.Attestation.Dsse; -namespace StellaOps.Vexer.Attestation.Transparency; +namespace StellaOps.Excititor.Attestation.Transparency; public sealed record TransparencyLogEntry(string Id, string Location, string? LogIndex, string? InclusionProofUrl); diff --git a/src/StellaOps.Vexer.Attestation/Transparency/RekorHttpClient.cs b/src/StellaOps.Excititor.Attestation/Transparency/RekorHttpClient.cs similarity index 97% rename from src/StellaOps.Vexer.Attestation/Transparency/RekorHttpClient.cs rename to src/StellaOps.Excititor.Attestation/Transparency/RekorHttpClient.cs index e851f82a..75b5cd31 100644 --- a/src/StellaOps.Vexer.Attestation/Transparency/RekorHttpClient.cs +++ b/src/StellaOps.Excititor.Attestation/Transparency/RekorHttpClient.cs @@ -2,9 +2,9 @@ using System.Net.Http.Json; using System.Text.Json; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Attestation.Dsse; +using StellaOps.Excititor.Attestation.Dsse; -namespace StellaOps.Vexer.Attestation.Transparency; +namespace StellaOps.Excititor.Attestation.Transparency; internal sealed class RekorHttpClient : ITransparencyLogClient { diff --git a/src/StellaOps.Vexer.Attestation/Transparency/RekorHttpClientOptions.cs b/src/StellaOps.Excititor.Attestation/Transparency/RekorHttpClientOptions.cs similarity index 84% rename from src/StellaOps.Vexer.Attestation/Transparency/RekorHttpClientOptions.cs rename to src/StellaOps.Excititor.Attestation/Transparency/RekorHttpClientOptions.cs index 1565e260..f828c4e1 100644 --- a/src/StellaOps.Vexer.Attestation/Transparency/RekorHttpClientOptions.cs +++ b/src/StellaOps.Excititor.Attestation/Transparency/RekorHttpClientOptions.cs @@ -1,4 +1,4 @@ -namespace StellaOps.Vexer.Attestation.Transparency; +namespace StellaOps.Excititor.Attestation.Transparency; public sealed class RekorHttpClientOptions { diff --git a/src/StellaOps.Vexer.Attestation/VexAttestationClient.cs b/src/StellaOps.Excititor.Attestation/VexAttestationClient.cs similarity index 93% rename from src/StellaOps.Vexer.Attestation/VexAttestationClient.cs rename to src/StellaOps.Excititor.Attestation/VexAttestationClient.cs index 94f6f214..125426cd 100644 --- a/src/StellaOps.Vexer.Attestation/VexAttestationClient.cs +++ b/src/StellaOps.Excititor.Attestation/VexAttestationClient.cs @@ -6,13 +6,13 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Attestation.Dsse; -using StellaOps.Vexer.Attestation.Models; -using StellaOps.Vexer.Attestation.Signing; -using StellaOps.Vexer.Attestation.Transparency; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Attestation.Dsse; +using StellaOps.Excititor.Attestation.Models; +using StellaOps.Excititor.Attestation.Signing; +using StellaOps.Excititor.Attestation.Transparency; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Attestation; +namespace StellaOps.Excititor.Attestation; public sealed class VexAttestationClientOptions { @@ -84,7 +84,7 @@ public sealed class VexAttestationClient : IVexAttestationClient public ValueTask VerifyAsync(VexAttestationRequest request, CancellationToken cancellationToken) { - // Placeholder until verification flow is implemented in VEXER-ATTEST-01-003. + // Placeholder until verification flow is implemented in EXCITITOR-ATTEST-01-003. return ValueTask.FromResult(new VexAttestationVerification(true, ImmutableDictionary.Empty)); } diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/AGENTS.md b/src/StellaOps.Excititor.Connectors.Abstractions/AGENTS.md similarity index 69% rename from src/StellaOps.Vexer.Connectors.Abstractions/AGENTS.md rename to src/StellaOps.Excititor.Connectors.Abstractions/AGENTS.md index dadb0d0d..6b2efc79 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.Abstractions/AGENTS.md @@ -1,13 +1,13 @@ # AGENTS ## Role -Defines shared connector infrastructure for Vexer, including base contexts, result contracts, configuration binding, and helper utilities reused by all connector plug-ins. +Defines shared connector infrastructure for Excititor, including base contexts, result contracts, configuration binding, and helper utilities reused by all connector plug-ins. ## Scope - `IVexConnector` context implementation, raw store helpers, verification hooks, and telemetry utilities. - Configuration primitives (YAML parsing, secrets handling guidelines) and options validation. - Connector lifecycle helpers for retries, paging, `.well-known` discovery, and resume markers. -- Documentation for connector packaging, plugin manifest metadata, and DI registration (see `docs/dev/30_VEXER_CONNECTOR_GUIDE.md` and `docs/dev/templates/vexer-connector/`). +- Documentation for connector packaging, plugin manifest metadata, and DI registration (see `docs/dev/30_EXCITITOR_CONNECTOR_GUIDE.md` and `docs/dev/templates/excititor-connector/`). ## Participants -- All Vexer connector projects reference this module to obtain base classes and context services. +- All Excititor connector projects reference this module to obtain base classes and context services. - WebService/Worker instantiate connectors via plugin loader leveraging abstractions defined here. ## Interfaces & contracts - Connector context, result, and telemetry interfaces; `VexConnectorDescriptor`, `VexConnectorBase`, options binder/validators, authentication helpers. @@ -19,4 +19,4 @@ Out: provider-specific logic (implemented in individual connector modules), stor - Provide structured logging helpers, correlation IDs, and metrics instrumentation toggles for connectors. - Enforce redaction of secrets in logs and config dumps. ## Tests -- Abstraction/unit tests will live in `../StellaOps.Vexer.Connectors.Abstractions.Tests`, covering default behaviors and sample harness. +- Abstraction/unit tests will live in `../StellaOps.Excititor.Connectors.Abstractions.Tests`, covering default behaviors and sample harness. diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/IVexConnectorOptionsValidator.cs b/src/StellaOps.Excititor.Connectors.Abstractions/IVexConnectorOptionsValidator.cs similarity index 87% rename from src/StellaOps.Vexer.Connectors.Abstractions/IVexConnectorOptionsValidator.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/IVexConnectorOptionsValidator.cs index 007004d7..80b7aa1d 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/IVexConnectorOptionsValidator.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/IVexConnectorOptionsValidator.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// /// Custom validator hook executed after connector options are bound. diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/StellaOps.Vexer.Connectors.Abstractions.csproj b/src/StellaOps.Excititor.Connectors.Abstractions/StellaOps.Excititor.Connectors.Abstractions.csproj similarity index 86% rename from src/StellaOps.Vexer.Connectors.Abstractions/StellaOps.Vexer.Connectors.Abstractions.csproj rename to src/StellaOps.Excititor.Connectors.Abstractions/StellaOps.Excititor.Connectors.Abstractions.csproj index 63f633c3..a4792f48 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/StellaOps.Vexer.Connectors.Abstractions.csproj +++ b/src/StellaOps.Excititor.Connectors.Abstractions/StellaOps.Excititor.Connectors.Abstractions.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Excititor.Connectors.Abstractions/TASKS.md b/src/StellaOps.Excititor.Connectors.Abstractions/TASKS.md new file mode 100644 index 00000000..c729c055 --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.Abstractions/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-ABS-01-001 – Connector context & base classes|Team Excititor Connectors|EXCITITOR-CORE-01-003|**DONE (2025-10-17)** – Added `StellaOps.Excititor.Connectors.Abstractions` project with `VexConnectorBase`, deterministic logging scopes, metadata builder helpers, and connector descriptors; docs updated to highlight the shared abstractions.| +|EXCITITOR-CONN-ABS-01-002 – YAML options & validation|Team Excititor Connectors|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Delivered `VexConnectorOptionsBinder` + binder options/validators, environment-variable expansion, data-annotation checks, and custom validation hooks with documentation updates covering the workflow.| +|EXCITITOR-CONN-ABS-01-003 – Plugin packaging & docs|Team Excititor Connectors|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Authored `docs/dev/30_EXCITITOR_CONNECTOR_GUIDE.md`, added quick-start template under `docs/dev/templates/excititor-connector/`, and updated module docs to reference the packaging workflow.| diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorBase.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorBase.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorBase.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorBase.cs index ba312419..91859afe 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorBase.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorBase.cs @@ -1,9 +1,9 @@ using System.Collections.Immutable; using System.Security.Cryptography; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// /// Convenience base class for implementing . diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorDescriptor.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorDescriptor.cs similarity index 91% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorDescriptor.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorDescriptor.cs index 4e7eb211..7076be7e 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorDescriptor.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorDescriptor.cs @@ -1,10 +1,10 @@ using System.Collections.Immutable; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// -/// Static descriptor for a Vexer connector plug-in. +/// Static descriptor for a Excititor connector plug-in. /// public sealed record VexConnectorDescriptor { diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorLogScope.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorLogScope.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorLogScope.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorLogScope.cs index 5cc8da82..66aec480 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorLogScope.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorLogScope.cs @@ -1,8 +1,8 @@ using System.Linq; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// /// Helper to establish deterministic logging scopes for connector operations. diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorMetadataBuilder.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorMetadataBuilder.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorMetadataBuilder.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorMetadataBuilder.cs index 8404ab94..958af9dd 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorMetadataBuilder.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorMetadataBuilder.cs @@ -1,6 +1,6 @@ using System.Collections.Immutable; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// /// Builds deterministic metadata dictionaries for raw documents and logging scopes. diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsBinder.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsBinder.cs similarity index 98% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsBinder.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsBinder.cs index d307fbca..36cbffab 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsBinder.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsBinder.cs @@ -2,9 +2,9 @@ using System.Collections.Immutable; using System.ComponentModel.DataAnnotations; using System.Linq; using Microsoft.Extensions.Configuration; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// /// Provides strongly typed binding and validation for connector options. diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsBinderOptions.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsBinderOptions.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsBinderOptions.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsBinderOptions.cs index c4710999..ea1c0b4d 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsBinderOptions.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsBinderOptions.cs @@ -1,4 +1,4 @@ -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; /// /// Customisation options for connector options binding. diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsValidationException.cs b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsValidationException.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsValidationException.cs rename to src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsValidationException.cs index 4bd9b48c..a9663841 100644 --- a/src/StellaOps.Vexer.Connectors.Abstractions/VexConnectorOptionsValidationException.cs +++ b/src/StellaOps.Excititor.Connectors.Abstractions/VexConnectorOptionsValidationException.cs @@ -1,6 +1,6 @@ using System.Collections.Immutable; -namespace StellaOps.Vexer.Connectors.Abstractions; +namespace StellaOps.Excititor.Connectors.Abstractions; public sealed class VexConnectorOptionsValidationException : Exception { diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/Connectors/CiscoCsafConnectorTests.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/Connectors/CiscoCsafConnectorTests.cs similarity index 94% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/Connectors/CiscoCsafConnectorTests.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/Connectors/CiscoCsafConnectorTests.cs index 792f3326..f69b90eb 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/Connectors/CiscoCsafConnectorTests.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/Connectors/CiscoCsafConnectorTests.cs @@ -7,18 +7,18 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Microsoft.Extensions.DependencyInjection; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.Cisco.CSAF; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Metadata; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Cisco.CSAF; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Metadata; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Storage.Mongo; using System.Collections.Immutable; using System.IO.Abstractions.TestingHelpers; using Xunit; using System.Threading; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF.Tests.Connectors; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF.Tests.Connectors; public sealed class CiscoCsafConnectorTests { @@ -33,7 +33,7 @@ public sealed class CiscoCsafConnectorTests "publisher": { "name": "Cisco", "category": "vendor", - "contact_details": { "id": "vexer:cisco" } + "contact_details": { "id": "excititor:cisco" } } }, "distributions": { diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/Metadata/CiscoProviderMetadataLoaderTests.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/Metadata/CiscoProviderMetadataLoaderTests.cs similarity index 92% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/Metadata/CiscoProviderMetadataLoaderTests.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/Metadata/CiscoProviderMetadataLoaderTests.cs index 59b0031d..9f94c8b5 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/Metadata/CiscoProviderMetadataLoaderTests.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/Metadata/CiscoProviderMetadataLoaderTests.cs @@ -5,12 +5,12 @@ using FluentAssertions; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Metadata; +using StellaOps.Excititor.Core; using System.IO.Abstractions.TestingHelpers; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF.Tests.Metadata; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF.Tests.Metadata; public sealed class CiscoProviderMetadataLoaderTests { @@ -24,7 +24,7 @@ public sealed class CiscoProviderMetadataLoaderTests "name": "Cisco CSAF", "category": "vendor", "contact_details": { - "id": "vexer:cisco" + "id": "excititor:cisco" } } }, @@ -72,7 +72,7 @@ public sealed class CiscoProviderMetadataLoaderTests var result = await loader.LoadAsync(CancellationToken.None); - result.Provider.Id.Should().Be("vexer:cisco"); + result.Provider.Id.Should().Be("excititor:cisco"); result.Provider.BaseUris.Should().ContainSingle(uri => uri.ToString() == "https://api.security.cisco.com/csaf/v2/advisories/"); result.Provider.Discovery.RolIeService.Should().Be(new Uri("https://api.security.cisco.com/csaf/rolie/feed")); result.ServedFromCache.Should().BeFalse(); @@ -91,7 +91,7 @@ public sealed class CiscoProviderMetadataLoaderTests "name": "Cisco CSAF", "category": "vendor", "contact_details": { - "id": "vexer:cisco" + "id": "excititor:cisco" } } } @@ -117,7 +117,7 @@ public sealed class CiscoProviderMetadataLoaderTests var result = await loader.LoadAsync(CancellationToken.None); result.FromOfflineSnapshot.Should().BeTrue(); - result.Provider.Id.Should().Be("vexer:cisco"); + result.Provider.Id.Should().Be("excititor:cisco"); } private sealed class SingleHttpClientFactory : IHttpClientFactory diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests.csproj b/src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests.csproj similarity index 80% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests.csproj rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests.csproj index 1e11d778..9b7873d7 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests/StellaOps.Vexer.Connectors.Cisco.CSAF.Tests.csproj +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests/StellaOps.Excititor.Connectors.Cisco.CSAF.Tests.csproj @@ -11,6 +11,6 @@ - + diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/AGENTS.md b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/AGENTS.md similarity index 96% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/AGENTS.md rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/AGENTS.md index fb3df82b..cc2d5675 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/AGENTS.md @@ -20,4 +20,4 @@ Out: normalization/export, attestation, Mongo wiring (handled in other modules). - Log fetch batches with document counts/durations; mask credentials. - Emit metrics for rate-limit hits, retries, and quarantine events. ## Tests -- Unit tests plus HTTP harness fixtures will live in `../StellaOps.Vexer.Connectors.Cisco.CSAF.Tests`. +- Unit tests plus HTTP harness fixtures will live in `../StellaOps.Excititor.Connectors.Cisco.CSAF.Tests`. diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/CiscoCsafConnector.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/CiscoCsafConnector.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/CiscoCsafConnector.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/CiscoCsafConnector.cs index a9829c3c..11c1d028 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/CiscoCsafConnector.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/CiscoCsafConnector.cs @@ -5,18 +5,18 @@ using System.Net.Http; using System.Runtime.CompilerServices; using System.Text.Json; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Metadata; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Metadata; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Storage.Mongo; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF; public sealed class CiscoCsafConnector : VexConnectorBase { private static readonly VexConnectorDescriptor DescriptorInstance = new( - id: "vexer:cisco", + id: "excititor:cisco", kind: VexProviderKind.Vendor, displayName: "Cisco CSAF") { diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptions.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptions.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptions.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptions.cs index 20ee0ce5..4531ba65 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptions.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptions.cs @@ -1,6 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; public sealed class CiscoConnectorOptions : IValidatableObject { diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptionsValidator.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptionsValidator.cs similarity index 88% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptionsValidator.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptionsValidator.cs index 6599b60a..4932578c 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptionsValidator.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/Configuration/CiscoConnectorOptionsValidator.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using StellaOps.Vexer.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Abstractions; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; public sealed class CiscoConnectorOptionsValidator : IVexConnectorOptionsValidator { diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/DependencyInjection/CiscoConnectorServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/DependencyInjection/CiscoConnectorServiceCollectionExtensions.cs similarity index 87% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/DependencyInjection/CiscoConnectorServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/DependencyInjection/CiscoConnectorServiceCollectionExtensions.cs index a8ce354c..f52a10d1 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/DependencyInjection/CiscoConnectorServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/DependencyInjection/CiscoConnectorServiceCollectionExtensions.cs @@ -4,13 +4,13 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Metadata; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Metadata; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Core; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF.DependencyInjection; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF.DependencyInjection; public static class CiscoConnectorServiceCollectionExtensions { diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/Metadata/CiscoProviderMetadataLoader.cs b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/Metadata/CiscoProviderMetadataLoader.cs similarity index 98% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/Metadata/CiscoProviderMetadataLoader.cs rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/Metadata/CiscoProviderMetadataLoader.cs index 5d5d7438..39cd1b20 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/Metadata/CiscoProviderMetadataLoader.cs +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/Metadata/CiscoProviderMetadataLoader.cs @@ -5,15 +5,15 @@ using System.Text.Json; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.Cisco.CSAF.Configuration; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Cisco.CSAF.Configuration; +using StellaOps.Excititor.Core; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.Cisco.CSAF.Metadata; +namespace StellaOps.Excititor.Connectors.Cisco.CSAF.Metadata; public sealed class CiscoProviderMetadataLoader { - public const string CacheKey = "StellaOps.Vexer.Connectors.Cisco.CSAF.Metadata"; + public const string CacheKey = "StellaOps.Excititor.Connectors.Cisco.CSAF.Metadata"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _memoryCache; diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/StellaOps.Vexer.Connectors.Cisco.CSAF.csproj b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/StellaOps.Excititor.Connectors.Cisco.CSAF.csproj similarity index 66% rename from src/StellaOps.Vexer.Connectors.Cisco.CSAF/StellaOps.Vexer.Connectors.Cisco.CSAF.csproj rename to src/StellaOps.Excititor.Connectors.Cisco.CSAF/StellaOps.Excititor.Connectors.Cisco.CSAF.csproj index d7480a49..c9ee7659 100644 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/StellaOps.Vexer.Connectors.Cisco.CSAF.csproj +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/StellaOps.Excititor.Connectors.Cisco.CSAF.csproj @@ -7,9 +7,9 @@ true - - - + + + diff --git a/src/StellaOps.Excititor.Connectors.Cisco.CSAF/TASKS.md b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/TASKS.md new file mode 100644 index 00000000..833d1535 --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.Cisco.CSAF/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-CISCO-01-001 – Endpoint discovery & auth plumbing|Team Excititor Connectors – Cisco|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Added `CiscoProviderMetadataLoader` with bearer token support, offline snapshot fallback, DI helpers, and tests covering network/offline discovery to unblock subsequent fetch work.| +|EXCITITOR-CONN-CISCO-01-002 – CSAF pull loop & pagination|Team Excititor Connectors – Cisco|EXCITITOR-CONN-CISCO-01-001, EXCITITOR-STORAGE-01-003|**DONE (2025-10-17)** – Implemented paginated advisory fetch using provider directories, raw document persistence with dedupe/state tracking, offline resiliency, and unit coverage.| +|EXCITITOR-CONN-CISCO-01-003 – Provider trust metadata|Team Excititor Connectors – Cisco|EXCITITOR-CONN-CISCO-01-002, EXCITITOR-POLICY-01-001|TODO – Emit cosign/PGP trust metadata and advisory provenance hints for policy weighting.| diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests/Authentication/MsrcTokenProviderTests.cs b/src/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests/Authentication/MsrcTokenProviderTests.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests/Authentication/MsrcTokenProviderTests.cs rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests/Authentication/MsrcTokenProviderTests.cs index cea0cb3c..515991dc 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests/Authentication/MsrcTokenProviderTests.cs +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests/Authentication/MsrcTokenProviderTests.cs @@ -6,12 +6,12 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using NSubstitute; -using StellaOps.Vexer.Connectors.MSRC.CSAF.Authentication; -using StellaOps.Vexer.Connectors.MSRC.CSAF.Configuration; +using StellaOps.Excititor.Connectors.MSRC.CSAF.Authentication; +using StellaOps.Excititor.Connectors.MSRC.CSAF.Configuration; using System.IO.Abstractions.TestingHelpers; using Xunit; -namespace StellaOps.Vexer.Connectors.MSRC.CSAF.Tests.Authentication; +namespace StellaOps.Excititor.Connectors.MSRC.CSAF.Tests.Authentication; public sealed class MsrcTokenProviderTests { diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests.csproj b/src/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests.csproj similarity index 84% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests.csproj rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests.csproj index b3eb395f..fb2791b8 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests/StellaOps.Vexer.Connectors.MSRC.CSAF.Tests.csproj +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests/StellaOps.Excititor.Connectors.MSRC.CSAF.Tests.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/AGENTS.md b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/AGENTS.md similarity index 95% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF/AGENTS.md rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF/AGENTS.md index b96c34a8..4f9f7b88 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/AGENTS.md @@ -20,4 +20,4 @@ Out: normalization/export, attestation, storage implementations (handled elsewhe - Log request batches, rate-limit responses, and token refresh events without leaking secrets. - Track metrics for documents fetched, retries, and failure categories. ## Tests -- Connector tests with mocked MSRC endpoints and AAD token flow will live in `../StellaOps.Vexer.Connectors.MSRC.CSAF.Tests`. +- Connector tests with mocked MSRC endpoints and AAD token flow will live in `../StellaOps.Excititor.Connectors.MSRC.CSAF.Tests`. diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/Authentication/MsrcTokenProvider.cs b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/Authentication/MsrcTokenProvider.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF/Authentication/MsrcTokenProvider.cs rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF/Authentication/MsrcTokenProvider.cs index c201e8dd..5244504c 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/Authentication/MsrcTokenProvider.cs +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/Authentication/MsrcTokenProvider.cs @@ -9,9 +9,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.MSRC.CSAF.Configuration; +using StellaOps.Excititor.Connectors.MSRC.CSAF.Configuration; -namespace StellaOps.Vexer.Connectors.MSRC.CSAF.Authentication; +namespace StellaOps.Excititor.Connectors.MSRC.CSAF.Authentication; public interface IMsrcTokenProvider { @@ -20,7 +20,7 @@ public interface IMsrcTokenProvider public sealed class MsrcTokenProvider : IMsrcTokenProvider, IDisposable { - private const string CachePrefix = "StellaOps.Vexer.Connectors.MSRC.CSAF.Token"; + private const string CachePrefix = "StellaOps.Excititor.Connectors.MSRC.CSAF.Token"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _cache; diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/Configuration/MsrcConnectorOptions.cs b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/Configuration/MsrcConnectorOptions.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF/Configuration/MsrcConnectorOptions.cs rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF/Configuration/MsrcConnectorOptions.cs index 7139af96..4b65f94a 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/Configuration/MsrcConnectorOptions.cs +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/Configuration/MsrcConnectorOptions.cs @@ -2,11 +2,11 @@ using System; using System.IO; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.MSRC.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.MSRC.CSAF.Configuration; public sealed class MsrcConnectorOptions { - public const string TokenClientName = "vexer.connector.msrc.token"; + public const string TokenClientName = "excititor.connector.msrc.token"; public const string DefaultScope = "https://api.msrc.microsoft.com/.default"; /// diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/DependencyInjection/MsrcConnectorServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/DependencyInjection/MsrcConnectorServiceCollectionExtensions.cs similarity index 84% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF/DependencyInjection/MsrcConnectorServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF/DependencyInjection/MsrcConnectorServiceCollectionExtensions.cs index 633e647c..565718e0 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/DependencyInjection/MsrcConnectorServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/DependencyInjection/MsrcConnectorServiceCollectionExtensions.cs @@ -4,11 +4,11 @@ using System.Net.Http; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using StellaOps.Vexer.Connectors.MSRC.CSAF.Authentication; -using StellaOps.Vexer.Connectors.MSRC.CSAF.Configuration; +using StellaOps.Excititor.Connectors.MSRC.CSAF.Authentication; +using StellaOps.Excititor.Connectors.MSRC.CSAF.Configuration; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.MSRC.CSAF.DependencyInjection; +namespace StellaOps.Excititor.Connectors.MSRC.CSAF.DependencyInjection; public static class MsrcConnectorServiceCollectionExtensions { @@ -25,7 +25,7 @@ public static class MsrcConnectorServiceCollectionExtensions services.AddHttpClient(MsrcConnectorOptions.TokenClientName, client => { client.Timeout = TimeSpan.FromSeconds(30); - client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Vexer.Connectors.MSRC.CSAF/1.0"); + client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Excititor.Connectors.MSRC.CSAF/1.0"); client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); }) .ConfigurePrimaryHttpMessageHandler(static () => new HttpClientHandler diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/StellaOps.Vexer.Connectors.Ubuntu.CSAF.csproj b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/StellaOps.Excititor.Connectors.MSRC.CSAF.csproj similarity index 83% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/StellaOps.Vexer.Connectors.Ubuntu.CSAF.csproj rename to src/StellaOps.Excititor.Connectors.MSRC.CSAF/StellaOps.Excititor.Connectors.MSRC.CSAF.csproj index a99a942f..f6b57b36 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/StellaOps.Vexer.Connectors.Ubuntu.CSAF.csproj +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/StellaOps.Excititor.Connectors.MSRC.CSAF.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Excititor.Connectors.MSRC.CSAF/TASKS.md b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/TASKS.md new file mode 100644 index 00000000..1b74c7e3 --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.MSRC.CSAF/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-MS-01-001 – AAD onboarding & token cache|Team Excititor Connectors – MSRC|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Added MSRC connector project with configurable AAD options, token provider (offline/online modes), DI wiring, and unit tests covering caching and fallback scenarios.| +|EXCITITOR-CONN-MS-01-002 – CSAF download pipeline|Team Excititor Connectors – MSRC|EXCITITOR-CONN-MS-01-001, EXCITITOR-STORAGE-01-003|TODO – Fetch CSAF packages with retry/backoff, checksum verification, and raw document persistence plus quarantine for schema failures.| +|EXCITITOR-CONN-MS-01-003 – Trust metadata & provenance hints|Team Excititor Connectors – MSRC|EXCITITOR-CONN-MS-01-002, EXCITITOR-POLICY-01-001|TODO – Emit cosign/AAD issuer metadata, attach provenance details, and document policy integration.| diff --git a/src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/AGENTS.md b/src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/AGENTS.md similarity index 95% rename from src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/AGENTS.md rename to src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/AGENTS.md index f1e74ebb..b95b946d 100644 --- a/src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/AGENTS.md @@ -20,4 +20,4 @@ Out: normalization/export, policy evaluation, storage implementation. - Log image references, attestation counts, verification outcomes; redact credentials. - Emit metrics for attestation reuse ratio, verification duration, and failures. ## Tests -- Connector tests with mock OCI registry/attestation responses will live in `../StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest.Tests`. +- Connector tests with mock OCI registry/attestation responses will live in `../StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest.Tests`. diff --git a/src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/TASKS.md b/src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/TASKS.md new file mode 100644 index 00000000..7ddece4c --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.OCI.OpenVEX.Attest/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-OCI-01-001 – OCI discovery & auth plumbing|Team Excititor Connectors – OCI|EXCITITOR-CONN-ABS-01-001|TODO – Resolve OCI references, configure cosign auth (keyless/keyed), and support offline attestation bundles.| +|EXCITITOR-CONN-OCI-01-002 – Attestation fetch & verify loop|Team Excititor Connectors – OCI|EXCITITOR-CONN-OCI-01-001, EXCITITOR-ATTEST-01-002|TODO – Download DSSE attestations, trigger verification, handle retries/backoff, and persist raw statements with metadata.| +|EXCITITOR-CONN-OCI-01-003 – Provenance metadata & policy hooks|Team Excititor Connectors – OCI|EXCITITOR-CONN-OCI-01-002, EXCITITOR-POLICY-01-001|TODO – Emit provenance hints (image, subject digest, issuer) and trust metadata for policy weighting/logging.| diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests/Metadata/OracleCatalogLoaderTests.cs b/src/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests/Metadata/OracleCatalogLoaderTests.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests/Metadata/OracleCatalogLoaderTests.cs rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests/Metadata/OracleCatalogLoaderTests.cs index de05d2d4..d146b552 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests/Metadata/OracleCatalogLoaderTests.cs +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests/Metadata/OracleCatalogLoaderTests.cs @@ -5,13 +5,13 @@ using System.Text; using FluentAssertions; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Metadata; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Metadata; using System.IO.Abstractions.TestingHelpers; using Xunit; using System.Threading; -namespace StellaOps.Vexer.Connectors.Oracle.CSAF.Tests.Metadata; +namespace StellaOps.Excititor.Connectors.Oracle.CSAF.Tests.Metadata; public sealed class OracleCatalogLoaderTests { diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests.csproj b/src/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests.csproj similarity index 82% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests.csproj rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests.csproj index 78a8cb0a..a93d8780 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests/StellaOps.Vexer.Connectors.Oracle.CSAF.Tests.csproj +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests/StellaOps.Excititor.Connectors.Oracle.CSAF.Tests.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/AGENTS.md b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/AGENTS.md similarity index 96% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/AGENTS.md rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/AGENTS.md index fab25f9c..2ba1a63c 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/AGENTS.md @@ -20,4 +20,4 @@ Out: normalization, storage internals, export/attestation flows. - Log CPU release windows, document counts, and fetch durations; redact any secrets. - Emit metrics for deduped vs new documents and quarantine rates. ## Tests -- Harness tests with mocked Oracle catalogues will live in `../StellaOps.Vexer.Connectors.Oracle.CSAF.Tests`. +- Harness tests with mocked Oracle catalogues will live in `../StellaOps.Excititor.Connectors.Oracle.CSAF.Tests`. diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptions.cs b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptions.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptions.cs rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptions.cs index aea25b80..a0c0abd5 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptions.cs +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptions.cs @@ -2,11 +2,11 @@ using System; using System.IO; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.Oracle.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.Oracle.CSAF.Configuration; public sealed class OracleConnectorOptions { - public const string HttpClientName = "vexer.connector.oracle.catalog"; + public const string HttpClientName = "excititor.connector.oracle.catalog"; /// /// Oracle CSAF catalog endpoint hosting advisory metadata. diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptionsValidator.cs b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptionsValidator.cs similarity index 87% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptionsValidator.cs rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptionsValidator.cs index 13574413..684fa582 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptionsValidator.cs +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/Configuration/OracleConnectorOptionsValidator.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; using System.IO.Abstractions; -using StellaOps.Vexer.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Abstractions; -namespace StellaOps.Vexer.Connectors.Oracle.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.Oracle.CSAF.Configuration; public sealed class OracleConnectorOptionsValidator : IVexConnectorOptionsValidator { diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/DependencyInjection/OracleConnectorServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/DependencyInjection/OracleConnectorServiceCollectionExtensions.cs similarity index 82% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/DependencyInjection/OracleConnectorServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/DependencyInjection/OracleConnectorServiceCollectionExtensions.cs index af8aa641..fd56b2a7 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/DependencyInjection/OracleConnectorServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/DependencyInjection/OracleConnectorServiceCollectionExtensions.cs @@ -4,13 +4,13 @@ using System.Net.Http; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Metadata; +using StellaOps.Excititor.Core; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.Oracle.CSAF.DependencyInjection; +namespace StellaOps.Excititor.Connectors.Oracle.CSAF.DependencyInjection; public static class OracleConnectorServiceCollectionExtensions { @@ -29,7 +29,7 @@ public static class OracleConnectorServiceCollectionExtensions services.AddHttpClient(OracleConnectorOptions.HttpClientName, client => { client.Timeout = TimeSpan.FromSeconds(60); - client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Vexer.Connectors.Oracle.CSAF/1.0"); + client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Excititor.Connectors.Oracle.CSAF/1.0"); client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); }) .ConfigurePrimaryHttpMessageHandler(static () => new HttpClientHandler diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/Metadata/OracleCatalogLoader.cs b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/Metadata/OracleCatalogLoader.cs similarity index 98% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/Metadata/OracleCatalogLoader.cs rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/Metadata/OracleCatalogLoader.cs index 8268aff2..9df922bc 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/Metadata/OracleCatalogLoader.cs +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/Metadata/OracleCatalogLoader.cs @@ -9,13 +9,13 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Configuration; -namespace StellaOps.Vexer.Connectors.Oracle.CSAF.Metadata; +namespace StellaOps.Excititor.Connectors.Oracle.CSAF.Metadata; public sealed class OracleCatalogLoader { - public const string CachePrefix = "StellaOps.Vexer.Connectors.Oracle.CSAF.Catalog"; + public const string CachePrefix = "StellaOps.Excititor.Connectors.Oracle.CSAF.Catalog"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _memoryCache; diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/OracleCsafConnector.cs b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/OracleCsafConnector.cs similarity index 91% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/OracleCsafConnector.cs rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/OracleCsafConnector.cs index ec4bb0e3..757c5beb 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/OracleCsafConnector.cs +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/OracleCsafConnector.cs @@ -2,17 +2,17 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Runtime.CompilerServices; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Oracle.CSAF.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Oracle.CSAF.Metadata; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.Oracle.CSAF; +namespace StellaOps.Excititor.Connectors.Oracle.CSAF; public sealed class OracleCsafConnector : VexConnectorBase { private static readonly VexConnectorDescriptor DescriptorInstance = new( - id: "vexer:oracle", + id: "excititor:oracle", kind: VexProviderKind.Vendor, displayName: "Oracle CSAF") { diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/StellaOps.Vexer.Connectors.MSRC.CSAF.csproj b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/StellaOps.Excititor.Connectors.Oracle.CSAF.csproj similarity index 83% rename from src/StellaOps.Vexer.Connectors.MSRC.CSAF/StellaOps.Vexer.Connectors.MSRC.CSAF.csproj rename to src/StellaOps.Excititor.Connectors.Oracle.CSAF/StellaOps.Excititor.Connectors.Oracle.CSAF.csproj index a99a942f..f6b57b36 100644 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/StellaOps.Vexer.Connectors.MSRC.CSAF.csproj +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/StellaOps.Excititor.Connectors.Oracle.CSAF.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Excititor.Connectors.Oracle.CSAF/TASKS.md b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/TASKS.md new file mode 100644 index 00000000..dee7319f --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.Oracle.CSAF/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-ORACLE-01-001 – Oracle CSAF catalogue discovery|Team Excititor Connectors – Oracle|EXCITITOR-CONN-ABS-01-001|DOING (2025-10-17) – Implement catalogue discovery, CPU calendar awareness, and offline snapshot import for Oracle CSAF feeds.| +|EXCITITOR-CONN-ORACLE-01-002 – CSAF download & dedupe pipeline|Team Excititor Connectors – Oracle|EXCITITOR-CONN-ORACLE-01-001, EXCITITOR-STORAGE-01-003|TODO – Fetch CSAF documents with retry/backoff, checksum validation, revision deduplication, and raw persistence.| +|EXCITITOR-CONN-ORACLE-01-003 – Trust metadata + provenance|Team Excititor Connectors – Oracle|EXCITITOR-CONN-ORACLE-01-002, EXCITITOR-POLICY-01-001|TODO – Emit Oracle signing metadata (PGP/cosign) and provenance hints for consensus weighting.| diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/Connectors/RedHatCsafConnectorTests.cs b/src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/Connectors/RedHatCsafConnectorTests.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/Connectors/RedHatCsafConnectorTests.cs rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/Connectors/RedHatCsafConnectorTests.cs index 22765fd2..9adc6f58 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/Connectors/RedHatCsafConnectorTests.cs +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/Connectors/RedHatCsafConnectorTests.cs @@ -8,17 +8,17 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Configuration; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Metadata; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Configuration; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Metadata; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Storage.Mongo; -namespace StellaOps.Vexer.Connectors.RedHat.CSAF.Tests.Connectors; +namespace StellaOps.Excititor.Connectors.RedHat.CSAF.Tests.Connectors; public sealed class RedHatCsafConnectorTests { - private static readonly VexConnectorDescriptor Descriptor = new("vexer:redhat", VexProviderKind.Distro, "Red Hat CSAF"); + private static readonly VexConnectorDescriptor Descriptor = new("excititor:redhat", VexProviderKind.Distro, "Red Hat CSAF"); [Fact] public async Task FetchAsync_EmitsDocumentsAfterSince() diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/Metadata/RedHatProviderMetadataLoaderTests.cs b/src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/Metadata/RedHatProviderMetadataLoaderTests.cs similarity index 98% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/Metadata/RedHatProviderMetadataLoaderTests.cs rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/Metadata/RedHatProviderMetadataLoaderTests.cs index 95d1dec9..98412c0b 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/Metadata/RedHatProviderMetadataLoaderTests.cs +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/Metadata/RedHatProviderMetadataLoaderTests.cs @@ -6,11 +6,11 @@ using System.Text; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Configuration; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Metadata; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Configuration; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Metadata; using System.IO.Abstractions.TestingHelpers; -namespace StellaOps.Vexer.Connectors.RedHat.CSAF.Tests.Metadata; +namespace StellaOps.Excititor.Connectors.RedHat.CSAF.Tests.Metadata; public sealed class RedHatProviderMetadataLoaderTests { diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests.csproj b/src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests.csproj similarity index 67% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests.csproj rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests.csproj index 07cb02f5..9bb50cb9 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests.csproj +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests/StellaOps.Excititor.Connectors.RedHat.CSAF.Tests.csproj @@ -7,8 +7,8 @@ true - - + + diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/AGENTS.md b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/AGENTS.md similarity index 90% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF/AGENTS.md rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF/AGENTS.md index 5c2528d0..207d75a1 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/AGENTS.md @@ -14,7 +14,7 @@ Connector for Red Hat CSAF VEX feeds, fetching provider metadata, CSAF documents - Policy/consensus rely on Red Hat trust metadata captured here. ## Interfaces & contracts - Implements `IVexConnector` with Red Hat-specific options (parallelism, token auth if configured). -- Uses abstractions from `StellaOps.Vexer.Connectors.Abstractions` for HTTP/resume helpers. +- Uses abstractions from `StellaOps.Excititor.Connectors.Abstractions` for HTTP/resume helpers. ## In/Out of scope In: data acquisition, HTTP retries, raw document persistence, provider metadata population. Out: normalization, storage internals, attestation, general connector abstractions (covered elsewhere). @@ -22,4 +22,4 @@ Out: normalization, storage internals, attestation, general connector abstractio - Log provider metadata URL, revision ids, fetch durations; redact tokens. - Emit counters for documents fetched, skipped (304), quarantined. ## Tests -- Connector harness tests (mock HTTP) and resume regression cases will live in `../StellaOps.Vexer.Connectors.RedHat.CSAF.Tests`. +- Connector harness tests (mock HTTP) and resume regression cases will live in `../StellaOps.Excititor.Connectors.RedHat.CSAF.Tests`. diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/Configuration/RedHatConnectorOptions.cs b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/Configuration/RedHatConnectorOptions.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF/Configuration/RedHatConnectorOptions.cs rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF/Configuration/RedHatConnectorOptions.cs index 9d9bf1ab..9e0e5f7e 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/Configuration/RedHatConnectorOptions.cs +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/Configuration/RedHatConnectorOptions.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.RedHat.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.RedHat.CSAF.Configuration; public sealed class RedHatConnectorOptions { @@ -10,7 +10,7 @@ public sealed class RedHatConnectorOptions /// /// HTTP client name registered for the connector. /// - public const string HttpClientName = "vexer.connector.redhat"; + public const string HttpClientName = "excititor.connector.redhat"; /// /// URI of the CSAF provider metadata document. diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/DependencyInjection/RedHatConnectorServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/DependencyInjection/RedHatConnectorServiceCollectionExtensions.cs similarity index 82% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF/DependencyInjection/RedHatConnectorServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF/DependencyInjection/RedHatConnectorServiceCollectionExtensions.cs index ed46bc70..60ec9362 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/DependencyInjection/RedHatConnectorServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/DependencyInjection/RedHatConnectorServiceCollectionExtensions.cs @@ -2,13 +2,13 @@ using System.Net; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Configuration; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Metadata; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Configuration; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Metadata; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Storage.Mongo; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.RedHat.CSAF.DependencyInjection; +namespace StellaOps.Excititor.Connectors.RedHat.CSAF.DependencyInjection; public static class RedHatConnectorServiceCollectionExtensions { @@ -29,7 +29,7 @@ public static class RedHatConnectorServiceCollectionExtensions services.AddHttpClient(RedHatConnectorOptions.HttpClientName, client => { client.Timeout = TimeSpan.FromSeconds(30); - client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Vexer.Connectors.RedHat/1.0"); + client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Excititor.Connectors.RedHat/1.0"); client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/Metadata/RedHatProviderMetadataLoader.cs b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/Metadata/RedHatProviderMetadataLoader.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF/Metadata/RedHatProviderMetadataLoader.cs rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF/Metadata/RedHatProviderMetadataLoader.cs index 8a38db61..d974e30b 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/Metadata/RedHatProviderMetadataLoader.cs +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/Metadata/RedHatProviderMetadataLoader.cs @@ -8,15 +8,15 @@ using System.Text.Json.Serialization; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Configuration; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Configuration; +using StellaOps.Excititor.Core; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.RedHat.CSAF.Metadata; +namespace StellaOps.Excititor.Connectors.RedHat.CSAF.Metadata; public sealed class RedHatProviderMetadataLoader { - public const string CacheKey = "StellaOps.Vexer.Connectors.RedHat.CSAF.Metadata"; + public const string CacheKey = "StellaOps.Excititor.Connectors.RedHat.CSAF.Metadata"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _cache; @@ -242,7 +242,7 @@ public sealed class RedHatProviderMetadataLoader var trust = BuildTrust(); return new VexProvider( - id: "vexer:redhat", + id: "excititor:redhat", displayName: document.Metadata.Provider.Name, kind: VexProviderKind.Distro, baseUris: distributions, diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/RedHatCsafConnector.cs b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/RedHatCsafConnector.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF/RedHatCsafConnector.cs rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF/RedHatCsafConnector.cs index b4cca425..8b7fc08c 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/RedHatCsafConnector.cs +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/RedHatCsafConnector.cs @@ -7,13 +7,13 @@ using System.Text.Json; using System.Xml.Linq; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Configuration; -using StellaOps.Vexer.Connectors.RedHat.CSAF.Metadata; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Configuration; +using StellaOps.Excititor.Connectors.RedHat.CSAF.Metadata; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Storage.Mongo; -namespace StellaOps.Vexer.Connectors.RedHat.CSAF; +namespace StellaOps.Excititor.Connectors.RedHat.CSAF; public sealed class RedHatCsafConnector : VexConnectorBase { diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/StellaOps.Vexer.Connectors.RedHat.CSAF.csproj b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/StellaOps.Excititor.Connectors.RedHat.CSAF.csproj similarity index 73% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF/StellaOps.Vexer.Connectors.RedHat.CSAF.csproj rename to src/StellaOps.Excititor.Connectors.RedHat.CSAF/StellaOps.Excititor.Connectors.RedHat.CSAF.csproj index 3c27086b..afd08612 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/StellaOps.Vexer.Connectors.RedHat.CSAF.csproj +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/StellaOps.Excititor.Connectors.RedHat.CSAF.csproj @@ -7,8 +7,8 @@ true - - + + diff --git a/src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md new file mode 100644 index 00000000..11cc1a92 --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.RedHat.CSAF/TASKS.md @@ -0,0 +1,10 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-RH-01-001 – Provider metadata discovery|Team Excititor Connectors – Red Hat|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Added `RedHatProviderMetadataLoader` with HTTP/ETag caching, offline snapshot handling, and validation; exposed DI helper + tests covering live, cached, and offline scenarios.| +|EXCITITOR-CONN-RH-01-002 – Incremental CSAF pulls|Team Excititor Connectors – Red Hat|EXCITITOR-CONN-RH-01-001, EXCITITOR-STORAGE-01-003|**DONE (2025-10-17)** – Implemented `RedHatCsafConnector` with ROLIE feed parsing, incremental filtering via `context.Since`, CSAF document download + metadata capture, and persistence through `IVexRawDocumentSink`; tests cover live fetch/cache/offline scenarios with ETag handling.| +|EXCITITOR-CONN-RH-01-003 – Trust metadata emission|Team Excititor Connectors – Red Hat|EXCITITOR-CONN-RH-01-002, EXCITITOR-POLICY-01-001|**DONE (2025-10-17)** – Provider metadata loader now emits trust overrides (weight, cosign issuer/pattern, PGP fingerprints) and the connector surfaces provenance hints for policy/consensus layers.| +|EXCITITOR-CONN-RH-01-004 – Resume state persistence|Team Excititor Connectors – Red Hat|EXCITITOR-CONN-RH-01-002, EXCITITOR-STORAGE-01-003|**DONE (2025-10-17)** – Connector now loads/saves resume state via `IVexConnectorStateRepository`, tracking last update timestamp and recent document digests to avoid duplicate CSAF ingestion; regression covers state persistence and duplicate skips.| +|EXCITITOR-CONN-RH-01-005 – Worker/WebService integration|Team Excititor Connectors – Red Hat|EXCITITOR-CONN-RH-01-002|**DONE (2025-10-17)** – Worker/WebService now call `AddRedHatCsafConnector`, register the connector + state repo, and default worker scheduling adds the `excititor:redhat` provider so background jobs and orchestration can activate the connector without extra wiring.| +|EXCITITOR-CONN-RH-01-006 – CSAF normalization parity tests|Team Excititor Connectors – Red Hat|EXCITITOR-CONN-RH-01-002, EXCITITOR-FMT-CSAF-01-001|**DONE (2025-10-17)** – Added RHSA fixture-driven regression verifying CSAF normalizer retains Red Hat product metadata, tracking fields, and timestamps (`rhsa-sample.json` + `CsafNormalizerTests.NormalizeAsync_PreservesRedHatSpecificMetadata`).| diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/Authentication/RancherHubTokenProviderTests.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/Authentication/RancherHubTokenProviderTests.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/Authentication/RancherHubTokenProviderTests.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/Authentication/RancherHubTokenProviderTests.cs index 3ca92c92..39b64040 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/Authentication/RancherHubTokenProviderTests.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/Authentication/RancherHubTokenProviderTests.cs @@ -6,11 +6,11 @@ using System.Threading; using FluentAssertions; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Authentication; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Authentication; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; using Xunit; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests.Authentication; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests.Authentication; public sealed class RancherHubTokenProviderTests { diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/Metadata/RancherHubMetadataLoaderTests.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/Metadata/RancherHubMetadataLoaderTests.cs similarity index 95% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/Metadata/RancherHubMetadataLoaderTests.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/Metadata/RancherHubMetadataLoaderTests.cs index b47da23c..54b1bba5 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests/Metadata/RancherHubMetadataLoaderTests.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/Metadata/RancherHubMetadataLoaderTests.cs @@ -7,20 +7,20 @@ using System.Text; using FluentAssertions; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Authentication; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Metadata; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Authentication; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Metadata; using System.IO.Abstractions.TestingHelpers; using System.Threading; using Xunit; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests.Metadata; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests.Metadata; public sealed class RancherHubMetadataLoaderTests { private const string SampleDiscovery = """ { - "hubId": "vexer:suse.rancher", + "hubId": "excititor:suse.rancher", "title": "SUSE Rancher VEX Hub", "subscription": { "eventsUri": "https://vexhub.suse.com/api/v1/events", diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests.csproj b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests.csproj similarity index 66% rename from src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests.csproj rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests.csproj index e7a249c3..aefea3e9 100644 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests/StellaOps.Vexer.Connectors.RedHat.CSAF.Tests.csproj +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests.csproj @@ -7,8 +7,8 @@ true - - + + diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/AGENTS.md b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/AGENTS.md similarity index 95% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/AGENTS.md rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/AGENTS.md index 3455eba0..0d6c1dfc 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/AGENTS.md @@ -20,4 +20,4 @@ Out: normalization/export tasks, storage layer implementation, attestation. - Log subscription IDs, batch sizes, and checkpoint updates while redacting secrets. - Emit metrics for messages processed, lag, and retries. ## Tests -- Connector harness tests with simulated hub responses will live in `../StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests`. +- Connector harness tests with simulated hub responses will live in `../StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests`. diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Authentication/RancherHubTokenProvider.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Authentication/RancherHubTokenProvider.cs similarity index 96% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Authentication/RancherHubTokenProvider.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Authentication/RancherHubTokenProvider.cs index 6b5ff948..536a46ff 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Authentication/RancherHubTokenProvider.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Authentication/RancherHubTokenProvider.cs @@ -8,13 +8,13 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Authentication; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Authentication; public sealed class RancherHubTokenProvider { - private const string CachePrefix = "StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Token"; + private const string CachePrefix = "StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Token"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _cache; diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptions.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptions.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptions.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptions.cs index 83e0bea1..d9bf7434 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptions.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptions.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.IO; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; public sealed class RancherHubConnectorOptions { @@ -12,7 +12,7 @@ public sealed class RancherHubConnectorOptions /// /// HTTP client name registered for the connector. /// - public const string HttpClientName = "vexer.connector.suse.rancherhub"; + public const string HttpClientName = "excititor.connector.suse.rancherhub"; /// /// URI for the Rancher VEX hub discovery document. diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptionsValidator.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptionsValidator.cs similarity index 87% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptionsValidator.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptionsValidator.cs index 4c29f5c5..175d2fcd 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptionsValidator.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Configuration/RancherHubConnectorOptionsValidator.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; using System.IO.Abstractions; -using StellaOps.Vexer.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Abstractions; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; public sealed class RancherHubConnectorOptionsValidator : IVexConnectorOptionsValidator { diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/DependencyInjection/RancherHubConnectorServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/DependencyInjection/RancherHubConnectorServiceCollectionExtensions.cs similarity index 79% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/DependencyInjection/RancherHubConnectorServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/DependencyInjection/RancherHubConnectorServiceCollectionExtensions.cs index 3e8b23e7..69823a44 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/DependencyInjection/RancherHubConnectorServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/DependencyInjection/RancherHubConnectorServiceCollectionExtensions.cs @@ -4,14 +4,14 @@ using System.Net.Http; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Authentication; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Authentication; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Metadata; +using StellaOps.Excititor.Core; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.DependencyInjection; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.DependencyInjection; public static class RancherHubConnectorServiceCollectionExtensions { @@ -36,7 +36,7 @@ public static class RancherHubConnectorServiceCollectionExtensions services.AddHttpClient(RancherHubConnectorOptions.HttpClientName, client => { client.Timeout = TimeSpan.FromSeconds(30); - client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/1.0"); + client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/1.0"); client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Metadata/RancherHubMetadataLoader.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Metadata/RancherHubMetadataLoader.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Metadata/RancherHubMetadataLoader.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Metadata/RancherHubMetadataLoader.cs index 930f8192..850207f8 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/Metadata/RancherHubMetadataLoader.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/Metadata/RancherHubMetadataLoader.cs @@ -10,15 +10,15 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Authentication; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Authentication; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Metadata; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Metadata; public sealed class RancherHubMetadataLoader { - public const string CachePrefix = "StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Metadata"; + public const string CachePrefix = "StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Metadata"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _memoryCache; @@ -226,7 +226,7 @@ public sealed class RancherHubMetadataLoader using var document = JsonDocument.Parse(payload, _documentOptions); var root = document.RootElement; - var hubId = ReadString(root, "hubId") ?? "vexer:suse:rancher"; + var hubId = ReadString(root, "hubId") ?? "excititor:suse:rancher"; var title = ReadString(root, "title") ?? ReadString(root, "displayName") ?? "SUSE Rancher VEX Hub"; var baseUri = ReadUri(root, "baseUri"); diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/RancherHubConnector.cs b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/RancherHubConnector.cs similarity index 89% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/RancherHubConnector.cs rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/RancherHubConnector.cs index 4b638586..9f8bcb1a 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/RancherHubConnector.cs +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/RancherHubConnector.cs @@ -3,17 +3,17 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Runtime.CompilerServices; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Configuration; -using StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Configuration; +using StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Metadata; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.SUSE.RancherVEXHub; +namespace StellaOps.Excititor.Connectors.SUSE.RancherVEXHub; public sealed class RancherHubConnector : VexConnectorBase { private static readonly VexConnectorDescriptor StaticDescriptor = new( - id: "vexer:suse.rancher", + id: "excititor:suse.rancher", kind: VexProviderKind.Hub, displayName: "SUSE Rancher VEX Hub") { @@ -69,7 +69,7 @@ public sealed class RancherHubConnector : VexConnectorBase _metadata = await _metadataLoader.LoadAsync(_options, cancellationToken).ConfigureAwait(false); } - LogConnectorEvent(LogLevel.Debug, "fetch", "Rancher hub connector discovery ready; event ingestion will be implemented in VEXER-CONN-SUSE-01-002.", new Dictionary + LogConnectorEvent(LogLevel.Debug, "fetch", "Rancher hub connector discovery ready; event ingestion will be implemented in EXCITITOR-CONN-SUSE-01-002.", new Dictionary { ["since"] = context.Since?.ToString("O"), ["subscriptionUri"] = _metadata.Metadata.Subscription.EventsUri.ToString(), diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.csproj b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.csproj similarity index 73% rename from src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.csproj rename to src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.csproj index 3c27086b..afd08612 100644 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.csproj +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.csproj @@ -7,8 +7,8 @@ true - - + + diff --git a/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/TASKS.md b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/TASKS.md new file mode 100644 index 00000000..324d9386 --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.SUSE.RancherVEXHub/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-SUSE-01-001 – Rancher hub discovery & auth|Team Excititor Connectors – SUSE|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Added Rancher hub options/token provider, discovery metadata loader with offline snapshots + caching, connector shell, DI wiring, and unit tests covering network/offline paths.| +|EXCITITOR-CONN-SUSE-01-002 – Checkpointed event ingestion|Team Excititor Connectors – SUSE|EXCITITOR-CONN-SUSE-01-001, EXCITITOR-STORAGE-01-003|TODO – Process hub events with resume checkpoints, deduplication, and quarantine path for malformed payloads.| +|EXCITITOR-CONN-SUSE-01-003 – Trust metadata & policy hints|Team Excititor Connectors – SUSE|EXCITITOR-CONN-SUSE-01-002, EXCITITOR-POLICY-01-001|TODO – Emit provider trust configuration (signers, weight overrides) and attach provenance hints for consensus engine.| diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests/Metadata/UbuntuCatalogLoaderTests.cs b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests/Metadata/UbuntuCatalogLoaderTests.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests/Metadata/UbuntuCatalogLoaderTests.cs rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests/Metadata/UbuntuCatalogLoaderTests.cs index 363fb91d..8335ec5e 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests/Metadata/UbuntuCatalogLoaderTests.cs +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests/Metadata/UbuntuCatalogLoaderTests.cs @@ -5,13 +5,13 @@ using System.Text; using FluentAssertions; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Metadata; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Metadata; using System.IO.Abstractions.TestingHelpers; using Xunit; using System.Threading; -namespace StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests.Metadata; +namespace StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests.Metadata; public sealed class UbuntuCatalogLoaderTests { diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests.csproj b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests.csproj similarity index 82% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests.csproj rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests.csproj index 68fa2841..57fe463d 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests/StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests.csproj +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests/StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/AGENTS.md b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/AGENTS.md similarity index 95% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/AGENTS.md rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/AGENTS.md index 18ec016f..84f8f273 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/AGENTS.md +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/AGENTS.md @@ -20,4 +20,4 @@ Out: normalization/export, storage internals, attestation. - Log release window fetch metrics, rate limits, and deduplication stats; mask secrets. - Emit counters for newly ingested vs unchanged USNs and quota usage. ## Tests -- Connector tests with mocked Ubuntu CSAF endpoints will live in `../StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests`. +- Connector tests with mocked Ubuntu CSAF endpoints will live in `../StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests`. diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptions.cs b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptions.cs similarity index 94% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptions.cs rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptions.cs index d575b61c..6667b276 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptions.cs +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptions.cs @@ -3,11 +3,11 @@ using System.Collections.Generic; using System.IO; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.Ubuntu.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.Ubuntu.CSAF.Configuration; public sealed class UbuntuConnectorOptions { - public const string HttpClientName = "vexer.connector.ubuntu.catalog"; + public const string HttpClientName = "excititor.connector.ubuntu.catalog"; /// /// Root index that lists Ubuntu CSAF channels. diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptionsValidator.cs b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptionsValidator.cs similarity index 87% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptionsValidator.cs rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptionsValidator.cs index 1adb98fd..d53665aa 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptionsValidator.cs +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Configuration/UbuntuConnectorOptionsValidator.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; using System.IO.Abstractions; -using StellaOps.Vexer.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Abstractions; -namespace StellaOps.Vexer.Connectors.Ubuntu.CSAF.Configuration; +namespace StellaOps.Excititor.Connectors.Ubuntu.CSAF.Configuration; public sealed class UbuntuConnectorOptionsValidator : IVexConnectorOptionsValidator { diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/DependencyInjection/UbuntuConnectorServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/DependencyInjection/UbuntuConnectorServiceCollectionExtensions.cs similarity index 82% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/DependencyInjection/UbuntuConnectorServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/DependencyInjection/UbuntuConnectorServiceCollectionExtensions.cs index 42d759c8..d8505db1 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/DependencyInjection/UbuntuConnectorServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/DependencyInjection/UbuntuConnectorServiceCollectionExtensions.cs @@ -4,13 +4,13 @@ using System.Net.Http; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Metadata; +using StellaOps.Excititor.Core; using System.IO.Abstractions; -namespace StellaOps.Vexer.Connectors.Ubuntu.CSAF.DependencyInjection; +namespace StellaOps.Excititor.Connectors.Ubuntu.CSAF.DependencyInjection; public static class UbuntuConnectorServiceCollectionExtensions { @@ -29,7 +29,7 @@ public static class UbuntuConnectorServiceCollectionExtensions services.AddHttpClient(UbuntuConnectorOptions.HttpClientName, client => { client.Timeout = TimeSpan.FromSeconds(60); - client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Vexer.Connectors.Ubuntu.CSAF/1.0"); + client.DefaultRequestHeaders.UserAgent.ParseAdd("StellaOps.Excititor.Connectors.Ubuntu.CSAF/1.0"); client.DefaultRequestHeaders.Accept.ParseAdd("application/json"); }) .ConfigurePrimaryHttpMessageHandler(static () => new HttpClientHandler diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Metadata/UbuntuCatalogLoader.cs b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Metadata/UbuntuCatalogLoader.cs similarity index 97% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Metadata/UbuntuCatalogLoader.cs rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Metadata/UbuntuCatalogLoader.cs index 890c3420..3238ad6a 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/Metadata/UbuntuCatalogLoader.cs +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/Metadata/UbuntuCatalogLoader.cs @@ -9,13 +9,13 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Configuration; -namespace StellaOps.Vexer.Connectors.Ubuntu.CSAF.Metadata; +namespace StellaOps.Excititor.Connectors.Ubuntu.CSAF.Metadata; public sealed class UbuntuCatalogLoader { - public const string CachePrefix = "StellaOps.Vexer.Connectors.Ubuntu.CSAF.Index"; + public const string CachePrefix = "StellaOps.Excititor.Connectors.Ubuntu.CSAF.Index"; private readonly IHttpClientFactory _httpClientFactory; private readonly IMemoryCache _memoryCache; diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/StellaOps.Vexer.Connectors.Oracle.CSAF.csproj b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/StellaOps.Excititor.Connectors.Ubuntu.CSAF.csproj similarity index 83% rename from src/StellaOps.Vexer.Connectors.Oracle.CSAF/StellaOps.Vexer.Connectors.Oracle.CSAF.csproj rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/StellaOps.Excititor.Connectors.Ubuntu.CSAF.csproj index a99a942f..f6b57b36 100644 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/StellaOps.Vexer.Connectors.Oracle.CSAF.csproj +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/StellaOps.Excititor.Connectors.Ubuntu.CSAF.csproj @@ -7,7 +7,7 @@ true - + diff --git a/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/TASKS.md b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/TASKS.md new file mode 100644 index 00000000..e85b2818 --- /dev/null +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CONN-UBUNTU-01-001 – Ubuntu CSAF discovery & channels|Team Excititor Connectors – Ubuntu|EXCITITOR-CONN-ABS-01-001|**DONE (2025-10-17)** – Added Ubuntu connector project with configurable channel options, catalog loader (network/offline), DI wiring, and discovery unit tests.| +|EXCITITOR-CONN-UBUNTU-01-002 – Incremental fetch & deduplication|Team Excititor Connectors – Ubuntu|EXCITITOR-CONN-UBUNTU-01-001, EXCITITOR-STORAGE-01-003|TODO – Fetch CSAF bundles with ETag handling, checksum validation, deduplication, and raw persistence.| +|EXCITITOR-CONN-UBUNTU-01-003 – Trust metadata & provenance|Team Excititor Connectors – Ubuntu|EXCITITOR-CONN-UBUNTU-01-002, EXCITITOR-POLICY-01-001|TODO – Emit Ubuntu signing metadata (GPG fingerprints) plus provenance hints for policy weighting and diagnostics.| diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/UbuntuCsafConnector.cs b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/UbuntuCsafConnector.cs similarity index 90% rename from src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/UbuntuCsafConnector.cs rename to src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/UbuntuCsafConnector.cs index c47702f8..85645843 100644 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/UbuntuCsafConnector.cs +++ b/src/StellaOps.Excititor.Connectors.Ubuntu.CSAF/UbuntuCsafConnector.cs @@ -2,17 +2,17 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Runtime.CompilerServices; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Connectors.Abstractions; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Configuration; -using StellaOps.Vexer.Connectors.Ubuntu.CSAF.Metadata; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Connectors.Abstractions; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Configuration; +using StellaOps.Excititor.Connectors.Ubuntu.CSAF.Metadata; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Connectors.Ubuntu.CSAF; +namespace StellaOps.Excititor.Connectors.Ubuntu.CSAF; public sealed class UbuntuCsafConnector : VexConnectorBase { private static readonly VexConnectorDescriptor DescriptorInstance = new( - id: "vexer:ubuntu", + id: "excititor:ubuntu", kind: VexProviderKind.Distro, displayName: "Ubuntu CSAF") { diff --git a/src/StellaOps.Vexer.Core.Tests/StellaOps.Vexer.Core.Tests.csproj b/src/StellaOps.Excititor.Core.Tests/StellaOps.Excititor.Core.Tests.csproj similarity index 62% rename from src/StellaOps.Vexer.Core.Tests/StellaOps.Vexer.Core.Tests.csproj rename to src/StellaOps.Excititor.Core.Tests/StellaOps.Excititor.Core.Tests.csproj index 1d4ebbf1..e464615f 100644 --- a/src/StellaOps.Vexer.Core.Tests/StellaOps.Vexer.Core.Tests.csproj +++ b/src/StellaOps.Excititor.Core.Tests/StellaOps.Excititor.Core.Tests.csproj @@ -7,7 +7,7 @@ true - - + + diff --git a/src/StellaOps.Vexer.Core.Tests/VexCanonicalJsonSerializerTests.cs b/src/StellaOps.Excititor.Core.Tests/VexCanonicalJsonSerializerTests.cs similarity index 98% rename from src/StellaOps.Vexer.Core.Tests/VexCanonicalJsonSerializerTests.cs rename to src/StellaOps.Excititor.Core.Tests/VexCanonicalJsonSerializerTests.cs index 3212681f..cb98aa66 100644 --- a/src/StellaOps.Vexer.Core.Tests/VexCanonicalJsonSerializerTests.cs +++ b/src/StellaOps.Excititor.Core.Tests/VexCanonicalJsonSerializerTests.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.Collections.Immutable; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; using Xunit; -namespace StellaOps.Vexer.Core.Tests; +namespace StellaOps.Excititor.Core.Tests; public sealed class VexCanonicalJsonSerializerTests { diff --git a/src/StellaOps.Vexer.Core.Tests/VexConsensusResolverTests.cs b/src/StellaOps.Excititor.Core.Tests/VexConsensusResolverTests.cs similarity index 99% rename from src/StellaOps.Vexer.Core.Tests/VexConsensusResolverTests.cs rename to src/StellaOps.Excititor.Core.Tests/VexConsensusResolverTests.cs index 1396d0b9..07e738e3 100644 --- a/src/StellaOps.Vexer.Core.Tests/VexConsensusResolverTests.cs +++ b/src/StellaOps.Excititor.Core.Tests/VexConsensusResolverTests.cs @@ -2,10 +2,10 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; using Xunit; -namespace StellaOps.Vexer.Core.Tests; +namespace StellaOps.Excititor.Core.Tests; public sealed class VexConsensusResolverTests { diff --git a/src/StellaOps.Vexer.Core.Tests/VexPolicyBinderTests.cs b/src/StellaOps.Excititor.Core.Tests/VexPolicyBinderTests.cs similarity index 96% rename from src/StellaOps.Vexer.Core.Tests/VexPolicyBinderTests.cs rename to src/StellaOps.Excititor.Core.Tests/VexPolicyBinderTests.cs index 9f48ffa5..8cfd2571 100644 --- a/src/StellaOps.Vexer.Core.Tests/VexPolicyBinderTests.cs +++ b/src/StellaOps.Excititor.Core.Tests/VexPolicyBinderTests.cs @@ -1,9 +1,9 @@ using System; using System.IO; using System.Text; -using StellaOps.Vexer.Policy; +using StellaOps.Excititor.Policy; -namespace StellaOps.Vexer.Core.Tests; +namespace StellaOps.Excititor.Core.Tests; public sealed class VexPolicyBinderTests { diff --git a/src/StellaOps.Vexer.Core.Tests/VexPolicyDiagnosticsTests.cs b/src/StellaOps.Excititor.Core.Tests/VexPolicyDiagnosticsTests.cs similarity index 95% rename from src/StellaOps.Vexer.Core.Tests/VexPolicyDiagnosticsTests.cs rename to src/StellaOps.Excititor.Core.Tests/VexPolicyDiagnosticsTests.cs index 06971d3d..93f15757 100644 --- a/src/StellaOps.Vexer.Core.Tests/VexPolicyDiagnosticsTests.cs +++ b/src/StellaOps.Excititor.Core.Tests/VexPolicyDiagnosticsTests.cs @@ -5,11 +5,11 @@ using System.Linq; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Microsoft.Extensions.Time.Testing; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Policy; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Policy; using System.Diagnostics.Metrics; -namespace StellaOps.Vexer.Core.Tests; +namespace StellaOps.Excititor.Core.Tests; public class VexPolicyDiagnosticsTests { @@ -52,7 +52,7 @@ public class VexPolicyDiagnosticsTests Assert.Equal(new[] { "provider-a", "provider-b" }, report.ActiveOverrides.Keys.OrderBy(static key => key, StringComparer.Ordinal)); Assert.Contains(report.Recommendations, message => message.Contains("Resolve policy errors", StringComparison.OrdinalIgnoreCase)); Assert.Contains(report.Recommendations, message => message.Contains("provider-a", StringComparison.OrdinalIgnoreCase)); - Assert.Contains(report.Recommendations, message => message.Contains("docs/ARCHITECTURE_VEXER.md", StringComparison.OrdinalIgnoreCase)); + Assert.Contains(report.Recommendations, message => message.Contains("docs/ARCHITECTURE_EXCITITOR.md", StringComparison.OrdinalIgnoreCase)); } [Fact] @@ -78,7 +78,7 @@ public class VexPolicyDiagnosticsTests string? lastRevision = null; listener.InstrumentPublished += (instrument, _) => { - if (instrument.Meter.Name == "StellaOps.Vexer.Policy" && + if (instrument.Meter.Name == "StellaOps.Excititor.Policy" && instrument.Name == "vex.policy.reloads") { listener.EnableMeasurementEvents(instrument); diff --git a/src/StellaOps.Vexer.Core.Tests/VexQuerySignatureTests.cs b/src/StellaOps.Excititor.Core.Tests/VexQuerySignatureTests.cs similarity index 95% rename from src/StellaOps.Vexer.Core.Tests/VexQuerySignatureTests.cs rename to src/StellaOps.Excititor.Core.Tests/VexQuerySignatureTests.cs index 688a71fc..fba87363 100644 --- a/src/StellaOps.Vexer.Core.Tests/VexQuerySignatureTests.cs +++ b/src/StellaOps.Excititor.Core.Tests/VexQuerySignatureTests.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; using Xunit; -namespace StellaOps.Vexer.Core.Tests; +namespace StellaOps.Excititor.Core.Tests; public sealed class VexQuerySignatureTests { diff --git a/src/StellaOps.Vexer.Core/AGENTS.md b/src/StellaOps.Excititor.Core/AGENTS.md similarity index 78% rename from src/StellaOps.Vexer.Core/AGENTS.md rename to src/StellaOps.Excititor.Core/AGENTS.md index dbe5b507..5e3cb4e4 100644 --- a/src/StellaOps.Vexer.Core/AGENTS.md +++ b/src/StellaOps.Excititor.Core/AGENTS.md @@ -1,14 +1,14 @@ # AGENTS ## Role -Domain source of truth for VEX statements, consensus rollups, and trust policy orchestration across all Vexer services. +Domain source of truth for VEX statements, consensus rollups, and trust policy orchestration across all Excititor services. ## Scope - Records for raw document metadata, normalized claims, consensus projections, and export descriptors. - Policy + weighting engine that projects provider trust tiers into consensus status outcomes. - Connector, normalizer, export, and attestation contracts shared by WebService, Worker, and plug-ins. - Deterministic hashing utilities (query signatures, artifact digests, attestation subjects). ## Participants -- Vexer WebService uses the models to persist ingress/egress payloads and to perform consensus mutations. -- Vexer Worker executes reconciliation and verification routines using policy helpers defined here. +- Excititor WebService uses the models to persist ingress/egress payloads and to perform consensus mutations. +- Excititor Worker executes reconciliation and verification routines using policy helpers defined here. - Export/Attestation modules depend on record definitions for envelopes and manifest payloads. ## Interfaces & contracts - `IVexConnector`, `INormalizer`, `IExportEngine`, `ITransparencyLogClient`, `IArtifactStore`, and policy abstractions for consensus resolution. @@ -22,5 +22,5 @@ Out: Mongo persistence implementations, HTTP endpoints, background scheduling, c - Emit correlation identifiers and query signatures without embedding PII. - Ensure deterministic logging order to keep reproducibility guarantees intact. ## Tests -- Unit coverage lives in `../StellaOps.Vexer.Core.Tests` (to be scaffolded) focusing on consensus, policy gates, and serialization determinism. +- Unit coverage lives in `../StellaOps.Excititor.Core.Tests` (to be scaffolded) focusing on consensus, policy gates, and serialization determinism. - Golden fixtures must rely on canonical JSON snapshots produced via stable serializers. diff --git a/src/StellaOps.Vexer.Core/BaselineVexConsensusPolicy.cs b/src/StellaOps.Excititor.Core/BaselineVexConsensusPolicy.cs similarity index 97% rename from src/StellaOps.Vexer.Core/BaselineVexConsensusPolicy.cs rename to src/StellaOps.Excititor.Core/BaselineVexConsensusPolicy.cs index 170fec6e..3f5d1a5d 100644 --- a/src/StellaOps.Vexer.Core/BaselineVexConsensusPolicy.cs +++ b/src/StellaOps.Excititor.Core/BaselineVexConsensusPolicy.cs @@ -1,4 +1,4 @@ -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; /// /// Baseline consensus policy applying tier-based weights and enforcing justification gates. diff --git a/src/StellaOps.Vexer.Core/IVexConsensusPolicy.cs b/src/StellaOps.Excititor.Core/IVexConsensusPolicy.cs similarity index 96% rename from src/StellaOps.Vexer.Core/IVexConsensusPolicy.cs rename to src/StellaOps.Excititor.Core/IVexConsensusPolicy.cs index 26444ebf..47ba82b7 100644 --- a/src/StellaOps.Vexer.Core/IVexConsensusPolicy.cs +++ b/src/StellaOps.Excititor.Core/IVexConsensusPolicy.cs @@ -1,4 +1,4 @@ -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; /// /// Policy abstraction supplying trust weights and gating logic for consensus decisions. diff --git a/src/StellaOps.Vexer.Core/StellaOps.Vexer.Core.csproj b/src/StellaOps.Excititor.Core/StellaOps.Excititor.Core.csproj similarity index 100% rename from src/StellaOps.Vexer.Core/StellaOps.Vexer.Core.csproj rename to src/StellaOps.Excititor.Core/StellaOps.Excititor.Core.csproj diff --git a/src/StellaOps.Excititor.Core/TASKS.md b/src/StellaOps.Excititor.Core/TASKS.md new file mode 100644 index 00000000..54f4688f --- /dev/null +++ b/src/StellaOps.Excititor.Core/TASKS.md @@ -0,0 +1,9 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-CORE-01-001 – Canonical VEX domain records|Team Excititor Core & Policy|docs/ARCHITECTURE_EXCITITOR.md|DONE (2025-10-15) – Introduced `VexClaim`, `VexConsensus`, provider metadata, export manifest records, and deterministic JSON serialization with tests covering canonical ordering and query signatures.| +|EXCITITOR-CORE-01-002 – Trust-weighted consensus resolver|Team Excititor Core & Policy|EXCITITOR-CORE-01-001|DONE (2025-10-15) – Added consensus resolver, baseline policy (tier weights + justification gate), telemetry output, and tests covering acceptance, conflict ties, and determinism.| +|EXCITITOR-CORE-01-003 – Shared contracts & query signatures|Team Excititor Core & Policy|EXCITITOR-CORE-01-001|DONE (2025-10-15) – Published connector/normalizer/exporter/attestation abstractions and expanded deterministic `VexQuerySignature`/hash utilities with test coverage.| +|EXCITITOR-CORE-02-001 – Context signal schema prep|Team Excititor Core & Policy|EXCITITOR-POLICY-02-001|TODO – Extend `VexClaim`/`VexConsensus` with optional severity/KEV/EPSS payloads, update canonical serializer/hashes, and coordinate migration notes with Storage.| +|EXCITITOR-CORE-02-002 – Deterministic risk scoring engine|Team Excititor Core & Policy|EXCITITOR-CORE-02-001, EXCITITOR-POLICY-02-001|BACKLOG – Introduce the scoring calculator invoked by consensus, persist score envelopes with audit trails, and add regression fixtures covering gate/boost behaviour before enabling exports.| diff --git a/src/StellaOps.Vexer.Core/VexAttestationAbstractions.cs b/src/StellaOps.Excititor.Core/VexAttestationAbstractions.cs similarity index 96% rename from src/StellaOps.Vexer.Core/VexAttestationAbstractions.cs rename to src/StellaOps.Excititor.Core/VexAttestationAbstractions.cs index 8c8a8fe0..f5235da5 100644 --- a/src/StellaOps.Vexer.Core/VexAttestationAbstractions.cs +++ b/src/StellaOps.Excititor.Core/VexAttestationAbstractions.cs @@ -3,7 +3,7 @@ using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public interface IVexAttestationClient { diff --git a/src/StellaOps.Vexer.Core/VexCacheEntry.cs b/src/StellaOps.Excititor.Core/VexCacheEntry.cs similarity index 97% rename from src/StellaOps.Vexer.Core/VexCacheEntry.cs rename to src/StellaOps.Excititor.Core/VexCacheEntry.cs index 3fec0666..7ff2c31b 100644 --- a/src/StellaOps.Vexer.Core/VexCacheEntry.cs +++ b/src/StellaOps.Excititor.Core/VexCacheEntry.cs @@ -1,6 +1,6 @@ using System; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; /// /// Cached export artifact metadata allowing reuse of previously generated manifests. diff --git a/src/StellaOps.Vexer.Core/VexCanonicalJsonSerializer.cs b/src/StellaOps.Excititor.Core/VexCanonicalJsonSerializer.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexCanonicalJsonSerializer.cs rename to src/StellaOps.Excititor.Core/VexCanonicalJsonSerializer.cs index 4c6dc055..1fa78c1f 100644 --- a/src/StellaOps.Vexer.Core/VexCanonicalJsonSerializer.cs +++ b/src/StellaOps.Excititor.Core/VexCanonicalJsonSerializer.cs @@ -6,7 +6,7 @@ using System.Text.Json; using System.Text.Json.Serialization; using System.Text.Json.Serialization.Metadata; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public static class VexCanonicalJsonSerializer { diff --git a/src/StellaOps.Vexer.Core/VexClaim.cs b/src/StellaOps.Excititor.Core/VexClaim.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexClaim.cs rename to src/StellaOps.Excititor.Core/VexClaim.cs index 207ba09b..385c9bf0 100644 --- a/src/StellaOps.Vexer.Core/VexClaim.cs +++ b/src/StellaOps.Excititor.Core/VexClaim.cs @@ -1,7 +1,7 @@ using System.Collections.Immutable; using System.Runtime.Serialization; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public sealed record VexClaim { diff --git a/src/StellaOps.Vexer.Core/VexConnectorAbstractions.cs b/src/StellaOps.Excititor.Core/VexConnectorAbstractions.cs similarity index 98% rename from src/StellaOps.Vexer.Core/VexConnectorAbstractions.cs rename to src/StellaOps.Excititor.Core/VexConnectorAbstractions.cs index 0f247aff..b9a96978 100644 --- a/src/StellaOps.Vexer.Core/VexConnectorAbstractions.cs +++ b/src/StellaOps.Excititor.Core/VexConnectorAbstractions.cs @@ -3,7 +3,7 @@ using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; /// /// Shared connector contract for fetching and normalizing provider-specific VEX data. diff --git a/src/StellaOps.Vexer.Core/VexConsensus.cs b/src/StellaOps.Excititor.Core/VexConsensus.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexConsensus.cs rename to src/StellaOps.Excititor.Core/VexConsensus.cs index a6217ed1..ad9e9fd2 100644 --- a/src/StellaOps.Vexer.Core/VexConsensus.cs +++ b/src/StellaOps.Excititor.Core/VexConsensus.cs @@ -1,7 +1,7 @@ using System.Collections.Immutable; using System.Runtime.Serialization; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public sealed record VexConsensus { diff --git a/src/StellaOps.Vexer.Core/VexConsensusPolicyOptions.cs b/src/StellaOps.Excititor.Core/VexConsensusPolicyOptions.cs similarity index 98% rename from src/StellaOps.Vexer.Core/VexConsensusPolicyOptions.cs rename to src/StellaOps.Excititor.Core/VexConsensusPolicyOptions.cs index 385b9603..c953a763 100644 --- a/src/StellaOps.Vexer.Core/VexConsensusPolicyOptions.cs +++ b/src/StellaOps.Excititor.Core/VexConsensusPolicyOptions.cs @@ -1,6 +1,6 @@ using System.Collections.Immutable; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public sealed record VexConsensusPolicyOptions { diff --git a/src/StellaOps.Vexer.Core/VexConsensusResolver.cs b/src/StellaOps.Excititor.Core/VexConsensusResolver.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexConsensusResolver.cs rename to src/StellaOps.Excititor.Core/VexConsensusResolver.cs index 71e8f7ca..5ec9268a 100644 --- a/src/StellaOps.Vexer.Core/VexConsensusResolver.cs +++ b/src/StellaOps.Excititor.Core/VexConsensusResolver.cs @@ -1,7 +1,7 @@ using System.Collections.Immutable; using System.Globalization; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public sealed class VexConsensusResolver { diff --git a/src/StellaOps.Vexer.Core/VexExportManifest.cs b/src/StellaOps.Excititor.Core/VexExportManifest.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexExportManifest.cs rename to src/StellaOps.Excititor.Core/VexExportManifest.cs index a75fed80..b0da8fe8 100644 --- a/src/StellaOps.Vexer.Core/VexExportManifest.cs +++ b/src/StellaOps.Excititor.Core/VexExportManifest.cs @@ -2,7 +2,7 @@ using System.Collections.Immutable; using System.Runtime.Serialization; using System.Text; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public sealed record VexExportManifest { diff --git a/src/StellaOps.Vexer.Core/VexExporterAbstractions.cs b/src/StellaOps.Excititor.Core/VexExporterAbstractions.cs similarity index 95% rename from src/StellaOps.Vexer.Core/VexExporterAbstractions.cs rename to src/StellaOps.Excititor.Core/VexExporterAbstractions.cs index d61df0fe..3bdfc4f2 100644 --- a/src/StellaOps.Vexer.Core/VexExporterAbstractions.cs +++ b/src/StellaOps.Excititor.Core/VexExporterAbstractions.cs @@ -4,7 +4,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public interface IVexExporter { diff --git a/src/StellaOps.Vexer.Core/VexNormalizerAbstractions.cs b/src/StellaOps.Excititor.Core/VexNormalizerAbstractions.cs similarity index 95% rename from src/StellaOps.Vexer.Core/VexNormalizerAbstractions.cs rename to src/StellaOps.Excititor.Core/VexNormalizerAbstractions.cs index 5a1b541f..c7fd6c86 100644 --- a/src/StellaOps.Vexer.Core/VexNormalizerAbstractions.cs +++ b/src/StellaOps.Excititor.Core/VexNormalizerAbstractions.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; /// /// Normalizer contract for translating raw connector documents into canonical claims. diff --git a/src/StellaOps.Vexer.Core/VexProvider.cs b/src/StellaOps.Excititor.Core/VexProvider.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexProvider.cs rename to src/StellaOps.Excititor.Core/VexProvider.cs index 4a825bab..35f69c25 100644 --- a/src/StellaOps.Vexer.Core/VexProvider.cs +++ b/src/StellaOps.Excititor.Core/VexProvider.cs @@ -1,7 +1,7 @@ using System.Collections.Immutable; using System.Runtime.Serialization; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; /// /// Metadata describing a VEX provider (vendor, distro, hub, platform). diff --git a/src/StellaOps.Vexer.Core/VexQuery.cs b/src/StellaOps.Excititor.Core/VexQuery.cs similarity index 99% rename from src/StellaOps.Vexer.Core/VexQuery.cs rename to src/StellaOps.Excititor.Core/VexQuery.cs index 2b4c7bfb..39e3d67b 100644 --- a/src/StellaOps.Vexer.Core/VexQuery.cs +++ b/src/StellaOps.Excititor.Core/VexQuery.cs @@ -6,7 +6,7 @@ using System.Security.Cryptography; using System.Text; using System.Linq; -namespace StellaOps.Vexer.Core; +namespace StellaOps.Excititor.Core; public sealed record VexQuery( ImmutableArray Filters, diff --git a/src/StellaOps.Vexer.Export.Tests/ExportEngineTests.cs b/src/StellaOps.Excititor.Export.Tests/ExportEngineTests.cs similarity index 98% rename from src/StellaOps.Vexer.Export.Tests/ExportEngineTests.cs rename to src/StellaOps.Excititor.Export.Tests/ExportEngineTests.cs index e7ecf44c..982f95a7 100644 --- a/src/StellaOps.Vexer.Export.Tests/ExportEngineTests.cs +++ b/src/StellaOps.Excititor.Export.Tests/ExportEngineTests.cs @@ -3,13 +3,13 @@ using System.Collections.Immutable; using System.IO; using System.Text; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Export; -using StellaOps.Vexer.Policy; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Export; +using StellaOps.Excititor.Policy; +using StellaOps.Excititor.Storage.Mongo; using Xunit; -namespace StellaOps.Vexer.Export.Tests; +namespace StellaOps.Excititor.Export.Tests; public sealed class ExportEngineTests { diff --git a/src/StellaOps.Vexer.Export.Tests/FileSystemArtifactStoreTests.cs b/src/StellaOps.Excititor.Export.Tests/FileSystemArtifactStoreTests.cs similarity index 91% rename from src/StellaOps.Vexer.Export.Tests/FileSystemArtifactStoreTests.cs rename to src/StellaOps.Excititor.Export.Tests/FileSystemArtifactStoreTests.cs index b7cc8522..9a26510f 100644 --- a/src/StellaOps.Vexer.Export.Tests/FileSystemArtifactStoreTests.cs +++ b/src/StellaOps.Excititor.Export.Tests/FileSystemArtifactStoreTests.cs @@ -1,11 +1,11 @@ using System.Collections.Immutable; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Export; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Export; using System.IO.Abstractions.TestingHelpers; -namespace StellaOps.Vexer.Export.Tests; +namespace StellaOps.Excititor.Export.Tests; public sealed class FileSystemArtifactStoreTests { diff --git a/src/StellaOps.Vexer.Export.Tests/OfflineBundleArtifactStoreTests.cs b/src/StellaOps.Excititor.Export.Tests/OfflineBundleArtifactStoreTests.cs similarity index 95% rename from src/StellaOps.Vexer.Export.Tests/OfflineBundleArtifactStoreTests.cs rename to src/StellaOps.Excititor.Export.Tests/OfflineBundleArtifactStoreTests.cs index 7d3abf04..ee2af550 100644 --- a/src/StellaOps.Vexer.Export.Tests/OfflineBundleArtifactStoreTests.cs +++ b/src/StellaOps.Excititor.Export.Tests/OfflineBundleArtifactStoreTests.cs @@ -4,10 +4,10 @@ using System.Linq; using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Export; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Export; -namespace StellaOps.Vexer.Export.Tests; +namespace StellaOps.Excititor.Export.Tests; public sealed class OfflineBundleArtifactStoreTests { diff --git a/src/StellaOps.Vexer.Export.Tests/S3ArtifactStoreTests.cs b/src/StellaOps.Excititor.Export.Tests/S3ArtifactStoreTests.cs similarity index 97% rename from src/StellaOps.Vexer.Export.Tests/S3ArtifactStoreTests.cs rename to src/StellaOps.Excititor.Export.Tests/S3ArtifactStoreTests.cs index 64c3b482..2e155478 100644 --- a/src/StellaOps.Vexer.Export.Tests/S3ArtifactStoreTests.cs +++ b/src/StellaOps.Excititor.Export.Tests/S3ArtifactStoreTests.cs @@ -2,10 +2,10 @@ using System.Collections.Concurrent; using System.Collections.Immutable; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Export; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Export; -namespace StellaOps.Vexer.Export.Tests; +namespace StellaOps.Excititor.Export.Tests; public sealed class S3ArtifactStoreTests { diff --git a/src/StellaOps.Vexer.Export.Tests/StellaOps.Vexer.Export.Tests.csproj b/src/StellaOps.Excititor.Export.Tests/StellaOps.Excititor.Export.Tests.csproj similarity index 81% rename from src/StellaOps.Vexer.Export.Tests/StellaOps.Vexer.Export.Tests.csproj rename to src/StellaOps.Excititor.Export.Tests/StellaOps.Excititor.Export.Tests.csproj index 3a38978f..86a03e59 100644 --- a/src/StellaOps.Vexer.Export.Tests/StellaOps.Vexer.Export.Tests.csproj +++ b/src/StellaOps.Excititor.Export.Tests/StellaOps.Excititor.Export.Tests.csproj @@ -10,6 +10,6 @@ - + diff --git a/src/StellaOps.Vexer.Export.Tests/VexExportCacheServiceTests.cs b/src/StellaOps.Excititor.Export.Tests/VexExportCacheServiceTests.cs similarity index 95% rename from src/StellaOps.Vexer.Export.Tests/VexExportCacheServiceTests.cs rename to src/StellaOps.Excititor.Export.Tests/VexExportCacheServiceTests.cs index cbaa7efe..855b52b4 100644 --- a/src/StellaOps.Vexer.Export.Tests/VexExportCacheServiceTests.cs +++ b/src/StellaOps.Excititor.Export.Tests/VexExportCacheServiceTests.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Export; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Export; +using StellaOps.Excititor.Storage.Mongo; -namespace StellaOps.Vexer.Export.Tests; +namespace StellaOps.Excititor.Export.Tests; public sealed class VexExportCacheServiceTests { diff --git a/src/StellaOps.Vexer.Export/AGENTS.md b/src/StellaOps.Excititor.Export/AGENTS.md similarity index 90% rename from src/StellaOps.Vexer.Export/AGENTS.md rename to src/StellaOps.Excititor.Export/AGENTS.md index b0166f35..03ac41b2 100644 --- a/src/StellaOps.Vexer.Export/AGENTS.md +++ b/src/StellaOps.Excititor.Export/AGENTS.md @@ -7,7 +7,7 @@ Produces deterministic VEX export artifacts, coordinates cache lookups, and brid - Artifact store abstraction wiring (S3/MinIO/filesystem) with offline-friendly packaging. - Export metrics/logging and deterministic manifest emission. ## Participants -- WebService invokes the export engine to service `/vexer/export` requests. +- WebService invokes the export engine to service `/excititor/export` requests. - Attestation module receives built artifacts through this layer for signing. - Worker reuses caching and artifact utilities for scheduled exports and GC routines. ## Interfaces & contracts @@ -20,4 +20,4 @@ Out: format-specific serialization (lives in Formats.*), policy evaluation (Poli - Emit cache hit/miss counters, export durations, artifact sizes, and attestation timing logs. - Ensure no sensitive tokens/URIs are logged. ## Tests -- Engine orchestration tests, cache behavior, and artifact lifecycle coverage will live in `../StellaOps.Vexer.Export.Tests`. +- Engine orchestration tests, cache behavior, and artifact lifecycle coverage will live in `../StellaOps.Excititor.Export.Tests`. diff --git a/src/StellaOps.Vexer.Export/ExportEngine.cs b/src/StellaOps.Excititor.Export/ExportEngine.cs similarity index 98% rename from src/StellaOps.Vexer.Export/ExportEngine.cs rename to src/StellaOps.Excititor.Export/ExportEngine.cs index a93ee805..25f3d28a 100644 --- a/src/StellaOps.Vexer.Export/ExportEngine.cs +++ b/src/StellaOps.Excititor.Export/ExportEngine.cs @@ -3,11 +3,11 @@ using System.IO; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Policy; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Policy; +using StellaOps.Excititor.Storage.Mongo; -namespace StellaOps.Vexer.Export; +namespace StellaOps.Excititor.Export; public interface IExportEngine { diff --git a/src/StellaOps.Vexer.Export/FileSystemArtifactStore.cs b/src/StellaOps.Excititor.Export/FileSystemArtifactStore.cs similarity index 98% rename from src/StellaOps.Vexer.Export/FileSystemArtifactStore.cs rename to src/StellaOps.Excititor.Export/FileSystemArtifactStore.cs index 9aa2f2a8..2427f565 100644 --- a/src/StellaOps.Vexer.Export/FileSystemArtifactStore.cs +++ b/src/StellaOps.Excititor.Export/FileSystemArtifactStore.cs @@ -7,9 +7,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Export; +namespace StellaOps.Excititor.Export; public sealed class FileSystemArtifactStoreOptions { diff --git a/src/StellaOps.Vexer.Export/IVexArtifactStore.cs b/src/StellaOps.Excititor.Export/IVexArtifactStore.cs similarity index 92% rename from src/StellaOps.Vexer.Export/IVexArtifactStore.cs rename to src/StellaOps.Excititor.Export/IVexArtifactStore.cs index 5de445ac..1614b291 100644 --- a/src/StellaOps.Vexer.Export/IVexArtifactStore.cs +++ b/src/StellaOps.Excititor.Export/IVexArtifactStore.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Export; +namespace StellaOps.Excititor.Export; public sealed record VexExportArtifact( VexContentAddress ContentAddress, diff --git a/src/StellaOps.Vexer.Export/OfflineBundleArtifactStore.cs b/src/StellaOps.Excititor.Export/OfflineBundleArtifactStore.cs similarity index 99% rename from src/StellaOps.Vexer.Export/OfflineBundleArtifactStore.cs rename to src/StellaOps.Excititor.Export/OfflineBundleArtifactStore.cs index ba5e771e..93ae5e7e 100644 --- a/src/StellaOps.Vexer.Export/OfflineBundleArtifactStore.cs +++ b/src/StellaOps.Excititor.Export/OfflineBundleArtifactStore.cs @@ -11,9 +11,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Export; +namespace StellaOps.Excititor.Export; public sealed class OfflineBundleArtifactStoreOptions { diff --git a/src/StellaOps.Excititor.Export/Properties/AssemblyInfo.cs b/src/StellaOps.Excititor.Export/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e59f31ce --- /dev/null +++ b/src/StellaOps.Excititor.Export/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("StellaOps.Excititor.Export.Tests")] diff --git a/src/StellaOps.Vexer.Export/S3ArtifactStore.cs b/src/StellaOps.Excititor.Export/S3ArtifactStore.cs similarity index 98% rename from src/StellaOps.Vexer.Export/S3ArtifactStore.cs rename to src/StellaOps.Excititor.Export/S3ArtifactStore.cs index 9cd99f89..47bc14c6 100644 --- a/src/StellaOps.Vexer.Export/S3ArtifactStore.cs +++ b/src/StellaOps.Excititor.Export/S3ArtifactStore.cs @@ -6,9 +6,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Export; +namespace StellaOps.Excititor.Export; public sealed class S3ArtifactStoreOptions { diff --git a/src/StellaOps.Vexer.Export/StellaOps.Vexer.Export.csproj b/src/StellaOps.Excititor.Export/StellaOps.Excititor.Export.csproj similarity index 66% rename from src/StellaOps.Vexer.Export/StellaOps.Vexer.Export.csproj rename to src/StellaOps.Excititor.Export/StellaOps.Excititor.Export.csproj index dc199446..8c99255e 100644 --- a/src/StellaOps.Vexer.Export/StellaOps.Vexer.Export.csproj +++ b/src/StellaOps.Excititor.Export/StellaOps.Excititor.Export.csproj @@ -12,8 +12,8 @@ - - - + + + diff --git a/src/StellaOps.Excititor.Export/TASKS.md b/src/StellaOps.Excititor.Export/TASKS.md new file mode 100644 index 00000000..570b34f3 --- /dev/null +++ b/src/StellaOps.Excititor.Export/TASKS.md @@ -0,0 +1,9 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-EXPORT-01-001 – Export engine orchestration|Team Excititor Export|EXCITITOR-CORE-01-003|DONE (2025-10-15) – Export engine scaffolding with cache lookup, data source hooks, and deterministic manifest emission.| +|EXCITITOR-EXPORT-01-002 – Cache index & eviction hooks|Team Excititor Export|EXCITITOR-EXPORT-01-001, EXCITITOR-STORAGE-01-003|**DONE (2025-10-16)** – Export engine now invalidates cache entries on force refresh, cache services expose prune/invalidate APIs, and storage maintenance trims expired/dangling records with Mongo2Go coverage.| +|EXCITITOR-EXPORT-01-003 – Artifact store adapters|Team Excititor Export|EXCITITOR-EXPORT-01-001|**DONE (2025-10-16)** – Implemented multi-store pipeline with filesystem, S3-compatible, and offline bundle adapters (hash verification + manifest/zip output) plus unit coverage and DI hooks.| +|EXCITITOR-EXPORT-01-004 – Attestation handoff integration|Team Excititor Export|EXCITITOR-EXPORT-01-001, EXCITITOR-ATTEST-01-001|**DONE (2025-10-17)** – Export engine now invokes attestation client, logs diagnostics, and persists Rekor/envelope metadata on manifests; regression coverage added in `ExportEngineTests.ExportAsync_AttachesAttestationMetadata`.| +|EXCITITOR-EXPORT-01-005 – Score & resolve envelope surfaces|Team Excititor Export|EXCITITOR-EXPORT-01-004, EXCITITOR-CORE-02-001|TODO – Emit consensus+score envelopes in export manifests, include policy/scoring digests, and update offline bundle/ORAS layouts to carry signed VEX responses.| diff --git a/src/StellaOps.Vexer.Export/VexExportCacheService.cs b/src/StellaOps.Excititor.Export/VexExportCacheService.cs similarity index 95% rename from src/StellaOps.Vexer.Export/VexExportCacheService.cs rename to src/StellaOps.Excititor.Export/VexExportCacheService.cs index 6cdda3f9..7601ba46 100644 --- a/src/StellaOps.Vexer.Export/VexExportCacheService.cs +++ b/src/StellaOps.Excititor.Export/VexExportCacheService.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Storage.Mongo; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Storage.Mongo; -namespace StellaOps.Vexer.Export; +namespace StellaOps.Excititor.Export; public interface IVexExportCacheService { diff --git a/src/StellaOps.Vexer.Formats.CSAF.Tests/CsafNormalizerTests.cs b/src/StellaOps.Excititor.Formats.CSAF.Tests/CsafNormalizerTests.cs similarity index 92% rename from src/StellaOps.Vexer.Formats.CSAF.Tests/CsafNormalizerTests.cs rename to src/StellaOps.Excititor.Formats.CSAF.Tests/CsafNormalizerTests.cs index f14a9d61..cb8f5d42 100644 --- a/src/StellaOps.Vexer.Formats.CSAF.Tests/CsafNormalizerTests.cs +++ b/src/StellaOps.Excititor.Formats.CSAF.Tests/CsafNormalizerTests.cs @@ -4,10 +4,10 @@ using System.Text; using System.IO; using FluentAssertions; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Formats.CSAF; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Formats.CSAF; -namespace StellaOps.Vexer.Formats.CSAF.Tests; +namespace StellaOps.Excititor.Formats.CSAF.Tests; public sealed class CsafNormalizerTests { @@ -62,7 +62,7 @@ public sealed class CsafNormalizerTests """; var rawDocument = new VexRawDocument( - ProviderId: "vexer:redhat", + ProviderId: "excititor:redhat", VexDocumentFormat.Csaf, new Uri("https://example.com/csaf/rhsa-2025-0001.json"), new DateTimeOffset(2025, 10, 11, 0, 0, 0, TimeSpan.Zero), @@ -70,7 +70,7 @@ public sealed class CsafNormalizerTests Encoding.UTF8.GetBytes(json), ImmutableDictionary.Empty); - var provider = new VexProvider("vexer:redhat", "Red Hat CSAF", VexProviderKind.Distro); + var provider = new VexProvider("excititor:redhat", "Red Hat CSAF", VexProviderKind.Distro); var normalizer = new CsafNormalizer(NullLogger.Instance); var batch = await normalizer.NormalizeAsync(rawDocument, provider, CancellationToken.None); @@ -99,7 +99,7 @@ public sealed class CsafNormalizerTests var json = await File.ReadAllTextAsync(path); var rawDocument = new VexRawDocument( - ProviderId: "vexer:redhat", + ProviderId: "excititor:redhat", VexDocumentFormat.Csaf, new Uri("https://security.example.com/rhsa-2025-1001.json"), new DateTimeOffset(2025, 10, 6, 0, 0, 0, TimeSpan.Zero), @@ -107,7 +107,7 @@ public sealed class CsafNormalizerTests Encoding.UTF8.GetBytes(json), ImmutableDictionary.Empty); - var provider = new VexProvider("vexer:redhat", "Red Hat CSAF", VexProviderKind.Distro); + var provider = new VexProvider("excititor:redhat", "Red Hat CSAF", VexProviderKind.Distro); var normalizer = new CsafNormalizer(NullLogger.Instance); var batch = await normalizer.NormalizeAsync(rawDocument, provider, CancellationToken.None); diff --git a/src/StellaOps.Vexer.Formats.CSAF.Tests/Fixtures/rhsa-sample.json b/src/StellaOps.Excititor.Formats.CSAF.Tests/Fixtures/rhsa-sample.json similarity index 100% rename from src/StellaOps.Vexer.Formats.CSAF.Tests/Fixtures/rhsa-sample.json rename to src/StellaOps.Excititor.Formats.CSAF.Tests/Fixtures/rhsa-sample.json diff --git a/src/StellaOps.Vexer.Formats.CSAF.Tests/StellaOps.Vexer.Formats.CSAF.Tests.csproj b/src/StellaOps.Excititor.Formats.CSAF.Tests/StellaOps.Excititor.Formats.CSAF.Tests.csproj similarity index 70% rename from src/StellaOps.Vexer.Formats.CSAF.Tests/StellaOps.Vexer.Formats.CSAF.Tests.csproj rename to src/StellaOps.Excititor.Formats.CSAF.Tests/StellaOps.Excititor.Formats.CSAF.Tests.csproj index 013f6a75..70ac332e 100644 --- a/src/StellaOps.Vexer.Formats.CSAF.Tests/StellaOps.Vexer.Formats.CSAF.Tests.csproj +++ b/src/StellaOps.Excititor.Formats.CSAF.Tests/StellaOps.Excititor.Formats.CSAF.Tests.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/src/StellaOps.Vexer.Formats.CSAF/AGENTS.md b/src/StellaOps.Excititor.Formats.CSAF/AGENTS.md similarity index 89% rename from src/StellaOps.Vexer.Formats.CSAF/AGENTS.md rename to src/StellaOps.Excititor.Formats.CSAF/AGENTS.md index 67a3913c..bdca8bef 100644 --- a/src/StellaOps.Vexer.Formats.CSAF/AGENTS.md +++ b/src/StellaOps.Excititor.Formats.CSAF/AGENTS.md @@ -1,6 +1,6 @@ # AGENTS ## Role -Normalize CSAF VEX profile documents into Vexer claims and provide CSAF export adapters. +Normalize CSAF VEX profile documents into Excititor claims and provide CSAF export adapters. ## Scope - CSAF ingestion helpers: provider metadata parsing, document revision handling, vulnerability/action mappings. - Normalizer implementation fulfilling `INormalizer` for CSAF sources (Red Hat, Cisco, SUSE, MSRC, Oracle, Ubuntu). @@ -20,4 +20,4 @@ Out: HTTP fetching (connectors), storage persistence, attestation logic. - Emit structured diagnostics when CSAF documents fail schema validation, including source URI and revision. - Provide counters for normalization outcomes (status distribution, justification coverage). ## Tests -- Fixture-driven parsing/export tests will live in `../StellaOps.Vexer.Formats.CSAF.Tests` using real CSAF samples. +- Fixture-driven parsing/export tests will live in `../StellaOps.Excititor.Formats.CSAF.Tests` using real CSAF samples. diff --git a/src/StellaOps.Vexer.Formats.CSAF/CsafNormalizer.cs b/src/StellaOps.Excititor.Formats.CSAF/CsafNormalizer.cs similarity index 99% rename from src/StellaOps.Vexer.Formats.CSAF/CsafNormalizer.cs rename to src/StellaOps.Excititor.Formats.CSAF/CsafNormalizer.cs index 342ed295..29f9d0a0 100644 --- a/src/StellaOps.Vexer.Formats.CSAF/CsafNormalizer.cs +++ b/src/StellaOps.Excititor.Formats.CSAF/CsafNormalizer.cs @@ -6,9 +6,9 @@ using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Formats.CSAF; +namespace StellaOps.Excititor.Formats.CSAF; public sealed class CsafNormalizer : IVexNormalizer { diff --git a/src/StellaOps.Vexer.Formats.CSAF/ServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Formats.CSAF/ServiceCollectionExtensions.cs similarity index 82% rename from src/StellaOps.Vexer.Formats.CSAF/ServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Formats.CSAF/ServiceCollectionExtensions.cs index 8e282c08..8f6dcffe 100644 --- a/src/StellaOps.Vexer.Formats.CSAF/ServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Formats.CSAF/ServiceCollectionExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Formats.CSAF; +namespace StellaOps.Excititor.Formats.CSAF; public static class CsafFormatsServiceCollectionExtensions { diff --git a/src/StellaOps.Vexer.Formats.OpenVEX/StellaOps.Vexer.Formats.OpenVEX.csproj b/src/StellaOps.Excititor.Formats.CSAF/StellaOps.Excititor.Formats.CSAF.csproj similarity index 85% rename from src/StellaOps.Vexer.Formats.OpenVEX/StellaOps.Vexer.Formats.OpenVEX.csproj rename to src/StellaOps.Excititor.Formats.CSAF/StellaOps.Excititor.Formats.CSAF.csproj index 54abf95e..ef6c36df 100644 --- a/src/StellaOps.Vexer.Formats.OpenVEX/StellaOps.Vexer.Formats.OpenVEX.csproj +++ b/src/StellaOps.Excititor.Formats.CSAF/StellaOps.Excititor.Formats.CSAF.csproj @@ -11,6 +11,6 @@ - + diff --git a/src/StellaOps.Excititor.Formats.CSAF/TASKS.md b/src/StellaOps.Excititor.Formats.CSAF/TASKS.md new file mode 100644 index 00000000..cf869d50 --- /dev/null +++ b/src/StellaOps.Excititor.Formats.CSAF/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-FMT-CSAF-01-001 – CSAF normalizer foundation|Team Excititor Formats|EXCITITOR-CORE-01-001|**DONE (2025-10-17)** – Implemented CSAF normalizer + DI hook, parsing tracking metadata, product tree branches/full names, and mapping product statuses into canonical `VexClaim`s with baseline precedence. Regression added in `CsafNormalizerTests`.| +|EXCITITOR-FMT-CSAF-01-002 – Status/justification mapping|Team Excititor Formats|EXCITITOR-FMT-CSAF-01-001, EXCITITOR-POLICY-01-001|TODO – Normalize CSAF `product_status` + `justification` values into policy-aware enums with audit diagnostics for unsupported codes.| +|EXCITITOR-FMT-CSAF-01-003 – CSAF export adapter|Team Excititor Formats|EXCITITOR-EXPORT-01-001, EXCITITOR-FMT-CSAF-01-001|TODO – Provide CSAF export writer producing deterministic documents (per vuln/product) and manifest metadata for attestation.| diff --git a/src/StellaOps.Vexer.Formats.CycloneDX.Tests/CycloneDxNormalizerTests.cs b/src/StellaOps.Excititor.Formats.CycloneDX.Tests/CycloneDxNormalizerTests.cs similarity index 92% rename from src/StellaOps.Vexer.Formats.CycloneDX.Tests/CycloneDxNormalizerTests.cs rename to src/StellaOps.Excititor.Formats.CycloneDX.Tests/CycloneDxNormalizerTests.cs index 5145b830..867d6d65 100644 --- a/src/StellaOps.Vexer.Formats.CycloneDX.Tests/CycloneDxNormalizerTests.cs +++ b/src/StellaOps.Excititor.Formats.CycloneDX.Tests/CycloneDxNormalizerTests.cs @@ -3,10 +3,10 @@ using System.Linq; using System.Text; using FluentAssertions; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Formats.CycloneDX; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Formats.CycloneDX; -namespace StellaOps.Vexer.Formats.CycloneDX.Tests; +namespace StellaOps.Excititor.Formats.CycloneDX.Tests; public sealed class CycloneDxNormalizerTests { @@ -58,7 +58,7 @@ public sealed class CycloneDxNormalizerTests """; var rawDocument = new VexRawDocument( - "vexer:cyclonedx", + "excititor:cyclonedx", VexDocumentFormat.CycloneDx, new Uri("https://example.org/vex.json"), new DateTimeOffset(2025, 10, 16, 0, 0, 0, TimeSpan.Zero), @@ -66,7 +66,7 @@ public sealed class CycloneDxNormalizerTests Encoding.UTF8.GetBytes(json), ImmutableDictionary.Empty); - var provider = new VexProvider("vexer:cyclonedx", "CycloneDX Provider", VexProviderKind.Vendor); + var provider = new VexProvider("excititor:cyclonedx", "CycloneDX Provider", VexProviderKind.Vendor); var normalizer = new CycloneDxNormalizer(NullLogger.Instance); var batch = await normalizer.NormalizeAsync(rawDocument, provider, CancellationToken.None); diff --git a/src/StellaOps.Vexer.Formats.OpenVEX.Tests/StellaOps.Vexer.Formats.OpenVEX.Tests.csproj b/src/StellaOps.Excititor.Formats.CycloneDX.Tests/StellaOps.Excititor.Formats.CycloneDX.Tests.csproj similarity index 64% rename from src/StellaOps.Vexer.Formats.OpenVEX.Tests/StellaOps.Vexer.Formats.OpenVEX.Tests.csproj rename to src/StellaOps.Excititor.Formats.CycloneDX.Tests/StellaOps.Excititor.Formats.CycloneDX.Tests.csproj index bdd68e59..ffc9e4b6 100644 --- a/src/StellaOps.Vexer.Formats.OpenVEX.Tests/StellaOps.Vexer.Formats.OpenVEX.Tests.csproj +++ b/src/StellaOps.Excititor.Formats.CycloneDX.Tests/StellaOps.Excititor.Formats.CycloneDX.Tests.csproj @@ -11,7 +11,7 @@ - - + + diff --git a/src/StellaOps.Vexer.Formats.CycloneDX/AGENTS.md b/src/StellaOps.Excititor.Formats.CycloneDX/AGENTS.md similarity index 90% rename from src/StellaOps.Vexer.Formats.CycloneDX/AGENTS.md rename to src/StellaOps.Excititor.Formats.CycloneDX/AGENTS.md index 4357e8b8..964b56dc 100644 --- a/src/StellaOps.Vexer.Formats.CycloneDX/AGENTS.md +++ b/src/StellaOps.Excititor.Formats.CycloneDX/AGENTS.md @@ -19,4 +19,4 @@ Out: Connector transport, storage, attestation; these rely on other modules. ## Observability & security expectations - Log schema mismatches with document digest and component references; avoid logging proprietary component details where possible. ## Tests -- Unit and fixture tests will live in `../StellaOps.Vexer.Formats.CycloneDX.Tests`, covering normalization and serialization determinism. +- Unit and fixture tests will live in `../StellaOps.Excititor.Formats.CycloneDX.Tests`, covering normalization and serialization determinism. diff --git a/src/StellaOps.Vexer.Formats.CycloneDX/CycloneDxNormalizer.cs b/src/StellaOps.Excititor.Formats.CycloneDX/CycloneDxNormalizer.cs similarity index 99% rename from src/StellaOps.Vexer.Formats.CycloneDX/CycloneDxNormalizer.cs rename to src/StellaOps.Excititor.Formats.CycloneDX/CycloneDxNormalizer.cs index c12c0d94..a21449cf 100644 --- a/src/StellaOps.Vexer.Formats.CycloneDX/CycloneDxNormalizer.cs +++ b/src/StellaOps.Excititor.Formats.CycloneDX/CycloneDxNormalizer.cs @@ -6,9 +6,9 @@ using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Formats.CycloneDX; +namespace StellaOps.Excititor.Formats.CycloneDX; public sealed class CycloneDxNormalizer : IVexNormalizer { diff --git a/src/StellaOps.Vexer.Formats.CycloneDX/ServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Formats.CycloneDX/ServiceCollectionExtensions.cs similarity index 82% rename from src/StellaOps.Vexer.Formats.CycloneDX/ServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Formats.CycloneDX/ServiceCollectionExtensions.cs index d39c3c78..99393cca 100644 --- a/src/StellaOps.Vexer.Formats.CycloneDX/ServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Formats.CycloneDX/ServiceCollectionExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Formats.CycloneDX; +namespace StellaOps.Excititor.Formats.CycloneDX; public static class CycloneDxFormatsServiceCollectionExtensions { diff --git a/src/StellaOps.Vexer.Formats.CSAF/StellaOps.Vexer.Formats.CSAF.csproj b/src/StellaOps.Excititor.Formats.CycloneDX/StellaOps.Excititor.Formats.CycloneDX.csproj similarity index 85% rename from src/StellaOps.Vexer.Formats.CSAF/StellaOps.Vexer.Formats.CSAF.csproj rename to src/StellaOps.Excititor.Formats.CycloneDX/StellaOps.Excititor.Formats.CycloneDX.csproj index 54abf95e..ef6c36df 100644 --- a/src/StellaOps.Vexer.Formats.CSAF/StellaOps.Vexer.Formats.CSAF.csproj +++ b/src/StellaOps.Excititor.Formats.CycloneDX/StellaOps.Excititor.Formats.CycloneDX.csproj @@ -11,6 +11,6 @@ - + diff --git a/src/StellaOps.Excititor.Formats.CycloneDX/TASKS.md b/src/StellaOps.Excititor.Formats.CycloneDX/TASKS.md new file mode 100644 index 00000000..0df3ecac --- /dev/null +++ b/src/StellaOps.Excititor.Formats.CycloneDX/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-FMT-CYCLONE-01-001 – CycloneDX VEX normalizer|Team Excititor Formats|EXCITITOR-CORE-01-001|**DONE (2025-10-17)** – CycloneDX normalizer parses `analysis` data, resolves component references, and emits canonical `VexClaim`s; regression lives in `CycloneDxNormalizerTests`.| +|EXCITITOR-FMT-CYCLONE-01-002 – Component reference reconciliation|Team Excititor Formats|EXCITITOR-FMT-CYCLONE-01-001|TODO – Implement helpers to reconcile component/service references against policy expectations and emit diagnostics for missing SBOM links.| +|EXCITITOR-FMT-CYCLONE-01-003 – CycloneDX export serializer|Team Excititor Formats|EXCITITOR-EXPORT-01-001, EXCITITOR-FMT-CYCLONE-01-001|TODO – Provide exporters producing CycloneDX VEX output with canonical ordering and hash-stable manifests.| diff --git a/src/StellaOps.Vexer.Formats.OpenVEX.Tests/OpenVexNormalizerTests.cs b/src/StellaOps.Excititor.Formats.OpenVEX.Tests/OpenVexNormalizerTests.cs similarity index 92% rename from src/StellaOps.Vexer.Formats.OpenVEX.Tests/OpenVexNormalizerTests.cs rename to src/StellaOps.Excititor.Formats.OpenVEX.Tests/OpenVexNormalizerTests.cs index 37989d9d..c490ddad 100644 --- a/src/StellaOps.Vexer.Formats.OpenVEX.Tests/OpenVexNormalizerTests.cs +++ b/src/StellaOps.Excititor.Formats.OpenVEX.Tests/OpenVexNormalizerTests.cs @@ -3,10 +3,10 @@ using System.Linq; using System.Text; using FluentAssertions; using Microsoft.Extensions.Logging.Abstractions; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Formats.OpenVEX; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Formats.OpenVEX; -namespace StellaOps.Vexer.Formats.OpenVEX.Tests; +namespace StellaOps.Excititor.Formats.OpenVEX.Tests; public sealed class OpenVexNormalizerTests { @@ -52,7 +52,7 @@ public sealed class OpenVexNormalizerTests """; var rawDocument = new VexRawDocument( - "vexer:openvex", + "excititor:openvex", VexDocumentFormat.OpenVex, new Uri("https://example.com/openvex.json"), new DateTimeOffset(2025, 10, 6, 0, 0, 0, TimeSpan.Zero), @@ -60,7 +60,7 @@ public sealed class OpenVexNormalizerTests Encoding.UTF8.GetBytes(json), ImmutableDictionary.Empty); - var provider = new VexProvider("vexer:openvex", "OpenVEX Provider", VexProviderKind.Vendor); + var provider = new VexProvider("excititor:openvex", "OpenVEX Provider", VexProviderKind.Vendor); var normalizer = new OpenVexNormalizer(NullLogger.Instance); var batch = await normalizer.NormalizeAsync(rawDocument, provider, CancellationToken.None); diff --git a/src/StellaOps.Vexer.Formats.CycloneDX.Tests/StellaOps.Vexer.Formats.CycloneDX.Tests.csproj b/src/StellaOps.Excititor.Formats.OpenVEX.Tests/StellaOps.Excititor.Formats.OpenVEX.Tests.csproj similarity index 64% rename from src/StellaOps.Vexer.Formats.CycloneDX.Tests/StellaOps.Vexer.Formats.CycloneDX.Tests.csproj rename to src/StellaOps.Excititor.Formats.OpenVEX.Tests/StellaOps.Excititor.Formats.OpenVEX.Tests.csproj index 4a6b0f69..37e48806 100644 --- a/src/StellaOps.Vexer.Formats.CycloneDX.Tests/StellaOps.Vexer.Formats.CycloneDX.Tests.csproj +++ b/src/StellaOps.Excititor.Formats.OpenVEX.Tests/StellaOps.Excititor.Formats.OpenVEX.Tests.csproj @@ -11,7 +11,7 @@ - - + + diff --git a/src/StellaOps.Vexer.Formats.OpenVEX/AGENTS.md b/src/StellaOps.Excititor.Formats.OpenVEX/AGENTS.md similarity index 96% rename from src/StellaOps.Vexer.Formats.OpenVEX/AGENTS.md rename to src/StellaOps.Excititor.Formats.OpenVEX/AGENTS.md index d6040f70..65e1d1a2 100644 --- a/src/StellaOps.Vexer.Formats.OpenVEX/AGENTS.md +++ b/src/StellaOps.Excititor.Formats.OpenVEX/AGENTS.md @@ -18,4 +18,4 @@ Out: OCI registry access, policy evaluation, attestation signing (handled by oth ## Observability & security expectations - Log normalization anomalies with subject digest and justification mapping while respecting offline constraints. ## Tests -- Snapshot-driven normalization/export tests will be placed in `../StellaOps.Vexer.Formats.OpenVEX.Tests`. +- Snapshot-driven normalization/export tests will be placed in `../StellaOps.Excititor.Formats.OpenVEX.Tests`. diff --git a/src/StellaOps.Vexer.Formats.OpenVEX/OpenVexNormalizer.cs b/src/StellaOps.Excititor.Formats.OpenVEX/OpenVexNormalizer.cs similarity index 99% rename from src/StellaOps.Vexer.Formats.OpenVEX/OpenVexNormalizer.cs rename to src/StellaOps.Excititor.Formats.OpenVEX/OpenVexNormalizer.cs index ac748af9..590d5df4 100644 --- a/src/StellaOps.Vexer.Formats.OpenVEX/OpenVexNormalizer.cs +++ b/src/StellaOps.Excititor.Formats.OpenVEX/OpenVexNormalizer.cs @@ -6,9 +6,9 @@ using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Formats.OpenVEX; +namespace StellaOps.Excititor.Formats.OpenVEX; public sealed class OpenVexNormalizer : IVexNormalizer { diff --git a/src/StellaOps.Vexer.Formats.OpenVEX/ServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Formats.OpenVEX/ServiceCollectionExtensions.cs similarity index 82% rename from src/StellaOps.Vexer.Formats.OpenVEX/ServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Formats.OpenVEX/ServiceCollectionExtensions.cs index 5866009e..5f9acdde 100644 --- a/src/StellaOps.Vexer.Formats.OpenVEX/ServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Formats.OpenVEX/ServiceCollectionExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Formats.OpenVEX; +namespace StellaOps.Excititor.Formats.OpenVEX; public static class OpenVexFormatsServiceCollectionExtensions { diff --git a/src/StellaOps.Vexer.Formats.CycloneDX/StellaOps.Vexer.Formats.CycloneDX.csproj b/src/StellaOps.Excititor.Formats.OpenVEX/StellaOps.Excititor.Formats.OpenVEX.csproj similarity index 85% rename from src/StellaOps.Vexer.Formats.CycloneDX/StellaOps.Vexer.Formats.CycloneDX.csproj rename to src/StellaOps.Excititor.Formats.OpenVEX/StellaOps.Excititor.Formats.OpenVEX.csproj index 54abf95e..ef6c36df 100644 --- a/src/StellaOps.Vexer.Formats.CycloneDX/StellaOps.Vexer.Formats.CycloneDX.csproj +++ b/src/StellaOps.Excititor.Formats.OpenVEX/StellaOps.Excititor.Formats.OpenVEX.csproj @@ -11,6 +11,6 @@ - + diff --git a/src/StellaOps.Excititor.Formats.OpenVEX/TASKS.md b/src/StellaOps.Excititor.Formats.OpenVEX/TASKS.md new file mode 100644 index 00000000..22c363e7 --- /dev/null +++ b/src/StellaOps.Excititor.Formats.OpenVEX/TASKS.md @@ -0,0 +1,7 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-FMT-OPENVEX-01-001 – OpenVEX normalizer|Team Excititor Formats|EXCITITOR-CORE-01-001|**DONE (2025-10-17)** – OpenVEX normalizer parses statements/products, maps status/justification, and surfaces provenance metadata; coverage in `OpenVexNormalizerTests`.| +|EXCITITOR-FMT-OPENVEX-01-002 – Statement merge utilities|Team Excititor Formats|EXCITITOR-FMT-OPENVEX-01-001|TODO – Add reducers merging multiple OpenVEX statements, resolving conflicts deterministically, and emitting policy diagnostics.| +|EXCITITOR-FMT-OPENVEX-01-003 – OpenVEX export writer|Team Excititor Formats|EXCITITOR-EXPORT-01-001, EXCITITOR-FMT-OPENVEX-01-001|TODO – Provide export serializer generating canonical OpenVEX documents with optional SBOM references and hash-stable ordering.| diff --git a/src/StellaOps.Vexer.Policy.Tests/StellaOps.Vexer.Policy.Tests.csproj b/src/StellaOps.Excititor.Policy.Tests/StellaOps.Excititor.Policy.Tests.csproj similarity index 76% rename from src/StellaOps.Vexer.Policy.Tests/StellaOps.Vexer.Policy.Tests.csproj rename to src/StellaOps.Excititor.Policy.Tests/StellaOps.Excititor.Policy.Tests.csproj index a4bbbfe9..d8aef287 100644 --- a/src/StellaOps.Vexer.Policy.Tests/StellaOps.Vexer.Policy.Tests.csproj +++ b/src/StellaOps.Excititor.Policy.Tests/StellaOps.Excititor.Policy.Tests.csproj @@ -7,6 +7,6 @@ true - + diff --git a/src/StellaOps.Vexer.Policy.Tests/VexPolicyProviderTests.cs b/src/StellaOps.Excititor.Policy.Tests/VexPolicyProviderTests.cs similarity index 96% rename from src/StellaOps.Vexer.Policy.Tests/VexPolicyProviderTests.cs rename to src/StellaOps.Excititor.Policy.Tests/VexPolicyProviderTests.cs index 8015332e..fce555fd 100644 --- a/src/StellaOps.Vexer.Policy.Tests/VexPolicyProviderTests.cs +++ b/src/StellaOps.Excititor.Policy.Tests/VexPolicyProviderTests.cs @@ -2,11 +2,11 @@ using System; using System.Collections.Generic; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Policy; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Policy; using Xunit; -namespace StellaOps.Vexer.Policy.Tests; +namespace StellaOps.Excititor.Policy.Tests; public sealed class VexPolicyProviderTests { diff --git a/src/StellaOps.Vexer.Policy/AGENTS.md b/src/StellaOps.Excititor.Policy/AGENTS.md similarity index 90% rename from src/StellaOps.Vexer.Policy/AGENTS.md rename to src/StellaOps.Excititor.Policy/AGENTS.md index 87c91367..69ea60d7 100644 --- a/src/StellaOps.Vexer.Policy/AGENTS.md +++ b/src/StellaOps.Excititor.Policy/AGENTS.md @@ -1,6 +1,6 @@ # AGENTS ## Role -Centralizes policy configuration, provider trust weights, and justification guardrails applied to Vexer consensus decisions. +Centralizes policy configuration, provider trust weights, and justification guardrails applied to Excititor consensus decisions. ## Scope - Policy models for tier weighting, provider overrides, justification allowlists, and conflict escalation. - Configuration binding helpers (YAML/JSON) and validation of operator-supplied policy bundles. @@ -20,4 +20,4 @@ Out: persistence/migrations, HTTP exposure, connector-specific trust logic (live - Emit structured events on policy load/update with revision IDs, but do not log full sensitive policy documents. - Maintain deterministic error ordering for reproducible diagnostics. ## Tests -- Policy fixtures and regression coverage will live in `../StellaOps.Vexer.Policy.Tests` once scaffolded; leverage snapshot comparisons for YAML bindings. +- Policy fixtures and regression coverage will live in `../StellaOps.Excititor.Policy.Tests` once scaffolded; leverage snapshot comparisons for YAML bindings. diff --git a/src/StellaOps.Vexer.Policy/IVexPolicyProvider.cs b/src/StellaOps.Excititor.Policy/IVexPolicyProvider.cs similarity index 98% rename from src/StellaOps.Vexer.Policy/IVexPolicyProvider.cs rename to src/StellaOps.Excititor.Policy/IVexPolicyProvider.cs index b0a675f8..324fd64c 100644 --- a/src/StellaOps.Vexer.Policy/IVexPolicyProvider.cs +++ b/src/StellaOps.Excititor.Policy/IVexPolicyProvider.cs @@ -4,9 +4,9 @@ using System.Globalization; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; public interface IVexPolicyProvider { diff --git a/src/StellaOps.Vexer.Policy/StellaOps.Vexer.Policy.csproj b/src/StellaOps.Excititor.Policy/StellaOps.Excititor.Policy.csproj similarity index 86% rename from src/StellaOps.Vexer.Policy/StellaOps.Vexer.Policy.csproj rename to src/StellaOps.Excititor.Policy/StellaOps.Excititor.Policy.csproj index 95980268..76da4d64 100644 --- a/src/StellaOps.Vexer.Policy/StellaOps.Vexer.Policy.csproj +++ b/src/StellaOps.Excititor.Policy/StellaOps.Excititor.Policy.csproj @@ -12,6 +12,6 @@ - + diff --git a/src/StellaOps.Excititor.Policy/TASKS.md b/src/StellaOps.Excititor.Policy/TASKS.md new file mode 100644 index 00000000..0fc8c033 --- /dev/null +++ b/src/StellaOps.Excititor.Policy/TASKS.md @@ -0,0 +1,11 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-POLICY-01-001 – Policy schema & binding|Team Excititor Policy|EXCITITOR-CORE-01-001|DONE (2025-10-15) – Established `VexPolicyOptions`, options binding, and snapshot provider covering baseline weights/overrides.| +|EXCITITOR-POLICY-01-002 – Policy evaluator service|Team Excititor Policy|EXCITITOR-POLICY-01-001|DONE (2025-10-15) – `VexPolicyEvaluator` exposes immutable snapshots to consensus and normalizes rejection reasons.| +|EXCITITOR-POLICY-01-003 – Operator diagnostics & docs|Team Excititor Policy|EXCITITOR-POLICY-01-001|**DONE (2025-10-16)** – Surface structured diagnostics (CLI/WebService) and author policy upgrade guidance in docs/ARCHITECTURE_EXCITITOR.md appendix.
2025-10-16: Added `IVexPolicyDiagnostics`/`VexPolicyDiagnosticsReport`, sorted issue ordering, recommendations, and appendix guidance. Tests: `dotnet test src/StellaOps.Excititor.Core.Tests/StellaOps.Excititor.Core.Tests.csproj`.| +|EXCITITOR-POLICY-01-004 – Policy schema validation & YAML binding|Team Excititor Policy|EXCITITOR-POLICY-01-001|**DONE (2025-10-16)** – Added strongly-typed YAML/JSON binding, schema validation, and deterministic diagnostics for operator-supplied policy bundles.| +|EXCITITOR-POLICY-01-005 – Policy change tracking & telemetry|Team Excititor Policy|EXCITITOR-POLICY-01-002|**DONE (2025-10-16)** – Emit revision history, expose snapshot digests via CLI/WebService, and add structured logging/metrics for policy reloads.
2025-10-16: `VexPolicySnapshot` now carries revision/digest, provider logs reloads, `vex.policy.reloads` metric emitted, binder/diagnostics expose digest metadata. Tests: `dotnet test src/StellaOps.Excititor.Core.Tests/StellaOps.Excititor.Core.Tests.csproj`.| +|EXCITITOR-POLICY-02-001 – Scoring coefficients & weight ceilings|Team Excititor Policy|EXCITITOR-POLICY-01-004|TODO – Extend `VexPolicyOptions` with α/β boosters and optional >1.0 weight ceilings, validate ranges, and document operator guidance in `docs/ARCHITECTURE_EXCITITOR.md`/`docs/EXCITITOR_SCORRING.md`.| +|EXCITITOR-POLICY-02-002 – Diagnostics for scoring signals|Team Excititor Policy|EXCITITOR-POLICY-02-001|BACKLOG – Update diagnostics reports to surface missing severity/KEV/EPSS mappings, coefficient overrides, and provide actionable recommendations for policy tuning.| diff --git a/src/StellaOps.Vexer.Policy/VexPolicyBinder.cs b/src/StellaOps.Excititor.Policy/VexPolicyBinder.cs similarity index 97% rename from src/StellaOps.Vexer.Policy/VexPolicyBinder.cs rename to src/StellaOps.Excititor.Policy/VexPolicyBinder.cs index 5e09de5b..63ab4697 100644 --- a/src/StellaOps.Vexer.Policy/VexPolicyBinder.cs +++ b/src/StellaOps.Excititor.Policy/VexPolicyBinder.cs @@ -3,11 +3,11 @@ using System.IO; using System.Linq; using System.Text; using System.Text.Json; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; public enum VexPolicyDocumentFormat { diff --git a/src/StellaOps.Vexer.Policy/VexPolicyDiagnostics.cs b/src/StellaOps.Excititor.Policy/VexPolicyDiagnostics.cs similarity index 94% rename from src/StellaOps.Vexer.Policy/VexPolicyDiagnostics.cs rename to src/StellaOps.Excititor.Policy/VexPolicyDiagnostics.cs index da4ce4b8..c8baaadb 100644 --- a/src/StellaOps.Vexer.Policy/VexPolicyDiagnostics.cs +++ b/src/StellaOps.Excititor.Policy/VexPolicyDiagnostics.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Immutable; using System.Linq; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; public interface IVexPolicyDiagnostics { @@ -80,7 +80,7 @@ public sealed class VexPolicyDiagnostics : IVexPolicyDiagnostics messages.Add($"Provider overrides active for: {string.Join(", ", overrides.Keys)}."); } - messages.Add("Refer to docs/ARCHITECTURE_VEXER.md for policy upgrade and diagnostics guidance."); + messages.Add("Refer to docs/ARCHITECTURE_EXCITITOR.md for policy upgrade and diagnostics guidance."); return messages.ToImmutable(); } diff --git a/src/StellaOps.Vexer.Policy/VexPolicyDigest.cs b/src/StellaOps.Excititor.Policy/VexPolicyDigest.cs similarity index 94% rename from src/StellaOps.Vexer.Policy/VexPolicyDigest.cs rename to src/StellaOps.Excititor.Policy/VexPolicyDigest.cs index fa1e0480..9d633b6e 100644 --- a/src/StellaOps.Vexer.Policy/VexPolicyDigest.cs +++ b/src/StellaOps.Excititor.Policy/VexPolicyDigest.cs @@ -1,9 +1,9 @@ using System.Globalization; using System.Security.Cryptography; using System.Text; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; internal static class VexPolicyDigest { diff --git a/src/StellaOps.Vexer.Policy/VexPolicyOptions.cs b/src/StellaOps.Excititor.Policy/VexPolicyOptions.cs similarity index 93% rename from src/StellaOps.Vexer.Policy/VexPolicyOptions.cs rename to src/StellaOps.Excititor.Policy/VexPolicyOptions.cs index 527661da..e2a91d0c 100644 --- a/src/StellaOps.Vexer.Policy/VexPolicyOptions.cs +++ b/src/StellaOps.Excititor.Policy/VexPolicyOptions.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; public sealed class VexPolicyOptions { diff --git a/src/StellaOps.Vexer.Policy/VexPolicyProcessing.cs b/src/StellaOps.Excititor.Policy/VexPolicyProcessing.cs similarity index 98% rename from src/StellaOps.Vexer.Policy/VexPolicyProcessing.cs rename to src/StellaOps.Excititor.Policy/VexPolicyProcessing.cs index 9b1455d3..3939ecf3 100644 --- a/src/StellaOps.Vexer.Policy/VexPolicyProcessing.cs +++ b/src/StellaOps.Excititor.Policy/VexPolicyProcessing.cs @@ -1,8 +1,8 @@ using System.Collections.Immutable; using System.Globalization; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; internal static class VexPolicyProcessing { diff --git a/src/StellaOps.Vexer.Policy/VexPolicyTelemetry.cs b/src/StellaOps.Excititor.Policy/VexPolicyTelemetry.cs similarity index 86% rename from src/StellaOps.Vexer.Policy/VexPolicyTelemetry.cs rename to src/StellaOps.Excititor.Policy/VexPolicyTelemetry.cs index 4acb48d2..01faf87f 100644 --- a/src/StellaOps.Vexer.Policy/VexPolicyTelemetry.cs +++ b/src/StellaOps.Excititor.Policy/VexPolicyTelemetry.cs @@ -1,11 +1,11 @@ using System.Collections.Generic; using System.Diagnostics.Metrics; -namespace StellaOps.Vexer.Policy; +namespace StellaOps.Excititor.Policy; internal static class VexPolicyTelemetry { - private const string MeterName = "StellaOps.Vexer.Policy"; + private const string MeterName = "StellaOps.Excititor.Policy"; private const string MeterVersion = "1.0.0"; private static readonly Meter Meter = new(MeterName, MeterVersion); diff --git a/src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexCacheMaintenanceTests.cs b/src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexCacheMaintenanceTests.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexCacheMaintenanceTests.cs rename to src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexCacheMaintenanceTests.cs index 2fcde859..38cb0b5c 100644 --- a/src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexCacheMaintenanceTests.cs +++ b/src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexCacheMaintenanceTests.cs @@ -4,7 +4,7 @@ using Mongo2Go; using MongoDB.Bson; using MongoDB.Driver; -namespace StellaOps.Vexer.Storage.Mongo.Tests; +namespace StellaOps.Excititor.Storage.Mongo.Tests; public sealed class MongoVexCacheMaintenanceTests : IAsyncLifetime { diff --git a/src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexRepositoryTests.cs b/src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexRepositoryTests.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexRepositoryTests.cs rename to src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexRepositoryTests.cs index fd773f01..522b0623 100644 --- a/src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexRepositoryTests.cs +++ b/src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexRepositoryTests.cs @@ -5,9 +5,9 @@ using Microsoft.Extensions.Options; using Mongo2Go; using MongoDB.Bson; using MongoDB.Driver; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo.Tests; +namespace StellaOps.Excititor.Storage.Mongo.Tests; public sealed class MongoVexRepositoryTests : IAsyncLifetime { diff --git a/src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexStoreMappingTests.cs b/src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexStoreMappingTests.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexStoreMappingTests.cs rename to src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexStoreMappingTests.cs index ee085bd4..7277becc 100644 --- a/src/StellaOps.Vexer.Storage.Mongo.Tests/MongoVexStoreMappingTests.cs +++ b/src/StellaOps.Excititor.Storage.Mongo.Tests/MongoVexStoreMappingTests.cs @@ -2,9 +2,9 @@ using System.Globalization; using Mongo2Go; using MongoDB.Bson; using MongoDB.Driver; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo.Tests; +namespace StellaOps.Excititor.Storage.Mongo.Tests; public sealed class MongoVexStoreMappingTests : IAsyncLifetime { @@ -15,7 +15,7 @@ public sealed class MongoVexStoreMappingTests : IAsyncLifetime { _runner = MongoDbRunner.Start(); var client = new MongoClient(_runner.ConnectionString); - _database = client.GetDatabase("vexer-storage-mapping-tests"); + _database = client.GetDatabase("excititor-storage-mapping-tests"); VexMongoMappingRegistry.Register(); } diff --git a/src/StellaOps.Vexer.Storage.Mongo.Tests/StellaOps.Vexer.Storage.Mongo.Tests.csproj b/src/StellaOps.Excititor.Storage.Mongo.Tests/StellaOps.Excititor.Storage.Mongo.Tests.csproj similarity index 58% rename from src/StellaOps.Vexer.Storage.Mongo.Tests/StellaOps.Vexer.Storage.Mongo.Tests.csproj rename to src/StellaOps.Excititor.Storage.Mongo.Tests/StellaOps.Excititor.Storage.Mongo.Tests.csproj index e7bf25c6..e8bd0e17 100644 --- a/src/StellaOps.Vexer.Storage.Mongo.Tests/StellaOps.Vexer.Storage.Mongo.Tests.csproj +++ b/src/StellaOps.Excititor.Storage.Mongo.Tests/StellaOps.Excititor.Storage.Mongo.Tests.csproj @@ -7,9 +7,9 @@ true - - - + + + diff --git a/src/StellaOps.Vexer.Storage.Mongo.Tests/VexMongoMigrationRunnerTests.cs b/src/StellaOps.Excititor.Storage.Mongo.Tests/VexMongoMigrationRunnerTests.cs similarity index 93% rename from src/StellaOps.Vexer.Storage.Mongo.Tests/VexMongoMigrationRunnerTests.cs rename to src/StellaOps.Excititor.Storage.Mongo.Tests/VexMongoMigrationRunnerTests.cs index cb6ca681..08e98dec 100644 --- a/src/StellaOps.Vexer.Storage.Mongo.Tests/VexMongoMigrationRunnerTests.cs +++ b/src/StellaOps.Excititor.Storage.Mongo.Tests/VexMongoMigrationRunnerTests.cs @@ -4,9 +4,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.Logging.Abstractions; using Mongo2Go; using MongoDB.Driver; -using StellaOps.Vexer.Storage.Mongo.Migrations; +using StellaOps.Excititor.Storage.Mongo.Migrations; -namespace StellaOps.Vexer.Storage.Mongo.Tests; +namespace StellaOps.Excititor.Storage.Mongo.Tests; public sealed class VexMongoMigrationRunnerTests : IAsyncLifetime { @@ -17,7 +17,7 @@ public sealed class VexMongoMigrationRunnerTests : IAsyncLifetime { _runner = MongoDbRunner.Start(); var client = new MongoClient(_runner.ConnectionString); - _database = client.GetDatabase("vexer-migrations-tests"); + _database = client.GetDatabase("excititor-migrations-tests"); } [Fact] diff --git a/src/StellaOps.Vexer.Storage.Mongo/AGENTS.md b/src/StellaOps.Excititor.Storage.Mongo/AGENTS.md similarity index 89% rename from src/StellaOps.Vexer.Storage.Mongo/AGENTS.md rename to src/StellaOps.Excititor.Storage.Mongo/AGENTS.md index 45b4988b..e5f3b51c 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/AGENTS.md +++ b/src/StellaOps.Excititor.Storage.Mongo/AGENTS.md @@ -1,6 +1,6 @@ # AGENTS ## Role -MongoDB persistence layer for Vexer raw documents, claims, consensus snapshots, exports, and cache metadata. +MongoDB persistence layer for Excititor raw documents, claims, consensus snapshots, exports, and cache metadata. ## Scope - Collection schemas, Bson class maps, repositories, and transactional write patterns for ingest/export flows. - GridFS integration for raw source documents and artifact metadata persistence. @@ -21,4 +21,4 @@ Out: domain modeling (Core), policy evaluation (Policy), HTTP surfaces (WebServi - Expose health metrics (counts, queue backlog) and publish to OpenTelemetry when enabled. - Ensure no raw secret material is logged; mask tokens/URLs in diagnostics. ## Tests -- Integration fixtures (Mongo runner) and schema regression tests will reside in `../StellaOps.Vexer.Storage.Mongo.Tests`. +- Integration fixtures (Mongo runner) and schema regression tests will reside in `../StellaOps.Excititor.Storage.Mongo.Tests`. diff --git a/src/StellaOps.Vexer.Storage.Mongo/IVexRawStore.cs b/src/StellaOps.Excititor.Storage.Mongo/IVexRawStore.cs similarity index 86% rename from src/StellaOps.Vexer.Storage.Mongo/IVexRawStore.cs rename to src/StellaOps.Excititor.Storage.Mongo/IVexRawStore.cs index ecf3da8e..b3258aef 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/IVexRawStore.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/IVexRawStore.cs @@ -1,8 +1,8 @@ using System.Threading; using System.Threading.Tasks; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public interface IVexRawStore : IVexRawDocumentSink { diff --git a/src/StellaOps.Vexer.Storage.Mongo/IVexStorageContracts.cs b/src/StellaOps.Excititor.Storage.Mongo/IVexStorageContracts.cs similarity index 95% rename from src/StellaOps.Vexer.Storage.Mongo/IVexStorageContracts.cs rename to src/StellaOps.Excititor.Storage.Mongo/IVexStorageContracts.cs index 7009f034..58a61257 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/IVexStorageContracts.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/IVexStorageContracts.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public interface IVexProviderStore { diff --git a/src/StellaOps.Vexer.Storage.Mongo/Migrations/IVexMongoMigration.cs b/src/StellaOps.Excititor.Storage.Mongo/Migrations/IVexMongoMigration.cs similarity index 80% rename from src/StellaOps.Vexer.Storage.Mongo/Migrations/IVexMongoMigration.cs rename to src/StellaOps.Excititor.Storage.Mongo/Migrations/IVexMongoMigration.cs index 612442f6..7d642a9f 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/Migrations/IVexMongoMigration.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/Migrations/IVexMongoMigration.cs @@ -2,7 +2,7 @@ using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; -namespace StellaOps.Vexer.Storage.Mongo.Migrations; +namespace StellaOps.Excititor.Storage.Mongo.Migrations; internal interface IVexMongoMigration { diff --git a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexInitialIndexMigration.cs b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexInitialIndexMigration.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo/Migrations/VexInitialIndexMigration.cs rename to src/StellaOps.Excititor.Storage.Mongo/Migrations/VexInitialIndexMigration.cs index 34c916cf..06e4a425 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexInitialIndexMigration.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexInitialIndexMigration.cs @@ -2,7 +2,7 @@ using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; -namespace StellaOps.Vexer.Storage.Mongo.Migrations; +namespace StellaOps.Excititor.Storage.Mongo.Migrations; internal sealed class VexInitialIndexMigration : IVexMongoMigration { diff --git a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMigrationRecord.cs b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMigrationRecord.cs similarity index 88% rename from src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMigrationRecord.cs rename to src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMigrationRecord.cs index 9c392bdb..4e31f6cf 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMigrationRecord.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMigrationRecord.cs @@ -1,7 +1,7 @@ using System; using MongoDB.Bson.Serialization.Attributes; -namespace StellaOps.Vexer.Storage.Mongo.Migrations; +namespace StellaOps.Excititor.Storage.Mongo.Migrations; internal sealed class VexMigrationRecord { diff --git a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMongoMigrationHostedService.cs b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMongoMigrationHostedService.cs similarity index 91% rename from src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMongoMigrationHostedService.cs rename to src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMongoMigrationHostedService.cs index 1274bb80..0920e1cd 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMongoMigrationHostedService.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMongoMigrationHostedService.cs @@ -2,7 +2,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; -namespace StellaOps.Vexer.Storage.Mongo.Migrations; +namespace StellaOps.Excititor.Storage.Mongo.Migrations; internal sealed class VexMongoMigrationHostedService : IHostedService { diff --git a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMongoMigrationRunner.cs b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMongoMigrationRunner.cs similarity index 90% rename from src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMongoMigrationRunner.cs rename to src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMongoMigrationRunner.cs index 2cff832d..beca9c68 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/Migrations/VexMongoMigrationRunner.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/Migrations/VexMongoMigrationRunner.cs @@ -4,7 +4,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.Logging; using MongoDB.Driver; -namespace StellaOps.Vexer.Storage.Mongo.Migrations; +namespace StellaOps.Excititor.Storage.Mongo.Migrations; internal sealed class VexMongoMigrationRunner { @@ -43,12 +43,12 @@ internal sealed class VexMongoMigrationRunner continue; } - _logger.LogInformation("Applying Vexer Mongo migration {MigrationId}", migration.Id); + _logger.LogInformation("Applying Excititor Mongo migration {MigrationId}", migration.Id); await migration.ExecuteAsync(_database, cancellationToken).ConfigureAwait(false); var record = new VexMigrationRecord(migration.Id, DateTimeOffset.UtcNow); await migrationsCollection.InsertOneAsync(record, cancellationToken: cancellationToken).ConfigureAwait(false); - _logger.LogInformation("Completed Vexer Mongo migration {MigrationId}", migration.Id); + _logger.LogInformation("Completed Excititor Mongo migration {MigrationId}", migration.Id); } } diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexCacheIndex.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexCacheIndex.cs similarity index 95% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexCacheIndex.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexCacheIndex.cs index 8ea4fa96..2a937fea 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexCacheIndex.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexCacheIndex.cs @@ -3,9 +3,9 @@ using System.Threading; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public sealed class MongoVexCacheIndex : IVexCacheIndex { diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexCacheMaintenance.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexCacheMaintenance.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexCacheMaintenance.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexCacheMaintenance.cs index 77545f37..1ff69f8d 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexCacheMaintenance.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexCacheMaintenance.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Microsoft.Extensions.Logging; using MongoDB.Driver; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; internal sealed class MongoVexCacheMaintenance : IVexCacheMaintenance { diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexConnectorStateRepository.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexConnectorStateRepository.cs similarity index 97% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexConnectorStateRepository.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexConnectorStateRepository.cs index b3dda181..c45aa897 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexConnectorStateRepository.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexConnectorStateRepository.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public sealed class MongoVexConnectorStateRepository : IVexConnectorStateRepository { diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexConsensusStore.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexConsensusStore.cs similarity index 96% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexConsensusStore.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexConsensusStore.cs index 684de965..5a866c3c 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexConsensusStore.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexConsensusStore.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public sealed class MongoVexConsensusStore : IVexConsensusStore { diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexExportStore.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexExportStore.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexExportStore.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexExportStore.cs index 1be1b47c..0ac1f210 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexExportStore.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexExportStore.cs @@ -5,9 +5,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.Options; using MongoDB.Driver; using MongoDB.Driver.Core.Clusters; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public sealed class MongoVexExportStore : IVexExportStore { diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexProviderStore.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexProviderStore.cs similarity index 95% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexProviderStore.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexProviderStore.cs index b551b820..ceb42488 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexProviderStore.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexProviderStore.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public sealed class MongoVexProviderStore : IVexProviderStore { diff --git a/src/StellaOps.Vexer.Storage.Mongo/MongoVexRawStore.cs b/src/StellaOps.Excititor.Storage.Mongo/MongoVexRawStore.cs similarity index 98% rename from src/StellaOps.Vexer.Storage.Mongo/MongoVexRawStore.cs rename to src/StellaOps.Excititor.Storage.Mongo/MongoVexRawStore.cs index 92a3de3f..57dbc197 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/MongoVexRawStore.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/MongoVexRawStore.cs @@ -8,9 +8,9 @@ using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Core.Clusters; using MongoDB.Driver.GridFS; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public sealed class MongoVexRawStore : IVexRawStore { diff --git a/src/StellaOps.Excititor.Storage.Mongo/Properties/AssemblyInfo.cs b/src/StellaOps.Excititor.Storage.Mongo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..efa6e779 --- /dev/null +++ b/src/StellaOps.Excititor.Storage.Mongo/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("StellaOps.Excititor.Storage.Mongo.Tests")] diff --git a/src/StellaOps.Vexer.Storage.Mongo/ServiceCollectionExtensions.cs b/src/StellaOps.Excititor.Storage.Mongo/ServiceCollectionExtensions.cs similarity index 83% rename from src/StellaOps.Vexer.Storage.Mongo/ServiceCollectionExtensions.cs rename to src/StellaOps.Excititor.Storage.Mongo/ServiceCollectionExtensions.cs index 984bcdc3..687cac2b 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/ServiceCollectionExtensions.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/ServiceCollectionExtensions.cs @@ -1,12 +1,12 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Storage.Mongo.Migrations; +using StellaOps.Excititor.Storage.Mongo.Migrations; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public static class VexMongoServiceCollectionExtensions { - public static IServiceCollection AddVexerMongoStorage(this IServiceCollection services) + public static IServiceCollection AddExcititorMongoStorage(this IServiceCollection services) { services.AddOptions(); diff --git a/src/StellaOps.Vexer.Storage.Mongo/StellaOps.Vexer.Storage.Mongo.csproj b/src/StellaOps.Excititor.Storage.Mongo/StellaOps.Excititor.Storage.Mongo.csproj similarity index 88% rename from src/StellaOps.Vexer.Storage.Mongo/StellaOps.Vexer.Storage.Mongo.csproj rename to src/StellaOps.Excititor.Storage.Mongo/StellaOps.Excititor.Storage.Mongo.csproj index 3a50e0d9..9008505a 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/StellaOps.Vexer.Storage.Mongo.csproj +++ b/src/StellaOps.Excititor.Storage.Mongo/StellaOps.Excititor.Storage.Mongo.csproj @@ -14,6 +14,6 @@ - + diff --git a/src/StellaOps.Excititor.Storage.Mongo/TASKS.md b/src/StellaOps.Excititor.Storage.Mongo/TASKS.md new file mode 100644 index 00000000..96311557 --- /dev/null +++ b/src/StellaOps.Excititor.Storage.Mongo/TASKS.md @@ -0,0 +1,10 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-STORAGE-01-001 – Collection schemas & class maps|Team Excititor Storage|EXCITITOR-CORE-01-001|DONE (2025-10-15) – Added Mongo mapping registry with raw/export entities and service registration groundwork.| +|EXCITITOR-STORAGE-01-002 – Migrations & indices bootstrap|Team Excititor Storage|EXCITITOR-STORAGE-01-001|**DONE (2025-10-16)** – Add bootstrapper creating indices (claims by vulnId/product, exports by querySignature, etc.) and migrations for existing deployments.
2025-10-16: Introduced migration runner + hosted service, initial index migration covers raw/providers/consensus/exports/cache, and tests use Mongo2Go to verify execution.| +|EXCITITOR-STORAGE-01-003 – Repository layer & transactional flows|Team Excititor Storage|EXCITITOR-STORAGE-01-001|**DONE (2025-10-16)** – Added GridFS-backed raw store with transactional upserts (including fallback for non-replicaset Mongo), export/cache repository coordination, and coverage verifying cache TTL + GridFS round-trips.| +|EXCITITOR-STORAGE-01-004 – Provider/consensus/cache mappings|Team Excititor Storage|EXCITITOR-STORAGE-01-001|**DONE (2025-10-16)** – Registered MongoDB class maps for provider/consensus/cache records with forward-compatible field handling and added coverage ensuring GridFS-linked cache entries round-trip cleanly.| +|EXCITITOR-STORAGE-02-001 – Statement events & scoring signals|Team Excititor Storage|EXCITITOR-CORE-02-001|TODO – Add immutable `vex.statements` collection, extend consensus documents with severity/KEV/EPSS fields, build indices for `policyRevisionId`/`generatedAt`, and script migrations/backfill guidance for Phase 1 rollout.| +|EXCITITOR-STORAGE-MONGO-08-001 – Session + causal consistency hardening|Team Excititor Storage|EXCITITOR-STORAGE-01-003|TODO – Register Mongo client/database with majority read/write concerns, expose scoped session helper enabling causal consistency, thread session handles through raw/export/consensus/cache stores (including GridFS reads), and extend integration tests to verify read-your-write semantics during replica-set failover.| diff --git a/src/StellaOps.Vexer.Storage.Mongo/VexMongoMappingRegistry.cs b/src/StellaOps.Excititor.Storage.Mongo/VexMongoMappingRegistry.cs similarity index 97% rename from src/StellaOps.Vexer.Storage.Mongo/VexMongoMappingRegistry.cs rename to src/StellaOps.Excititor.Storage.Mongo/VexMongoMappingRegistry.cs index a36abdc5..1f92595a 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/VexMongoMappingRegistry.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/VexMongoMappingRegistry.cs @@ -2,7 +2,7 @@ using System.Threading; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; public static class VexMongoMappingRegistry { diff --git a/src/StellaOps.Vexer.Storage.Mongo/VexMongoModels.cs b/src/StellaOps.Excititor.Storage.Mongo/VexMongoModels.cs similarity index 99% rename from src/StellaOps.Vexer.Storage.Mongo/VexMongoModels.cs rename to src/StellaOps.Excititor.Storage.Mongo/VexMongoModels.cs index c9f61f48..f6ac4ec7 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/VexMongoModels.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/VexMongoModels.cs @@ -5,9 +5,9 @@ using System.Globalization; using System.Linq; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; -using StellaOps.Vexer.Core; +using StellaOps.Excititor.Core; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; [BsonIgnoreExtraElements] internal sealed class VexRawDocumentRecord diff --git a/src/StellaOps.Vexer.Storage.Mongo/VexMongoStorageOptions.cs b/src/StellaOps.Excititor.Storage.Mongo/VexMongoStorageOptions.cs similarity index 92% rename from src/StellaOps.Vexer.Storage.Mongo/VexMongoStorageOptions.cs rename to src/StellaOps.Excititor.Storage.Mongo/VexMongoStorageOptions.cs index ae0c7aae..4f13affe 100644 --- a/src/StellaOps.Vexer.Storage.Mongo/VexMongoStorageOptions.cs +++ b/src/StellaOps.Excititor.Storage.Mongo/VexMongoStorageOptions.cs @@ -2,10 +2,10 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -namespace StellaOps.Vexer.Storage.Mongo; +namespace StellaOps.Excititor.Storage.Mongo; /// -/// Configuration controlling Mongo-backed storage for Vexer repositories. +/// Configuration controlling Mongo-backed storage for Excititor repositories. /// public sealed class VexMongoStorageOptions : IValidatableObject { diff --git a/src/StellaOps.Vexer.WebService.Tests/StatusEndpointTests.cs b/src/StellaOps.Excititor.WebService.Tests/StatusEndpointTests.cs similarity index 83% rename from src/StellaOps.Vexer.WebService.Tests/StatusEndpointTests.cs rename to src/StellaOps.Excititor.WebService.Tests/StatusEndpointTests.cs index 2463dfe6..977204a3 100644 --- a/src/StellaOps.Vexer.WebService.Tests/StatusEndpointTests.cs +++ b/src/StellaOps.Excititor.WebService.Tests/StatusEndpointTests.cs @@ -8,13 +8,13 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Mongo2Go; using MongoDB.Driver; -using StellaOps.Vexer.Attestation.Signing; -using StellaOps.Vexer.Policy; -using StellaOps.Vexer.Core; -using StellaOps.Vexer.Export; -using StellaOps.Vexer.WebService; +using StellaOps.Excititor.Attestation.Signing; +using StellaOps.Excititor.Policy; +using StellaOps.Excititor.Core; +using StellaOps.Excititor.Export; +using StellaOps.Excititor.WebService; -namespace StellaOps.Vexer.WebService.Tests; +namespace StellaOps.Excititor.WebService.Tests; public sealed class StatusEndpointTests : IClassFixture>, IDisposable { @@ -28,13 +28,13 @@ public sealed class StatusEndpointTests : IClassFixture { - var rootPath = Path.Combine(Path.GetTempPath(), "vexer-offline-tests"); + var rootPath = Path.Combine(Path.GetTempPath(), "excititor-offline-tests"); Directory.CreateDirectory(rootPath); var settings = new Dictionary { - ["Vexer:Storage:Mongo:RawBucketName"] = "vex.raw", - ["Vexer:Storage:Mongo:GridFsInlineThresholdBytes"] = "256", - ["Vexer:Artifacts:FileSystem:RootPath"] = rootPath, + ["Excititor:Storage:Mongo:RawBucketName"] = "vex.raw", + ["Excititor:Storage:Mongo:GridFsInlineThresholdBytes"] = "256", + ["Excititor:Artifacts:FileSystem:RootPath"] = rootPath, }; config.AddInMemoryCollection(settings!); }); @@ -42,7 +42,7 @@ public sealed class StatusEndpointTests : IClassFixture { services.AddSingleton(_ => new MongoClient(_runner.ConnectionString)); - services.AddSingleton(provider => provider.GetRequiredService().GetDatabase("vexer-web-tests")); + services.AddSingleton(provider => provider.GetRequiredService().GetDatabase("excititor-web-tests")); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); @@ -54,7 +54,7 @@ public sealed class StatusEndpointTests : IClassFixture - + diff --git a/src/StellaOps.Vexer.WebService/AGENTS.md b/src/StellaOps.Excititor.WebService/AGENTS.md similarity index 77% rename from src/StellaOps.Vexer.WebService/AGENTS.md rename to src/StellaOps.Excititor.WebService/AGENTS.md index d5f12802..04d883aa 100644 --- a/src/StellaOps.Vexer.WebService/AGENTS.md +++ b/src/StellaOps.Excititor.WebService/AGENTS.md @@ -1,13 +1,13 @@ # AGENTS ## Role -ASP.NET Minimal API surface for Vexer ingest, provider administration, reconciliation, export, and verification flows. +ASP.NET Minimal API surface for Excititor ingest, provider administration, reconciliation, export, and verification flows. ## Scope - Program bootstrap, DI wiring for connectors/normalizers/export/attestation/policy/storage. -- HTTP endpoints `/vexer/*` with authentication, authorization scopes, request validation, and deterministic responses. +- HTTP endpoints `/excititor/*` with authentication, authorization scopes, request validation, and deterministic responses. - Job orchestration bridges for Worker hand-off (when co-hosted) and offline-friendly configuration. - Observability (structured logs, metrics, tracing) aligned with StellaOps conventions. ## Participants -- StellaOps.Cli sends `vexer` verbs to this service via token-authenticated HTTPS. +- StellaOps.Cli sends `excititor` verbs to this service via token-authenticated HTTPS. - Worker receives scheduled jobs and uses shared infrastructure via common DI extensions. - Authority service provides tokens; WebService enforces scopes before executing operations. ## Interfaces & contracts @@ -22,4 +22,4 @@ Out: long-running ingestion loops (Worker), export rendering (Export module), co - Emit structured events for ingest runs, export invocations, attestation references. - Provide built-in counters/histograms for latency and throughput. ## Tests -- Minimal API contract/unit tests and integration harness will live in `../StellaOps.Vexer.WebService.Tests`. +- Minimal API contract/unit tests and integration harness will live in `../StellaOps.Excititor.WebService.Tests`. diff --git a/src/StellaOps.Vexer.WebService/Program.cs b/src/StellaOps.Excititor.WebService/Program.cs similarity index 71% rename from src/StellaOps.Vexer.WebService/Program.cs rename to src/StellaOps.Excititor.WebService/Program.cs index cef66a25..a4990bd5 100644 --- a/src/StellaOps.Vexer.WebService/Program.cs +++ b/src/StellaOps.Excititor.WebService/Program.cs @@ -1,36 +1,36 @@ using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Attestation.Extensions; -using StellaOps.Vexer.Attestation; -using StellaOps.Vexer.Attestation.Transparency; -using StellaOps.Vexer.ArtifactStores.S3.Extensions; -using StellaOps.Vexer.Export; -using StellaOps.Vexer.Storage.Mongo; -using StellaOps.Vexer.Connectors.RedHat.CSAF.DependencyInjection; +using StellaOps.Excititor.Attestation.Extensions; +using StellaOps.Excititor.Attestation; +using StellaOps.Excititor.Attestation.Transparency; +using StellaOps.Excititor.ArtifactStores.S3.Extensions; +using StellaOps.Excititor.Export; +using StellaOps.Excititor.Storage.Mongo; +using StellaOps.Excititor.Connectors.RedHat.CSAF.DependencyInjection; var builder = WebApplication.CreateBuilder(args); var configuration = builder.Configuration; var services = builder.Services; services.AddOptions() - .Bind(configuration.GetSection("Vexer:Storage:Mongo")) + .Bind(configuration.GetSection("Excititor:Storage:Mongo")) .ValidateOnStart(); -services.AddVexerMongoStorage(); +services.AddExcititorMongoStorage(); services.AddVexExportEngine(); services.AddVexExportCacheServices(); services.AddVexAttestation(); -services.Configure(configuration.GetSection("Vexer:Attestation:Client")); +services.Configure(configuration.GetSection("Excititor:Attestation:Client")); services.AddRedHatCsafConnector(); -var rekorSection = configuration.GetSection("Vexer:Attestation:Rekor"); +var rekorSection = configuration.GetSection("Excititor:Attestation:Rekor"); if (rekorSection.Exists()) { services.AddVexRekorClient(opts => rekorSection.Bind(opts)); } -var fileSystemSection = configuration.GetSection("Vexer:Artifacts:FileSystem"); +var fileSystemSection = configuration.GetSection("Excititor:Artifacts:FileSystem"); if (fileSystemSection.Exists()) { services.AddVexFileSystemArtifactStore(opts => fileSystemSection.Bind(opts)); @@ -40,7 +40,7 @@ else services.AddVexFileSystemArtifactStore(_ => { }); } -var s3Section = configuration.GetSection("Vexer:Artifacts:S3"); +var s3Section = configuration.GetSection("Excititor:Artifacts:S3"); if (s3Section.Exists()) { services.AddVexS3ArtifactClient(opts => s3Section.GetSection("Client").Bind(opts)); @@ -55,7 +55,7 @@ if (s3Section.Exists()) }); } -var offlineSection = configuration.GetSection("Vexer:Artifacts:OfflineBundle"); +var offlineSection = configuration.GetSection("Excititor:Artifacts:OfflineBundle"); if (offlineSection.Exists()) { services.AddVexOfflineBundleArtifactStore(opts => offlineSection.Bind(opts)); @@ -67,7 +67,7 @@ services.AddSingleton(TimeProvider.System); var app = builder.Build(); -app.MapGet("/vexer/status", async (HttpContext context, +app.MapGet("/excititor/status", async (HttpContext context, IEnumerable artifactStores, IOptions mongoOptions, TimeProvider timeProvider) => @@ -82,7 +82,7 @@ app.MapGet("/vexer/status", async (HttpContext context, await System.Text.Json.JsonSerializer.SerializeAsync(context.Response.Body, payload); }); -app.MapHealthChecks("/vexer/health"); +app.MapHealthChecks("/excititor/health"); app.Run(); diff --git a/src/StellaOps.Excititor.WebService/StellaOps.Excititor.WebService.csproj b/src/StellaOps.Excititor.WebService/StellaOps.Excititor.WebService.csproj new file mode 100644 index 00000000..3c64af7d --- /dev/null +++ b/src/StellaOps.Excititor.WebService/StellaOps.Excititor.WebService.csproj @@ -0,0 +1,16 @@ + + + net10.0 + preview + enable + enable + true + + + + + + + + + diff --git a/src/StellaOps.Excititor.WebService/TASKS.md b/src/StellaOps.Excititor.WebService/TASKS.md new file mode 100644 index 00000000..2b5d3486 --- /dev/null +++ b/src/StellaOps.Excititor.WebService/TASKS.md @@ -0,0 +1,8 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-WEB-01-001 – Minimal API bootstrap & DI|Team Excititor WebService|EXCITITOR-CORE-01-003, EXCITITOR-STORAGE-01-003|**DONE (2025-10-17)** – Minimal API host composes storage/export/attestation/artifact stores, binds Mongo/attestation options, and exposes `/excititor/status` + health endpoints with regression coverage in `StatusEndpointTests`.| +|EXCITITOR-WEB-01-002 – Ingest & reconcile endpoints|Team Excititor WebService|EXCITITOR-WEB-01-001|TODO – Implement `/excititor/init`, `/excititor/ingest/run`, `/excititor/ingest/resume`, `/excititor/reconcile` with token scope enforcement and structured run telemetry.| +|EXCITITOR-WEB-01-003 – Export & verify endpoints|Team Excititor WebService|EXCITITOR-WEB-01-001, EXCITITOR-EXPORT-01-001, EXCITITOR-ATTEST-01-001|TODO – Add `/excititor/export`, `/excititor/export/{id}`, `/excititor/export/{id}/download`, `/excititor/verify`, returning artifact + attestation metadata with cache awareness.| +|EXCITITOR-WEB-01-004 – Resolve API & signed responses|Team Excititor WebService|EXCITITOR-WEB-01-001, EXCITITOR-ATTEST-01-002|TODO – Deliver `/excititor/resolve` (subject/context), return consensus + score envelopes, attach cosign/Rekor metadata, and document auth + rate guardrails.| diff --git a/src/StellaOps.Vexer.Worker.Tests/StellaOps.Vexer.Worker.Tests.csproj b/src/StellaOps.Excititor.Worker.Tests/StellaOps.Excititor.Worker.Tests.csproj similarity index 79% rename from src/StellaOps.Vexer.Worker.Tests/StellaOps.Vexer.Worker.Tests.csproj rename to src/StellaOps.Excititor.Worker.Tests/StellaOps.Excititor.Worker.Tests.csproj index 9e3c17ca..a6382dce 100644 --- a/src/StellaOps.Vexer.Worker.Tests/StellaOps.Vexer.Worker.Tests.csproj +++ b/src/StellaOps.Excititor.Worker.Tests/StellaOps.Excititor.Worker.Tests.csproj @@ -11,6 +11,6 @@ - + diff --git a/src/StellaOps.Vexer.Worker.Tests/VexWorkerOptionsTests.cs b/src/StellaOps.Excititor.Worker.Tests/VexWorkerOptionsTests.cs similarity index 84% rename from src/StellaOps.Vexer.Worker.Tests/VexWorkerOptionsTests.cs rename to src/StellaOps.Excititor.Worker.Tests/VexWorkerOptionsTests.cs index 8860638c..6698ef32 100644 --- a/src/StellaOps.Vexer.Worker.Tests/VexWorkerOptionsTests.cs +++ b/src/StellaOps.Excititor.Worker.Tests/VexWorkerOptionsTests.cs @@ -1,9 +1,9 @@ using FluentAssertions; -using StellaOps.Vexer.Worker.Options; -using StellaOps.Vexer.Worker.Scheduling; +using StellaOps.Excititor.Worker.Options; +using StellaOps.Excititor.Worker.Scheduling; using Xunit; -namespace StellaOps.Vexer.Worker.Tests; +namespace StellaOps.Excititor.Worker.Tests; public sealed class VexWorkerOptionsTests { @@ -16,7 +16,7 @@ public sealed class VexWorkerOptionsTests OfflineInterval = TimeSpan.FromHours(6), OfflineMode = false, }; - options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "vexer:redhat" }); + options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "excititor:redhat" }); var schedules = options.ResolveSchedules(); @@ -33,7 +33,7 @@ public sealed class VexWorkerOptionsTests OfflineInterval = TimeSpan.FromHours(8), OfflineMode = true, }; - options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "vexer:offline" }); + options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "excititor:offline" }); var schedules = options.ResolveSchedules(); @@ -45,13 +45,13 @@ public sealed class VexWorkerOptionsTests public void ResolveSchedules_SkipsDisabledProviders() { var options = new VexWorkerOptions(); - options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "vexer:enabled" }); - options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "vexer:disabled", Enabled = false }); + options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "excititor:enabled" }); + options.Providers.Add(new VexWorkerProviderOptions { ProviderId = "excititor:disabled", Enabled = false }); var schedules = options.ResolveSchedules(); schedules.Should().HaveCount(1); - schedules[0].ProviderId.Should().Be("vexer:enabled"); + schedules[0].ProviderId.Should().Be("excititor:enabled"); } [Fact] @@ -63,7 +63,7 @@ public sealed class VexWorkerOptionsTests }; options.Providers.Add(new VexWorkerProviderOptions { - ProviderId = "vexer:custom", + ProviderId = "excititor:custom", Interval = TimeSpan.FromMinutes(5), InitialDelay = TimeSpan.FromSeconds(10), }); diff --git a/src/StellaOps.Vexer.Worker/AGENTS.md b/src/StellaOps.Excititor.Worker/AGENTS.md similarity index 91% rename from src/StellaOps.Vexer.Worker/AGENTS.md rename to src/StellaOps.Excititor.Worker/AGENTS.md index d49907cc..a9ea3d57 100644 --- a/src/StellaOps.Vexer.Worker/AGENTS.md +++ b/src/StellaOps.Excititor.Worker/AGENTS.md @@ -1,6 +1,6 @@ # AGENTS ## Role -Background processing host coordinating scheduled pulls, retries, reconciliation, verification, and cache maintenance for Vexer. +Background processing host coordinating scheduled pulls, retries, reconciliation, verification, and cache maintenance for Excititor. ## Scope - Hosted service (Worker Service) wiring timers/queues for provider pulls and reconciliation cycles. - Resume token management, retry policies, and failure quarantines for connectors. @@ -20,4 +20,4 @@ Out: HTTP endpoint definitions, domain modeling, connector-specific parsing logi - Publish metrics for pull latency, failure counts, retry depth, cache size, and verification outcomes. - Log correlation IDs & provider IDs; avoid leaking secret config values. ## Tests -- Worker orchestration tests, timer controls, and retry behavior will live in `../StellaOps.Vexer.Worker.Tests`. +- Worker orchestration tests, timer controls, and retry behavior will live in `../StellaOps.Excititor.Worker.Tests`. diff --git a/src/StellaOps.Vexer.Worker/Options/VexWorkerOptions.cs b/src/StellaOps.Excititor.Worker/Options/VexWorkerOptions.cs similarity index 94% rename from src/StellaOps.Vexer.Worker/Options/VexWorkerOptions.cs rename to src/StellaOps.Excititor.Worker/Options/VexWorkerOptions.cs index e8a79079..1f18d43a 100644 --- a/src/StellaOps.Vexer.Worker/Options/VexWorkerOptions.cs +++ b/src/StellaOps.Excititor.Worker/Options/VexWorkerOptions.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using StellaOps.Vexer.Worker.Scheduling; +using StellaOps.Excititor.Worker.Scheduling; -namespace StellaOps.Vexer.Worker.Options; +namespace StellaOps.Excititor.Worker.Options; public sealed class VexWorkerOptions { diff --git a/src/StellaOps.Vexer.Worker/Options/VexWorkerOptionsValidator.cs b/src/StellaOps.Excititor.Worker/Options/VexWorkerOptionsValidator.cs similarity index 63% rename from src/StellaOps.Vexer.Worker/Options/VexWorkerOptionsValidator.cs rename to src/StellaOps.Excititor.Worker/Options/VexWorkerOptionsValidator.cs index bf53b771..6b4f96b8 100644 --- a/src/StellaOps.Vexer.Worker/Options/VexWorkerOptionsValidator.cs +++ b/src/StellaOps.Excititor.Worker/Options/VexWorkerOptionsValidator.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Microsoft.Extensions.Options; -namespace StellaOps.Vexer.Worker.Options; +namespace StellaOps.Excititor.Worker.Options; internal sealed class VexWorkerOptionsValidator : IValidateOptions { @@ -11,17 +11,17 @@ internal sealed class VexWorkerOptionsValidator : IValidateOptions string.IsNullOrWhiteSpace(SearchPattern) - ? "StellaOps.Vexer.Connectors.*.dll" + ? "StellaOps.Excititor.Connectors.*.dll" : SearchPattern!; } diff --git a/src/StellaOps.Vexer.Worker/Program.cs b/src/StellaOps.Excititor.Worker/Program.cs similarity index 75% rename from src/StellaOps.Vexer.Worker/Program.cs rename to src/StellaOps.Excititor.Worker/Program.cs index 247c4f39..062de8c7 100644 --- a/src/StellaOps.Vexer.Worker/Program.cs +++ b/src/StellaOps.Excititor.Worker/Program.cs @@ -5,29 +5,29 @@ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using StellaOps.Plugin; -using StellaOps.Vexer.Connectors.RedHat.CSAF.DependencyInjection; -using StellaOps.Vexer.Worker.Options; -using StellaOps.Vexer.Worker.Scheduling; +using StellaOps.Excititor.Connectors.RedHat.CSAF.DependencyInjection; +using StellaOps.Excititor.Worker.Options; +using StellaOps.Excititor.Worker.Scheduling; var builder = Host.CreateApplicationBuilder(args); var services = builder.Services; var configuration = builder.Configuration; services.AddOptions() - .Bind(configuration.GetSection("Vexer:Worker")) + .Bind(configuration.GetSection("Excititor:Worker")) .ValidateOnStart(); -services.Configure(configuration.GetSection("Vexer:Worker:Plugins")); +services.Configure(configuration.GetSection("Excititor:Worker:Plugins")); services.AddRedHatCsafConnector(); services.AddSingleton, VexWorkerOptionsValidator>(); services.AddSingleton(TimeProvider.System); services.PostConfigure(options => { - if (!options.Providers.Any(provider => string.Equals(provider.ProviderId, "vexer:redhat", StringComparison.OrdinalIgnoreCase))) + if (!options.Providers.Any(provider => string.Equals(provider.ProviderId, "excititor:redhat", StringComparison.OrdinalIgnoreCase))) { options.Providers.Add(new VexWorkerProviderOptions { - ProviderId = "vexer:redhat", + ProviderId = "excititor:redhat", }); } }); @@ -44,7 +44,7 @@ services.AddSingleton(provider => else { var logger = provider.GetRequiredService>(); - logger.LogWarning("Vexer worker plugin directory '{Directory}' does not exist; proceeding without external connectors.", directory); + logger.LogWarning("Excititor worker plugin directory '{Directory}' does not exist; proceeding without external connectors.", directory); } return catalog; diff --git a/src/StellaOps.Excititor.Worker/Properties/AssemblyInfo.cs b/src/StellaOps.Excititor.Worker/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8d1917cd --- /dev/null +++ b/src/StellaOps.Excititor.Worker/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("StellaOps.Excititor.Worker.Tests")] diff --git a/src/StellaOps.Vexer.Worker/Scheduling/DefaultVexProviderRunner.cs b/src/StellaOps.Excititor.Worker/Scheduling/DefaultVexProviderRunner.cs similarity index 97% rename from src/StellaOps.Vexer.Worker/Scheduling/DefaultVexProviderRunner.cs rename to src/StellaOps.Excititor.Worker/Scheduling/DefaultVexProviderRunner.cs index 113d1f7c..0d09f945 100644 --- a/src/StellaOps.Vexer.Worker/Scheduling/DefaultVexProviderRunner.cs +++ b/src/StellaOps.Excititor.Worker/Scheduling/DefaultVexProviderRunner.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using StellaOps.Plugin; -namespace StellaOps.Vexer.Worker.Scheduling; +namespace StellaOps.Excititor.Worker.Scheduling; internal sealed class DefaultVexProviderRunner : IVexProviderRunner { diff --git a/src/StellaOps.Vexer.Worker/Scheduling/IVexProviderRunner.cs b/src/StellaOps.Excititor.Worker/Scheduling/IVexProviderRunner.cs similarity index 71% rename from src/StellaOps.Vexer.Worker/Scheduling/IVexProviderRunner.cs rename to src/StellaOps.Excititor.Worker/Scheduling/IVexProviderRunner.cs index 8d20f39d..78e2021b 100644 --- a/src/StellaOps.Vexer.Worker/Scheduling/IVexProviderRunner.cs +++ b/src/StellaOps.Excititor.Worker/Scheduling/IVexProviderRunner.cs @@ -1,4 +1,4 @@ -namespace StellaOps.Vexer.Worker.Scheduling; +namespace StellaOps.Excititor.Worker.Scheduling; internal interface IVexProviderRunner { diff --git a/src/StellaOps.Vexer.Worker/Scheduling/VexWorkerHostedService.cs b/src/StellaOps.Excititor.Worker/Scheduling/VexWorkerHostedService.cs similarity index 92% rename from src/StellaOps.Vexer.Worker/Scheduling/VexWorkerHostedService.cs rename to src/StellaOps.Excititor.Worker/Scheduling/VexWorkerHostedService.cs index b37bbe38..8baf67ea 100644 --- a/src/StellaOps.Vexer.Worker/Scheduling/VexWorkerHostedService.cs +++ b/src/StellaOps.Excititor.Worker/Scheduling/VexWorkerHostedService.cs @@ -5,9 +5,9 @@ using System.Threading.Tasks; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using StellaOps.Vexer.Worker.Options; +using StellaOps.Excititor.Worker.Options; -namespace StellaOps.Vexer.Worker.Scheduling; +namespace StellaOps.Excititor.Worker.Scheduling; internal sealed class VexWorkerHostedService : BackgroundService { @@ -33,12 +33,12 @@ internal sealed class VexWorkerHostedService : BackgroundService var schedules = _options.Value.ResolveSchedules(); if (schedules.Count == 0) { - _logger.LogWarning("Vexer worker has no configured provider schedules; the service will remain idle."); + _logger.LogWarning("Excititor worker has no configured provider schedules; the service will remain idle."); await Task.CompletedTask; return; } - _logger.LogInformation("Vexer worker starting with {ProviderCount} provider schedule(s).", schedules.Count); + _logger.LogInformation("Excititor worker starting with {ProviderCount} provider schedule(s).", schedules.Count); var tasks = new List(schedules.Count); foreach (var schedule in schedules) diff --git a/src/StellaOps.Vexer.Worker/Scheduling/VexWorkerSchedule.cs b/src/StellaOps.Excititor.Worker/Scheduling/VexWorkerSchedule.cs similarity index 67% rename from src/StellaOps.Vexer.Worker/Scheduling/VexWorkerSchedule.cs rename to src/StellaOps.Excititor.Worker/Scheduling/VexWorkerSchedule.cs index 81b2c68a..bd582646 100644 --- a/src/StellaOps.Vexer.Worker/Scheduling/VexWorkerSchedule.cs +++ b/src/StellaOps.Excititor.Worker/Scheduling/VexWorkerSchedule.cs @@ -1,3 +1,3 @@ -namespace StellaOps.Vexer.Worker.Scheduling; +namespace StellaOps.Excititor.Worker.Scheduling; internal sealed record VexWorkerSchedule(string ProviderId, TimeSpan Interval, TimeSpan InitialDelay); diff --git a/src/StellaOps.Vexer.Worker/StellaOps.Vexer.Worker.csproj b/src/StellaOps.Excititor.Worker/StellaOps.Excititor.Worker.csproj similarity index 52% rename from src/StellaOps.Vexer.Worker/StellaOps.Vexer.Worker.csproj rename to src/StellaOps.Excititor.Worker/StellaOps.Excititor.Worker.csproj index 93a50200..e1f41fef 100644 --- a/src/StellaOps.Vexer.Worker/StellaOps.Vexer.Worker.csproj +++ b/src/StellaOps.Excititor.Worker/StellaOps.Excititor.Worker.csproj @@ -11,9 +11,9 @@ - - - - + + + + diff --git a/src/StellaOps.Excititor.Worker/TASKS.md b/src/StellaOps.Excititor.Worker/TASKS.md new file mode 100644 index 00000000..e7186be3 --- /dev/null +++ b/src/StellaOps.Excititor.Worker/TASKS.md @@ -0,0 +1,8 @@ +If you are working on this file you need to read docs/ARCHITECTURE_EXCITITOR.md and ./AGENTS.md). +# TASKS +| Task | Owner(s) | Depends on | Notes | +|---|---|---|---| +|EXCITITOR-WORKER-01-001 – Worker host & scheduling|Team Excititor Worker|EXCITITOR-STORAGE-01-003, EXCITITOR-WEB-01-001|**DONE (2025-10-17)** – Worker project bootstraps provider schedules from configuration, integrates plugin catalog discovery, and emits structured logs/metrics-ready events via `VexWorkerHostedService`; scheduling logic covered by `VexWorkerOptionsTests`.| +|EXCITITOR-WORKER-01-002 – Resume tokens & retry policy|Team Excititor Worker|EXCITITOR-WORKER-01-001|TODO – Implement durable resume markers, exponential backoff with jitter, and quarantine for failing connectors per architecture spec.| +|EXCITITOR-WORKER-01-003 – Verification & cache GC loops|Team Excititor Worker|EXCITITOR-WORKER-01-001, EXCITITOR-ATTEST-01-003, EXCITITOR-EXPORT-01-002|TODO – Add scheduled attestation re-verification and cache pruning routines, surfacing metrics for export reuse ratios.| +|EXCITITOR-WORKER-01-004 – TTL refresh & stability damper|Team Excititor Worker|EXCITITOR-WORKER-01-001, EXCITITOR-CORE-02-001|TODO – Monitor consensus/VEX TTLs, apply 24–48h dampers before flipping published status/score, and trigger re-resolve when base image or kernel fingerprints change.| diff --git a/src/StellaOps.Feedser.Core/TASKS.md b/src/StellaOps.Feedser.Core/TASKS.md index 76724b04..66843401 100644 --- a/src/StellaOps.Feedser.Core/TASKS.md +++ b/src/StellaOps.Feedser.Core/TASKS.md @@ -17,4 +17,4 @@ |Canonical merger parity for description/CWE/canonical metric|BE-Core|Models|DONE (2025-10-15) – merger now populates description/CWEs/canonical metric id with provenance and regression tests cover the new decisions.| |Reference normalization & freshness instrumentation cleanup|BE-Core, QA|Models|DONE (2025-10-15) – reference keys normalized, freshness overrides applied to union fields, and new tests assert decision logging.| |FEEDCORE-ENGINE-07-001 – Advisory event log & asOf queries|Team Core Engine & Storage Analytics|FEEDSTORAGE-DATA-07-001|TODO – Introduce immutable advisory statement events, expose `asOf` query surface for merge/export pipelines, and document determinism guarantees for replay.| -|FEEDCORE-ENGINE-07-002 – Noise prior computation service|Team Core Engine & Data Science|FEEDCORE-ENGINE-07-001|TODO – Build rule-based learner capturing false-positive priors per package/env, persist summaries, and expose APIs for Vexer/scan suppressors with reproducible statistics.| +|FEEDCORE-ENGINE-07-002 – Noise prior computation service|Team Core Engine & Data Science|FEEDCORE-ENGINE-07-001|TODO – Build rule-based learner capturing false-positive priors per package/env, persist summaries, and expose APIs for Excititor/scan suppressors with reproducible statistics.| diff --git a/src/StellaOps.Vexer.Attestation/TASKS.md b/src/StellaOps.Vexer.Attestation/TASKS.md deleted file mode 100644 index 7f318efd..00000000 --- a/src/StellaOps.Vexer.Attestation/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-ATTEST-01-001 – In-toto predicate & DSSE builder|Team Vexer Attestation|VEXER-CORE-01-001|**DONE (2025-10-16)** – Added deterministic in-toto predicate/statement models, DSSE envelope builder wired to signer abstraction, and attestation client producing metadata + diagnostics.| -|VEXER-ATTEST-01-002 – Rekor v2 client integration|Team Vexer Attestation|VEXER-ATTEST-01-001|**DONE (2025-10-16)** – Implemented Rekor HTTP client with retry/backoff, transparency log abstraction, DI helpers, and attestation client integration capturing Rekor metadata + diagnostics.| -|VEXER-ATTEST-01-003 – Verification suite & observability|Team Vexer Attestation|VEXER-ATTEST-01-002|TODO – Add verification helpers for Worker/WebService, metrics/logging hooks, and negative-path regression tests.| diff --git a/src/StellaOps.Vexer.Connectors.Abstractions/TASKS.md b/src/StellaOps.Vexer.Connectors.Abstractions/TASKS.md deleted file mode 100644 index 696fe975..00000000 --- a/src/StellaOps.Vexer.Connectors.Abstractions/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-ABS-01-001 – Connector context & base classes|Team Vexer Connectors|VEXER-CORE-01-003|**DONE (2025-10-17)** – Added `StellaOps.Vexer.Connectors.Abstractions` project with `VexConnectorBase`, deterministic logging scopes, metadata builder helpers, and connector descriptors; docs updated to highlight the shared abstractions.| -|VEXER-CONN-ABS-01-002 – YAML options & validation|Team Vexer Connectors|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Delivered `VexConnectorOptionsBinder` + binder options/validators, environment-variable expansion, data-annotation checks, and custom validation hooks with documentation updates covering the workflow.| -|VEXER-CONN-ABS-01-003 – Plugin packaging & docs|Team Vexer Connectors|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Authored `docs/dev/30_VEXER_CONNECTOR_GUIDE.md`, added quick-start template under `docs/dev/templates/vexer-connector/`, and updated module docs to reference the packaging workflow.| diff --git a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/TASKS.md b/src/StellaOps.Vexer.Connectors.Cisco.CSAF/TASKS.md deleted file mode 100644 index 64bc0381..00000000 --- a/src/StellaOps.Vexer.Connectors.Cisco.CSAF/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-CISCO-01-001 – Endpoint discovery & auth plumbing|Team Vexer Connectors – Cisco|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Added `CiscoProviderMetadataLoader` with bearer token support, offline snapshot fallback, DI helpers, and tests covering network/offline discovery to unblock subsequent fetch work.| -|VEXER-CONN-CISCO-01-002 – CSAF pull loop & pagination|Team Vexer Connectors – Cisco|VEXER-CONN-CISCO-01-001, VEXER-STORAGE-01-003|**DONE (2025-10-17)** – Implemented paginated advisory fetch using provider directories, raw document persistence with dedupe/state tracking, offline resiliency, and unit coverage.| -|VEXER-CONN-CISCO-01-003 – Provider trust metadata|Team Vexer Connectors – Cisco|VEXER-CONN-CISCO-01-002, VEXER-POLICY-01-001|TODO – Emit cosign/PGP trust metadata and advisory provenance hints for policy weighting.| diff --git a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/TASKS.md b/src/StellaOps.Vexer.Connectors.MSRC.CSAF/TASKS.md deleted file mode 100644 index 97b7328a..00000000 --- a/src/StellaOps.Vexer.Connectors.MSRC.CSAF/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-MS-01-001 – AAD onboarding & token cache|Team Vexer Connectors – MSRC|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Added MSRC connector project with configurable AAD options, token provider (offline/online modes), DI wiring, and unit tests covering caching and fallback scenarios.| -|VEXER-CONN-MS-01-002 – CSAF download pipeline|Team Vexer Connectors – MSRC|VEXER-CONN-MS-01-001, VEXER-STORAGE-01-003|TODO – Fetch CSAF packages with retry/backoff, checksum verification, and raw document persistence plus quarantine for schema failures.| -|VEXER-CONN-MS-01-003 – Trust metadata & provenance hints|Team Vexer Connectors – MSRC|VEXER-CONN-MS-01-002, VEXER-POLICY-01-001|TODO – Emit cosign/AAD issuer metadata, attach provenance details, and document policy integration.| diff --git a/src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/TASKS.md b/src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/TASKS.md deleted file mode 100644 index a151c406..00000000 --- a/src/StellaOps.Vexer.Connectors.OCI.OpenVEX.Attest/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-OCI-01-001 – OCI discovery & auth plumbing|Team Vexer Connectors – OCI|VEXER-CONN-ABS-01-001|TODO – Resolve OCI references, configure cosign auth (keyless/keyed), and support offline attestation bundles.| -|VEXER-CONN-OCI-01-002 – Attestation fetch & verify loop|Team Vexer Connectors – OCI|VEXER-CONN-OCI-01-001, VEXER-ATTEST-01-002|TODO – Download DSSE attestations, trigger verification, handle retries/backoff, and persist raw statements with metadata.| -|VEXER-CONN-OCI-01-003 – Provenance metadata & policy hooks|Team Vexer Connectors – OCI|VEXER-CONN-OCI-01-002, VEXER-POLICY-01-001|TODO – Emit provenance hints (image, subject digest, issuer) and trust metadata for policy weighting/logging.| diff --git a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/TASKS.md b/src/StellaOps.Vexer.Connectors.Oracle.CSAF/TASKS.md deleted file mode 100644 index 69452a71..00000000 --- a/src/StellaOps.Vexer.Connectors.Oracle.CSAF/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-ORACLE-01-001 – Oracle CSAF catalogue discovery|Team Vexer Connectors – Oracle|VEXER-CONN-ABS-01-001|DOING (2025-10-17) – Implement catalogue discovery, CPU calendar awareness, and offline snapshot import for Oracle CSAF feeds.| -|VEXER-CONN-ORACLE-01-002 – CSAF download & dedupe pipeline|Team Vexer Connectors – Oracle|VEXER-CONN-ORACLE-01-001, VEXER-STORAGE-01-003|TODO – Fetch CSAF documents with retry/backoff, checksum validation, revision deduplication, and raw persistence.| -|VEXER-CONN-ORACLE-01-003 – Trust metadata + provenance|Team Vexer Connectors – Oracle|VEXER-CONN-ORACLE-01-002, VEXER-POLICY-01-001|TODO – Emit Oracle signing metadata (PGP/cosign) and provenance hints for consensus weighting.| diff --git a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md b/src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md deleted file mode 100644 index 04f43ae1..00000000 --- a/src/StellaOps.Vexer.Connectors.RedHat.CSAF/TASKS.md +++ /dev/null @@ -1,10 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-RH-01-001 – Provider metadata discovery|Team Vexer Connectors – Red Hat|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Added `RedHatProviderMetadataLoader` with HTTP/ETag caching, offline snapshot handling, and validation; exposed DI helper + tests covering live, cached, and offline scenarios.| -|VEXER-CONN-RH-01-002 – Incremental CSAF pulls|Team Vexer Connectors – Red Hat|VEXER-CONN-RH-01-001, VEXER-STORAGE-01-003|**DONE (2025-10-17)** – Implemented `RedHatCsafConnector` with ROLIE feed parsing, incremental filtering via `context.Since`, CSAF document download + metadata capture, and persistence through `IVexRawDocumentSink`; tests cover live fetch/cache/offline scenarios with ETag handling.| -|VEXER-CONN-RH-01-003 – Trust metadata emission|Team Vexer Connectors – Red Hat|VEXER-CONN-RH-01-002, VEXER-POLICY-01-001|**DONE (2025-10-17)** – Provider metadata loader now emits trust overrides (weight, cosign issuer/pattern, PGP fingerprints) and the connector surfaces provenance hints for policy/consensus layers.| -|VEXER-CONN-RH-01-004 – Resume state persistence|Team Vexer Connectors – Red Hat|VEXER-CONN-RH-01-002, VEXER-STORAGE-01-003|**DONE (2025-10-17)** – Connector now loads/saves resume state via `IVexConnectorStateRepository`, tracking last update timestamp and recent document digests to avoid duplicate CSAF ingestion; regression covers state persistence and duplicate skips.| -|VEXER-CONN-RH-01-005 – Worker/WebService integration|Team Vexer Connectors – Red Hat|VEXER-CONN-RH-01-002|**DONE (2025-10-17)** – Worker/WebService now call `AddRedHatCsafConnector`, register the connector + state repo, and default worker scheduling adds the `vexer:redhat` provider so background jobs and orchestration can activate the connector without extra wiring.| -|VEXER-CONN-RH-01-006 – CSAF normalization parity tests|Team Vexer Connectors – Red Hat|VEXER-CONN-RH-01-002, VEXER-FMT-CSAF-01-001|**DONE (2025-10-17)** – Added RHSA fixture-driven regression verifying CSAF normalizer retains Red Hat product metadata, tracking fields, and timestamps (`rhsa-sample.json` + `CsafNormalizerTests.NormalizeAsync_PreservesRedHatSpecificMetadata`).| diff --git a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/TASKS.md b/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/TASKS.md deleted file mode 100644 index 9ce451c6..00000000 --- a/src/StellaOps.Vexer.Connectors.SUSE.RancherVEXHub/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-SUSE-01-001 – Rancher hub discovery & auth|Team Vexer Connectors – SUSE|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Added Rancher hub options/token provider, discovery metadata loader with offline snapshots + caching, connector shell, DI wiring, and unit tests covering network/offline paths.| -|VEXER-CONN-SUSE-01-002 – Checkpointed event ingestion|Team Vexer Connectors – SUSE|VEXER-CONN-SUSE-01-001, VEXER-STORAGE-01-003|TODO – Process hub events with resume checkpoints, deduplication, and quarantine path for malformed payloads.| -|VEXER-CONN-SUSE-01-003 – Trust metadata & policy hints|Team Vexer Connectors – SUSE|VEXER-CONN-SUSE-01-002, VEXER-POLICY-01-001|TODO – Emit provider trust configuration (signers, weight overrides) and attach provenance hints for consensus engine.| diff --git a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/TASKS.md b/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/TASKS.md deleted file mode 100644 index 049b0920..00000000 --- a/src/StellaOps.Vexer.Connectors.Ubuntu.CSAF/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CONN-UBUNTU-01-001 – Ubuntu CSAF discovery & channels|Team Vexer Connectors – Ubuntu|VEXER-CONN-ABS-01-001|**DONE (2025-10-17)** – Added Ubuntu connector project with configurable channel options, catalog loader (network/offline), DI wiring, and discovery unit tests.| -|VEXER-CONN-UBUNTU-01-002 – Incremental fetch & deduplication|Team Vexer Connectors – Ubuntu|VEXER-CONN-UBUNTU-01-001, VEXER-STORAGE-01-003|TODO – Fetch CSAF bundles with ETag handling, checksum validation, deduplication, and raw persistence.| -|VEXER-CONN-UBUNTU-01-003 – Trust metadata & provenance|Team Vexer Connectors – Ubuntu|VEXER-CONN-UBUNTU-01-002, VEXER-POLICY-01-001|TODO – Emit Ubuntu signing metadata (GPG fingerprints) plus provenance hints for policy weighting and diagnostics.| diff --git a/src/StellaOps.Vexer.Core/TASKS.md b/src/StellaOps.Vexer.Core/TASKS.md deleted file mode 100644 index 4ed131d7..00000000 --- a/src/StellaOps.Vexer.Core/TASKS.md +++ /dev/null @@ -1,9 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-CORE-01-001 – Canonical VEX domain records|Team Vexer Core & Policy|docs/ARCHITECTURE_VEXER.md|DONE (2025-10-15) – Introduced `VexClaim`, `VexConsensus`, provider metadata, export manifest records, and deterministic JSON serialization with tests covering canonical ordering and query signatures.| -|VEXER-CORE-01-002 – Trust-weighted consensus resolver|Team Vexer Core & Policy|VEXER-CORE-01-001|DONE (2025-10-15) – Added consensus resolver, baseline policy (tier weights + justification gate), telemetry output, and tests covering acceptance, conflict ties, and determinism.| -|VEXER-CORE-01-003 – Shared contracts & query signatures|Team Vexer Core & Policy|VEXER-CORE-01-001|DONE (2025-10-15) – Published connector/normalizer/exporter/attestation abstractions and expanded deterministic `VexQuerySignature`/hash utilities with test coverage.| -|VEXER-CORE-02-001 – Context signal schema prep|Team Vexer Core & Policy|VEXER-POLICY-02-001|TODO – Extend `VexClaim`/`VexConsensus` with optional severity/KEV/EPSS payloads, update canonical serializer/hashes, and coordinate migration notes with Storage.| -|VEXER-CORE-02-002 – Deterministic risk scoring engine|Team Vexer Core & Policy|VEXER-CORE-02-001, VEXER-POLICY-02-001|BACKLOG – Introduce the scoring calculator invoked by consensus, persist score envelopes with audit trails, and add regression fixtures covering gate/boost behaviour before enabling exports.| diff --git a/src/StellaOps.Vexer.Export/Properties/AssemblyInfo.cs b/src/StellaOps.Vexer.Export/Properties/AssemblyInfo.cs deleted file mode 100644 index d7a3cbff..00000000 --- a/src/StellaOps.Vexer.Export/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("StellaOps.Vexer.Export.Tests")] diff --git a/src/StellaOps.Vexer.Export/TASKS.md b/src/StellaOps.Vexer.Export/TASKS.md deleted file mode 100644 index 0e737d33..00000000 --- a/src/StellaOps.Vexer.Export/TASKS.md +++ /dev/null @@ -1,9 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-EXPORT-01-001 – Export engine orchestration|Team Vexer Export|VEXER-CORE-01-003|DONE (2025-10-15) – Export engine scaffolding with cache lookup, data source hooks, and deterministic manifest emission.| -|VEXER-EXPORT-01-002 – Cache index & eviction hooks|Team Vexer Export|VEXER-EXPORT-01-001, VEXER-STORAGE-01-003|**DONE (2025-10-16)** – Export engine now invalidates cache entries on force refresh, cache services expose prune/invalidate APIs, and storage maintenance trims expired/dangling records with Mongo2Go coverage.| -|VEXER-EXPORT-01-003 – Artifact store adapters|Team Vexer Export|VEXER-EXPORT-01-001|**DONE (2025-10-16)** – Implemented multi-store pipeline with filesystem, S3-compatible, and offline bundle adapters (hash verification + manifest/zip output) plus unit coverage and DI hooks.| -|VEXER-EXPORT-01-004 – Attestation handoff integration|Team Vexer Export|VEXER-EXPORT-01-001, VEXER-ATTEST-01-001|**DONE (2025-10-17)** – Export engine now invokes attestation client, logs diagnostics, and persists Rekor/envelope metadata on manifests; regression coverage added in `ExportEngineTests.ExportAsync_AttachesAttestationMetadata`.| -|VEXER-EXPORT-01-005 – Score & resolve envelope surfaces|Team Vexer Export|VEXER-EXPORT-01-004, VEXER-CORE-02-001|TODO – Emit consensus+score envelopes in export manifests, include policy/scoring digests, and update offline bundle/ORAS layouts to carry signed VEX responses.| diff --git a/src/StellaOps.Vexer.Formats.CSAF/TASKS.md b/src/StellaOps.Vexer.Formats.CSAF/TASKS.md deleted file mode 100644 index 7b9f41dd..00000000 --- a/src/StellaOps.Vexer.Formats.CSAF/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-FMT-CSAF-01-001 – CSAF normalizer foundation|Team Vexer Formats|VEXER-CORE-01-001|**DONE (2025-10-17)** – Implemented CSAF normalizer + DI hook, parsing tracking metadata, product tree branches/full names, and mapping product statuses into canonical `VexClaim`s with baseline precedence. Regression added in `CsafNormalizerTests`.| -|VEXER-FMT-CSAF-01-002 – Status/justification mapping|Team Vexer Formats|VEXER-FMT-CSAF-01-001, VEXER-POLICY-01-001|TODO – Normalize CSAF `product_status` + `justification` values into policy-aware enums with audit diagnostics for unsupported codes.| -|VEXER-FMT-CSAF-01-003 – CSAF export adapter|Team Vexer Formats|VEXER-EXPORT-01-001, VEXER-FMT-CSAF-01-001|TODO – Provide CSAF export writer producing deterministic documents (per vuln/product) and manifest metadata for attestation.| diff --git a/src/StellaOps.Vexer.Formats.CycloneDX/TASKS.md b/src/StellaOps.Vexer.Formats.CycloneDX/TASKS.md deleted file mode 100644 index cf34f392..00000000 --- a/src/StellaOps.Vexer.Formats.CycloneDX/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-FMT-CYCLONE-01-001 – CycloneDX VEX normalizer|Team Vexer Formats|VEXER-CORE-01-001|**DONE (2025-10-17)** – CycloneDX normalizer parses `analysis` data, resolves component references, and emits canonical `VexClaim`s; regression lives in `CycloneDxNormalizerTests`.| -|VEXER-FMT-CYCLONE-01-002 – Component reference reconciliation|Team Vexer Formats|VEXER-FMT-CYCLONE-01-001|TODO – Implement helpers to reconcile component/service references against policy expectations and emit diagnostics for missing SBOM links.| -|VEXER-FMT-CYCLONE-01-003 – CycloneDX export serializer|Team Vexer Formats|VEXER-EXPORT-01-001, VEXER-FMT-CYCLONE-01-001|TODO – Provide exporters producing CycloneDX VEX output with canonical ordering and hash-stable manifests.| diff --git a/src/StellaOps.Vexer.Formats.OpenVEX/TASKS.md b/src/StellaOps.Vexer.Formats.OpenVEX/TASKS.md deleted file mode 100644 index 75210974..00000000 --- a/src/StellaOps.Vexer.Formats.OpenVEX/TASKS.md +++ /dev/null @@ -1,7 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-FMT-OPENVEX-01-001 – OpenVEX normalizer|Team Vexer Formats|VEXER-CORE-01-001|**DONE (2025-10-17)** – OpenVEX normalizer parses statements/products, maps status/justification, and surfaces provenance metadata; coverage in `OpenVexNormalizerTests`.| -|VEXER-FMT-OPENVEX-01-002 – Statement merge utilities|Team Vexer Formats|VEXER-FMT-OPENVEX-01-001|TODO – Add reducers merging multiple OpenVEX statements, resolving conflicts deterministically, and emitting policy diagnostics.| -|VEXER-FMT-OPENVEX-01-003 – OpenVEX export writer|Team Vexer Formats|VEXER-EXPORT-01-001, VEXER-FMT-OPENVEX-01-001|TODO – Provide export serializer generating canonical OpenVEX documents with optional SBOM references and hash-stable ordering.| diff --git a/src/StellaOps.Vexer.Policy/TASKS.md b/src/StellaOps.Vexer.Policy/TASKS.md deleted file mode 100644 index 6fd59797..00000000 --- a/src/StellaOps.Vexer.Policy/TASKS.md +++ /dev/null @@ -1,11 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-POLICY-01-001 – Policy schema & binding|Team Vexer Policy|VEXER-CORE-01-001|DONE (2025-10-15) – Established `VexPolicyOptions`, options binding, and snapshot provider covering baseline weights/overrides.| -|VEXER-POLICY-01-002 – Policy evaluator service|Team Vexer Policy|VEXER-POLICY-01-001|DONE (2025-10-15) – `VexPolicyEvaluator` exposes immutable snapshots to consensus and normalizes rejection reasons.| -|VEXER-POLICY-01-003 – Operator diagnostics & docs|Team Vexer Policy|VEXER-POLICY-01-001|**DONE (2025-10-16)** – Surface structured diagnostics (CLI/WebService) and author policy upgrade guidance in docs/ARCHITECTURE_VEXER.md appendix.
2025-10-16: Added `IVexPolicyDiagnostics`/`VexPolicyDiagnosticsReport`, sorted issue ordering, recommendations, and appendix guidance. Tests: `dotnet test src/StellaOps.Vexer.Core.Tests/StellaOps.Vexer.Core.Tests.csproj`.| -|VEXER-POLICY-01-004 – Policy schema validation & YAML binding|Team Vexer Policy|VEXER-POLICY-01-001|**DONE (2025-10-16)** – Added strongly-typed YAML/JSON binding, schema validation, and deterministic diagnostics for operator-supplied policy bundles.| -|VEXER-POLICY-01-005 – Policy change tracking & telemetry|Team Vexer Policy|VEXER-POLICY-01-002|**DONE (2025-10-16)** – Emit revision history, expose snapshot digests via CLI/WebService, and add structured logging/metrics for policy reloads.
2025-10-16: `VexPolicySnapshot` now carries revision/digest, provider logs reloads, `vex.policy.reloads` metric emitted, binder/diagnostics expose digest metadata. Tests: `dotnet test src/StellaOps.Vexer.Core.Tests/StellaOps.Vexer.Core.Tests.csproj`.| -|VEXER-POLICY-02-001 – Scoring coefficients & weight ceilings|Team Vexer Policy|VEXER-POLICY-01-004|TODO – Extend `VexPolicyOptions` with α/β boosters and optional >1.0 weight ceilings, validate ranges, and document operator guidance in `docs/ARCHITECTURE_VEXER.md`/`docs/VEXER_SCORRING.md`.| -|VEXER-POLICY-02-002 – Diagnostics for scoring signals|Team Vexer Policy|VEXER-POLICY-02-001|BACKLOG – Update diagnostics reports to surface missing severity/KEV/EPSS mappings, coefficient overrides, and provide actionable recommendations for policy tuning.| diff --git a/src/StellaOps.Vexer.Storage.Mongo/Properties/AssemblyInfo.cs b/src/StellaOps.Vexer.Storage.Mongo/Properties/AssemblyInfo.cs deleted file mode 100644 index 8f1a1312..00000000 --- a/src/StellaOps.Vexer.Storage.Mongo/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("StellaOps.Vexer.Storage.Mongo.Tests")] diff --git a/src/StellaOps.Vexer.Storage.Mongo/TASKS.md b/src/StellaOps.Vexer.Storage.Mongo/TASKS.md deleted file mode 100644 index d74b3dc3..00000000 --- a/src/StellaOps.Vexer.Storage.Mongo/TASKS.md +++ /dev/null @@ -1,10 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-STORAGE-01-001 – Collection schemas & class maps|Team Vexer Storage|VEXER-CORE-01-001|DONE (2025-10-15) – Added Mongo mapping registry with raw/export entities and service registration groundwork.| -|VEXER-STORAGE-01-002 – Migrations & indices bootstrap|Team Vexer Storage|VEXER-STORAGE-01-001|**DONE (2025-10-16)** – Add bootstrapper creating indices (claims by vulnId/product, exports by querySignature, etc.) and migrations for existing deployments.
2025-10-16: Introduced migration runner + hosted service, initial index migration covers raw/providers/consensus/exports/cache, and tests use Mongo2Go to verify execution.| -|VEXER-STORAGE-01-003 – Repository layer & transactional flows|Team Vexer Storage|VEXER-STORAGE-01-001|**DONE (2025-10-16)** – Added GridFS-backed raw store with transactional upserts (including fallback for non-replicaset Mongo), export/cache repository coordination, and coverage verifying cache TTL + GridFS round-trips.| -|VEXER-STORAGE-01-004 – Provider/consensus/cache mappings|Team Vexer Storage|VEXER-STORAGE-01-001|**DONE (2025-10-16)** – Registered MongoDB class maps for provider/consensus/cache records with forward-compatible field handling and added coverage ensuring GridFS-linked cache entries round-trip cleanly.| -|VEXER-STORAGE-02-001 – Statement events & scoring signals|Team Vexer Storage|VEXER-CORE-02-001|TODO – Add immutable `vex.statements` collection, extend consensus documents with severity/KEV/EPSS fields, build indices for `policyRevisionId`/`generatedAt`, and script migrations/backfill guidance for Phase 1 rollout.| -|VEXER-STORAGE-MONGO-08-001 – Session + causal consistency hardening|Team Vexer Storage|VEXER-STORAGE-01-003|TODO – Register Mongo client/database with majority read/write concerns, expose scoped session helper enabling causal consistency, thread session handles through raw/export/consensus/cache stores (including GridFS reads), and extend integration tests to verify read-your-write semantics during replica-set failover.| diff --git a/src/StellaOps.Vexer.WebService/StellaOps.Vexer.WebService.csproj b/src/StellaOps.Vexer.WebService/StellaOps.Vexer.WebService.csproj deleted file mode 100644 index 0e85d526..00000000 --- a/src/StellaOps.Vexer.WebService/StellaOps.Vexer.WebService.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - net10.0 - preview - enable - enable - true - - - - - - - - - diff --git a/src/StellaOps.Vexer.WebService/TASKS.md b/src/StellaOps.Vexer.WebService/TASKS.md deleted file mode 100644 index f29650c5..00000000 --- a/src/StellaOps.Vexer.WebService/TASKS.md +++ /dev/null @@ -1,8 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-WEB-01-001 – Minimal API bootstrap & DI|Team Vexer WebService|VEXER-CORE-01-003, VEXER-STORAGE-01-003|**DONE (2025-10-17)** – Minimal API host composes storage/export/attestation/artifact stores, binds Mongo/attestation options, and exposes `/vexer/status` + health endpoints with regression coverage in `StatusEndpointTests`.| -|VEXER-WEB-01-002 – Ingest & reconcile endpoints|Team Vexer WebService|VEXER-WEB-01-001|TODO – Implement `/vexer/init`, `/vexer/ingest/run`, `/vexer/ingest/resume`, `/vexer/reconcile` with token scope enforcement and structured run telemetry.| -|VEXER-WEB-01-003 – Export & verify endpoints|Team Vexer WebService|VEXER-WEB-01-001, VEXER-EXPORT-01-001, VEXER-ATTEST-01-001|TODO – Add `/vexer/export`, `/vexer/export/{id}`, `/vexer/export/{id}/download`, `/vexer/verify`, returning artifact + attestation metadata with cache awareness.| -|VEXER-WEB-01-004 – Resolve API & signed responses|Team Vexer WebService|VEXER-WEB-01-001, VEXER-ATTEST-01-002|TODO – Deliver `/vexer/resolve` (subject/context), return consensus + score envelopes, attach cosign/Rekor metadata, and document auth + rate guardrails.| diff --git a/src/StellaOps.Vexer.Worker/Properties/AssemblyInfo.cs b/src/StellaOps.Vexer.Worker/Properties/AssemblyInfo.cs deleted file mode 100644 index bbbd22fd..00000000 --- a/src/StellaOps.Vexer.Worker/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("StellaOps.Vexer.Worker.Tests")] diff --git a/src/StellaOps.Vexer.Worker/TASKS.md b/src/StellaOps.Vexer.Worker/TASKS.md deleted file mode 100644 index 863ebf09..00000000 --- a/src/StellaOps.Vexer.Worker/TASKS.md +++ /dev/null @@ -1,8 +0,0 @@ -If you are working on this file you need to read docs/ARCHITECTURE_VEXER.md and ./AGENTS.md). -# TASKS -| Task | Owner(s) | Depends on | Notes | -|---|---|---|---| -|VEXER-WORKER-01-001 – Worker host & scheduling|Team Vexer Worker|VEXER-STORAGE-01-003, VEXER-WEB-01-001|**DONE (2025-10-17)** – Worker project bootstraps provider schedules from configuration, integrates plugin catalog discovery, and emits structured logs/metrics-ready events via `VexWorkerHostedService`; scheduling logic covered by `VexWorkerOptionsTests`.| -|VEXER-WORKER-01-002 – Resume tokens & retry policy|Team Vexer Worker|VEXER-WORKER-01-001|TODO – Implement durable resume markers, exponential backoff with jitter, and quarantine for failing connectors per architecture spec.| -|VEXER-WORKER-01-003 – Verification & cache GC loops|Team Vexer Worker|VEXER-WORKER-01-001, VEXER-ATTEST-01-003, VEXER-EXPORT-01-002|TODO – Add scheduled attestation re-verification and cache pruning routines, surfacing metrics for export reuse ratios.| -|VEXER-WORKER-01-004 – TTL refresh & stability damper|Team Vexer Worker|VEXER-WORKER-01-001, VEXER-CORE-02-001|TODO – Monitor consensus/VEX TTLs, apply 24–48h dampers before flipping published status/score, and trigger re-resolve when base image or kernel fingerprints change.| diff --git a/src/StellaOps.sln b/src/StellaOps.sln index 2bdce374..ccf8698b 100644 --- a/src/StellaOps.sln +++ b/src/StellaOps.sln @@ -181,61 +181,61 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Cryptography.Test EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Cryptography.DependencyInjection", "StellaOps.Cryptography.DependencyInjection\StellaOps.Cryptography.DependencyInjection.csproj", "{B84FE2DD-A1AD-437C-95CF-89C1DCCFDF6F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Core", "StellaOps.Vexer.Core\StellaOps.Vexer.Core.csproj", "{3288F0F8-FF86-4DB3-A1FD-8EB51893E8C2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Core", "StellaOps.Excititor.Core\StellaOps.Excititor.Core.csproj", "{3288F0F8-FF86-4DB3-A1FD-8EB51893E8C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Core.Tests", "StellaOps.Vexer.Core.Tests\StellaOps.Vexer.Core.Tests.csproj", "{680CA103-DCE8-4D02-8979-72DEA5BE8C00}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Core.Tests", "StellaOps.Excititor.Core.Tests\StellaOps.Excititor.Core.Tests.csproj", "{680CA103-DCE8-4D02-8979-72DEA5BE8C00}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Policy", "StellaOps.Vexer.Policy\StellaOps.Vexer.Policy.csproj", "{7F4B19D4-569A-4CCF-B481-EBE04860451A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Policy", "StellaOps.Excititor.Policy\StellaOps.Excititor.Policy.csproj", "{7F4B19D4-569A-4CCF-B481-EBE04860451A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Policy.Tests", "StellaOps.Vexer.Policy.Tests\StellaOps.Vexer.Policy.Tests.csproj", "{DE9863B5-E6D6-4C5F-B52A-ED9E964008A3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Policy.Tests", "StellaOps.Excititor.Policy.Tests\StellaOps.Excititor.Policy.Tests.csproj", "{DE9863B5-E6D6-4C5F-B52A-ED9E964008A3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Storage.Mongo", "StellaOps.Vexer.Storage.Mongo\StellaOps.Vexer.Storage.Mongo.csproj", "{E380F242-031E-483E-8570-0EF7EA525C4F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Storage.Mongo", "StellaOps.Excititor.Storage.Mongo\StellaOps.Excititor.Storage.Mongo.csproj", "{E380F242-031E-483E-8570-0EF7EA525C4F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Export", "StellaOps.Vexer.Export\StellaOps.Vexer.Export.csproj", "{42582C16-F5A9-417F-9D33-BC489925324F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Export", "StellaOps.Excititor.Export\StellaOps.Excititor.Export.csproj", "{42582C16-F5A9-417F-9D33-BC489925324F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Export.Tests", "StellaOps.Vexer.Export.Tests\StellaOps.Vexer.Export.Tests.csproj", "{06F40DA8-FEFA-4C2B-907B-155BD92BB859}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Export.Tests", "StellaOps.Excititor.Export.Tests\StellaOps.Excititor.Export.Tests.csproj", "{06F40DA8-FEFA-4C2B-907B-155BD92BB859}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.RedHat.CSAF", "StellaOps.Vexer.Connectors.RedHat.CSAF\StellaOps.Vexer.Connectors.RedHat.CSAF.csproj", "{A2E3F03A-0CAD-4E2A-8C71-DDEBB1B7E4F7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.RedHat.CSAF", "StellaOps.Excititor.Connectors.RedHat.CSAF\StellaOps.Excititor.Connectors.RedHat.CSAF.csproj", "{A2E3F03A-0CAD-4E2A-8C71-DDEBB1B7E4F7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.RedHat.CSAF.Tests", "StellaOps.Vexer.Connectors.RedHat.CSAF.Tests\StellaOps.Vexer.Connectors.RedHat.CSAF.Tests.csproj", "{3A1AF0AD-4DAE-4D82-9CCF-2DCB83CC3679}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.RedHat.CSAF.Tests", "StellaOps.Excititor.Connectors.RedHat.CSAF.Tests\StellaOps.Excititor.Connectors.RedHat.CSAF.Tests.csproj", "{3A1AF0AD-4DAE-4D82-9CCF-2DCB83CC3679}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Abstractions", "StellaOps.Vexer.Connectors.Abstractions\StellaOps.Vexer.Connectors.Abstractions.csproj", "{F1DF0F07-1BCB-4B55-8353-07BF8A4B2A67}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Abstractions", "StellaOps.Excititor.Connectors.Abstractions\StellaOps.Excititor.Connectors.Abstractions.csproj", "{F1DF0F07-1BCB-4B55-8353-07BF8A4B2A67}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Worker", "StellaOps.Vexer.Worker\StellaOps.Vexer.Worker.csproj", "{781EC793-1DB0-4E31-95BC-12A2B373045F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Worker", "StellaOps.Excititor.Worker\StellaOps.Excititor.Worker.csproj", "{781EC793-1DB0-4E31-95BC-12A2B373045F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Worker.Tests", "StellaOps.Vexer.Worker.Tests\StellaOps.Vexer.Worker.Tests.csproj", "{BB863E0C-50FF-41AE-9C13-4E8A1BABC62C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Worker.Tests", "StellaOps.Excititor.Worker.Tests\StellaOps.Excititor.Worker.Tests.csproj", "{BB863E0C-50FF-41AE-9C13-4E8A1BABC62C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Formats.CSAF", "StellaOps.Vexer.Formats.CSAF\StellaOps.Vexer.Formats.CSAF.csproj", "{14E9D043-F0EF-4F68-AE83-D6F579119D9A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Formats.CSAF", "StellaOps.Excititor.Formats.CSAF\StellaOps.Excititor.Formats.CSAF.csproj", "{14E9D043-F0EF-4F68-AE83-D6F579119D9A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Formats.CSAF.Tests", "StellaOps.Vexer.Formats.CSAF.Tests\StellaOps.Vexer.Formats.CSAF.Tests.csproj", "{27E94B6E-DEF8-4B89-97CB-424703790ECE}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Formats.CSAF.Tests", "StellaOps.Excititor.Formats.CSAF.Tests\StellaOps.Excititor.Formats.CSAF.Tests.csproj", "{27E94B6E-DEF8-4B89-97CB-424703790ECE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Formats.CycloneDX", "StellaOps.Vexer.Formats.CycloneDX\StellaOps.Vexer.Formats.CycloneDX.csproj", "{361E3E23-B215-423D-9906-A84171E20AD3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Formats.CycloneDX", "StellaOps.Excititor.Formats.CycloneDX\StellaOps.Excititor.Formats.CycloneDX.csproj", "{361E3E23-B215-423D-9906-A84171E20AD3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Formats.CycloneDX.Tests", "StellaOps.Vexer.Formats.CycloneDX.Tests\StellaOps.Vexer.Formats.CycloneDX.Tests.csproj", "{7A7A3480-C6C3-4A9F-AF46-1889424B9AC2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Formats.CycloneDX.Tests", "StellaOps.Excititor.Formats.CycloneDX.Tests\StellaOps.Excititor.Formats.CycloneDX.Tests.csproj", "{7A7A3480-C6C3-4A9F-AF46-1889424B9AC2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Formats.OpenVEX", "StellaOps.Vexer.Formats.OpenVEX\StellaOps.Vexer.Formats.OpenVEX.csproj", "{C3EAFCB8-0394-4B74-B9A6-3DBA4509201F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Formats.OpenVEX", "StellaOps.Excititor.Formats.OpenVEX\StellaOps.Excititor.Formats.OpenVEX.csproj", "{C3EAFCB8-0394-4B74-B9A6-3DBA4509201F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Formats.OpenVEX.Tests", "StellaOps.Vexer.Formats.OpenVEX.Tests\StellaOps.Vexer.Formats.OpenVEX.Tests.csproj", "{E86CF4A6-2463-4589-A9D8-9DF557C48367}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Formats.OpenVEX.Tests", "StellaOps.Excititor.Formats.OpenVEX.Tests\StellaOps.Excititor.Formats.OpenVEX.Tests.csproj", "{E86CF4A6-2463-4589-A9D8-9DF557C48367}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Cisco.CSAF", "StellaOps.Vexer.Connectors.Cisco.CSAF\StellaOps.Vexer.Connectors.Cisco.CSAF.csproj", "{B308B94C-E01F-4449-A5A6-CD7A48E52D15}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Cisco.CSAF", "StellaOps.Excititor.Connectors.Cisco.CSAF\StellaOps.Excititor.Connectors.Cisco.CSAF.csproj", "{B308B94C-E01F-4449-A5A6-CD7A48E52D15}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Cisco.CSAF.Tests", "StellaOps.Vexer.Connectors.Cisco.CSAF.Tests\StellaOps.Vexer.Connectors.Cisco.CSAF.Tests.csproj", "{9FBA3EC4-D794-48BD-82FA-0289E5A2A5FF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Cisco.CSAF.Tests", "StellaOps.Excititor.Connectors.Cisco.CSAF.Tests\StellaOps.Excititor.Connectors.Cisco.CSAF.Tests.csproj", "{9FBA3EC4-D794-48BD-82FA-0289E5A2A5FF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.SUSE.RancherVEXHub", "StellaOps.Vexer.Connectors.SUSE.RancherVEXHub\StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.csproj", "{E076DC9C-B436-44BF-B02E-FA565086F805}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.SUSE.RancherVEXHub", "StellaOps.Excititor.Connectors.SUSE.RancherVEXHub\StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.csproj", "{E076DC9C-B436-44BF-B02E-FA565086F805}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests", "StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests\StellaOps.Vexer.Connectors.SUSE.RancherVEXHub.Tests.csproj", "{55500025-FE82-4F97-A261-9BAEA4B10845}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests", "StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests\StellaOps.Excititor.Connectors.SUSE.RancherVEXHub.Tests.csproj", "{55500025-FE82-4F97-A261-9BAEA4B10845}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.MSRC.CSAF", "StellaOps.Vexer.Connectors.MSRC.CSAF\StellaOps.Vexer.Connectors.MSRC.CSAF.csproj", "{CD12875F-9367-41BD-810C-7FBE76314F17}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.MSRC.CSAF", "StellaOps.Excititor.Connectors.MSRC.CSAF\StellaOps.Excititor.Connectors.MSRC.CSAF.csproj", "{CD12875F-9367-41BD-810C-7FBE76314F17}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.MSRC.CSAF.Tests", "StellaOps.Vexer.Connectors.MSRC.CSAF.Tests\StellaOps.Vexer.Connectors.MSRC.CSAF.Tests.csproj", "{063D3280-9918-465A-AF2D-3650A2A50D03}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.MSRC.CSAF.Tests", "StellaOps.Excititor.Connectors.MSRC.CSAF.Tests\StellaOps.Excititor.Connectors.MSRC.CSAF.Tests.csproj", "{063D3280-9918-465A-AF2D-3650A2A50D03}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Oracle.CSAF", "StellaOps.Vexer.Connectors.Oracle.CSAF\StellaOps.Vexer.Connectors.Oracle.CSAF.csproj", "{A3EEE400-3655-4B34-915A-598E60CD55FB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Oracle.CSAF", "StellaOps.Excititor.Connectors.Oracle.CSAF\StellaOps.Excititor.Connectors.Oracle.CSAF.csproj", "{A3EEE400-3655-4B34-915A-598E60CD55FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Oracle.CSAF.Tests", "StellaOps.Vexer.Connectors.Oracle.CSAF.Tests\StellaOps.Vexer.Connectors.Oracle.CSAF.Tests.csproj", "{577025AD-2FDD-42DF-BFA2-3FC095B50539}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Oracle.CSAF.Tests", "StellaOps.Excititor.Connectors.Oracle.CSAF.Tests\StellaOps.Excititor.Connectors.Oracle.CSAF.Tests.csproj", "{577025AD-2FDD-42DF-BFA2-3FC095B50539}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Ubuntu.CSAF", "StellaOps.Vexer.Connectors.Ubuntu.CSAF\StellaOps.Vexer.Connectors.Ubuntu.CSAF.csproj", "{DD3B2076-E5E0-4533-8D27-7724225D7758}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Ubuntu.CSAF", "StellaOps.Excititor.Connectors.Ubuntu.CSAF\StellaOps.Excititor.Connectors.Ubuntu.CSAF.csproj", "{DD3B2076-E5E0-4533-8D27-7724225D7758}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests", "StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests\StellaOps.Vexer.Connectors.Ubuntu.CSAF.Tests.csproj", "{CADA1364-8EB1-479E-AB6F-4105C26335C8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests", "StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests\StellaOps.Excititor.Connectors.Ubuntu.CSAF.Tests.csproj", "{CADA1364-8EB1-479E-AB6F-4105C26335C8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution