documentation cleanse, sprints work and planning. remaining non EF DAL migration to EF

This commit is contained in:
master
2026-02-25 01:24:07 +02:00
parent b07d27772e
commit 4db038123b
9090 changed files with 4836 additions and 2909 deletions

View File

@@ -0,0 +1,33 @@
Checked files: 25
Found: 25
Missing: 0
Found files:
docs/features/unchecked/notifier/multi-channel-delivery.md
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/IChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChannelAdapterFactory.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/SlackChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/WebhookChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChatWebhookChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/PagerDutyChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/OpsGenieChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/EmailChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/InAppChannelAdapter.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Dispatch/WebhookChannelDispatcher.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Security/IWebhookSecurityService.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Fallback/IFallbackHandler.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Processing/HttpEgressSloSink.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/offline/notifier/templates
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/WebhookChannelAdapterTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/WebhookChannelDispatcherTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/SimpleTemplateRendererTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Security/WebhookSecurityServiceTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Fallback/FallbackHandlerTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/HttpEgressSloSinkTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/MultiChannelAdapterTests.cs
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/StellaOps.Notifier.Worker.csproj
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/StellaOps.Notifier.WebService.csproj
src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/StellaOps.Notifier.Tests.csproj
Missing files:
<none>

View File

