documentation cleanse, sprints work and planning. remaining non EF DAL migration to EF
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"type": "source",
|
||||
"module": "scheduler",
|
||||
"feature": "scheduler-exception-lifecycle-worker",
|
||||
"runId": "run-001",
|
||||
"capturedAtUtc": "2026-02-11T10:55:14.4855939Z",
|
||||
"filesChecked": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleEndpointExtensions.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleContracts.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/IExceptionRepository.cs",
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleWorkerTests.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleEndpointsTests.cs"
|
||||
],
|
||||
"found": [
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs"
|
||||
],
|
||||
"missing": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleEndpointExtensions.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleContracts.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/IExceptionRepository.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleWorkerTests.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleEndpointsTests.cs"
|
||||
],
|
||||
"declarationChecks": [
|
||||
{
|
||||
"pattern": "class ExceptionLifecycleWorker",
|
||||
"found": true,
|
||||
"sample": "src/Scheduler\\__Libraries\\StellaOps.Scheduler.Worker\\Exception\\ExceptionLifecycleWorker.cs:14:public sealed class ExceptionLifecycleWorker : BackgroundService"
|
||||
},
|
||||
{
|
||||
"pattern": "interface IExceptionRepository",
|
||||
"found": true,
|
||||
"sample": "src/Scheduler\\__Libraries\\StellaOps.Scheduler.Worker\\Exception\\ExceptionLifecycleWorker.cs:189:public interface IExceptionRepository"
|
||||
},
|
||||
{
|
||||
"pattern": "class FailureSignatureEndpoints",
|
||||
"found": true,
|
||||
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\FailureSignatures\\FailureSignatureEndpoints.cs:12:internal static class FailureSignatureEndpoints"
|
||||
},
|
||||
{
|
||||
"pattern": "class EventWebhookEndpointExtensions",
|
||||
"found": true,
|
||||
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\EventWebhooks\\EventWebhookEndpointExtensions.cs:15:public static class EventWebhookEndpointExtensions"
|
||||
}
|
||||
],
|
||||
"verdict": "fail",
|
||||
"classification": "not_implemented",
|
||||
"reason": "Missing 5 of 8 feature-declared key files including lifecycle endpoint/contracts/test coverage and no DI wiring for exception lifecycle hosted workers."
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "source",
|
||||
"module": "scheduler",
|
||||
"feature": "scheduler-exception-lifecycle-worker",
|
||||
"runId": "run-002",
|
||||
"capturedAtUtc": "2026-02-11T10:55:32.7655241Z",
|
||||
"filesChecked": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleEndpointExtensions.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleContracts.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/IExceptionRepository.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleWorkerTests.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleEndpointsTests.cs"
|
||||
],
|
||||
"found": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs"
|
||||
],
|
||||
"missing": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleEndpointExtensions.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleContracts.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/IExceptionRepository.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleWorkerTests.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleEndpointsTests.cs"
|
||||
],
|
||||
"missingRatio": 0.75,
|
||||
"alternativeMatches": [
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs"
|
||||
],
|
||||
"verdict": "fail"
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"type": "source",
|
||||
"module": "scheduler",
|
||||
"feature": "scheduler-exception-lifecycle-worker",
|
||||
"runId": "run-003",
|
||||
"capturedAtUtc": "2026-02-15T20:55:00.0000000Z",
|
||||
"investigationNote": "Previous run-002 only checked WebService paths. Actual implementation lives in __Libraries/StellaOps.Scheduler.Worker/Exception/. This run verifies the LIBRARY implementation.",
|
||||
"featureDocReferencedFiles": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleEndpointExtensions.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleContracts.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/IExceptionRepository.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleWorkerTests.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleEndpointsTests.cs"
|
||||
],
|
||||
"featureDocReferencedFilesStatus": {
|
||||
"found": [],
|
||||
"missing": [
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleEndpointExtensions.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/ExceptionLifecycleContracts.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/ExceptionLifecycle/IExceptionRepository.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/FailureSignatures/FailureSignatureEndpoints.cs",
|
||||
"src/Scheduler/StellaOps.Scheduler.WebService/EventWebhooks/EventWebhookEndpointExtensions.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleWorkerTests.cs",
|
||||
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/ExceptionLifecycle/ExceptionLifecycleEndpointsTests.cs"
|
||||
],
|
||||
"missingRatio": 1.0,
|
||||
"note": "Feature doc references WebService paths that do not exist. However, the CORE LOGIC exists in __Libraries/StellaOps.Scheduler.Worker/Exception/ (see actualImplementationFiles below)."
|
||||
},
|
||||
"actualImplementationFiles": {
|
||||
"exceptionLifecycleWorker": {
|
||||
"found": [
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExceptionLifecycleWorker.cs",
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExpiringNotificationWorker.cs"
|
||||
],
|
||||
"description": "ExceptionLifecycleWorker (184 lines) - BackgroundService that processes pending activations and expired exceptions on a 1-minute loop with retry/backoff event publishing. ExpiringNotificationWorker (323 lines) - BackgroundService that generates digests of soon-to-expire exceptions, marks them as expiring, and emits alerts per tenant."
|
||||
},
|
||||
"contracts": {
|
||||
"found": [
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExceptionLifecycleWorker.cs (contains IExceptionRepository, ExceptionRecord, ExceptionState, ExceptionEventType, IExceptionEventPublisher, NullExceptionEventPublisher)",
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExpiringNotificationWorker.cs (contains IExpiringDigestService, IExpiringAlertService, ExpiringDigest, ExpiringDigestEntry, NullExpiringDigestService, NullExpiringAlertService)"
|
||||
],
|
||||
"description": "All contracts co-located in the worker files: ExceptionRecord (sealed record with 13 properties including ExceptionId, TenantId, PolicyId, VulnerabilityId, ComponentPurl, State, ActivationDate, ExpirationDate), ExceptionState enum (Pending/Active/Expired/Revoked), ExceptionEventType enum (Created/Activated/Expiring/Expired/Revoked), IExceptionRepository (5 methods), IExceptionEventPublisher, IExpiringDigestService, IExpiringAlertService, ExpiringDigest, ExpiringDigestEntry."
|
||||
},
|
||||
"relatedWorker": {
|
||||
"found": [
|
||||
"src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Indexing/FailureSignatureIndexer.cs"
|
||||
],
|
||||
"description": "FailureSignatureIndexer exists in the Worker library (related to failure signatures referenced in the feature doc)."
|
||||
}
|
||||
},
|
||||
"diWiring": {
|
||||
"status": "NOT REGISTERED",
|
||||
"detail": "SchedulerWorkerServiceCollectionExtensions.AddSchedulerWorker() does NOT register ExceptionLifecycleWorker or ExpiringNotificationWorker as hosted services. The DI file registers PlannerBackgroundService, PlannerQueueDispatcherBackgroundService, RunnerBackgroundService, PolicyRunDispatchBackgroundService, GraphBuildBackgroundService, GraphOverlayBackgroundService -- but NOT the exception workers."
|
||||
},
|
||||
"testCoverage": {
|
||||
"dedicatedTests": "No dedicated ExceptionLifecycleWorker or ExpiringNotificationWorker test files found",
|
||||
"workerTestSuite": "src/Scheduler/__Tests/StellaOps.Scheduler.Worker.Tests/ has 139 passing tests but --filter is ignored by Microsoft.Testing.Platform (MTP0001 warning). No test files named *Exception* found in the test project.",
|
||||
"testGap": "ExceptionLifecycleWorker has NO unit tests covering its activation/expiry/retry logic"
|
||||
},
|
||||
"verdict": "partially_implemented",
|
||||
"verdictReason": "ExceptionLifecycleWorker and ExpiringNotificationWorker are fully coded with activation/expiry processing, retry/backoff event publishing, expiring digests, and tenant-grouped alerts. All required interfaces (IExceptionRepository, IExceptionEventPublisher, IExpiringDigestService, IExpiringAlertService) are defined with null test implementations. HOWEVER: (1) No DI wiring in SchedulerWorkerServiceCollectionExtensions (workers won't start at runtime), (2) No REST endpoints for exception lifecycle, (3) No dedicated unit tests for the exception workers, (4) No IExceptionRepository production implementation. The worker logic is complete but not yet wired or tested."
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"type": "integration",
|
||||
"module": "scheduler",
|
||||
"feature": "scheduler-exception-lifecycle-worker",
|
||||
"runId": "run-003",
|
||||
"capturedAtUtc": "2026-02-15T20:55:00.0000000Z",
|
||||
"testProject": "src/Scheduler/__Tests/StellaOps.Scheduler.Worker.Tests/StellaOps.Scheduler.Worker.Tests.csproj",
|
||||
"testCommand": "dotnet test src/Scheduler/__Tests/StellaOps.Scheduler.Worker.Tests/StellaOps.Scheduler.Worker.Tests.csproj --filter \"FullyQualifiedName~Exception\" -v normal",
|
||||
"testResult": {
|
||||
"note": "Microsoft.Testing.Platform (MTP0001) ignores --filter; all 139 tests ran. No Exception-specific tests identified.",
|
||||
"passed": 139,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"total": 139,
|
||||
"duration": "35s 066ms",
|
||||
"filterWorked": false,
|
||||
"filterWarning": "MTP0001: VSTest-specific properties are set but will be ignored when using Microsoft.Testing.Platform."
|
||||
},
|
||||
"codeReviewFindings": {
|
||||
"exceptionLifecycleWorker": {
|
||||
"file": "src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExceptionLifecycleWorker.cs",
|
||||
"lines": 184,
|
||||
"baseClass": "BackgroundService",
|
||||
"behavior": [
|
||||
"ExecuteAsync loop runs every 1 minute",
|
||||
"ProcessPendingActivationsAsync: queries IExceptionRepository.GetPendingActivationsAsync(), transitions Pending->Active, publishes Activated event",
|
||||
"ProcessExpiredExceptionsAsync: queries IExceptionRepository.GetExpiredExceptionsAsync(), transitions Active->Expired, publishes Expired event",
|
||||
"PublishEventWithRetryAsync: 3 retries with exponential backoff (1s, 2s, 4s)"
|
||||
],
|
||||
"dependencies": ["IExceptionRepository", "IExceptionEventPublisher", "SchedulerWorkerOptions", "TimeProvider", "SchedulerWorkerMetrics", "ILogger"]
|
||||
},
|
||||
"expiringNotificationWorker": {
|
||||
"file": "src/Scheduler/__Libraries/StellaOps.Scheduler.Worker/Exception/ExpiringNotificationWorker.cs",
|
||||
"lines": 323,
|
||||
"baseClass": "BackgroundService",
|
||||
"behavior": [
|
||||
"Runs on configurable interval (options.Exception.ExpiringCheckInterval)",
|
||||
"Can be disabled via options.Exception.ExpiringNotificationEnabled",
|
||||
"Queries exceptions expiring within notification window",
|
||||
"Groups by tenant, generates digest per tenant via IExpiringDigestService",
|
||||
"Emits alerts via IExpiringAlertService",
|
||||
"Marks active exceptions as expiring and publishes Expiring events with retry/backoff"
|
||||
],
|
||||
"dependencies": ["IExceptionRepository", "IExceptionEventPublisher", "IExpiringDigestService", "IExpiringAlertService", "SchedulerWorkerOptions", "TimeProvider", "SchedulerWorkerMetrics", "ILogger"]
|
||||
},
|
||||
"contractsReview": {
|
||||
"ExceptionRecord": "sealed record with ExceptionId, TenantId, PolicyId, VulnerabilityId, ComponentPurl, State, CreatedAt, ActivationDate, ExpirationDate, ActivatedAt, ExpiredAt, Justification, CreatedBy",
|
||||
"ExceptionState": "enum: Pending, Active, Expired, Revoked",
|
||||
"ExceptionEventType": "enum: Created, Activated, Expiring, Expired, Revoked",
|
||||
"IExceptionRepository": "5 methods: GetPendingActivationsAsync, GetExpiredExceptionsAsync, GetExpiringExceptionsAsync, UpdateAsync, GetAsync",
|
||||
"IExceptionEventPublisher": "PublishAsync(eventType, exception, ct)",
|
||||
"IExpiringDigestService": "GenerateDigestAsync(tenantId, exceptions, windowEnd, ct)",
|
||||
"IExpiringAlertService": "EmitExpiringAlertAsync(tenantId, digest, ct)",
|
||||
"ExpiringDigest": "record with DigestId, TenantId, GeneratedAt, WindowEnd, TotalCount, CriticalCount, HighCount, Entries",
|
||||
"ExpiringDigestEntry": "record with ExceptionId, PolicyId, VulnerabilityId, ComponentPurl, ExpirationDate, TimeUntilExpiry"
|
||||
}
|
||||
},
|
||||
"gaps": [
|
||||
"No DI wiring: ExceptionLifecycleWorker and ExpiringNotificationWorker are NOT registered as hosted services in SchedulerWorkerServiceCollectionExtensions",
|
||||
"No REST endpoints: ExceptionLifecycleEndpointExtensions does not exist",
|
||||
"No production IExceptionRepository implementation (only the interface exists)",
|
||||
"No unit tests for ExceptionLifecycleWorker or ExpiringNotificationWorker",
|
||||
"No webhook notification endpoints for exception lifecycle events"
|
||||
],
|
||||
"verdict": "partially_implemented",
|
||||
"verdictReason": "Both workers (ExceptionLifecycleWorker, ExpiringNotificationWorker) are fully coded with complete lifecycle logic (pending->active->expired transitions, retry/backoff, tenant-grouped digests, configurable options). All contracts and interfaces are defined with null test implementations. Missing: DI wiring, REST endpoints, production repository, unit tests, webhook endpoints."
|
||||
}
|
||||
Reference in New Issue
Block a user