documentation cleanse, sprints work and planning. remaining non EF DAL migration to EF
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
Status: 200
|
||||
Body:
|
||||
{"status":"ok"}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"}}}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"}}}
|
||||
@@ -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"}}}]}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"}}}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"jobId": "gbj_019c4c61260376679d8fc60417d50692",
|
||||
"jobType": "Build",
|
||||
"occurredAt": "2026-02-11T11:06:01.3479044Z",
|
||||
"status": "Running"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
Status: 400
|
||||
Body:
|
||||
{"error":"Completion requires status completed, failed, or cancelled."}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user