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,3 @@
Status: 200
Body:
{"status":"ok"}

View File

@@ -0,0 +1,11 @@
{
"trigger": "Manual",
"correlationId": "qa-graph-build-001",
"sbomVersionId": "sbomv-001",
"sbomDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"metadata": {
"stream": "scheduler-graph-jobs",
"source": "qa-flow"
},
"sbomId": "sbom-001"
}

View File

@@ -0,0 +1 @@
{"id":"gbj_019c4c61260376679d8fc60417d50692","tenantId":"qa-tenant","kind":"build","status":"pending","payload":{"schemaVersion":"scheduler.graph-build-job@1","id":"gbj_019c4c61260376679d8fc60417d50692","tenantId":"qa-tenant","sbomId":"sbom-001","sbomVersionId":"sbomv-001","sbomDigest":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","status":"pending","trigger":"manual","attempts":0,"correlationId":"qa-graph-build-001","createdAt":"2026-02-11T11:06:01.0915573+00:00","metadata":{"source":"qa-flow","stream":"scheduler-graph-jobs"}}}

View File

@@ -0,0 +1,14 @@
{
"trigger": "Manual",
"overlayKey": "overlay-001",
"overlayKind": "Policy",
"graphSnapshotId": "graph-snapshot-001",
"subjects": [
"pkg:generic/test@1.0.0"
],
"correlationId": "qa-graph-overlay-001",
"metadata": {
"stream": "scheduler-graph-jobs",
"source": "qa-flow"
}
}

View File

@@ -0,0 +1 @@
{"id":"goj_019c4c6126627dfbb63237c452d8062e","tenantId":"qa-tenant","kind":"overlay","status":"pending","payload":{"schemaVersion":"scheduler.graph-overlay-job@1","id":"goj_019c4c6126627dfbb63237c452d8062e","tenantId":"qa-tenant","graphSnapshotId":"graph-snapshot-001","overlayKind":"policy","overlayKey":"overlay-001","subjects":["pkg:generic/test@1.0.0"],"status":"pending","trigger":"manual","attempts":0,"correlationId":"qa-graph-overlay-001","createdAt":"2026-02-11T11:06:01.1862751+00:00","metadata":{"source":"qa-flow","stream":"scheduler-graph-jobs"}}}

View File

@@ -0,0 +1 @@
{"jobs":[{"id":"gbj_019c4c61260376679d8fc60417d50692","tenantId":"qa-tenant","kind":"build","status":"pending","payload":{"schemaVersion":"scheduler.graph-build-job@1","id":"gbj_019c4c61260376679d8fc60417d50692","tenantId":"qa-tenant","sbomId":"sbom-001","sbomVersionId":"sbomv-001","sbomDigest":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","status":"pending","trigger":"manual","attempts":0,"correlationId":"qa-graph-build-001","createdAt":"2026-02-11T11:06:01.0915573+00:00","metadata":{"source":"qa-flow","stream":"scheduler-graph-jobs"}}},{"id":"goj_019c4c6126627dfbb63237c452d8062e","tenantId":"qa-tenant","kind":"overlay","status":"pending","payload":{"schemaVersion":"scheduler.graph-overlay-job@1","id":"goj_019c4c6126627dfbb63237c452d8062e","tenantId":"qa-tenant","graphSnapshotId":"graph-snapshot-001","overlayKind":"policy","overlayKey":"overlay-001","subjects":["pkg:generic/test@1.0.0"],"status":"pending","trigger":"manual","attempts":0,"correlationId":"qa-graph-overlay-001","createdAt":"2026-02-11T11:06:01.1862751+00:00","metadata":{"source":"qa-flow","stream":"scheduler-graph-jobs"}}}]}

View File

@@ -0,0 +1,9 @@
{
"resultUri": "oci://graphs/graph-snapshot-001",
"jobId": "gbj_019c4c61260376679d8fc60417d50692",
"occurredAt": "2026-02-11T11:06:01.2785090Z",
"graphSnapshotId": "graph-snapshot-001",
"correlationId": "qa-graph-build-001",
"status": "Completed",
"jobType": "Build"
}

View File

@@ -0,0 +1 @@
{"id":"gbj_019c4c61260376679d8fc60417d50692","tenantId":"qa-tenant","kind":"build","status":"completed","payload":{"schemaVersion":"scheduler.graph-build-job@1","id":"gbj_019c4c61260376679d8fc60417d50692","tenantId":"qa-tenant","sbomId":"sbom-001","sbomVersionId":"sbomv-001","sbomDigest":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","graphSnapshotId":"graph-snapshot-001","status":"completed","trigger":"manual","attempts":1,"correlationId":"qa-graph-build-001","createdAt":"2026-02-11T11:06:01.0915573+00:00","startedAt":"2026-02-11T11:06:01.278509+00:00","completedAt":"2026-02-11T11:06:01.278509+00:00","metadata":{"resultUri":"oci://graphs/graph-snapshot-001","source":"qa-flow","stream":"scheduler-graph-jobs"}}}

View File

@@ -0,0 +1,6 @@
{
"jobId": "gbj_019c4c61260376679d8fc60417d50692",
"jobType": "Build",
"occurredAt": "2026-02-11T11:06:01.3479044Z",
"status": "Running"
}

View File

@@ -0,0 +1,3 @@
Status: 400
Body:
{"error":"Completion requires status completed, failed, or cancelled."}

View File

@@ -0,0 +1,11 @@
{
"capturedAtUtc": "2026-02-11T11:06:01.3955597Z",
"healthStatus": 200,
"buildStatus": 201,
"buildJobId": "gbj_019c4c61260376679d8fc60417d50692",
"overlayStatus": 201,
"overlayJobId": "goj_019c4c6126627dfbb63237c452d8062e",
"jobsStatus": 200,
"completeStatus": 200,
"negativeStatus": 400
}

View File

@@ -0,0 +1,84 @@
{
"type": "source",
"module": "scheduler",
"feature": "scheduler-graph-job-dtos",
"runId": "run-003",
"capturedAtUtc": "2026-02-11T11:01:57.6369969Z",
"filesChecked": [
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphBuildJobRequest.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphOverlayJobRequest.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphJobService.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/InMemoryGraphJobStore.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/CartographerWebhookClient.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphJobEndpointExtensions.cs",
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/GraphJobServiceTests.cs",
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/GraphJobEndpointsTests.cs",
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/CartographerWebhookClientTests.cs"
],
"found": [
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphBuildJobRequest.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphOverlayJobRequest.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphJobService.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/InMemoryGraphJobStore.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/CartographerWebhookClient.cs",
"src/Scheduler/StellaOps.Scheduler.WebService/GraphJobs/GraphJobEndpointExtensions.cs",
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/GraphJobServiceTests.cs",
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/CartographerWebhookClientTests.cs"
],
"missing": [
"src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/GraphJobEndpointsTests.cs"
],
"declarationChecks": [
{
"pattern": "record GraphBuildJobRequest",
"found": true,
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\GraphJobs\\GraphBuildJobRequest.cs:8:public sealed record GraphBuildJobRequest"
},
{
"pattern": "record GraphOverlayJobRequest",
"found": true,
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\GraphJobs\\GraphOverlayJobRequest.cs:8:public sealed record GraphOverlayJobRequest"
},
{
"pattern": "class GraphJobService",
"found": true,
"sample": "src/Scheduler\\__Tests\\StellaOps.Scheduler.WebService.Tests\\GraphJobServiceTests.cs:13:public sealed class GraphJobServiceTests"
},
{
"pattern": "class InMemoryGraphJobStore",
"found": true,
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\GraphJobs\\InMemoryGraphJobStore.cs:8:internal sealed class InMemoryGraphJobStore : IGraphJobStore"
},
{
"pattern": "class CartographerWebhookClient",
"found": true,
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\GraphJobs\\CartographerWebhookClient.cs:12:internal sealed class CartographerWebhookClient : ICartographerWebhookClient"
},
{
"pattern": "class GraphJobEndpointExtensions",
"found": true,
"sample": "src/Scheduler\\StellaOps.Scheduler.WebService\\GraphJobs\\GraphJobEndpointExtensions.cs:10:public static class GraphJobEndpointExtensions"
},
{
"pattern": "class GraphJobServiceTests",
"found": true,
"sample": "src/Scheduler\\__Tests\\StellaOps.Scheduler.WebService.Tests\\GraphJobServiceTests.cs:13:public sealed class GraphJobServiceTests"
},
{
"pattern": "class GraphJobEndpointTests",
"found": true,
"sample": "src/Scheduler\\__Tests\\StellaOps.Scheduler.WebService.Tests\\GraphJobEndpointTests.cs:7:public sealed class GraphJobEndpointTests : IClassFixture\u003cSchedulerWebApplicationFactory\u003e"
},
{
"pattern": "class CartographerWebhookClientTests",
"found": true,
"sample": "src/Scheduler\\__Tests\\StellaOps.Scheduler.WebService.Tests\\CartographerWebhookClientTests.cs:15:public sealed class CartographerWebhookClientTests"
},
{
"pattern": "GraphJobStateMachine.EnsureTransition",
"found": true,
"sample": "src/Scheduler\\__Tests\\StellaOps.Scheduler.Models.Tests\\GraphJobStateMachineTests.cs:38: job = GraphJobStateMachine.EnsureTransition(job, GraphJobStatus.Queued, queuedAt);"
}
],
"verdict": "partial"
}

View File

@@ -0,0 +1,21 @@
{
"type": "build",
"module": "scheduler",
"feature": "scheduler-graph-job-dtos",
"runId": "run-003",
"capturedAtUtc": "2026-02-11T11:01:58.1870834Z",
"project": "src/Scheduler/StellaOps.Scheduler.WebService/StellaOps.Scheduler.WebService.csproj",
"testProject": "src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/StellaOps.Scheduler.WebService.Tests.csproj",
"buildResult": "pass",
"testResult": "pass",
"buildExitCode": 0,
"testExitCode": 0,
"evidence": [
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier1-build-output.txt",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier1-test-output.txt"
],
"errors": [
"Tier 0 missing referenced files: src/Scheduler/__Tests/StellaOps.Scheduler.WebService.Tests/GraphJobEndpointsTests.cs"
],
"verdict": "pass"
}

View File

@@ -0,0 +1,98 @@
{
"type": "api",
"module": "scheduler",
"feature": "scheduler-graph-job-dtos",
"runId": "run-003",
"baseUrl": "http://127.0.0.1:19091",
"capturedAtUtc": "2026-02-11T11:06:29.9667495Z",
"requests": [
{
"description": "Health check for live scheduler WebService instance",
"method": "GET",
"path": "/healthz",
"expectedStatus": 200,
"actualStatus": 200,
"assertion": "Service responds healthy before graph-job API interactions.",
"result": "pass",
"evidence": "docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-01-health.txt",
"requestCapturedAtUtc": "2026-02-11T11:06:29.9667495Z"
},
{
"description": "Create GraphBuildJobRequest via /graphs/build",
"method": "POST",
"path": "/graphs/build",
"expectedStatus": 201,
"actualStatus": 201,
"assertion": "Build job is created in pending lifecycle with graph-job DTO payload.",
"result": "pass",
"evidence": "docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-02-build-response.json",
"requestCapturedAtUtc": "2026-02-11T11:06:29.9667495Z",
"responseSnippet": "buildJobId=gbj_019c4c61260376679d8fc60417d50692"
},
{
"description": "Create GraphOverlayJobRequest via /graphs/overlays",
"method": "POST",
"path": "/graphs/overlays",
"expectedStatus": 201,
"actualStatus": 201,
"assertion": "Overlay job is created and references requested graph snapshot/overlay key.",
"result": "pass",
"evidence": "docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-03-overlay-response.json",
"requestCapturedAtUtc": "2026-02-11T11:06:29.9667495Z",
"responseSnippet": "overlayJobId=goj_019c4c6126627dfbb63237c452d8062e"
},
{
"description": "Query pending graph jobs via /graphs/jobs?status=Pending",
"method": "GET",
"path": "/graphs/jobs?status=Pending\u0026limit=10",
"expectedStatus": 200,
"actualStatus": 200,
"assertion": "Graph jobs endpoint returns collection with status filter applied.",
"result": "pass",
"evidence": "docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-04-jobs-response.json",
"requestCapturedAtUtc": "2026-02-11T11:06:29.9667495Z"
},
{
"description": "Complete build job via /graphs/hooks/completed",
"method": "POST",
"path": "/graphs/hooks/completed",
"expectedStatus": 200,
"actualStatus": 200,
"assertion": "Service accepts completion payload and transitions build job to Completed.",
"result": "pass",
"evidence": "docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-05-complete-response.json",
"requestCapturedAtUtc": "2026-02-11T11:06:29.9667495Z",
"responseSnippet": "completedJobId=gbj_019c4c61260376679d8fc60417d50692"
},
{
"description": "Negative path: invalid completion status Running is rejected",
"method": "POST",
"path": "/graphs/hooks/completed",
"expectedStatus": 400,
"actualStatus": 400,
"assertion": "Graph completion endpoint rejects invalid completion status with 400.",
"result": "pass",
"evidence": "docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-06-negative-response.txt",
"requestCapturedAtUtc": "2026-02-11T11:06:29.9667495Z"
}
],
"behaviorVerified": [
"Graph build/overlay DTOs are accepted through live REST endpoints with tenant/scope headers.",
"Graph jobs can be queried by status through user-facing API.",
"Completion endpoint processes valid completion payloads and rejects invalid completion statuses."
],
"evidence": [
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-01-health.txt",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-02-build-request.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-02-build-response.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-03-overlay-request.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-03-overlay-response.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-04-jobs-response.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-05-complete-request.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-05-complete-response.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-06-negative-request.json",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-06-negative-response.txt",
"docs/qa/feature-checks/runs/scheduler/scheduler-graph-job-dtos/run-003/evidence/tier2-api-summary.json"
],
"verdict": "pass"
}