@@ -0,0 +1,77 @@
[
{
"pattern": "interface\\s+IChannelAdapter",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Worker\\Channels\\ChannelAdapterFactory.cs:9:public interface IChannelAdapterFactory"
},
{
"pattern": "class\\s+ChannelAdapterFactory",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+SlackChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+WebhookChannelAdapter",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\Channels\\WebhookChannelAdapterTests.cs:12:public sealed class WebhookChannelAdapterTests"
},
{
"pattern": "class\\s+ChatWebhookChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+PagerDutyChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+OpsGenieChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+EmailChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+InAppChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+WebhookChannelDispatcher",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\Dispatch\\WebhookChannelDispatcherTests.cs:9:public sealed class WebhookChannelDispatcherTests"
},
{
"pattern": "interface\\s+IWebhookSecurityService",
"found": true,
"sample": "s"
},
{
"pattern": "interface\\s+IFallbackHandler",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+HttpEgressSloSink",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\HttpEgressSloSinkTests.cs:14:public class HttpEgressSloSinkTests"
},
{
"pattern": "DispatchAsync\\(",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\Channels\\WebhookChannelAdapterTests.cs:33: var result = await adapter.DispatchAsync(context, CancellationToken.None);"
},
{
"pattern": "CheckHealthAsync\\(",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Worker\\Channels\\WebhookChannelAdapter.cs:179: public async Task\u003cChannelHealthCheckResult\u003e CheckHealthAsync("
}
]

View File

@@ -0,0 +1,9 @@
Claim parity quick checks:
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Channels\SlackChannelAdapter.cs:12:public sealed class SlackChannelAdapter : INotifyChannelAdapter
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Channels\WebhookChannelAdapter.cs:20:public sealed class WebhookChannelAdapter : IChannelAdapter
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Channels\PagerDutyChannelAdapter.cs:19:public sealed class PagerDutyChannelAdapter : IChannelAdapter
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Channels\OpsGenieChannelAdapter.cs:18:public sealed class OpsGenieChannelAdapter : IChannelAdapter
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Channels\EmailChannelAdapter.cs:16:public sealed class EmailChannelAdapter : IChannelAdapter, IDisposable
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Channels\InAppChannelAdapter.cs:15:public sealed class InAppChannelAdapter : IChannelAdapter
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Fallback\IFallbackHandler.cs:297:public sealed class FallbackHandlerOptions
src/Notifier/StellaOps.Notifier\StellaOps.Notifier.Worker\Processing\HttpEgressSloSink.cs:12:internal sealed class HttpEgressSloSink : IEgressSloSink

View File

@@ -0,0 +1,30 @@
[
{
"step": "02-tier1-build-notifier-worker",
"exitCode": 0
},
{
"step": "02a-tier1-build-notifier-webservice",
"exitCode": 0
},
{
"step": "02b-tier1-build-notifier-tests",
"exitCode": 0
},
{
"step": "03a-tier1-list-tests",
"exitCode": 0
},
{
"step": "03-tier1-test-multi-channel-classes",
"exitCode": 0
},
{
"step": "04-tier2-test-multi-channel-behavior",
"exitCode": 0
},
{
"step": "05-tier1-tests",
"exitCode": 0
}
]

View File

@@ -0,0 +1,142 @@
{
"type": "source",
"module": "notifier",
"feature": "multi-channel-delivery",
"runId": "run-004",
"capturedAtUtc": "2026-02-11T13:44:18.1417096Z",
"filesChecked": [
"docs/features/unchecked/notifier/multi-channel-delivery.md",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/IChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChannelAdapterFactory.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/SlackChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/WebhookChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChatWebhookChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/PagerDutyChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/OpsGenieChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/EmailChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/InAppChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Dispatch/WebhookChannelDispatcher.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Security/IWebhookSecurityService.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Fallback/IFallbackHandler.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Processing/HttpEgressSloSink.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/offline/notifier/templates",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/WebhookChannelAdapterTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/WebhookChannelDispatcherTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/SimpleTemplateRendererTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Security/WebhookSecurityServiceTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Fallback/FallbackHandlerTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/HttpEgressSloSinkTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/MultiChannelAdapterTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/StellaOps.Notifier.Worker.csproj",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/StellaOps.Notifier.WebService.csproj",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/StellaOps.Notifier.Tests.csproj"
],
"found": [
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/IChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChannelAdapterFactory.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/SlackChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/WebhookChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChatWebhookChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/PagerDutyChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/OpsGenieChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/EmailChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/InAppChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Dispatch/WebhookChannelDispatcher.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Security/IWebhookSecurityService.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Fallback/IFallbackHandler.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Processing/HttpEgressSloSink.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/offline/notifier/templates",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/WebhookChannelAdapterTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/WebhookChannelDispatcherTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/SimpleTemplateRendererTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Security/WebhookSecurityServiceTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Fallback/FallbackHandlerTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/HttpEgressSloSinkTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/MultiChannelAdapterTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/StellaOps.Notifier.Worker.csproj",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/StellaOps.Notifier.WebService.csproj",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/StellaOps.Notifier.Tests.csproj"
],
"missing": [
"docs/features/unchecked/notifier/multi-channel-delivery.md"
],
"declarationChecks": [
{
"pattern": "interface\\s+IChannelAdapter",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Worker\\Channels\\ChannelAdapterFactory.cs:9:public interface IChannelAdapterFactory"
},
{
"pattern": "class\\s+ChannelAdapterFactory",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+SlackChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+WebhookChannelAdapter",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\Channels\\WebhookChannelAdapterTests.cs:12:public sealed class WebhookChannelAdapterTests"
},
{
"pattern": "class\\s+ChatWebhookChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+PagerDutyChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+OpsGenieChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+EmailChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+InAppChannelAdapter",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+WebhookChannelDispatcher",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\Dispatch\\WebhookChannelDispatcherTests.cs:9:public sealed class WebhookChannelDispatcherTests"
},
{
"pattern": "interface\\s+IWebhookSecurityService",
"found": true,
"sample": "s"
},
{
"pattern": "interface\\s+IFallbackHandler",
"found": true,
"sample": "s"
},
{
"pattern": "class\\s+HttpEgressSloSink",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\HttpEgressSloSinkTests.cs:14:public class HttpEgressSloSinkTests"
},
{
"pattern": "DispatchAsync\\(",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Tests\\Channels\\WebhookChannelAdapterTests.cs:33: var result = await adapter.DispatchAsync(context, CancellationToken.None);"
},
{
"pattern": "CheckHealthAsync\\(",
"found": true,
"sample": "src/Notifier/StellaOps.Notifier\\StellaOps.Notifier.Worker\\Channels\\WebhookChannelAdapter.cs:179: public async Task\u003cChannelHealthCheckResult\u003e CheckHealthAsync("
}
],
"missingRatio": 0.04,
"verdict": "pass"
}

View File

@@ -0,0 +1,69 @@
{
"type": "build",
"module": "notifier",
"feature": "multi-channel-delivery",
"runId": "run-004",
"capturedAtUtc": "2026-02-11T13:43:41.3203216Z",
"buildProjects": [
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/StellaOps.Notifier.Worker.csproj",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.WebService/StellaOps.Notifier.WebService.csproj",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/StellaOps.Notifier.Tests.csproj"
],
"buildResult": "pass",
"testProjects": [
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/StellaOps.Notifier.Tests.csproj"
],
"testResult": "pass",
"testsBlockedUpstream": false,
"testsRun": 520,
"testsPassed": 520,
"testsFailed": 0,
"targetedBehaviorSuite": {
"testsRun": 37,
"testsPassed": 37,
"testsFailed": 0,
"log": "evidence/03-tier1-test-multi-channel-classes.txt"
},
"codeReview": {
"reviewedFiles": [
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/SlackChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/WebhookChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/PagerDutyChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/OpsGenieChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/EmailChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/InAppChannelAdapter.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Channels/ChannelAdapterFactory.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Dispatch/WebhookChannelDispatcher.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker/Fallback/IFallbackHandler.cs"
],
"verdict": "pass",
"findings": [
"Concrete channel adapters for Slack/Webhook/PagerDuty/OpsGenie/Email/InApp expose DispatchAsync and CheckHealthAsync behavior.",
"ChannelAdapterFactory resolves registered adapters by channel type and returns null for unknown adapter types.",
"Regression fix in MultiChannelAdapterTests now constructs disabled channels via NotifyChannel.Create(enabled: false), eliminating CS0200 compile failure."
],
"reviewedTests": [
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/MultiChannelAdapterTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Channels/WebhookChannelAdapterTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Dispatch/WebhookChannelDispatcherTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Fallback/FallbackHandlerTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/Security/WebhookSecurityServiceTests.cs",
"src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Tests/HttpEgressSloSinkTests.cs"
],
"notes": [
"MTP list-tests command can contention-lock default TestResults log under concurrent agents; run-004 captured list-tests after isolated rerun."
]
},
"logs": [
"evidence/02-tier1-build-notifier-worker.txt",
"evidence/02a-tier1-build-notifier-webservice.txt",
"evidence/02b-tier1-build-notifier-tests.txt",
"evidence/03a-tier1-list-tests.txt",
"evidence/03-tier1-test-multi-channel-classes.txt",
"evidence/05-tier1-tests.txt"
],
"errors": [
],
"verdict": "pass"
}

View File

@@ -0,0 +1,31 @@
{
"type": "integration",
"module": "notifier",
"feature": "multi-channel-delivery",
"runId": "run-004",
"capturedAtUtc": "2026-02-11T13:43:41.3203216Z",
"checks": [
{
"evidence": "evidence/04-tier2-test-multi-channel-behavior.txt",
"description": "Focused multi-channel behavior suite validates Slack payload rendering, webhook dispatch semantics, and dispatcher response handling.",
"result": "pass"
}
],
"behaviorVerified": [
"Slack/PagerDuty/OpsGenie/Email/InApp adapter behavior is executed via deterministic class-scoped tests.",
"Webhook adapter + dispatcher positive and negative behaviors are executed with request/response assertions.",
"Factory channel-type resolution and invalid-configuration handling are verified."
],
"tests": {
"multiChannelBehaviorSuite": {
"testsRun": 22,
"testsPassed": 22,
"testsFailed": 0
}
},
"logs": [
"evidence/04-tier2-test-multi-channel-behavior.txt",
"evidence/01b-tier0-claim-parity.txt"
],
"verdict": "pass"
}