@@ -1,18 +1,18 @@
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				# Vexe r Connector Packaging Guide
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				# Excitito r Connector Packaging Guide
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> **Audience:**  teams implementing new Vexe r provider plug‑  ins (CSAF feeds,
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> **Audience:**  teams implementing new Excitito r provider plug‑  ins (CSAF feeds,
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> OpenVEX attestations, etc.)  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> **Prerequisites:**  read `docs/ARCHITECTURE_V EXE R.md`  and the module
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> `AGENTS.md`  in `src/StellaOps.Vexe r.Connectors.Abstractions/` .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> **Prerequisites:**  read `docs/ARCHITECTURE_EXCITITO R.md`  and the module
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> `AGENTS.md`  in `src/StellaOps.Excitito r.Connectors.Abstractions/` .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				The Vexe r connector SDK gives you:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				The Excitito r connector SDK gives you:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- `VexConnectorBase`  –   deterministic logging, SHA‑  256 helpers, time provider.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- `VexConnectorOptionsBinder`  –   strongly typed YAML/JSON configuration binding.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- `IVexConnectorOptionsValidator<T>`  –   custom validation hooks (offline defaults, auth invariants).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- `VexConnectorDescriptor`  &  metadata helpers for consistent telemetry.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				This guide explains how to package a connector so the Vexe r Worker/WebService
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				This guide explains how to package a connector so the Excitito r 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/v exe r-connector/` . It contains:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				`docs/dev/templates/excitito r-connector/` . It contains:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				```
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Vexe r.MyConnector/
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Excitito r.MyConnector/
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				├── src/
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				│   ├── Vexe r.MyConnector.csproj
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				│   ├── Excitito r.MyConnector.csproj
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				│   ├── MyConnectorOptions.cs
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				│   ├── MyConnector.cs
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				│   └── MyConnectorPlugin.cs
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -36,8 +36,8 @@ Vexer.MyConnector/
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Key points:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- Target `net10.0` , enable `TreatWarningsAsErrors` , reference the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  `StellaOps.Vexe r.Connectors.Abstractions`  project (or NuGet once published).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- Keep project ID prefix `StellaOps.Vexe r.Connectors.<Provider>`  so the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  `StellaOps.Excitito r.Connectors.Abstractions`  project (or NuGet once published).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- Keep project ID prefix `StellaOps.Excitito r.Connectors.<Provider>`  so the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  plugin loader can discover it with the default search pattern.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				### 1.1 csproj snippet
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -51,7 +51,7 @@ Key points:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    < TreatWarningsAsErrors > true< / TreatWarningsAsErrors > 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  < / PropertyGroup > 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  < ItemGroup > 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    < ProjectReference  Include = ".. \.. \.. \src \StellaOps.Vexe r.Connectors.Abstractions \StellaOps.Vexe r.Connectors.Abstractions.csproj"  /> 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    < ProjectReference  Include = ".. \.. \.. \src \StellaOps.Excitito r.Connectors.Abstractions \StellaOps.Excitito r.Connectors.Abstractions.csproj"  /> 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  < / ItemGroup > 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				< / Project > 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				```
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -135,7 +135,7 @@ this contract today.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				public sealed class MyConnectorPlugin : IConnectorPlugin
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				{
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    private static readonly VexConnectorDescriptor Descriptor =
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        new("v exe r:my-provider", VexProviderKind.Vendor, "My Provider VEX");
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        new("excitito r:my-provider", VexProviderKind.Vendor, "My Provider VEX");
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    public string Name => Descriptor.DisplayName;
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
					
						
					 
				
			
			 
			 
			
				@@ -150,8 +150,8 @@ public sealed class MyConnectorPlugin : IConnectorPlugin
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				}
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				```
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> **Note:**  the Vexe r Worker currently instantiates connectors through the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> shared `IConnectorPlugin`  contract. Once a dedicated Vexe r plugin interface
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> **Note:**  the Excitito r Worker currently instantiates connectors through the
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				> shared `IConnectorPlugin`  contract. Once a dedicated Excitito r 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: v exe r-my-provider
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				assembly: StellaOps.Vexe r.Connectors.MyProvider.dll
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				entryPoint: StellaOps.Vexe r.Connectors.MyProvider.MyConnectorPlugin
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				id: excitito r-my-provider
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				assembly: StellaOps.Excitito r.Connectors.MyProvider.dll
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				entryPoint: StellaOps.Excitito r.Connectors.MyProvider.MyConnectorPlugin
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				description: >
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  Official VEX feed for ExampleCorp products (CSAF JSON, daily updates).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				tags:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  - v exe r
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  - excitito r
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  - csaf
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				  - vendor
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				```
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Store manifests under `/opt/stella/v exe r/plugins/<connector>/manifest/`  in
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				Store manifests under `/opt/stella/excitito r/plugins/<connector>/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/v exe r/plugins/<Provider>/` .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				   `/opt/stella/excitito r/plugins/<Provider>/` .
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				2. Place `connector.manifest.yaml`  next to the binaries.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				3. Restart the Vexe r Worker or WebService (hot reload not supported yet).
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				3. Restart the Excitito r 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.Vexe r.Connectors.Abstractions.Tests` )
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- Integration tests (future `StellaOps.Excitito r.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/v exe r-connector/`  for the full quick‑  start including:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				See `docs/dev/templates/excitito r-connector/`  for the full quick‑  start including:
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- Sample options class + validator.
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				- Connector implementation inheriting from `VexConnectorBase` .